2021年6月18日Arduino/ESP32100mΩ,CJMCU-226,INA226,シャント抵抗,精度,電圧,電流TwitterFacebookLINELINEFeedlyCopy電流、電圧計測器を購入しますた。界隈では安くて精度が高いと噂のINA226を使ったモジュールボードです。Instruments製の高精度な電流、電圧モニタICのINA226を載せているとの事で、ちょっとワクワクして届くのを待っておりました。中華製ボードですから、本物かどうか知りませんが;入力は0V~36Vまで、動作電圧は2.7V~5.5Vで、インターフェースはI2Cですので配線にも困らず、マイコン用途には大変使いやすい仕様になっています。ESP32のADCが何だかフラフラとした値を出すので、外部の電流、電圧計が欲しいなぁと飛びついてしまぃ乗っている抵抗は100mΩで、シャント抵抗としてはちょっと抵抗値が高めの模様。本当は12Vで瞬間40A~60Aくらい流れそうなハイパワーDCモーターの回路を測定したかったのですが、100mΩだと819.20mAを超えるとADCのレンジ外になってしまうそうで。抵抗値が高ければ精度(粒度)が増す代わりに電流の測定範囲が狭くなってしまぃ、抵抗値が低いほど測定範囲は広いけれど精度(粒度)が粗くなる様で。んん~ひとまず普通のマイコン回路では精度が高い方が便利ですし、1Aを超える様な事にはなかなか遭遇しないでしょうから、100mΩという設定はバリューゾーンなのかもしれません。私の事情などはどうでも良いのでちょっと使ってみます。シャント抵抗を変えれば広いレンジにも対応出来るみたいですので、今はまだ・・・INA226を使う準備を。I2Cアドレスはデフォルトが40hとの事ですので、とりあえず何にもせずにそのまま使います。Д`)さていつもの中華製ですので、どうやって使うのかは調べなくてはいけません。ここでもINA226のデータシートを参照します。データシートhttps://www.tij.co.jp/product/jp/INA226なんかボードのレイアウトと回路はアプリケーションノートのリファレンスデザインと殆ど一緒ですね。高精度にするにはフィルタ回路を追加しろとありますが、この中華ボードにはそんな気の利いたものは付いていません。ボードレイアウトを見ても、シャント抵抗とINA226の間に挟み込めそうなブレイクアウト端子を用意してくれたりはしない様ですので、もしこのボードにノイズフィルタを追加するならシャント抵抗を外して外部でフィルタ回路を作らないとダメそうです。シャント抵抗とか言ってますが、多分これはそれほど高精度な抵抗ではなく、ごく普通のチップ抵抗だと思います。サイズは恐らく2512サイズで、大変はんだ付けがしやすい大きさになっていますね本当に精度が欲しい場合には、ちゃんとした高精度なシャント抵抗を買うべきなんでしょう。ショートさせて破壊しそうなカオス気を付けてくださいねホント今回はI2C接続ですので、0.96インチのOLEDモニタも同時に使います。これは液晶モニタもI2Cですので、混ぜます。普通のI2C接続ですね。電源は外部電源、GNDはESP32のGNDと外部電源のマイナスを混ぜてます。Alertは外に接続していません。一応何かの電流と電圧を計らないと意味がないのでLCDの電源にハイサイドで噛ませています。一応回路図出しますか・・・なんかゴチャっとしててアレですがとにかくLCDとCJMCUボードをI2CでESP32に接続してまっせ、LCDの電流と電圧を計りまっせという事で。INA226を使うコードを書く接続もできたところで、コードを書いてみます。データシートをよく読まないとそれぞれの意味は判りづらいのですが、、ざっくりとこのICでは、以下の様な調整が出来る様です。今回は動作確認が主目的ですのでアラート機能は使いませんが、トリガーを設置できたりラッチ出来たりと、監視ICとしての一通りの動作をさせる事ができそうです。調査にも使えそうですねそれはさておきコードです。mA");display.display();delay(333);}NAGEEEEよ無駄にorz大半がプリント文ですのでん設定値などはこんな感じに。:3回/秒デフォルトでは平均を取らないので数値が荒れまくるかもしか。16サンプルの平均値とする事でそこそこの信頼性が出て来ると思います。16サンプル分の時間を短縮する為に少し計測サイクルを速めています。このモジュールでは電流値を計測しているのではなく、電圧値の差動から電流値を求めているごく一般的な(?)シャント測定方法ですので、電圧の測定サイクルが速くなれば計測速度も速くなるという訳。0x05hのレジスタ(キャリブレーション)これはシャント抵抗の値である100mΩにあわせ、データシートにある計算式で作ります。100mΩ)例えば1mΩのシャント抵抗を使ったら、この値は5120に10mΩの抵抗なら512に、という風にキャリブレーションの値を変えてやる必要があります。計算式は、データシートによるとこんな感じ。ohmこのモジュールは100mΩの抵抗がついていますので、シャントの箇所は0.1Ωで計算します。0.1ohm)こんな感じになるわけです。レジスタには小数点は入れられないので、51(0x0033h)を設定しています。INA226が取得したシャント側の電圧値も取得できるので、INA226にキャリブレーションに基づいて計算してもらわず、手動(マイコン側)で電流値を計算しても良いです。計算して出力させていますが、マイコンパワーを使いますので、精度がそれほど必要無いならばIC側にお任せ出来るという訳です。シャント抵抗値のキャリブレーションの値が整数値になる様な抵抗だと良いですねまた、このボードモジュールの様に、出どころ不明の抵抗がついていて、抵抗値にばらつきがある場合には少し調整してやると良いと思います。Д`)大体ソレっぽい値が取れていると思います。16サンプルも要らなかったかもですね手元のテスターの値と比べると、0.5mAくらい高めに出る様子。大きく異なっていないのでまぁ良しとします。激安テスターですから、テスターの方が正確とは限りませんですしおすしこのINA226はそこそこ高速に動作する様ですので、沢山収集してプロッターなんかに書き出すと面白いかもしれません。平均を取らずに出力したら突入電流なんかも捕まえられるかもしれませんねただI2Cの速度は超えられませんので、過大な期待は出来ないカモシカ。データシートを読むのがだるかったですが、ひとまずこんな感じで動作の確認ができました。一度理解すれば非常に使いやすいICだと思います。シャント抵抗も大きなものがついていて簡単に交換できそうですので、そのうち当初の目的であった40A超えの電流を計測する為にシャント抵抗を交換するかもしか。Д`)まぁひとまず足掛かりはできました。...PCの電源が夏バテ気味です。...ESP32で電圧測定をしてみるも、ちょっと問題が(内臓ADコンバータをanalogReadで使用)野暮用ですが、そろそろリポバッテリー用の電圧計を作らねば。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目ですコメント名前メールアドレスウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。最近はマイコンを使った電子工作に夢中です。Dart/FlutterFlutterでFirebaseを使ったログイン認証、プロジェクト作成手順まとめ極稀にしか使わないので備忘録。Arduino/SAMDVSCode+ChatGPTでArduinoプログラム流行ものですので、ChatGPTにコードを書かせてみようかと。XIAOさんは小さくて大変使い勝手の良いマイコンです。更新をサボりまくりンゴねぇ・・・とりあえず環境構築の目途でも。久々にブログのサーバーメンテナンスをしたついでに投稿。さんコメントいただきありがとうございました。ライブラリは残念ながら最新でした。さんコメントありがとうございます。さんコメントありがとうございます。さんM5StickCよさげですよね。さん通りすがりの者です。ESP32を検索していて拝見いたしました。さんコメントありがとうございます。