2019年4月13日 星期六

Nixie Tube, Miniature Atomic Clock, Frequency measure, Clock. - Part A (Atomic Clock)


Okkkkkk,如標題和照片所示,我終於開工我的八管真空管時鐘了
多虧了原子鐘的加入,讓整個系統設計複雜度瞬間飆高....
如果有看我以前的真空管時鐘的記錄的話,大概會知道八管真空管時鐘的計畫是一個規劃已久但是一直沒有執行的計畫之一,因為我想把各種東西都塞進去。
這次執行的原因主要是有錢能做大片的電路板和四層板來塞東西,加上原子鐘的加入讓我實在是很想趕快開工。由於整個系統有幾個不同的子系統所組成,文章也會依照這個分成不同的文章記錄下來,而首先就是這個計劃的重點中的重點----原子鐘

我相信如果我直接跟其他人講說我這個時鐘用了原子鐘,一般人的反應應該是認為是GPS
不過這顆是個真正的銣原子鐘,除此之外還是非常少見的小型原子鐘。
市面上常見的原子鐘都像下圖一樣屬於早期的銣原子鐘,大顆而且非常的耗電

這類型的原子鐘有不少是作為當初GSM系統基地台的時鐘基準,因為那時候GPS還不普及/有開CA,所以基地台以及一些TimeServer/交易Server都會有一顆原子鐘作為時間基準。
隨著時間演進,GSM系統被淘汰掉了之後,就有很多基地台內的原子鐘被拔出來賣,這批就是很多市面上常見的銣原子鐘的來源。我當初的目標其實就是想把這種東西塞進真空管時鐘的Size裡面,但是問題是這種原子鐘很尷尬的是Power吃很兇,因為裡面控溫的加熱源發熱發很猛,但是又不能過熱 WTF,Power還好解決,但是要散掉15W的熱我就頭很痛了,加上體積實在是太大,長寬都超過5cm實在是很難塞。

然後這時候救星就來了,多虧美國DARPA的一個縮小原子鐘的計畫,後續Symmetricom還是有持續研發"比較"民用的原子鐘系列(雖然後來又被收購),這個系列的第一版就是我手上的這棵SA32.m,Miniature Atomic Clock (MAC),把以前動輒數十瓦的Atomic Clock降到了5W,而且長寬做成和51x51cm的OCXO一樣的Size。
比大小

而現在因為GPS的普及/CA關掉以及OCXO,DOCXO的進步,通常時間基準都會使用GPS以及OCXO的混和,也就是GPSDO。這種小型的原子鐘市場越來越小,通常會需要的都是像小衛星或者是海底地震儀這種收不太到GPS的地方。By the way 我剛好在ebay看到的。


從Ebay買回來的原子鐘還有帶原本的板子,拿個吸錫線就可以拆開,而這塊板子也滿妙的
Power透過DC-DC降成5V,然後N堆Filter濾波,Atomic Clock的10Mhz輸出給MSP430,然後MSP430透過UART和GPIO對外輸出PPS和資料,而且PCB開孔讓鋁合金的底板直接接觸散熱。


這顆控制就如同SA3X.m系列的文件一樣,透過3.3V UART可以讀到內部的DDS/Temperature以及設定微調的值,簡單直接。


內部的構造如上圖,原子鐘內部有一個溫控或者恆溫的震盪器作為RF的產生器,RF頻率會接近銣原子的共振點,而這個RF會打進銣原子的真空腔,最後抵達接收器。控制IC會掃描RF的頻率直到它抓到共振的點之後,鎖定在那個共振點,而因為這個共振點的頻率是已知,控制IC就可以回推RF的真實頻率然後回去調整吃同個Clock的DDS的微調值。

而這個原子鐘是為了切入OCXO的市場所做的,所以整體封裝其實相容51x51cm的OCXO,只是多了幾個UART/GPIO的Pin
由於原子鐘得來不易,我還是去買了一個OCXO作為開發+測試用(aka替死鬼),上圖的左邊就是一個GPSDO的OCXO,右手邊就是MAC。

以上就是這次重點的Miniature Atomic Clock,至於GPS校正的部分(Yes,即使是原子鐘也是可以透過GPS校正的)我可能會放在其他文章。




2018年8月21日 星期二

TTN Gateway Setup



前陣子終於架了一個長期的戶外Gateway,用的是兩張V1.2的Gateway Hat, 分別跑915Mhz 和 433Mhz

架構是POE一條網路線供電和網路,內部用一個分離器接出網路和電給RPI,RPI背兩張Gateway Hat,中間那層是433Mhz,上層是915Mhz+GPS,因為PPS有接到GPIO,所以中層433Mhz的板子吃915Mhz那張的PPS,最後兩條RX拉出來接上兩個天線。

