google-site-verification: google3bd66dd162ef54c7.html

USB充電容量チェッカーの電流測定を、ハイサイドに変更

 USB充電容量チェッカーは一応完成しましたが、作るときから気になっていた点があります。それはシールド線を流れる電流を測定していないことです。参考にしたビットトレードワンの物も回路図や基板の写真を見る限りではシールドの電流を測定していないようです。

 そのあたりが引っ掛かってた折に、よく巡回させていただいているTakaさんのこの記事にUSBハブの内部写真が掲載されていました。この写真を見ると、USBのハブでは電源のGNDラインとシールドはがっちり接続されています。負荷側の回路の作りにもよりますが、こうなっていると下の図のようにシールドにも電流パスが出来てしまい、正しく測定出来ない場合がありそうです。

▼USBのシールド線に流れる電流は測定出来ないかも
USBのシールド線の電流が心配
 (注:USBのピン番号がこの通りかどうかは未確認です)

 負荷を通った電流が戻る時にシールドにも流れていると、シャント抵抗(Rs)を通らないので正しい消費電流が測定できないことがありそうです。これはヤバイです。

 USBケーブルのシールドは、どちらか片側のコネクタではコンデンサと高抵抗で接続されているのでこんな問題は起きないと思ってましたが、どうもいつもそうだとは限らないみたいです。特に、そのものズバリの写真を見ちゃうと対策を真面目にやっておかないとダメだと感じました。

 この問題の簡単な対策としては、シールドとGNDラインを接続してまとめて電流測定する方法です。でもそんな俺様仕様にしちゃうとUSBが予期しない動きをする可能性が高いです。ということで、根本的な対策としては電源のプラス側、つまりハイサイドの電流を測定するしかなさそうです。

 ハイサイドの電流を測定する方法をいろいろ探した結果、一番簡単そうなのがこのLMC6482を使った回路。

▼LMC6482を使ったハイサイド電流測定回路
ハイサイド電流検出回路
 LMC6482のデータシートより転載。

 最初はええー、こんなんでいいのか!と思いました。普通のオペアンプでハイサイドの電流測定する場合、オペアンプのヘッドルームを確保するためにシャント抵抗の電位プラス1.5Vくらいの電源が必要です。ところがこのLMC6482はフルスイング入出力のレール to レールアンプなのでそんなマージンは不要。ということで、電源電圧とシャント抵抗の電位は同じでいいようです。

 ブレッドボードで動作確認してみたらいけそうな感じ。ということでLMC6482を起用して再設計。

▼電流をハイサイド測定に変更(クリックで拡大)
ハイサイド測定にした回路図
 これでハイサイドの電流測定が可能になり、問題解決できました。

▼基板の外観
ハイサイド電流測定に改良した基板
 もう1ピッチ右に寄せて作ればよかったです。

 この回路は微小入力電圧に対する立ち上がり特性がすごく良いので、シャント抵抗を0.1Ωから0.05Ωに下げています。そのあたりの話は回路の解説編の記事でまた紹介したいと思います。

 私が知らなかっただけなんでしょうが、世の中には優秀なオペアンプがいっぱいあるんですね。

【2014/01/31追記】
かずべいさん同じ物を作られたので製作例として紹介します。覚えたてのEAGLEで基板設計したそうです。
関連記事

tag : オペアンプ 電流測定 検出回路

コメントの投稿

管理者にだけ表示を許可する

ハイサイド電流測定

リニアテクノロジで専用アンプがあります。
LT6100というのと(ピン接続で電流→出力電圧増幅率を選択)、LTC6101(抵抗で増幅率を設定)あたりが使いやすいかと。
OP-AMPで組むより入力保護がしっかりしてます。
URLは実験用電源で使った使用例です。

re:ハイサイド電流測定

居酒屋ガレージ店主さん、どーもです。
製作事例まで教えていただいて、ありがとうございます。

教えていただいたLSIのブロック図を見たら、この記事の回路と同じ方式だったので少し安心しました。
でも、私のこの記事の回路だとオペアンプの入力がそのまんま外に出ちゃっているのでサージとかきたらやばいんですね。
うーんなるほど、奥が深いです

失礼いたします。

始めまして。通りすがりのもので「かずべい」と申します。
あなた様のお作りになった物が、まさに私の求めていた物だったため、色々と読ませていただいて、製作いたしました。
ちょっとうまくいかない部分もありましたが、無事成功することが出来ました。
ちなみに私は電子工作はほとんど初心者のため、たいへん苦労しましたが、詳しく説明していただいてありましたので、何とかなりました。
この場をお借りして、お礼を申し上げます。
私もブログをやっておりますので、このすばらしい機器を紹介すべく、URLをリンクさせていただきましたが、もしだめな場合はおっしゃってくださったらすぐに削除いたします。
重ねてお礼を申し上げます。
ありがとうございました。

re:失礼いたします。

かずべいさん、コメントありがとうございます。

