DIY天线自动追踪系统OpenATS

2018-02-08 15:52:12 浏览数 (1)

* 本文原创作者:OpenATS,本文属FreeBuf原创奖励计划,未经许可禁止转载

一、说在前面

SDR的出现让我们穷人用上了高大上的东西,可以用SDR做很多电台做不了的事情,改变了我们对无线电通信的认知。

玩无线电的可能都知道,在跟卫星进行通信的时候,由于很多卫星是非静止的,这时候就需要一个自动追踪天线。市面上也有商业成品的追踪天线,比如八重洲的某某系列,当然还有更高级的。

但是商业的成品价格较高,让我们穷人望而止步。

国外的爱好者们,都可以用自动追踪天线来追踪卫星,不仅仅局限于无线电通联等简单项目,还可以接收气象卫星的高清HRPT云图等等,而我们国内的玩家们,大部分人还没有一款自动天线,即使有的,也局限于无线电通联。

谷歌后发现,国外的开源项目也有,鲍勃的基于树莓派的CNCTRK等等,还有国内精度不高的使用摄像机云台制作的追踪天线。

摄像机云台,精度不高,成本低,如果你仅仅想用作无线电通联等项目,完全可以按照那个制作就可以。

但现在我想要一款精度更高,控制更好,更适合未来无线电研究的天线。而国外的CNCTRK也不错,基于树莓派的LinuxCNC开源系统,也算是很好的一个开源项目了。需要了解的可以自己去找一下资料。

但本人感觉界面不够直观,不够灵活,还是不太满意。于是决定自己动手从头制作。

经过各方面查找资料,最后确定用开源的硬件平台Arduino来完成这个项目,然后更多的困难在等着我,之前从没有接触过Arduino,开始学习Arduino编程,还好是基于C语言的还比较好上手的。

再紧接着,机械系统采用什么电机?伺服?步进?什么是伺服,什么又是步进,之前的我从没有接触过这些东西。从头开始学习,一点儿一点儿累积,这个过程很艰难。

我开始明白为什么全球那么多人,那么多爱好者,没几个人能做出这么一个简单的追踪系统了,表面看起来非常简单,但却牵扯的知识太多太多,包括电脑编程、电气知识、单片机编程、机械设计、地理知识、无线电知识等等。

下图是方位角图示,一周360度。

越是困难,越要解决。

起初我的设计是想用便宜的大功率直流电机加上精密的电位器做角度传感器,来相当于DIY一个伺服电机。

为什么这么选择,因为我手上有一个废弃的船用卫星通讯天线,日本JRC公司的,它自带的便是三洋的直流电机和高精度电位器来组成了闭环控制,可以相当于伺服电机啦,既然他们能实现,我也可以啊。

于是到处查找如何用电位器和直流电机来做闭环控制,代码例子也找了很多。于是开始了漫长的程序设计、编程过程。最后终于写完了,然后搭建硬件测试,这时候傻眼了。

由于天线惯性太大,我的这个系统根本不能刹车,简直没法用,一无是处。DIY伺服需要硬件的支持才可以,而不仅仅是依靠Arduino当控制器。而国内有DIY伺服用的电路板,价格也是非常高。于是被迫放弃这个方案。

后来转向了定位精度高的步进电机。对步进电机成本、定位精度等都非常满意。但还是更多困难接连而来,步进是开环,没有反馈。天线如何来复位?如何来防止丢步?于是便开始写程序,程序中带有步进电机记步功能,可以记录所走的所有步数,然后进行复位。

丢步只能通过预防、经常校准天线等其它方法来完成。我也想用伺服电机,更好的机动控制,更好的角度控制,但是伺服太贵。整个系统做完后成本高昂,根本不能普及。

(下图中电机非成品中电机,图中电机安装后动力不足,更换了0.9N.m的加长42步进电机)

后来研究Arduino如何来控制工业使用的步进电机,国内的文章,大多都是用Arduino玩一些小的电机。很少有人控制工业的步进电机。即使有,也几乎代码非常简单,能控制旋转就不错了。

