[開源韌體] FRME-PM-01A 庫侖計+電量表韌體的複製:OpenPM01 —— 使用 libopencm3,純粹的自由軟體技術堆疊
背景
使用伺服電源或 13.8V 的磷酸鐵鋰電池為短波廣播電台供電的朋友們應該都熟悉 FRME-PM-01A 這個產品——它具有兩端的 XT60 連接埠、帶有螢幕的開源電流表,在業界內享有相當高的聲譽。
對於 ham 來說,基本功能已經足夠了,但我個人在使用磷酸鐵鋰電池時,一直希望能有一個電量顯示功能——不然只能自己拿電壓去查表估算,相當麻煩。剛好我在 oshwhub 的評論區也看到有人詢問是否可以增加庫仑計的功能。於是我就決定自己寫一套固件。
不過,原本使用的元件並非開源,既然要自行開發,那就直接將技術棧也改為完全的自由軟體:PlatformIO + libopencm3。這樣就不需要使用 ST 的 HAL,也不會有任何非自由的依賴或專有元件。
因此,就有了 OpenPM01。
實際示範

使用 IC-718 短波無線電發送 FT8 數據

電池充電
設計思維
庫侖計 + 電量表
在原有的電壓/電流/溫度與濕度基礎上,增加了:
- 軟體比較計:對電流進行數值積分,累計 mAh/Ah
- 電錶:電壓錶可估算出電池的剩餘電量 (SOC),在「充電」欄位中以進度條的形式顯示(不會佔用空間,不用時也可以隱藏)。
阻礙
說實話,這個電錶。不精確——不同電池的化學系統差異很大,而且在硬體上沒有像 EEPROM 這樣的儲存器,因此無法進行累積值的保存或電量校準,只能透過查表來粗略估算。但對於日常判斷「電池還有多少、是否需要充電」這種情境,已經足夠了。
目前只有寫了 4S磷酸鐵鋰 的查表曲線(HAM 系統中最常見的配置),其他電池類型(3S/6S 電池、鉛酸電池等)還沒完成,可以在程式碼中新增 #elif 只需檢查分支的邏輯即可,歡迎大家提出修改建議。
更新頻率 & 排程
原本的韌體更新速度非常緩慢,我想可能是因為所有的邏輯都塞在裡面。 main() 內部 延遲() 需要較高的採樣/更新頻率。然而,庫侖積分和瞬間功率的顯示都需要較高的採樣/更新頻率,因此 STM32F103 的主頻可以完全滿足需求,於是設計了一個簡單的非搶佔協作式排程器。
每個任務會根據自己的週期獨立執行,不會互相干擾。這樣可以提高庫侖積分的精確度,同時也能讓介面(UI)獲得更高的更新頻率——電壓、電流和功率的讀數變化變得更加明顯且流暢。
警報顯示
過壓、過流、溫度超過限制等警示,原本在旁邊的小區域顯示。我已修改為…直接在對應數值的顯示框中標示並閃爍。,而且更加顯眼,如圖所示。


範例:低電壓/低電量警示
使用者介面與配色
重新設計了介面佈局,空間利用率更高。另外增加了… Catppuccin 四種配色主題(摩卡/瑪奇亞托/法普/拿鐵,三種深色、一種亮色),可以在程式碼中新增配色板來擴展。此外,也完成了…四種方位(縱向/縱向180度旋轉/橫向/橫向旋轉),編譯選項控制,方便不同安裝方式。詳細圖片請參閱GitHub。
建立 & 燒錄
需要使用 PlatformIO:
# 在 `platformio.ini` 檔案中修改編譯選項
執行 `platformio run`
執行 `platformio run --target upload`
朝向與配色透過 build_flags 選擇編譯選項,電池型號也一樣(預設為 4S 磷酸鐵鋰)。- DNO\_電池 可以完全停用電量顯示功能。
GitHub 發佈此頁面提供預先編譯好的 HEX 檔案,使用者可自行進行刷寫。
燒錄
在 PCB 上預留了 SWD 引腳,不需要焊接排針,只需將排針插入即可,然後用手按住。



聲明
FRME-PM-01A 的硬體由 @FrostAutumn 設計,並遵守 CC-BY-NC-SA 3.0 協議。本文件為獨立項目,與原廠無關聯,並未經過原廠認證。此外,也沒有參考過原廠韌體(原廠韌體本身未開源)。韌體本身基於 GNU GPLv3 開源,可以自由使用(包括商用);但是如果打算開發衍生產品,硬體部分仍需遵守原作者的 CC-BY-NC-SA 條款。
依賴 & 感謝
| 元件 | 作者 | 協議 |
| stm32f1_st7789_spi | 阿夫拉·米特拉 | MIT |
| INA226 函式庫 | 羅·提拉特 | MIT |
| SHT30 函式庫 | LibDriver | MIT |
| libopencm3 | libopencm3 專案 | LGPLv3 |
| 卡斯卡迪亞灣(Cascadia Code 的分支版本) | 艾利·霍伊爾 / 微軟 | SIL OFL 1.1 |
倉庫
GNU GPLv3 開源,歡迎複製、提出修改建議或指出錯誤。 目前僅完成了 4S 磷酸鐵鋰電池的電量顯示功能,其他電池類型的顯示曲線也特別歡迎貢獻。
倉庫地址:https://github.com/sophiel-meow/OpenPM01
預先編譯的韌體:https://github.com/sophiel-meow/OpenPM01/releases
有板子組的夥伴,歡迎大家實際測試並提供回饋喔!