そちらのブログ拝見しました。うまく作られましたね、電子工作は慣れてないとのことですが、上出来ではないでしょうか。
こうしてコピーされる方がいるのが一番嬉しいです。もちろんリンクしてもらってかまわない、というか宣伝になるので大歓迎です。ありがとうございます。

小数点はマジックインクで手で書き込んでますよw 解説に書いておけばよかったです

ありがとうございます。

ラジオペンチさん。こんにちは。
早速のレス誠に恐れ入ります。また、URLの件を承諾いただいてありがとうございました。
初めて動作させたときはドキドキものでした。
そこであつかましいお願いと言うか希望なんですが、充電していると終盤になるとLEDの点滅が遅くなり状態がわかるのですが、充電完了後もカウンターが止まらないため、充電完了が分かりません。
ラジオペンチさんは改造ストップオッチを使っているようですが、スケッチの改造で、ブザーなんかが鳴るようにすることは出来ませんか?
自分でスケッチを眺めていたんですが、どの変数に電流地の値が入っているのかが分からないため、自分では出来そうにありません。
通りすがりで無理なお願いをして申し訳ございませんが、もしお暇があるようであれば、改造ポイントをアップして頂けたらとてもうれしいです。
最後に重ねて御礼を申し上げます。
ありがとうございました。

re:ありがとうございます。

かずべいさん、今晩は。

早速ですが、
>充電完了後もカウンターが止まらないため、充電完了が分かりません。
ブログにも同じことが書いてありましたが、ここの意味がさっぱり判りません。

充電完了というのはモバイルバッテリー側の表示のことでしょうか?それなら、そういう表示はしているけど実際には充電が続いているということだと思いますが、違うかな・・?
充電はこの記事↓に書いてあるようにだらだらと続きます。
http://www.baysun.net/ionbattery_story/lithium09.html

出力側のUSBコネクタ抜くと電流がゼロになるのでカウントアップが止まるはずです。まずそちらの確認をお願いします。

ある程度電流が少なくなったらカウントを打ち切るとか、対処方法はいろいろありますのでご安心を。

ちなみに電流は、analogRead(analogPin)の関数の値として受け取っています。

re:re:ありがとうございます。

ラジオペンチさん。こんばんは。
わざわざレスポンスしてくださってありがとうございます。
早速ですが、ラジオペンチさんのおっしゃる通りです。
私の言っている充電完了とは、充電される機器(この場合はスマホやタブレットです)のメッセージが、「充電完了」の表示になっていてもカウンターの表示が止まらないと言う事です。
しかし私もあれから考えてみたらラジオペンチさんのおっしゃるとおりで、完了してもだらだらと電流は流れているので、カウンターは止まらなくて当然です。
出力側のUSBケーブルを外せば、もちろんカウンターは止まりますので、正常だと思います。
当然の事をお聞きしてすみませんでした。忘れてください。
しかしながら充電完了後に流れる電流は、おそらく微小な電流だと思いますので、その付近の電流になったらブザーで知らせてくれるようにしたいなと考えております。
教えていただいた「analogRead(analogPin)」の数値を条件判断して、あいているピンにブザーを取り付けて、鳴らそうかと考えていますが、私にはそのスキルがありませんので、もしラジオペンチさんにお暇とご興味がございましたら、改造点やスケッチを公開頂ければうれしいと思い書き込みをしてみました。
通りすがりの者に、親切に対応して頂いて本当にありがとうございました。
また、あつかましい事を書き込んですみませんでした。
重ねてお詫びと、お礼を申し上げます。
私のブログの方もその辺りの事を変更しておきます。
それにしても電子工作って本当に面白いですね、50の手習いで始めましたが、はまってしまいそうです。
それでは失礼致します。

re3:ありがとうございます。

かずべいさん了解です。

このスケッチは割り込み使って、電流の測定も積分型でやっているのであまりややこしいことをやらせるのには向いていないです。
それに充電完了を検出することの意味が私にはあまり見出せないんですよね。

といったらみもふたもありませんので、ヒントくらい。

setup()の中でピンを設定(7ピンに信号を出すとします)
pinMode(7, OUTPUT); // Pin7を出力に設定

以下のようにして値が一定値(50)以下だったらPin7をHIGHにする

void measure() {
digitalWrite(10, true); // 動作モニタON
int x = analogRead(analogPin); // 電流を測定
if (x < 50){ // 一定値以下なら
digitalWrite(7, HIGH); // Pin7をHIGHにする
}
sum = sum + x; // 測定値を積算
if(sum >= scaleFactor){ // 積分値がスケールファクター以上だったら
output = !output; // 出力反転
digitalWrite(outPin, output); // パルス出力
sum = sum % scaleFactor; // 積分値に残りを記録
}
digitalWrite(10,false); //動作モニタOFF
}

ピン7に電圧が掛かれば音の出るものをつなげばいいと思います。

本当はマイコンでやるなら1Khzくらいの信号を出してセラミックのサウンダとかを鳴らすのですが、そういうことやるならArduino UNOの状態でないと厳しいと思います

本当にありがとうございます。

