USBメータモデル2です。
今回
前回の失敗を踏まえ、「とりあえず実用になるものを作ろう!」としました。ちょっと高価ですが、TIのINA226という最高級センスアンプを使用します。回路屋としては、これはちょっと不甲斐ないです、すいません。I2Cインタフェースで計測値を直読できます。なので、プログラムはI2C制御のみといっても過言ではありません。いくつかモジュールで販売されているものもありますよね。
CPUは前回と同じ、MSP430G2452のTSSOP14pinを使います。
INA226
データシートを見ると、まんなかへんぐらいに、例として計算方法が載っていまして、ここの値をこうすると後の計算が楽だよね。見たいな事が書かれている箇所があります。ここがないと理解が進みにくいでしょうな、たぶん、僕はそうでした。
プログラムとしては、1)初期化、2)キャリブレーション値設定→3)使用開始、となります。初期化ではConfigurationレジスタのリセットを実行後に平均化ビットを設定するだけでよさそうです。キャリブレーション値はデータシートにある計算で求めます。これは使用するセンス抵抗値に依存しており、補正というよりか設定といったほうが正しい。この値を設定すると電流値が正しくなる(設定しないと電流は常に0が読める)。要するにセンサ内部でオフセットとGainは補正トリミングがすでになされておるということだと思われます。
ADCは16bitでShuntVoltageは2.5uV、BusVoltageは1.25mVの分解能が記載されています。なので、10mΩの抵抗を使うと0.25mAの分解能になるということでしょうか。回路図です。
ソース等、ここの方(妥協の電子工作さん)を大いに参考にさせてもらいました。電流の計算方法が一部?ではありますが、データシートに書かれている計算方法とは答えが一致しており計算しやすいように変えてあるんだと理解しています。
タッチセンス
これは、TIさんのmspwareサンプルソース(Touch-PINOSC_One_Button)のまんまです。これを一から作れるほどスキルは高くないです。
今回、工夫している点は、
- USBの差動ラインはZdiff=90Ωになるようパターン化した。DesignSparkPCBのToolを使いました。会社でTDR測定していますが距離が短くはっきりしないですが90Ω実現できていました。
- MSP430のタッチセンス機能を使って、基板に触れるだけでモード切替します。
- 軽負荷の時は、サンプリングを遅くして消費を抑え、高負荷のときに早くしています。
ソースです。これはちょっと恥ずかしいです。人のページを勝手に参考にさせてもらっているので私も全部出しておきます。
パターンです。これも恥ずかしいんですが、ついでだから載せておきます。GC-Prevueで見てください。
測定結果
会社で校正されたDMMと電子負荷で測定した結果です。
だいたい、0.5%の誤差という事でしょうか。
コメントを追加