连如何将Arduino跟工业步进驱动器链接,都很少有资料。自带的步进库连同时控制两个步进电机都是奢望。这对于一个新手来说是个悲剧的过程。然后开始混迹于Arduino论坛里找资料,找代码。

非常困难的过程,身边没有人能帮助你,只能从国内论坛,国外论坛,使用百度、谷歌搜索资料。好不容易写完了,后来代码可以实现简单的功能了,但是不巧,发现了开源的更好的步进电机控制库AccelStepper,这时候,猛然感觉相见恨晚。

因为这个库非常好,带有加速减速本身带有记步功能,也就是说,使用这个库,你根本不用考虑那些问题,仅仅跟程序说,你想旋转到多少角度就可以了!

又是一次大修代码,说是大修改,还不如说都删掉重新写…

先是实验如何来控制步进电机,如何来应用加速度。最后开始设计整个系统。用现有的追踪软件来做上位机(追踪平台)可以大大降低我的工作量。

并且现在的追踪软件都非常好。确定好用现有的电脑追踪软件平台入手后,开始找个合适的软件做上位机控制器,追踪软件又有好多:Orbitron、WXtrack、Xtracker等等免费的卫星追踪软件,都很不错。

国内的圈子局限于Orbitron,Orbitron虽然表现不错,但已经很久没有维护更新了,支持的追踪器协议也是非常少。而WXtrack个人人为是目前最好的卫星追踪软件,国外很多玩家也是如此认为。

本人之前一直用WXtrack来追踪卫星。作者大卫.泰勒虽然一大把年纪也一直在对软件进行更新、支持,真是感谢无线电领域的这位大佬所做的贡献。

以下是WXtrack的追踪界面

确定了WXtrack作为追踪软件后,便开始深入研究了WXtrack。要使用WXtrack默认支持的追踪器协议来做我的系统,那就更简单了。研究了所有WXtrack自带的控制协议,选中了其中的两个,一个是EasyComm,一个是KVH。

EasyComm的串口发送的角度数据直观,但是假如不注册软件的话,所发送的数据只能是整数,不能精确到小数点儿后的数据。

通过Twitter联系了作者David.Taylor后,聊了很多,作者说最新将推出的测试版已经免费加入了这个功能。

比较失望的是这么好的一个软件,可惜不是开源的,代码不公开。KVH的协议数据通过抓取串口数据发现,它所发送的角度值是保留了小数点儿后1位,虽然是整数,但是把小数点儿往前面移动一位既可以得到一个精确到0.1的角度,非常好。

而不太完美的地方就是,它发送的数据,是分开发送的。一个数据是AZ(方位角),再单独另外发送一个EL(仰角),如此循环。

这样导致的后果就是,如果我在Arduino编程控制上不做人为控制,那么天线运动就会先转方位角,再转仰角,再转方位角再转仰角…

换句话说,太难看啦,一点儿流畅性都没有!甚至,细心的人会想到,如果这样旋转的话,精度会大大降低啊!根本对不准卫星!

然后又转向了EasyComm,邪恶的心想到了有没有破解版的WXtrack。谷歌后的确有WXtrack3.8.28版本的注册机,可以完全破解,便下载了下来进行实验,发现破解后的确可以输出更高的精度,我保留了小数点儿后两位。

当然这种行为的确是劣质的,但对于贫穷的我们中国人来说,我只能说声对不起那个无私奉献的David.Taylor了,实在是抱歉。

假如你条件允许,请购买正版序列号,支持作者的奉献,假如你感觉这样做不好,请将代码的EasyComm部分注释掉,使用KVH模式,这种模式是不需要注册的,并且也能满足大部分人的需求。

为了做一个更完美的天线,想到了很多事情。加入了手动控制功能,这样可以更灵活地来控制我们的天线,让我们的天线更加完美。

说了这么多自己的想法还有过程,如果看完的人,真心表示感谢,以上就是我制作这个系统的简略过程,更多的细节就不一一描述了。

由于本人也有工作,一个普通流水线的工人,所以这个过程经历了好几个月的努力,无论过程多么困难,幸运的是,系统还是做出来了。

这个系统完全免费开源,起了个比较霸气的名字:OpenATS(Open Antenna Tracking System),接近OpenBTS…

