USB充電 電力計
2012年10月 (製作は9月) 9月に発売されたビット・トレード・ワン社のUSB接続充電容量チェッカーが人気のようで、秋葉原では売り切れ店もありました。気になったので同様のものを自作してみました。 |
充電容量チェッカーの動作 | ||
元ネタはこちらの商品です。
現在何mAの電流が流れているか、また、これまでに何mAの電流がどれだけの長さ(時間)流れたかを表示します。 充電池の容量は「電流(mA)×時間(h)」で表されます。例えば500mAhなら、500mAの電流が1時間流れることになります(充電/放電どちらとしても)。または、250mAで2時間か、100mAで5時間か、あるいは1000mA(1A)で30分などです。 大電流なら短時間で充電でき、小電流の放電なら長時間持つという充電池の性質は、つまり充電容量(mAh)のことを説明しているのです。 この機器の中心となる機能は電流計です。マイコンで電流計を作り、経過時間をカウントし、掛け算した値を刻々と累積し、表示します。 |
設計と回路図 |
回路図 電流計の作り方は「LM317使用 可変電圧レギュレータ(簡易電圧計・簡易電流計付き)」で詳しく説明しています。 今回は電源が可変ではなく5V固定で、大電流は流れないものとして設計します。 電流の最大値 PCのUSB給電は500mAまでです。最近はスマホなどの充電目的で1000mA(1A)出力できるマザーボードもあります。USB-ACアダプタでは定格1Aや2Aが一般的です。よって、本機では1000mAまで測定できるものとします。 シャント抵抗 電源は5V固定。シャント抵抗の電圧降下分を引いた電圧がUSBデバイスにかかります。USBデバイス側としては5Vがかかることを想定しているので、シャント抵抗の電圧降下は極力小さい方がよいことになります。 入手性も考慮して0.1Ωの酸化金属皮膜抵抗とします。 この抵抗に最大1000mA(1A)流れるとき、消費電力は P = 0.1Ω * 1A^2 = 0.1W 。よって1W品で十分です。 A/Dコンバータの基準電圧とOPアンプの増幅率 シャント抵抗の電圧降下は最大で Vs = 0.1Ω * 1A = 0.1V 。 マイコン(AVR)のA/Dコンバータは10bit(1024段階)。内部基準電圧1.1Vを利用すると1段階は約1mVを表すので、シャント抵抗にかかる電圧を1024段階中100段階目程度までで測定することになります(0.1V / 1mV = 100段階)。 ということは、電流を 1A / 100段階 = 10mA単位 で測定することになります。これでは粗いです。 そこで測定電圧をOPアンプで増幅し、基準電圧のレンジに合わせることにします。どうせ増幅するなら基準電圧は単純に電源電圧(5V)にします。※誤差が出る内部基準電圧より、電源装置の精度と安定性をあてにしようという考えもあったりなかったり。 OPアンプの増幅率は 5V / 0.1V = 50倍 必要です。 OPアンプの非反転増幅回路を構成する抵抗は一般的に、接地側は数kΩ、帰還側は数百kΩまでで決めます。 1kΩと47kΩでちょうどよい増幅率になります。A = 1 + 47kΩ / 1kΩ = 48倍 。 OPアンプは単一電源で動作し、レール・トゥ・レールのものを選びます。定番のLM358でよいと思います。 誤差を少なくするため、抵抗は金属被膜抵抗を推奨します。 [2013/09 追記] 勘違いしていました。LM358はレール・トゥ・レールではなくVCC-1.5Vまでの出力です。ここでは 5-1.5=3.5V。OPアンプの入力は 3.5V/48倍=73mVまで可。従って測定可能な電流は 73mV/0.1Ω=730mA。これを超えない範囲で使用する限り、測定値に影響はありません。 根本的な解決策として、LM358の代わりにLMC662、NJU7062、NJU7072といったOPアンプを使うことで元の設計通り1000mAまで測定できます。いずれも5V単電源で動作するレール・トゥ・レール(出力フルスイング)のOPアンプです。ピン互換なので回路図に変更はありません。 A/Dコンバータは1段階あたり 5V / 1024 = 約5mV を表すことになります。この値はOPアンプで48倍に増幅した値なので、測定対象の電圧としては 5mV / 48 = 約0.1mV を測定できることになります。 逆に0.1mVと測定できたとき、シャント抵抗を流れる電流は 0.1mV / 0.1Ω = 1mA のはずです。 本機は1mA以上の電流を1mA単位で測定できることになります。正確さはともかく細かさは十分です。 表示デバイス マイコンを活かし、[mA]や[mAh]だけでなく単位換算した[Wh]や経過時間も表示しようと思います。多くの情報が一度に見られるようLCDモジュールを使います。LCDモジュールのバックライトは案外電流を食うので(例:100mA)、必要なときだけ点灯するよう工夫します。 LCDモジュールのピンアサインは機種によって様々です。マイコンとの配線は基板上のレイアウトの都合に合わせ、ソフト側で決めた方がよいかもしれません。※回路図のバス配線になっている部分のことです。図の接続対応は一例です。 答え合わせのつもりで 商品の「USB接続 充電容量チェッカー」はオープンソースプロジェクトであり、回路図が公開されています。見比べてみると、ほとんど同じものになりました。見ながらパクったわけではありません(と弁解しておきます)。 |
実験の様子 | |
ブレッドボード上で実験中の様子。7セグ時計を接続しています。表示内容の説明は後述。 |
配線図 |
LCDモジュールにSC162A(DigiTron)を使用する例 LCDモジュールにSD1602(SUNLIKE)を使用する例 共通説明 16ピンのピンソケットでLCDモジュールを接続します。マイコン側のピンアサインはファームウェア次第なので、配線は途中までしか書いてありません。 タクトスイッチはLCDモジュールのバックライト点灯用です。半固定抵抗は同じくコントラスト調整用です。どちらも基板の空いているところに取り付け(使いやすい位置に)、被服線などでLCDモジュールと配線します。 今回、マイコン(AVR)はATtiny20を使いました。SOP-14ピンのICです。ピッチ変換基板によりDIP-600milのICとして扱っています。ISPに対応しています。TPIプログラミングに使うピンを空けてあります。 USBオス/メス端子のD+線/D-線はそれぞれ直結します。※図のオレンジ色の線。1本にまとめて書いてあるが、実際は2本の線。 |
ファームウェアについて | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
今回使用したAVRはATtiny20です。A/Dコンバータが1chと、LCDモジュールを接続できるだけのI/Oピン数があれば、他のAVRでも使えます。ソースを適宜修正し、ビルドしてください。
float型を使わずに対処する AVR Studio 5.1でインストールされるtoolchain(AVR-GCC)はATtiny10シリーズへの対応が不完全で、グローバル変数が使えなかったり、_delay_ms()関数の動作に問題があったりしました。 今回の開発時、toolchainの最新版を別途インストールしたところ上記2点の問題は解決されましたが、float型の演算にまだ問題があるようでした。float型同士の演算でビルドエラーが発生しました。 ここは整数型でなんとかするしかありません。次のようなハイブリッド変数(?)を考えてみました。
基本となる処理は、秒単位の電流量(何mAが何秒流れたか)[mA * sec]を累積していくことです。 その値を、秒単位から時単位に換算したり、ミリアンペア単位からアンペア単位に換算して、表示用の値を得ます。 64bit整数型でもあれば話は済みますが、AVRのプログラムにそのような型はありません。 そのため次のように処理します。 基本通り、秒単位の電流量[mAsec]を累積していきます。 この値を3600で割ると時間単位の電流量[mAh]になります。 3600[mAsec] = 1[mAh] 値が十の位、百の位、千の位と増加していき、もし3600で「次の位」へ繰り上がれば、[mAsec]を[mAh]に換算する際の「3600で割る」という手間が省けます(小数計算をしなくて済む)。 ということで「3600で次の位へ繰り上がる値」というものを考え、これを「aパート」とします。 繰り上がった分を「bパート」とします。bパートはそのまま[mAh]の量を表すことになります。 ※ちなみに算数の話として、aパートを3600で割った小数が、10進数で[mAh]の値を表現した場合の小数部になります。 時間単位の電流量を1000で割ると[mAh]単位から[Ah]単位になります。 1000[mAh] = 1[Ah] bパートが16bit整数のとき、65535[mAh]までカウントできます。整数演算で65[Ah]になります。 より大きな量をカウントするため、「aパート&bパート」の考え方を再度当てはめます。 bパートが1000で次の位へ繰り上がれば、[mAh]を[Ah]に換算する際の1000で割る手間が省けます。 ということでbパートは「1000で次の位へ繰り上がる値」というものになります。 繰り上がった分を「cパート」とします。cパートはそのまま[Ah]の量を表すことになります。 以上のように処理すると大きな値を扱えるようになり、かつ、単位換算で小数計算がなくなります。 このハイブリッド変数同士の演算を考慮する必要はありません。 |
部品について |
ATtiny20はデジットで販売しています。通販は共立エレショップから。ただしサイトには出ていないので見積もりのメールを出して問い合わせてください(2012/09 現在)。 ATtiny20はSOPパッケージです。ユニバーサル基板に直接ハンダ付けすることはできないので、SOP-DIPピッチ変換基板を使うとよいでしょう。ダイセン電子工業 D014がお勧めです。 LCDモジュールの機種はお好みで。電子パーツショップで手に入る16桁×2行のキャラクタ液晶モジュールなら基本的にどれでも使えます。バックライトの電流制限抵抗やコントラスト調整用の半固定抵抗は、LCDモジュールの仕様に合わせて決めます。大抵は一覧表に書いた値で大丈夫です。 LCDモジュールの取り付けやATtiny20のISP用にピンヘッダ/ピンソケットがあると便利です。 USBコネクタの形状はお好みで。ケーブルを基板に直付けするなら不要です。 |
部品名 | 部品番号 | 値 | 個数 | 参考価格/備考 |
OPアンプ | U1 | LM358N | 1 | 5個100円(秋月電子) |
AVR(マイコン) | U2 | ATtiny20 | 1 | 130円(デジット) |
積層セラミックコンデンサ | C1,C2 | 0.1uF [104] | 2 | 10個100円 |
酸化金属皮膜抵抗 | R1 | 0.1Ω/1W [茶黒銀金] | 1 | 1個10円(千石電商 店頭価格) |
金属皮膜抵抗 | R2 | 1kΩ [茶黒黒茶茶] | 1 | 1個10円 |
金属皮膜抵抗 | R3 | 47kΩ [黄紫黒赤茶] | 1 | 1個10円 |
LCDモジュール | LCD | SD1602,SC162Aなど | 1 | お好みで |
抵抗 | R4 | 5.1〜47Ω | 1 | LCDバックライト電流制限 |
半固定抵抗 | VR | 10kΩ | 1 | LCDコントラスト調整 |
タクトスイッチ | SW | -- | 1 | LCDバックライト点灯 |
USBコネクタ | CN1,CN2 | オス/メス | 各1 | お好みで |
◆ ◆ ◆ | ||
マイコンを使った電流計の作り方を知っていれば簡単に作れます。 気軽にチャレンジしてみてはどうでしょう。使ってみると面白いです。 オリジナル商品は7セグを使っているところが格好いいと思います。
|
(C) 『昼夜逆転』工作室 | [トップページへ戻る] |