« 放置していた2014年製の「eneloop lite」を充放電 3600cyc目 | トップページ | 2つあるワンショットマルチの時定数比を一定にしたい »

2023年10月14日 (土)

Arduino UNO R3で±19.9V表示電圧計

アナログ回路の実験・調整用に-16V~+16Vの
範囲をポテンショで調整して出力できる回路を
作ってあります。
最大±15Vを入力する回路の動作確認、調整用です。
DC-DCコンバータで±18Vの電源を作って、オペアンプ
を駆動。
その入力電圧を可変して±16V(+ちょっとオーバー)を
出力するような仕掛けになっています。
0Vをまたいで電圧を連続してプラマイできるわけです。

設定電圧の確認はデジタルテスターをつないでという
ふうにしていましたが、「表示器があるほうが便利」
だろうということで、Arduino-UNO R3を使った電圧計を
くっつけてみました。

10bit ADCのAtmega328がベースですので表示は±19.9V
2・1/2桁です。

Ss1_20231014100401
ちゃんとした電圧を見たい時はこれまでと同じように
テスターをつないでということで運用します。
Ss2_20231014100401
±16V発生回路。
Ss4
±9V出力のDC-DCコンバータを2つ使って±18V電源
を得ています。

これに電圧値表示回路をドッキング。
Ss3_20231014100601
電源は外からの5V。

さて、プラマイ電圧の入力回路をどうするか。
Arduino UNOのADC、その入力電圧はプラスだけですが、
 ・2022年11月28日:単電源で反転アンプ マイナスの入力電圧は増幅できます
 ・2015年04月22日:A/Dコンバータの入力レンジを拡大する方法
こんな考え方で、単電源の回路でも±電圧を入力すること
ができます。
以下の図はVrefが2.5VのADCの入力レンジを拡大する方法を
示しています。
Img20150422170532335

この中の、(d)±5V入力 (e)±10V入力の考え方は、
 ・Vin / Vrefの比、基準電圧の何倍の電圧を入力するか
  から、R1とR2の比を決定。 (Vinは正負片側の電圧値で)
 ・Vref2.5Vで10倍の±25Vなら、R1とR2は9:1。
 ・Vin=0Vの時のA/D値を半値にするため、R1とR2の
  並列抵抗値をR3に。
 ・10倍ならR1:R2:R3は90:10:9の比率。

これが抵抗3本で、0~2.5V入力のADCに対して±電圧を
入力する一手法となります。

もう一つの方法が差動アンプです。
S11_20231014101201

(+IN - -IN) × GAIN
として出力が得られるので、
GAINを1/8 (減衰)にして、+INにオフセットとして10Vを
加えておくと、±10Vの範囲を0~2.5Vに変換できます。
  ※ただし、増加減の方向が逆に

Vref電圧(2.5V)を基準に描くと、こんな具合になります。
S12_20231014101401

反転入力がVinで±電圧入力。
非反転入力がオフセット電圧の設定。
Vin=0Vの時のA/D値を、Vrefの半値にします。
非反転入力のオフセット電圧が+になるので、
アンプは単電源で動かせます。

R1とR2で入力電圧の倍率を設定。
通常の差動アンプですとR1=R3、R2=R4にしますが、
±電圧入力回路に限ればこのオフセット電圧は別の
抵抗値で固定してかまいません。

それを考えて描き直すとこのようになります。
S13_20231014101501
R3とR4の比で固定的なオフセット電圧を得ます。

ATmega328の内蔵基準電圧を外に取り出して
使いますのでVref = 1.1V
こんな回路になりました。
Sa1
チップを抜いたArduino UNO R3基板とつないで
スケッチをアップロードします。

Sa2
キャリブレーション(校正)操作は通信で。
  -15.0V、0.0V、+15.0V
この3点のA/D値を記憶(内蔵EEPROMに保存)します。
実電圧とその時のA/D値を使いますので、抵抗の誤差や
Vref値の誤差は校正操作で吸収されてしまいます。

0.0Vを校正点に入れて3点にしたたのは、
  ゼロはゼロと出て欲しいから。
最小値と最大値での2点校正では、ひょっとするとゼロにならない
かもという、リニアリティ特性の懸念があるので。

A/D値から電圧値への計算はあのmap関数を使います。
  ※map関数はこう使って欲しいゾの例です。

制御スケッチ
   ・ダウンロード - pm20volt1.txt

※.inoではなくファイルタイプを.txtにしています。
 UTF8nのテキストファイルです。

7seg LEDをダイナミックスキャンして電流値を表示し
ているこれらのサンプルも参考にしてください。
2022年11月29日:Arduino UNO(のチップ)を使ったUSB電流計
2022年12月 2日:Arduino UNOを使ったUSB電流計 箱に入れて完成
2022年12月14日:Arduino UNOを使ったUSB電流計 4桁表示も

キャリブレーションの方法はこれらとスケッチを参照してください。

※入力レンジに切り替えについてはこれも
2014年02月01日:入力レンジ切り替え回路

※例のmap関数
2020年5月16日:Arduino 10bit A/D値をmap関数でスケーリングする例
2020年5月17日:Arduino なんとかして誤用を正したい:A/Dの1/1023とmap関数
2022年11月6日:Arduino map関数をfloatに

※点滅表示
A&D社の「AD-8724D」という電源、「0~30V・2.5A出力」の
シリーズレギュレータです。
これの電圧表示も「xx.xV」と3桁。

今回の回路でのマイナス側の表示、3桁目が
「-」だけかあるいは「-1」になります。
このためマイナス側の最大(最小というべきか)を
-19.9V」と制限(ソフト的に)しています。

プラス側は「19.9」ではなく「99.9」を
リミットにしてますんで、分圧抵抗を変えた場合でも
-19.9~99.9」の範囲なら表示は可能です。

そして、マイナス、プラスともリミットを越えた時は
表示を点滅するようにしています。
そしてもう一つ点滅する条件がA/D値の範囲。
電圧値に変換する前の値として有効範囲を
チェックしています。
10bitですので0~1023が出てくる値になります。
しかし、5以下と1018以上は、リニアリティが疑問とい
うことで、表示を点滅するようにしてあります。

※Aref端子から内部Vrefを引き出す
2013年04月25日:AVRマイコンのAREFピン
2013年05月02日:AVRマイコンのAREFピン #2
2022年10月05日:サーミスタ103JTで計った温度をシリアル出力

|

« 放置していた2014年製の「eneloop lite」を充放電 3600cyc目 | トップページ | 2つあるワンショットマルチの時定数比を一定にしたい »

ツール」カテゴリの記事

Arduino」カテゴリの記事

アナログ回路」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 放置していた2014年製の「eneloop lite」を充放電 3600cyc目 | トップページ | 2つあるワンショットマルチの時定数比を一定にしたい »