最近のM5Stackに搭載されている電源ICにはI2Cによる制御機能が備わっています。そこで、動作確認用に、(1)電源ICの各種設定値の確認機能と、(2)USB給電停止時の自動起動の設定機能、(3)電源ボタン可否設定機能、(4)充電指示が出来るツールを作ってみました。
M5Stack用の電源ICモニタ:
https://bokunimo.net/git/m5pow/blob/main/m5stack/m5pow_monitor/m5pow_monitor.ino
目次
電源IC IP5306の設定値(画面上部の2進数)
画面上部に、電源IC IP5306の主要なレジスタSYS_CTL0~2、Charger_CTL0~3、CHG_DIG_CTL0の計8個のレジスタの値を2進数で表示します。
PowerVin (左ボタン)
USBからの電源供給を止めて停止したときに、自動的に(バッテリからの供給で)起動するための設定です(有効=1)。
M5Stackの左ボタンでOFF/ONできます。このとき、SYS_CTL1のb2が変化します。
PowerBtnEn(中央ボタン)
電源ボタンの操作を有効にするための設定です(有効=1)。M5Stackの中央ボタンでOFF/ONできます。このとき、SYS_CTL0のb0が変化します。
Charge (右ボタン)
USBからバッテリへの充電をON/OFFするための設定です。ONにすると、BatteryLevelのステータスが「–」になり、棒グラフが充電表示(左から右へ増大するアニメーション表示)を繰り返します。OFFにすると、充電容量を5段階で表示します。
I2C対応 IP5306かどうか
I2Cによる制御に対応しているかどうかは、見た目では判断がつきません。比較的、新しいM5Stackで試してみて下さい。ボクが確認したM5Stack BASICは、2020年3月のバージョン(バッテリ容量が110mAのタイプ)です。
(参考) AutoBootOnLoad
電源ICの2次側(ESP32マイコン側)が動作したときに、自動的に起動するための設定です(有効=1)。SYS_CTL0のb2が変化します。
(参考) SYS_CTL0~2
SYS_CTL0~2の初期値は以下のようになっています。先頭の「//」を外すと書き込みを実行することができます。ロットにより違いがあるかもしれません(注意参照)。
// IP5306write(0x00,0x25); // SYS_CTL0 // IP5306write(0x01,0x1D); // SYS_CTL1 // IP5306write(0x02,0x64); // SYS_CTL2
ご注意:
誤った値を書き込んでしまうと動作に不具合が生じ、場合によっては起動ができなくなる恐れもあります。
GitHubではコメント化して配布しているので、「//」を消さなければ問題ありません。
M5StackのAPIを使えば、より安全に書き換えることが出来ます。
bool PowerBoostOnOff = false; // Press and hold to turn on / off. bool PowerBoostSet = false; // ON / OFF in one short press. bool PowerBoostKeepOn = false; // always boost output mode. bool PowerVin = true; // the supply off, to turn on the power again. bool PowerWLEDSet = false; // to turn on the power LED bool PowerBtnEn = true; // to accept the power button. bool AutoBootOnLoad = true; // auto start function. bool Charge = false; // Start charging // M5.Power.setPowerBoostOnOff(PowerBoostOnOff); // M5.Power.setPowerBoostSet(PowerBoostSet); // M5.Power.setPowerBoostKeepOn(PowerBoostKeepOn); // M5.Power.setPowerVin(PowerVin); // M5.Power.setPowerWLEDSet(PowerWLEDSet); // M5.Power.setPowerBtnEn(PowerBtnEn); // M5.Power.setAutoBootOnLoad(AutoBootOnLoad); // M5.Power.setCharge(Charge);
by bokunimo.net