r3/04/06:更新
ADC利用の自動レンジ切り替え電圧計の試作
- 前回、PICのADコンバータを利用して、交流電圧計2を作りました。整流部分は、1回目のデジタル交流電圧計と同じく2回路のオペアンプを利用し、直流電圧の計測部分は、基準電圧を3.3vにし12F683の10ビットADCで、最小の分解能は3.2mVです。
- いろいろネット上を調べる過程で、I2C制御で16ビットのADC用ICを見つけました。基準電圧も正確だし、変換精度も高そうなので、使ってみたい願望が湧いてきました。
- 安価に手に入るので、使い方は詳しくはわからないまま、他の注文のついでに秋月で1個購入しました。
- 同様に、I2C接続のバックライト付きの AQM1602Y_NLW_FBWを、秋月で購入しました。黒地に白文字という表示が鮮明なLCDで、16文字×2行、表示部分は15mm×40mmの小型のものです。これは、ピンの間隔が2.54mmなので普通にブレッドボードにはまるはずでした。
- MCP3425で電圧値を正確に計測し、PICで処理して、小型できれいなLCDに表示する。MCP3425は8倍までの増幅もできるので、うまく行けばより分解能が高い"交流電圧計3"に・・と思っていました。
- ネット上に型番は異なるけれど、同じようなADコンバータを使った電圧計の例もあるし、これらを参考に、この際新しい物に挑戦して見ようと簡単に考えて始めましたが、確かにいろいろ勉強になりました。
- ブレッドボード上で試作して見ました。
<LCDについて>
- AQM1602Y_NLW_FBWは、小型ですが、バックライト付き黒地・白文字の小粋なLCDです。
- 透明プラスチックのケースのような枠に囲まれています。2.54mm間隔のピンが9本あり、ブレッドボードに差し込めそうですが、ピンが短いのと、ピンの両外に板状の金属(これがバックライトのコネクタ)が出ていて、そのままでは差せません。
- 画像のように、丸ピンソケットを9連に切ってピンにはめ込むのと、バックライトのコネクタには細い単線(抵抗の足を切ったもの)をハンダ付けしました。これで、ブレッドボードに上手く載せることができました。
- 9本のピン接続は、上左図のように1μFのコンデンサが2個必要です。また、バックライト用のピンは、1番ピン側が+です。この辺りはデータシートのPIN ASSIGNMENTを見ても、よくわかりませんでした。
- こLCDについては、ネット上を型番で検索して種々の知識を得ました。denshi.club や『てきとうなサイと』さんの記事等、助かりました。
- このLCDは、今までに使用したもの(AQM0802A,AQM1602XA等)と同じコントローラーST7032が使われているため、I2Cを通してのコマンドは同じです。アドレスも同じなので、制御関数はそのまま利用できます。ただ、物理的な明るさは消費電流(3.3vで直列に75Ωを入れて、全消費電流7mA)と視認性のバランスできめました。
- 表示部分が狭いため文字は小さめですが、バックライトのお陰で鮮明です。
- この程度の消費電流なら、単3電池でも100時間は持ちそうです。バックライト付きLCDはもっと早く利用を試すべきでした。
<AD変換ICついて>
- 前回、交流電圧計の製作時に度々閲覧していたseppina.cocologさんのページに、MCP3425についての記事がありました。詳しい内容には難しくてついてゆけてはいないのですが、12F683内臓の10ビットADCに比較して、遥かに精度が高くて魅力的でした。
- また、picfunのページ(電子工作の実験室)にも、MCP3421という18ビットのADCを使った液晶電圧電流計の製作記事がありますから、これもお手本にできそうです。
- 秋月で購入したものは、MCP3425を載せたボードで、2.54mmピッチですから、ブレッドボードに直接差せますし、通常のユニバーサル基板にも乗せられます。
- 私は、取付基板に付属の薄板ピンはやめて、少し足長でしっかりした細ピンヘッダーをハンダ付けしました。
- 内蔵の基準電圧が2.048Vで16ビット分解能なら、2048/65536で最小値は31.25μVだと思ったのですが、負電圧にも対応していて、2048/32768で62.5μVだとわかりました。(それでは15ビット分解能?)
- 今までのI2cインターフェイスはLCDへの送信ばかりでしたが、今回始めてスレーブからの受信機能を使いました。SCLとSDAの2本の通信線のみで、複数のスレーブとの通信・制御が、ちょっと「達成感」でした。ただ利用するだけなら、USB等で何も考えずにいつも使ってはいるのですが・・・。
ブレッドボード上の試作機なので、ADC(MCP3425)のVin+とVin-はテスト用の電圧をかけている。Vin-(a点)は約+1Vなので、Vin+がそれより高い場合は正の入力値、低い場合は負の入力値として動作する。
(※)LCDの配線の一部(RESET)が欠けていました。お詫びして訂正します。
- あれこれ参照したCのプログラムは、ほとんど関数ライブラリとヘッダーは別ファイルになっています。きっと複数のメンバーでシステムを開発・・・とかされた経験があるのでしょうか。
- 私は、COBOLやBASICが始まりでしたから、この『別ファイル』がなじめません。常用しているTeraPadでも画面分割で上の方と下の方を同時に見ることができますので、トレースするのにあまり不便を感じません。従来どおり、1本のファイルで書きました。
- mainの始めは、タイトルをゆっくり表示します。単なる遊びです。
- ループ内では、Gainによって、MCP3425のコンフィグレーションを設定して、データ取得と判定を繰り返します。
- 判定部では、測定値が0.24V未満なら(8倍しても2V以下におさまるので)Gainを(8倍に)変更してループへもどし、正常範囲(0.24V < ~ < 2.048V)なら表示部を呼び出します。
- 逆に250mV_RANGEで250mVを超えると8倍した値が制限(2.048V)を超えるため、Gainを1倍にして、ループへ戻します。
- 判定値が2400(2.04V_RANGE)と25000(250mV_RANGE)と差があるのは、境界付近でバタバタと、行ったり戻ったりしないようにするためです。
- 表示部では、毎回同じものを表示し直すとチラチラするので、変化した部分のみ再表示するようにしました。
- データが負の場合の処理は、負数の判定(最大ビット==1)も、正整数への換算(ビット反転して+1)も2進数の教科書どおりでした。模擬問題のようなこの辺りの事が実用に役立ったのは初めての経験?・・だと思われます。
- Disp_Over(void)関数以下のI2CやLCDの関数は、あちこちからの切り貼りです。
- この直流電圧計は使えそうです。最初に製作したデジタル交流電圧計に組み込めれば、有用性が高くなる・・・?
<最初のデジタル交流電圧計に・・・>
◎最初に作ったデジタル交流電圧計の、デジタル表示の2式線のデジタルパネルメータを外して、今回のLCD表示電圧計を組み込んで見ました。
◎回路図は、下記のとおりです。無理やり組み込んだ結果、ノイズが出ています(0.5mV)が、表示値の信頼性は増えました。
◎これなら、一から作り直すのもアリ・・・と思えます。
[ホームへ戻る]