[オープンソースファームウェア] FRME-PM-01A クーロン計 + 電量計 ファームウェアの再現: OpenPM01 — libopencm3、純粋なオープンソース技術スタック
背景
サーバー電源や13.8Vのリチウム鉄リンバッテリーで短波ラジオを駆動している方であれば、FRME-PM-01Aという製品はご存知の方もいるでしょう。これは、両端にXT60コネクタを備え、ディスプレイ付きのオープンソース電流測定器であり、コミュニティ内で広く認知されています。
ハムについては、基本的な機能は十分ですが、私は4Sのリン酸鉄リチウムイオンバッテリーを使用している際に、常に電量表示があると便利だと考えていました。そうでなければ、自分で電圧を測って計算する必要があり、手間がかかります。ちょうど、oshwhubのコメント欄で、クーロン計の機能を搭載できるかという質問を見かけましたので、自分でファームウェアを作成してみることにしました。
しかし、元のファームウェアはオープンソースではないため、自分で書く場合は、技術スタックも完全に自由ソフトウェアに置き換えるのが良いでしょう。具体的には、PlatformIO + libopencm3 を使用します。STのHALや、ライセンスに関する制約のある依存関係、またはプロプライエタリなバイナリデータ(blob)は一切使用しません。
それから OpenPM01。
実演

IC-718 短波ラジオでの FT8 運用

バッテリー充電
設計の考え方
クーロン計 + 電量計
既存の電圧/電流/温度・湿度に加えて、以下の項目を追加しました:
- ソフトウェア・クローン計:電流に対する数値積分を行い、mAh/Ahを累積する。
- 電力計:電圧計を使用してバッテリー残量を推定し、CHARGE欄に進行状況バーとして表示します(場所を占有せず、必要でないときは非表示)。
障害
正直に言うと、この電力計は…正確ではありません。— バッテリーの化学システムの違いは大きく、ハードウェア上にEEPROMのようなストレージがないため、累積値を保存したり、バッテリー残量を調整したりすることができません。そのため、表を参照して概算するしかありません。しかし、「バッテリーの残量や充電が必要かどうか」といった日常的な判断には十分な機能を提供します。
現時点では、まだ記述のみです。 4S 燐酸鉄リチウム 現在、ハムバンドで最も一般的な構成である「ハミング・ループ」の測定曲線。他のバッテリーの種類(3S/6Sリチウムイオン電池、鉛蓄電池など)については、まだ実装されていません。コードに追記します。 #それ以外の場合 ブランチの確認は、簡単なテストで済みます。ご協力いただければ幸いです。
リフレッシュレート & 計画
元のファームウェアのアップデートが遅いのは、すべての機能が混在しているからだと推測しています。 メイン関数 里 遅延関数 同様に、正確な値を測定するには、クーロン積分や瞬間電力の表示には高いサンプリング/リフレッシュ頻度が求められます。STM32F103 のクロック周波数で十分に対応できるため、シンプルな協調型スケジューラを設計しました。
各タスクはそれぞれ独立して実行され、互いに干渉しない。これにより、クーロン積分精度の向上だけでなく、UIもより高いリフレッシュレートを獲得し、電圧、電流、電力の読み取り値の変化が視覚的にスムーズになる。
警告表示
過負荷、過電流、温度超過といった警告は、以前は近くのエリアで表示されていました。これを変更して対応する数値の表示欄をハイライト表示+点滅にする。より目立つように、図のように表示します。


例:低電圧/低電力警告
UIと配色
UIのレイアウトを再設計し、より効率的な空間利用を実現しました。また、使いやすさを向上させるために、追加機能を付加しました。 Catppuccin 4色のテーマ(モカ/マキアート/フラペ/ラテ、3つのダークトーンと1つの明るいトーン)に加え、コードに新しいカラーパレットを追加することで拡張できます。また、以下も作成しました。4つの方向(縦向き/縦向き180度回転/横向き/横向き回転)、コンパイルオプションの制御により、様々なケースに対応したインストール方法を容易に選択できます。詳細はGitHubを参照してください。
構築 & 書き込み
PlatformIO が必要です。
# platformio.ini 内でコンパイルオプションを修正する
platformio run
platformio run --target upload
向きと色合いは、~によって決定されます。 build_flags コンパイルオプションの選択、バッテリープロファイルも同様です(デフォルトは4Sのリチウム鉄リン)。-DNO バッテリー 電力計の機能を完全に無効にすることができます。
GitHub のリリースこのページでは、あらかじめコンパイルされたHEXファイルを配布しています。ご自身で書き込むことができます。
書き込み
基板には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 |
| キャスカディア・コーブ(カスカディア・コードのフォーク) | エリ・ハウアー / マイクロソフト | SIL OFL 1.1 |
倉庫
GNU GPLv3のライセンスで公開しています。複製、修正、批判など、ご自由にご利用ください。現在、4S用のリン酸鉄リチウムイオンバッテリーの容量計のみを作成しました。他の種類のバッテリーの測定曲線についても、ぜひご協力をお願いします。
倉庫の住所:https://github.com/sophiel-meow/OpenPM01
事前コンパイル済みファームウェア:https://github.com/sophiel-meow/OpenPM01/releases
板付きの製品をお持ちの方、ぜひ実際に使ってみて感想を教えてください!