本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

減電圧表示回路について

電源電圧が一定レベルを切ったときに通知するような仕組みを作りたくて色々と調べて実験していました。
こういった回路は、減電圧表示回路というキーワードで調べると良いとのことで調べてみたのですが、自分の欲しい内容となると調整が難しい感じでした。
ACアダプタによる給電なら、このような仕組みを作らずともよいのですが、乾電池やバッテリーでの動作となると必要になってくる気がします。

見つけた回路

こちらで詳解されていた回路は、知識不足の自分でも多少の調整がききそうで、しかも正確、使いやすい回路となっていました。
知恵袋で聞いている人の内容がまさに自分の場合と同じで助かりました。聞いているのは 2.0V 付近となっているようですが、
自分の場合には 2V 半ばで検知して欲しかったので抵抗を調整することにしました。そうして出来上がった回路が以下のものです。

設計者の話によれば、この回路をつけっぱなしにしていても大丈夫なくらいに低消費電力 (3.5μA) となっているようです。
シャントレギュレータからの電圧をリファレンスとして、計りたい対象を抵抗分圧して、2者を比較する、というやり方をこれで学びました。

課題があるとすれば、 NJM2825, LMC7225 らが表面実装のパーツで素人には使いづらい点と、パーツのお値段でしょうか。
各パーツが 150円くらいしてしまうのと、ピッチ変換基板をプラスするとさらにコスト増になってしまいます。

代替案

もう少し安く出来ないかと検討した結果、マイコン A/D 変換機能を使うという案にたどり着きました。
そもそも、電池が無くなってきた意味での警告が出来ればよいので、精度はそれなりで十分です。

ここで以前にも紹介した ATTiny13 あたりが使えそうです。
A/D 変換器も入っていますし、内部基準電圧を使用できそうなのもポイントです。なによりこれで実現できれば50円という価格も魅力です。

ATTiny13でシリアル

ATTiny13 で何かしら結果を出力しないと動作を確認出来なかったので、シリアル通信をまず最初に使えるようにしました。
以下のページで解説されているように、1ピンでシリアル通信を可能にしてくれるライブラリがあったのでこれを利用します。

手持ちの部品にもある 2SC1815 を使っても良かったのですが、折角なので最近手に入りやすい(?) 2N2222 のトランジスタを使って回路を作ってみました。
こちらでも問題なく動くことが確認できました。ただ足の順序が 1815 とは異なるのでこの点には注意して回路を作る必要があります。
ブレッドボードで配置したときの図は以下のようになります。これは IC のピン5をシリアル通信のためのピンとして使用しているときのものになります。

参考サイトのほうと同じ 9.6MHz で動作させていまずが、デフォルトの BAUD_RATE 115200 で問題なく通信が行えているように見えたのでそのまま使っています。
いつか通信エラーが発生してしまうのかもしれませんが、動作確認のために使う程度と割り切ってこのままです。
そして、通信に使うピンを変更するため、 BasicSerial.S ファイルの以下の行を変更しています。

// PB0 を使用する
#define UART_Tx 0
#define UART_Rx 0

内部基準電圧を使用する

ATTiny13 でも内部基準電圧 1.1 V が使用できるとあったので、これを利用します。
計測対象の電源電圧をこれ以下になるように抵抗分圧して計測し、電源電圧の監視をするように考えてみました。

しかし問題だったのは内部基準電圧を使用するのに “analogReference(INTERNAL);” を記述しても、これでは切り替わらず電源電圧をリファレンスとして使用する状態のままでした。
そのため、以下のようにしてリファレンス対象を変更することにしました。

ADMUX |= (1<<refs0);  // ATtiny13A では 1 で内部1.1V基準電圧

あとは、 analogRead() 関数を用いて対象の電圧値を読み取るのですが、ここにも課題が潜んでいました。 3.3V, 5.0V どちらの場合でも回路そのものは使い回せるように、電圧を分圧しておよそ電源の 1/8 の値となるようにしました。手持ちにあった抵抗のバランスでこうしただけでそれ以上の意味はありません。 これをアナログピン PB3 で読み取って、 内部基準電圧の 1024 段階のどの程度なのかが分かることになります。 しかしながら、内部基準電圧は正確ではありませんでした。0.9から 1.2 程度の間でどこかになっているような感じでした。また、 3.3V 駆動したときと 5.0V 駆動したときでも少々動作に差が見られるような感じでした。 具体的には 5V で 0.64V となっているときに、計測された値が 720 程度でした。素直に計算すると 720 / 1023 * 1.1 で 0.77 V の扱いに。 基準電圧が 0.9 くらいになっている想定で計算すると 0.63V と近い値になりました。一方で 3.3V で 0.42V となっているときには、計測された値は 420 程度でした。これも 1.1 の基準で計算すると 420 / 1023 * 1.1 で 0.45V でした。0.9V 基準では、 0.369V となります。 このことから、電源電圧の状態によって基準電圧が動いているように思います。実測して確認しているので、たまたまこの固体だけがこういう感じなのかもしれません。 しかしこの計測の仕組みを用いて電圧を監視する場合には、使用した回路でどのような値が得られるかを確認しつつ、ソフトウェアを組む必要があります。 今回に限って言えば、基準電圧を 5V のときには 0.9V, 3.3V のときには 1.0V として計算すると割とマシな計測結果となるように思います。

ウォッチドッグタイマーとの共存

パワーダウンモードのスリープと組み合わせるときには、 A/D 変換もオフにしたほうが消費電力を減らせます。
そのため、スリープイン、アウトのタイミングで機能の有効無効を設定する必要があります。
これには ADCSRA レジスタを操作することになりました。
// A/D ON
ADCSRA |= (1 << ADEN) | (1 << ADSC) | ANALOG_PIN;

// A/D OFF
ADCSRA &= ~(1 << ADEN); 

さいごに

ひとまずは ATTiny13 を用いての回路で様子見してみたいと思います。主要部品の価格としても100円行かないくらいで収まります。基準電圧のずれの問題が無ければ、非常に使いやすい気がしていたので、うまく付き合っていく方法を見つけたいと思います。

電子工作
すらりんをフォローする
すらりん日記
タイトルとURLをコピーしました