
Raspberry Pi Picoからリポバッテリ12.6v-11.1v(3s)ほどの電圧を測定する方法です。
概要
3軸姿勢制御モジュールの自作ですが、2号機の筐体が完成して1軸(1辺)倒立を検討しているところです。ただ1号機の時に比べてだいぶ定数などが変わってしまっているせいなのか制御プログラムの調整に時間掛かってます。
▼2号機初テスト▼

手で支えてても倒立できない状態。1号機の時は調整にここまで苦労しなかった記憶があるのですが苦戦してます。というかあまり時間が掛けれていません。。今後はホイール重量をもう少し減らして検討してみるつもりです。
2号機では、角度情報以外にもフィードバック制御に使用する予定。そのため今回は、横道にそれますがモジュールの電源に使用しているリポバッテリ(3s)の電源電圧をPicoから測定できるようにしてみます。
分圧回路

今回使用するリポバッテリはMax12.6v(3s)ほどです。そのままPicoの端子には入力できないので、3.3v以下に分圧してからPicoの入力端子に接続します。今回手持ちの抵抗でR1=15kΩ、R2=4.7kΩで分圧。Maxでもおよそ3.006v(12.6×4.7/(15+4.7))ほどに下げてから測定します。
プログラム
float batt; void loop() { batt = analogRead(26u); batt = batt / 74.3; Serial.print("batt:"); Serial.print(batt, 2); Serial.print("\n"); }
ArduinoIDEを使用。ボードはArduinoIDE、earlephilhower版です。デフォルトだと10bitですがanalogReadResolution(12);
のように事前設定で分解能を12bitまで上げれます。
26ピン(A0)の電圧値をビット値で読み込みます。読み込んだ値をまず電圧[v]に変換。変換した電圧値を分圧前の電圧(リポ電圧)に戻します。
読取電圧 = 読み取りbit値 * 3.3 / (1 << 10)
分圧前の電圧 = 読取電圧 * (15 + 4.7) / 4.7
でこの式纏めると、「分圧前の電圧値」=「読取bit」 /「 74.03…」になります。プログラムで使用する値は実測値に合わせて若干補正してます。

テスト確認

リポバッテリの変わりに電源繋いでます。パソコン表示小さくてさらにPicoも写って無くわかり難いですが、Picoで読み取った値をパソコンに送信して表示。今回の使用目的では十分な精度出ています。
コメント