メインコンテンツに移動

USBメータ model-1

思いついたのはずいぶん前で出来上がったのは最近ですが、思いついた時には、まだ似たような物は売られてなかったのですが、、、、USBの口にさして、そこの電流と電圧を測る物ですん。model-1というからには、2,3があるんでしょ?、そう、model-1は失敗でした。

このような仕様を考えていました。

  • 秋月のI2C小型液晶の幅に作る
  • Type-Aのプラグとレセプタクルを両端に配置
  • 電圧と電流同時観測
  • 電圧はレセプタ側の出力で
  • 電流はソース側を測定、差動増幅とし、ゲインを2段階に切り替えて微少電流(1mA)も測定できるようにする。
  • 最大は1.5Aまで。
  • 平均電流、ピーク電流、ピークドロップ電圧の表示
  • MSP430G2452のSO14パッケージを使う

など、など、と色々考えていたわけですが、差動増幅の所がうまく行かなかった。

オペアンプの差動増幅ってのは、反転入力と非反転入力の差分が増幅されるというのはその通りなのですが、差と言うのはソース側にもコモン側にも依存しない差で有る必要があった。ここをあまり理解していなかった。これまで、完全に浮いている両端の電位差(よくあるのはセンサーやコイルなど)を差動増幅で使っていて、あまり気も掛けていんかったが、例えばGNDコモンでその差分を増幅しようとすると基準電位、これはオペアンプも同じになり、そこへの回り込みによって正しく(違うな、思った通りに)増幅されない。これはよく考えたら当たり前だったけど、基板作成前にそこまで考えが及ばなかった(当然動くでしょ、みたいな)。で、作ってみたらうまく動いてなくて、TINAで確かめたらやっぱり動いてない。はて、はて?。となった。

検出と増幅部を抜粋しますが、これは恥ずかしい。当たり前のこともうっかりいくつも。最終的に、センスをGND側にして大体にリニアにはできましたが。それでも入力オフセットの関係で線形にならないため、ソフトで強引に補正をかけています。

ADC10CTL0 &= ~ENC;				// 変換Disableしないと設定変更できない
ADC10SA = (unsigned int)adc_tmp;
								//配列の先頭アドレスをセット
ADC10CTL0 |= ENC + ADC10SC;		// AD変換スタート
_BIS_SR(LPM0_bits + GIE);		// LPM0 mode wait for intrrupt
calc_volt = ((long)adc_tmp[0]*330)/1024*2;	// 5.00V
calc_curr = ((long)adc_tmp[1]*33*10000)/1024/203;	// 0.001A
if(calc_curr>30)
calc_curr += (long)((float)calc_curr*HOSEI_A) + HOSEI_B;	// 0.001A

電子負荷という高尚なものを持ち合わせていないので、ここは会社の自己啓発の範囲で行いました。いちおう、0.03A以下では線形性があったので、それにあう近似式を用いて補正をかけました。以下に実測データを示します。(もっとも使った電子負荷では、軽負荷の補正をかけていないのでそこは信用できません、こり始めたらキリがないので、あくまで暫定ということでこれでよいです)

右に電子負荷をつないで負荷と実測をプロットすると直線になっていてよさそうですが、その差分を左のようにプロットすると、差が線形に変化していました。そこで、この線形値を近似して補正をかけてみたところ、うまく電流が測れるようになりました。

上のコードの最後の行です。

でも、このやり方だと個体ごとに補正をやり直さなければいけないので実用的ではありませんな。

そこで、いろいろ調べてみたのですが、差動で正確に電流検出しようとすると、Instrumentアンプなるものが必要そうでした。それそのものでなくても電流検出のセンスアンプも多品種あるじゃないですか。次回はそれを使って実用的なものに近づけたいと思いました。

 

基板ですが、20mmx50mmの大きさで1.6mm厚の両面基板としました。その関係で、USBのDM/DPラインが太くなっています。GND対抗面が1.6mmと離れるため差動90Ωを実現するためには、約3mmのパターン幅が必要です。このときのGNDはUSBの中に配線されているVBUSと対のGNDではなく、USBケーブルのシールドになります。差動Zはこのシールドに対して90Ωで、このシールドは回路のGNDと分離されていますので、ソース側の電流を測定するしかないというわけです。デバイスによってはGNDとくっつけてしまってもよいでしょうが、このような場合、何がつながるか不明なので、結局ソース側を検出することが必要です。(もっとも今回は実現できませんでしたが・・・)

左隅の丸いのがMSP430のタッチセンスパッドになる予定でした、そこまで作れなかった。というのと指が大きすぎて(いやパッドが小さすぎて)できたとしてもタッチセンスできなさそうでやした。

 


 

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
  • 行と段落は自動的に折り返されます。