1年ほど前に、中華性のXL6019という両電源モジュールを使ってトラッキング電源を作りました。
このとき、正電圧側はINA219で電圧と電流を計測し、ArduinoでLCDへ表示させました。一方、負電圧側(ネガティブレール)で電圧と電流を測れるようなモジュールを見つけることができず、電圧については抵抗分圧を使って負電圧を正電圧にレベルシフトして、AdruinoのADCで読み込む方法としました。また、電流はホール素子式のACS712をだましだまし使うことにしました。
だましだましと言ったのは、ACS712は周辺の磁場の影響を敏感に受けるので、調整しても後日に測ると値がずれるといったことを繰り返していたからです。とは言っても、適したセンサーを見つけることができなかったので、仕方なくこれを使い、値は見ないことにしていました。
最近、誤った値を何とかしようと思い立ち検出方法をネットで探しているときに、Analog Devices のLT1797のデータシートに負電圧レールでの測定方法を見つけました。そこで、これを参考にシャント抵抗で測定モジュールを自作することにしました。
また、出力のON/OFFの切れが良くないことの対策と過電流保護機能の追加を行いました。
ネガティブレールでの電流測定方法
LTspiceシミュレーション
計測用オペアンプ
オペアンプを比較すると下表になる。手持ちにAD8628があったので、これを使うことにした。ネガティブレールでのハイサイド電流測定
KicadではAD8628が出てこなかったので、同じようなシングルアンプのシンボルを利用して回路図にした。
電圧は負荷に加わる電圧Vsを使い、これもオペアンプで反転させます。
ここで、$$i\_Real(mA) = -0.247 \times x + ( -0.216)$$について説明します。
シャント抵抗Rs検出した電流I1による出力Voutは以下の式で与えられ、ゲインは 20 です。 $$\begin{align*} V_{OUT} & = I1 \times \dfrac{Rs}{R1} \times R5 \\ & = I1 \times \dfrac{2}{100} \times 1k \\ & = I1 \times 20 \end{align*}$$
この関係式を変形して、電流I1に関する式にします。$V_{OUT}(mV)$は負の値なので、Arduinoでアナログ変換すると次式になります $$\begin{align*} I1 & = V_{OUT}\times \dfrac{1000}{20} \\ &= \dfrac{-ADC \times 5}{1024} \times \frac{1000}{20}\\ &= ADC \times (-0.244) \end{align*}$$
実測した電流とArduinoのアナログ値ADCの関係は、測定回路に1%の誤差があったことになります。"誤差"は言い方として、適切ではないかもしれません。シミュレーションのようにピタリの抵抗を使っていませんので、、"製作上のバラツキ"が正しい言い方です。
出力スイッチ対策
今までの方法と対策
不満点は、
- スイッチを押してから切り換わりまでの遅れがおおきい。
- 結構な頻度で切り換えミスが起きる。
- 接点周波数の変更。(R10:470kΩ → 100kΩ によって、3.3Hz → 16Hz に変更)
- LPFのあとに、シュミットトリガー74HC14Nを2重(反転 x 2)にかませる。
- スイッチの2番ピンを割り込みにする。
対策の実験特性
過電流保護
そこで、次のようにしました。
- 電流制限を設け、その値を超えたら出力を遮断する。(INA219と新設した負側測定モジュール)
- 電流制限はプラス側とマイナス側に個別に設ける。
- 電流制限は可変にする。可変抵抗出力をArduinoで制限値に変換。
下図の左のノブが電流制限値の選択用で、6段階の設定が可能です。設定値は中央のLCDに表示され、この値を超えたらOUTPUTが遮断されるしくみです。
新スケッチ
補足:
マイナス電源の用途と利用範囲
測定回路での失敗
これを行っていたら、極性反転用のLM358Nが焼損しました。幸い、計測用のオペアンプAD8628は正常でした。原因について、回路をつぶさに検証した訳ではありませんが、LM358Nの電源に原因がありそうだと予測を立て、近い構成でシミュレーションしたのが下記です。