最主要的問題大概是過熱吧,可能放在這種戶外防水盒內不通風的狀況下,加上RPI和SX1301都滿熱的...所以我還另外加上一個風扇,然後在中層貼了兩個散熱片。

次要的問題大概是手上沒有短的網路線,所以整線滿慘的...

次次要的問題大概是不知道為啥光華買不到915Mhz的天線,所以只好拿膠棒天線直接上

可以看到天線底下有一個915Mhz的LNA+Filter板,供電用Bias給,433Mhz的天線也是一樣,不過用比較高級的LNA,0.28dB的NF看起來不錯。

至於怎麼接上TTN:

clone完packet_forwarder之後,先Compile,然後在./packet_forwarder/lora_pkt_fwd/底下有一個update_gwid.sh,先跑一遍讓packet_forwarder讀網卡的MAC address,然後會跑出一個Gateway ID,用那個ID去註冊TTN,記得頻率要選Asia 923-925。

接下來準備global_conf.json,在台灣的話會是Asia 923-925
這邊有conf檔案可以下載(AS2):https://github.com/TheThingsNetwork/gateway-conf

然後再修改一下,首先就是板子上沒有LBT,所以LBT要關掉
"lbt_cfg": {
"enable": true,
--> 改成false

然後有GPS, 所以 "gateway_conf": {後面加上"gps_tty_path": "/dev/serial0",
不過這樣一來Gateway的位置就沒辦法自行設定,即使沒有public也是一樣



Low Power WiFi Weather Display V2




總之這版是Update成電子紙版本,最主要是因為我去看了Computex之後才發現原來4.2"比我想像中的大很多,價錢也沒有說很貴,所以就買回來試試。基本上架構和之前一樣,都是MT7687 + G2553的組合,而且這次因為電子紙也可以直接斷電,所以整個Power Plane就簡單很多,直接切斷電子紙和MT7687的3.3V,然後斷開USB轉UART的TX/RX 即可。

由於新的4.2"電子紙螢幕hen大,所以電池也直接Upgrade成4000mAh的電池,照目前的耗電量估算至少可以撐一整年,只是比我想像中的重了一點...另外電池底下的黑色軟片是NFC線圈的防磁貼片,為了避免電池影響到NFC的運作,如果以前有玩過悠遊卡放手機裡面的人應該有印象。

照慣例螢幕底下放Wifi Config用的NFC Tag,真的好用,然後因為空間實在是太大了,所以放我老婆照片。
新的4.2"解析度其實沒有大很多,只是長了一點,所以軟體可以不用大改也會動

軟體上幾乎一樣,因為剛好我之前的螢幕是400x240,而新的只是長了一點400x300
所以繪圖上,只是加了一行降雨機率。不過另外一點比較重要的是,現在會定時Update,以前純粹是G2533睡了8HR醒來Update,但是有個問題是CWB每00,06,12,18Z 會Update一次預報,所以我需要Update最新的那一報,所以Solution是MT7687 Update完畢之後,HTTP Get的Header其實就有時間,用那個計算下一個Update時間經過多久之後,透過Pulse的長度去通知G2533需要Sleep多久(MT7697沒有UART可以用+我懶得用其他方式encode digital的)。不過可想而知的是,一來MSP430的時鐘並不是那麼的精確,二來這種透過Pulse長度來計算的方式也會有計量誤差(Aka.測量長度的解析度問題),所以我的設計上並不是說整點就去撈,因為不確定實際上是整點前還是後,所以固定晚五分鐘Update。


大概就是這樣,Battery Testing.......



2017年11月2日 星期四

LoRa Gateway / Concentrator


總之這是一個真正的LoRa Gateway,在說明之前我先釐清一下部分人的概念。
LoRa的Modulation除了有頻率的差別以外,還有一個很重要的是Spread Factor(SF),
這些參數要完全對上,一個普通的LoRa Transciver(SX127x)才有辦法收的到。

坊間很多人因為無知或是惡意誤導,會拿SX127x的那種Single Channel的IC去宣稱自己是Single Channel Gateway,這種和SX1301的Level完全不同。

真正在架設LoRa網路的所用的方法,是拿一顆(or 以上)專用的IC(SX1301/8)去弄,
SX1301/8前端有兩個個0.8Mhz的BW的RFFE把Raw IQ送給SX1301/8
然後SX1301/8內部的DSP有49個LoRa decoder去解在這1.6Mhz裡面的LoRa封包。

而其中最主要的LoRa Channel是 8個Frequency x 7~12 SF 的48ch decoder,這48組可以同時解,也就是說即使Frequency相同,SF不同的狀況下都能解出來,不過這48組的BW被限制在125Khz。另外一組LoRa則隨意設定,還有個FSK的Channel則是為了短距離的通訊(因為速度夠快,而且因為距離近,收訊沒啥問題,速度夠快On The Fly就短,對於發射裝置來說耗電低,對於接收端來說單位時間所能收的客戶也變多)

所以LoRa Gateway請指名SX1301/8

First Try

續之前的LoRa project,我最主要的是需要一個Mult-Channel的Receiver,這計畫的第一版因為失敗,所以後來的7688 receiver才變成四個Channel的Single channel receiver去撐multi-channel。

那時候失敗最主要的原因是因為我沒有辦法把SX1301的FW成功的Load進去,但是SPI Bus的壓力測試是通過的,也就是裡面的那顆FPGA跑不起來所以整個卡半天都弄不好。

這大概是一年前的Project,那時候受限於SX1301這顆晶片並沒有放完整的Datasheet出來,我所參照的電路圖來自Microchip的LoRa Gateway User Guide,裡面有整個Gateway的完整電路圖,第一版的作法是SX1301那邊照抄,SX1255/7的部分因為有Datasheet,所以抄Datasheet。

不過到了今年年中的時候我發現SX1301竟然Release了Datasheet,所以茅起來檢查一下問題在哪,結果對了Pin腳對半天,竟然......
Reset的電位是拉高Reset,而不是常見的拉低Reset,所以不只是我沒有放電阻拉,後續補上的還拉錯方向。
另外一個比較小的問題是耗電量,我的第一版沒想太多就用LDO上,結果PO到Github就被別人發issue說LDO不夠用,一聽才知道,幹,SX1301的1.8V Rail吃掉0.6A....

所以就打算修正再來試一次,由於我那時候剛好在美國交換一兩個月,Pi Zero買了一堆
就做了一張給PI Zero用的版本,由於Layout塞不下,把一組RFFE拿掉,留一個SX1255/7
但是因為另外一邊超空,所以塞GPS模組提供PPS,然後因為我不想要拖一個天線在外面,就拿了一個有內建天線的模組來用。當然啦,也把LDO換成Switching,不過3.3V Rail就直接從RPI上面拿。
Ver2
這版終於跑起來了,整個超爽der,越想越爽就想說那就做一個RPI用的版本吧。

然後就做完了,不過不只是把第二個FE加回去而已,大致上第二版還是有幾個問題
第一個就是LoRawan所提供的lib裡面關於GPS校正時間的軟體,由於吃uBlox專用的指令,所以基本上只支援uBlox的GPS模組,所以沒辦法只好改用很兇的MAX-7Q上,懶得改lib。
第二個就是RX增加了Bias的位置與SAW Filter,最主要是因為SX1255/7是直接downconvert,而且IC內部並沒有SAW,又因為取樣的BW只有0.8Mhz,所以在這外面的訊號通通會變雜訊灌進來,所以還是放了Filter在上面,而Bias則是因為SX1255/7並沒有一個放大用的LNA,所以還是得加一個,而為了接線方便,同時考慮到天線頗長,所以設計上是有個小的板子接在天線正後方,負責Filter與Amp,然後透過RF上面放個DC的Bias去供應這張板子的電流。最後的小細節就是在SAW前面還有一個TSV,防ESD打壞SAW。
直接接起來大概長這樣,注意的是中間可以牽一段很長的SMA線沒問題

然後因為RPI的SPI device有兩個CE0/1,所以在背面也留了一個Jumper可以跳
像上面那張就是疊了一個915+一個433的版本。另外天線接頭的部分也為了選擇多樣性,用的是SMA/U.FL複合體,所以要上哪種都OK。最後就是SX1301運作的時候真的溫度不低,所以拿RPI用的散熱銅片貼上去這樣。

當然啦,以上這幾個改進都回到RPI Zero的版本

歷經一年的Project終於完工,我終於能夠用到同時 8-ch frequency x 7~12 SF的正常Gateway惹。

爽

不過目前這版問題還是有的

第一個就是TX效能很差,因為直接從RFFE拉出來,內建有Driver,但是Power不大,
對我目前只需要Multi-Channel的狀況是還好,但是之後應該會需要用到TX,所以勢必是需要加一個PA,不然就是需要把SX1301的PA enable腳位拉出來,這樣我就可以另外接上一個PA然後用enable作為PA的開關。
第二個是Bias的問題,因為我現在只留了一個電感在那邊,所以用U.FL的時候,一旦不小心接到地,Bias會直接短路燒掉,所以我暫時的改法是後面接電阻,但是因為pad是0402,所以焊接的時候電感和電阻成三角形的方式焊接上去。