2019年4月27日 星期六

LoRa Gateway / Concentrator V2


總之這是第二版的LoRa Gateway。

說來話長,不過我當初做LoRa Gateway並不是要用來接LoRawan,而是跑自己的系統去收探空儀的資料,可是最後做出來之後因為要整合進現有系統的時間和成本都太高,所以最後來不及放在探空儀系統裡面。(當然啦,論文一直沒有出來我也不想繼續幫忙下去)

所以這版最主要就是把這個Project修正回適合LoRawan部屬的東西,簡單來說就是把PA/LAN和RF Switch做上去,從上圖和之前的比較就可以發現這片只有一個RF出來接天線,其他的都在板子上了。

Layout上除了保持RF走線能夠跑越短越好以外,TX/RX的Stage也隔的很遠,圖的上方是PA Stage,下方則是LNA,另外也換成了四層板,所以RF Switch和PA power switch都可以透過layer 4走回來而不破壞原有的GND Plane。

然後這東西在設計快到結尾的時候剛好RPI 3 B+出來,雖然了無新意(因為被VC綁死SOC其實也沒啥把戲可以玩了),但是為了PoE我還是買單了,因為真的在部屬一個戶外的Node其實要網路要供電的話,PoE一條網路線可以牽個幾十公尺都沒問題,而且搭配工業用供電器真的方便。所以我就立刻把PoE Header做上去了,原本其實也是想把PoE模組做上去,只是有個小問題,除了Layout會需要大改以外,通常常見的PoE模組供電量會因為電感限制在2A,也就是要嘛就是12V2A要嘛就是5V2A,要再上去也有只是貴了一階上去,我當時不確定拿5V2A夠不夠就先放棄了,只把POE拉出來讓上層可以用RPI出的PoE Hat。

其他的就差不多了,四層板另外換成霧面黑(我真的愛霧面黑)

除此之外由於換成了四層板,我回頭去看了一下RPI Zero的版本.....

其實真的擠得進去XDDDD

好啦,這不完全是一樣的設計,應該有人發現到RFFE只剩下一顆,我其實用了一顆PA/LNA/Switch整合的RF Frontend,所以可以把面積再次往下縮小,就變上圖那樣了,而且SX1301的133Mhz Crystal也找了一顆非常小的2520面積的OSC,整個就是壓面積


四層板用到連電源走線都有點難度的那種狀況,但是還是維持了一整片完整的GND Plane就是
少數幾張我覺得很誇張的板子


最後就是來講一下一個應該沒有人注意到的點,有看到第一張電路板上面有個TW0001嗎?
這其實是OSHW的認證標示。Opensource Hardware這件事其實很多人會宣稱自己是,可是常常發生這種明明宣傳是,可是只放出來一張電路原理圖或者是一張BOM表這種,所以OSHW基本上就是設計了一套新的認證機制,就是讓設計者去登記自己的作品,然後透過填寫的問卷去評估是否符合OSHW的要求。

我基本上覺得台灣很多人在談論OSHW的時候基本上是在講幹話,因為他根本沒有Release什麼鬼東西就宣稱自己是OSHW,不然就是對這種新的認證方式根本不了解而只是一昧地去宣傳一種空泛的OSHW的口號而不去散佈正確的OSHW的Criteria。我其實等了半年都沒看到OSHW有台灣的人去登記覺得有點傷心,最後就默默的把我的這個作品拿去登記了。中間也不是沒有去跟其他人宣傳過這件事,可惜的是絕大多數的台灣人都害怕東西Release出去就會有其他人來抄襲而不願意去公開。的確,科技業這類保護自己的方式當然沒有甚麼問題,可是你他媽的就不要宣稱自己是OSHW阿阿阿阿

只能說是科技業的心態已久,然後宣傳的人大多也只是提倡一種空泛的口號。
台灣第一個OSHW Certified Project


覺得台灣大多數在談論OSHW其實也只是徒有其表而無其實就是。滿紙荒唐言,謹以此紀錄在我的筆記本裡面。





2019年4月26日 星期五

DIY Seismograph


總之這次就是作地震儀。
其實以前高中曾經碰過的一款簡單地震儀是這個:http://qcn.stanford.edu/
QCN當初是為了廣佈地震儀作地震預警用,台灣有教育單位合作可以申請免費的QCN Sensor架設地震測站。我當初從學校拿了一個回家裝,配上一台退役的eeePC 701跑QCN的軟體這樣。QCN的設計和很多現在所謂DIY地震儀類似,其實就是拿MEMS加速度計作Sensor,但是因為MEMS的靈敏度不高而且雜訊也多,QCN另外還有作一些演算法(統計)去評估地震發生的有無。架設完之後也曾經發生過幾次地震,可惜的是訊號跟雜訊比起來真的低,所以我一直沒有想要去作MEMS的地震儀。

另外一種Sensor就是我現在在用的Geophone,這種Sensor其實也沒有那麼靈敏,只是比MEMS好上不少,通常是拿來作人工地震探測那種比較高頻率的地震測量,但是對於台灣這種地震常常發生在附近的國家來說,其實也很可以了。

By the way,地震有分P,S以外,還有表面波跟各種pspspspspspspspsp這種轉來轉去的波
因為地球不是均質的球,震波透過去的時候會產生各種反射和折射而且這一折一反還會生出P or S波出來,後面的那種折來折去的基本上就是訊號超小所以先忽略掉,不過表面坡就很有趣了,表面波顧名思義是地震發生後,由於波速越往下越快,波會因為折射回來淺層,所以能量會集中回表面然後傳遞的一種波,特色就是可以傳遞到很遠的地方。以美國的地質局為例,美國的地震網路之所以可以測量各地的地震以及規模是因為他抓的是表面波。表面波另外一個特色是由於不同頻率有不同的波速,表面波(A.K.A很雜的波)會出現頻散的現象,但是越遠只會剩下波長長的波,所以地震儀拚的其中一項就是能收到多低頻。不過好在Geophone也是可以到數個Hz這種程度,所以附近的地震都還行。

好,所以基本上就是我最近看到有人在賣便宜的Geophone就買來試試,Geophone的本質就是線圈配上非常重的磁鐵,所以晃動的時候會有AC產生,簡單了然。
我當初是想做一片電路板專門來接Geophone,只是因為要出國念書了實在沒時間搞,所以就朝向拿現成的東西拼接的方向,另外因為我希望管理和程式以及聯網方便一點,所以我挑的是RaspberryPi以及一個24bit ADC的Hat,組裝完長得像下圖:

一共有三個Geophone對應東西方向,南北方向,上下的軸,然後直接接上板子的ADS1256。
最後透過束線帶固定在雷切的壓克力板,底下貼腳墊濾掉高頻的波。
我用的Raspberry Pi Hat是waveshare出的WaveShare High-Percision  AD/DA : https://www.waveshare.com/wiki/High-Precision_AD/DA_Board
還行,我也沒啥好選的就這樣吧。

這個板子有附上滿多example Code的,要Python要C要bcm2835 lib還是wiring Pi都任君挑選,
由於效能的關係我就從bcm2835的example下手了,由於我沒有裝OPA去放大訊號,我就把ADS1256內建的開到64倍的放大,然後拉高Sampling Rate這樣,順便開成differential mode。
比較有趣的是因為ADS1256開到7500ps,其實CPU資源吃很兇,如果同一個thread還要寫資料和切換檔案的話中間耗掉的時間會導致資料消失,所以我就開了兩個thread,一個專門讀然後透過pipe傳回主要的thread去寫檔案和切換檔案這樣,這件事情也是我轉向Raspberry Pi 3的理由之一,原本其實是想用Raspberry Pi Zero去作這個Project的,可是因為單核心真的撐不住,所以就上RPI 3然後搭配多核心多個thread這樣使用。

檔案寫完當然還沒結束,首先要解決的是把檔案存哪裡的問題,這樣程式寫起來sampling rate在三個differential channel大致上有750ps,檔案每五分鐘就生出快要14Mb的大小,一天下來兩三個Giga跑不掉,所以最快的方式就是.......拿出學生版的無上限Google Drive!!!!
而且如果有管理員來問的話這個根本超級學術用的一定Safe。(我懶得用binary,因為塞免錢的網路硬碟)

上傳Google Drive有很多種方式,懶得人比如我就是用rclone去作,rclone基本上把各種網路硬碟的操作變成rsync這樣的cmd,還挺方便的,可能之後來寫一篇記錄一下這個。

好,總之檔案都放無上限的Google Drive,接下來要處理的就是畫圖了,我當初是用Matlab畫了幾次的圖(等下個案的圖),可是到後面因為要做到自動化,所以改用obspy這個python的地震資料專用軟體來畫daily plot,然後去撈中央氣象局的地震時間把事件點在圖上(by the way,中央氣象局的地震API超爛,根本只會回最近的那一筆而已,我只能直接爬網頁爬下來時間和規模的資料 = =)。大概就長下面那樣,Dailyplot是把一整天的地震儀的資料畫上去配上氣象局的地震事件的資料上去,搭配VPS自動處裡每天的地震儀資料就差不多了。
我放在公司所以人為的影響滿大的

接下來就是拿個Case來講了,我當初弄玩Code剛好過了幾天就發生一次非常大的地震
個人有記憶以來(我對921和331都沒啥印象)最大的一次

我當時人正在十樓,然後這個地震儀正在測試穩定性,發生過後除了上FB發地震文之外就是先去把資料撈回來看XD
地震發生的時候因為正在測試中,所以我還沒有把XY軸擺出來,三個軸都是放成Z軸,所以資料也只有Z軸的資料,但是可以看到非常的符合中央氣象局的Data(包含頻散的特徵),這也是第一次這個地震儀抓到的一筆資料。


後面還有個Case是比較小的M3.9
Again,not bad,而且台北市震度也只有1而已。

所以目前這個系統就是放在我家某個角落默默地上傳到免費無上限的Google Drive,然後有個VPS每天定時去撈去畫daily plot這樣了。

Code預計放Github,可能再修美觀一點這樣吧。

Code:https://github.com/will127534/RaspberryPi-seismograph



UPDATE: 8/8號的M6.0地震
很大,炸掉我的DailyPlot的程度的大 








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校正的)我可能會放在其他文章。