这系统还可以发展到无人机追踪领域,无线电雷达等等,只需定义输出数据格式为方位角和仰角就行。扩展方便。任何人都可以免费使用。

本来天线早已做成,但一直没有公开,存在一点儿私心。

完成了此天线,我已经有条件接收NOAA、我国的风云气象卫星的HRPT高清云图了,使用Hackrf通过GNU Radio来输出.RAW16无线电数据文件,再通过Taylor的HRPT Reader软件便可以输出高清卫星云图,秒杀那些抄袭了多年的APT卫星云图。

想接收国内业余无线电的第一张高清HRPT格式的云图后再发布此天线。但是,本人现在的居住环境没有地方架天线,电磁环境也是差得要命。

想了一下,不能自私下去了,尽早让大家都能建起自己的自动天线吧!在下面放出国外著名的玩家接收的HRPT高清云图,用的就是Hackrf加Gnu Radio 加 HRPT Reader来解码出来的。希望更多的人来壮大我国的业余无线电群体。

更多高清云图,请自行谷歌,我网盘中也会有一部分。

祝大家都能制作出自己的追踪天线!

二、制作/使用过程

需要的硬件:

电脑一台,用来运行WXtrack卫星跟踪软件。 Arduino,山寨或者正版都可以,正版可以购买Genuino,分Nano和Mega等版本,建议Mega,拥有更好的处理能力和内存,并且以后扩展好。国内正版版本大概140元左右。Nano大概80左右,山寨30-50左右。山寨也正常,我的实验平台就是在山寨上运行的 步进电机2个,最好用57步进电机,扭距选择大一些的,2.0Nm以上最好,当然还可以通过减速机来增大扭矩。 步进电机驱动器2个,分别控制步进电机的。1套驱动器配1个步进电机,57步进套装在200-300左右,当然可以淘二手的。 24V开关电源一个,工业上用的即可,淘宝很多,具体功率要根据你两个步进电机的功率之和来决定。如果选57大功率的步进电机的话,就要选择最少10A以上的电源。 再一个不起眼但很重要的,XY轴可以旋转的支架。这个不好购买,可以自己制作,成本不太好估计。 如果不算支架的话,仅需要几百块钱就可以完成所实现的功能,加上支架成本,不到2k元人民币应该足够了。具体看你用没用减速机还有支架配件等等,有的配件,我们身边都有。

搭建过程:

所有程序和代码,已经分享到我的百度网盘,地址:http://pan.baidu.com/s/1jHYw80u

1. 把Arduino驱动程序arduino-1.6.8-windows.exe下载安装,把AccelStepper库下载解压缩,解压缩后的整个AccelStepper文件夹拷贝到安装后Arduino程序的libraries文件夹下。

最后将追踪天线代码复制到IDE中,上传到Arduino开发板中。

2. 搭建硬件,具体硬件接线很简单,就是用Arduino的PWM接口,来发送脉冲。AZ方位角的控制接口是3,dir方向控制是5,EL仰角的控制接口是6,dir方向控制是9。

采用共阴接法或者共阳接法都可以(当然你可以自己修改代码中的接口,对应外围电路也对应接口)。

AZ方位角的CLK (有的驱动器上也叫PUL )接到Arduino的数字接口3,CW (有的也叫DIR )接到数字口5,EL仰角的CLK 接到6,CW 接到9上

AZ方位角驱动器上的CLK-,CW-接到一起,再接到arduino的一个GND接口。EL仰角驱动器的CLK-,CW-接到一起,再接到Arduino的另一个GND接口。剩余的EN (有的也叫ENA )还有EN-我们都不接。

3. 步进电机与驱动器的接线,步进电机比如常见的2相四线电机,分A ,A-,B ,B-接线,在驱动器上都有标识,自行按照自己步进电机的线颜色定义接上即可。驱动器上的电源接开关电源的输出即可,开关电源给两个驱动器供电24V电压。

注意正负极。

电路图如下:

使用说明:

(一)自动追踪

自动追踪,去我的网盘下载WXtrack3.8.28带注册机版本运行并破解软件(必须注册或者破解软件,也可以使用Tylor放出的最新测试版),更新星历,星历更新会提示联不上网或者更新失败,我们手动去下载星历文件放到程序的文件夹下面即可。

电脑运行WXtrack软件,找到顶部菜单,Tracker–Options便打开设置天线追踪器界面:

然后我们点击选中EasyComm I COM port。

pass start可以设置1,意思是1分钟之前就唤醒天线。

Pass end就是追踪完成后发送什么指令,我们输入我们天线的复位指令:“S”当然“0”也可以,Parking意思是停车天线

我们选中Park antenna。再切换到Port setup菜单,选中你的arduino对应的COM口,比如COM4,速率选中程序中设置的9600

然后是进入Tracker-specific options菜单,将EasyComm precision(精确度控制)设置为2,这样程序输出的串口数据会保留小数点2位,否则是整数,整个系统精确度很低。

电脑软件我们就设置完成了。调试好角度后,就可以自动追踪啦!

(二)手动控制

如果手动控制,请打开Arduino的IDE自带的串口监视器或者用别的可以发送串口数据的软件(各种串口调试工具都可以,请自己百度下载)

设置你的Arduino对应的串口编号(系统管理里面有),然后设置波特率9600。

在发送角度命令时,按照如下格式:方位角 仰角(AZ EL),中间为空格,数据为浮点数或者整数,比如发送:20 40,则天线方位角转到20度,仰角到40度。

等同于:20.0 40.0 可以输入小数点儿,细分大的话,程序的识别能力可以精确到0.1度。如果仅仅输入一位数字,则只调动方位角,仰角便为0。

比如:20则天线默认将方位角转到20度,仰角为0度。输入S或者0都可以将天线复位,即方位角仰角都为0度。

修正功能

此功能是最后加入的,由于天线已经放入了储藏室,测试起来不方便了,所以没有进行测试,只大概写了代码。

所以此功能,等待以后待开发,不知道代码好用不好用。录制视频时,代码跟现在代码不一样,所以视频中的串口窗口内命令跟现在不一样。

在长时间运转后,天线可能会由于电机的丢步,造成的精度不准,这时候可以输入命令来进行校准。为了简单明了来调整天线,AZ跟EL分开调整。

调整方位角的命令为:AA23 就是大写字母AA后面紧跟一个数字,可以是浮点数也可以是整数。就是把天线当前的角度调整为23度。

调整仰角的命令便为:EE56 原理同上。

最后说一点儿比较重要的,架设天线时,需要将天线仰角水平(这个用水平仪就可以),还需要将0度对准AZ方位角的正北方向,不是磁北。

所以如何来找出正北方向是个难题,本人想用太阳在一天中本地时间12点时的方向为正南来确定。注意不是北京时间是当前经度的时间。

可以用高精度的GPS来获取精准的本地时间,再根据太阳投影方法确定正北方向。有更好、更精准的方法希望大家共享出来。

三、已知缺点/问题

1、自动追踪过程中,不能关掉软件切换到手动追踪,否则断掉自动追踪的时候,天线默认停止那个位置为0点位置。

断电重新通电也是如此。

2、由于此追踪是靠软件实现,不能跟国家卫星天线那样靠信号增益来追踪,所以精度只能满足我们业余无线电爱好者。

在实际建好后,还需要仔细调校,程序、机械装置的延迟,我们可以将上位机的系统时间提前几秒来补偿。具体根据多次试验来调试自己天线的最佳状态。还可以适当降低加速度参数,提前系统时间来让天线运行起来更平滑。

期待更多人来完善。

完成的细节图片:

绑了一个红酒盒子的作用是保持重量平衡,否则仰角电机将会吃很大的力。以后会将红酒盒子换成抛物线天线。

自己制作的视频,都是剪辑的,有很多地方做的不好,可能不太流畅,请见谅。视频署名为Rasiel,本网站的Rasiel 账号也是本人。

代码网盘地址:http://pan.baidu.com/s/1jHYw80u

* 本文原创作者:OpenATS,本文属FreeBuf原创奖励计划,未经许可禁止转载文字

0 人点赞