如同大家所知,業餘無線電由於其通訊活動的特性,每次 QSO之後都需要記錄。然而,無線電波是以光速實時傳輸,只需一眨眼的時間就能傳遍全球。而世界各地所使用的時間不同,因此,為了統一,我們在業餘無線電中通常使用UTC時間。
UTC時間與北京時間之間有8小時的時間差,計算也相對簡單。但實際上每次口算都覺得有點麻煩,所以我當時的想法是製作一個時鐘,以便更方便地查詢UTC時間。同時,QTH也是一個重要的考量因素,在 QSO過程中,大家通常都會交換QTH資訊。隨著FT8等數位模式的流行,梅登海德網格座標也被廣泛使用。不過,取得梅登海德網格並不容易,所以我也有想製作一個能夠即時獲取當前網格座標的小玩具的想法。但因為學校有其他事情,這個計畫就暫時擱置了。
後來,看到我的朋友 BG5ABL 在使用 GNSS 模組,我也再次想到這個專案,於是開始進行。首先是選擇關鍵物料:我選擇了禾志 (Air) 的 Air530Z,原因是因為這個模組操作方便,並原生支援有源 GPS 天線,效果良好。而且資料全部使用繁體中文,方便閱讀。。

其次是微控制器(MCU),對於我來說,它方便開發,且資源充足是非常重要的因素。因此,我決定選擇使用 STM32 系列。雖然 STM32 的價格一直偏高,但 STM32 G0 系列則提供相對較低的價格,通常維持在 5 元以下。經過初步評估後,我最終選擇了 STM32G030F6P6 這款微控制器。

初步設計已完成,接下來我會開始繪製PCB。截至目前,我已經完成了三個版本的PCB。每次修改的原因都是因為發現了一些原本沒有注意到的細節,現在卻發現一些讓我在半天都無法解決的小問題。不過,每個版本都可以正常使用。

我使用立創 EDA 軟體來繪製 PCB 設計,雖然它與傳統的商業 EDA 軟體相比可能還有差距,但對於像我這樣製作小型玩具的人來說,已經非常容易上手了。
至於程式碼,則受益於先前使用 GNSS 模組的經驗,因此在不花費太多時間的情況下,便成功地撰寫出一個基本功能且可運行的版本。

起初我原本打算使用 RT-Thread 的實時系統,但後來再考慮了一下,覺得似乎沒有必要,於是就採用直接運行程式的方式。事實上,在沒有額外儲存器的情況下,螢幕使用的字庫確實佔用 Flash 空間不少。目前的版本已經採用 O1 優化,程式大小已達到 31.54 KB,距離滿載我的這顆 32KB ROM 的 MCU 只差一步之遙。MCU 開啟兩個串口,一個用於與模組通訊,另一個則與上位機進行通訊。與模組之間的數據流是持續不斷的,因此我在此使用了 DMA 來接收串口上的數據,以減輕 CPU 的負擔,同時避免數據包丟失。

既然程式已經準備好,那麼接下來就是等待主機板(PCB)送達後進行焊接製作了。

這樣的「一次性」方案,還是使用烤爐是最方便的。在完成焊接後並燒錄程式之後,我們就取得了這樣的成果。

當 Air530Z 模組搭配使用具有活性天線,且有備用電源供電時,熱啟動定位非常快速。幾乎可以說是「秒定位」,但一旦超過模組內儲存的歷程資料有效期限,冷啟動則會稍微慢一些。
現在我將程式分成幾個介面,首先在啟動時,我們會看到歡迎畫面。

啟動後,預設會進入詳細資訊介面。

在該介面上,系統將顯示當前時間、速度、經緯度以及梅登海德網格。最上方狀態列則顯示當前定位情況、系統溫度(由內建的 MCU 溫控感測器讀取,使用工廠校準值)、以及電池剩餘電量指示(以電壓估算,未使用庫侖計,因此不精確,僅供參考)。
通過上方右側按鈕可以進行頁面翻轉,第二頁顯示日期和時間相關的資訊。透過左側按鈕可以切換為 UTC 時間或 CST(即北京時間)。


接下來的一頁是關於「速度」的顯示,共有三組數值,分別為公里/小時、公尺/秒和節,目前尚未進行英制單位轉換,因此左側按鈕目前沒有功能。當時我坐在室內,可能因為訊號強度不足導致定位偏移,從而產生了速度。

接下來的頁面則顯示系統資訊,內容包括當前系統溫度(與狀態列上的那個相同)、當前系統工作電壓、當前電池電壓以及韌體版本(我已經更新到第6個版本,因此顯示為1.5)。

最後一頁則是原始的 GNSS 報文展示,為了方便解析,我設定該模組僅使用 GNRMC 資訊。GNRMC 資訊已經足夠使用,但缺點是沒有高度資訊以及衛星數量報告。之後如果有時間,可以再加入解析其他報文的功能。

同時,當螢幕上顯示這些數據時,MCU 與上位機之間的串口也並不會閒置。它會即時傳送由模組發送的 GNRMC 資料包,這樣,只要將該設備連接到電腦(它內建了 CH340N 晶片),就可以使用例如 BktTimeSync 等軟體來利用 GNSS 系統為電腦進行時間同步。這對於在戶外操作 FT8 等嚴格要求時序的通訊來說非常有幫助。
目前我已經完成了這些功能,接下來我會嘗試繼續完善這個小玩具。例如,增加更多報文解析、自定義啟動畫面上的呼號顯示等功能。此外,我也會美化目前的GUI。希望剩下的ROM仍然能支援我這樣做,否則我就得換成STM32G031F8P6,它有64KB的ROM,比現在大了兩倍喔!(或者直接放棄)
同時,我也正學習使用 SolidWorks 軟體,希望能為這個小玩具製作一個 3D 列印的外殼,真是太棒了!
感謝您閱讀我的筆記,我認為嵌入式系統與業餘無線電之間存在著密切的聯繫。透過使用嵌入式系統進行開發,可以製作出有趣的玩具,同時也為業餘無線電帶來便利。
歡迎您提出建議,讓我們共同為新社區的建設貢獻一份力量。
BH8PHG 2022/08/16