ラジオペンチさん。大変お世話になっております。
まさかこんなに早く、しかも丁寧にレスしてもらえるとは思っておりませんでした。
正に感激しております。ありがとうございます。
さらに変な事に拘ってすみません。
まさかサンプルスケッチまで書いて頂けるとは、思っても見ませんでした。
ところでこの中にある変数「x」の数値50ですが、これは単純に50mAhであると思ってよろしいのでしょうか。
また、「pinMode(7, OUTPUT);」と設定を7にされていますので、ICの端子はdigitalpin7の13番にLEDか圧電ブザーの類を、接続すればよろしいわけですね。
私的にはif文の動作として、圧電ブザーを付けて「tone(7, 1000, 500);」なんかを考えているのですが、問題があるでしょうか。
朝の大切な時間に丁寧なレスを本当にありがとうございました。

re:本当にありがとうございます。

かずべいさん今晩は。判る範囲で順にお答えしますね。

変数xの数値の50は約120mAになります。朝時間が無かったので適当に値を入れてますのでお好みに調整してください。ちなみに数値が1023の時、約2.5Aだったと思います。

ピン番号はその通りです。5Vで動く電子ブザーが良さそうです。

tone関数は音を出す時の定石ですが、このプログラムは割り込みルーチンの中で全部動かしているので、たぶんうまく動かないと思います。そういうこともあって単純にポートに信号出すプログラムを提案しています。まあ経験なのでやってみるといいかもです。
ちなみにloop()の中ならtone関数は使えますが、プログラムの構造を大きく変えないといけないので、すみませんちょっとそこまでサポートできないです。

あと、元の案だとブザーが鳴りっぱなしになるので、以下のようにしたほうが良さそうです。
if (x < 50){ // 一定値以下なら
digitalWrite(7, HIGH); // Pin7をHIGHにする
}
else{
digitalWrite(7, LOW); // Pin7をLOWにする
}

大変勉強になりました。

ラジオペンチさん。こんばんは。
xの値の出し方は分かりました。
しかしやっぱりtone関数はだめでしたか。
そんな気がしてました。
やっぱり奥が深いですね。
詳しく教えて頂いて、本当にありがとうございました。
後は自分で色々実験してやって見ます。
この度は大変お世話になり、ありがとうございました。
またちょくちょく立ち寄らせて頂きます。

No title

ラジオペンチさん。こんばんは。
あれからもすっかり電子工作にはまってしまって、色々と勉強していますが、なかなか自分で回路を1から組むのはまだまだ10年早い!と言う感じです。
できる事からと言うことで、前回作成したユニバーサル基板のUSB電流積算計を、EAGLEというソフトを使ってプリント基板化する事に成功しました。
オリジナルでプリント基板を起こすのは、今回初めてでしたがまあまあ思った通りに出来たので、ご報告いたします。
また立ち寄らせていただきます。

かずべいさん、おはようございます

記事拝見しました。

EAGLEで基板作りですか、なかなか良く出来ていますね。それに仕事速い。

せっかくなのでこの記事の末尾に追加で紹介させていただきました。

No title

この回路ですが、R3の電流→電圧を発生する抵抗から、R4(10K)を通してA/Dに繋げていますが、オペアンプが一つ余っているのなら、ボルテージフォロワーとして使い、R3とR4の間に入れれば尚良いのではと思いました。

通りすがりの感想~

re:通りすがりの感想~

hiraさん、コメントありがとうございます。

確かにオペアンプが一つ余っていてもったいないです。
でもバッファアンプとして入れると、片電源なのでゼロボルト付近の不感帯の問題が出てきます。顕在化するかどうかは判らないですが、余計な誤差因子が入らないようにするため、あえて使わなかったと思います。
それにマイコンのポートの入力インピーダンスは充分高い(たぶん1MΩ以上)のでバッファは不要です。

まあ人によっていろんな見方があるので私の判断が合っているかどうかは判らないですが、、

Re:Re:

このオペアンプ(ナショナルセミコンダクターLMC6482)は、入出力フルスイングで、GND電位付近の動作が不安定になるような事はありません。
※ついでに言うと、ローパスフィルターを入れていますが、これを、オペアンプの積分回路にすれば、もっと厳密で正確な電流を計測できると思います。

まぁ、そう言う意見もある程度に考えてくださいな。

Re:Re:Re:

hiraさん、了解です。

LM358のデータシートには、

>差動入力電圧幅は、電源電圧の値までとれる。
と書いてあってハイサイド電流測定回路も載っています。

LM358のデータシートには、(貧乏人的趣旨説明)

振幅半分で精度が1bit減っても安い部品を使うのもありかなー、ということです。

re:LM358のデータシートには、

データシートの解釈なので厳密に行う必要があります。

>差動入力電圧幅は、電源電圧の値までとれる。
と書いてありますが、これはここまでかけても壊れないという意味で、正常動作する範囲ではないです。
ちなみに入力電圧は電源電圧を上回っても大丈夫だったはずです。

>ハイサイド電流測定回路も載っています。
はい、載ってますが、VL =< V+ -2V という条件付きです。
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード