安全圈 | 专注于最新网络信息安全讯息新闻

首页

diy天線自動追跡系統openats

作者 eppolito 时间 2020-03-03
all

*本文原創作者: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原創獎勵計畫,未經許可禁止轉載文字