ESP32の入出力ボードを作ってみた -アナログ入力の精度アップ-

ESP32を使って以下機能を拡張できる入出力ボードを作ってみました。
 アナログ入力:2ch
 デジタル入力:3ch
 CAN通信:1ch
 Hブリッジ駆動回路:1ch
 PWM駆動回路:4ch

ESP32+拡張入出力ボード実物
拡張入出力ボード本体

入出力ボードが正常に動作するかを機能別に試してみます。今回は以下の色付きの部分のアナログ入力回路部分を確認します。

“アナログ入力回路部分”

アナログ入力回路は下の内容で設計しました。
アナログ入力回路
 ・Microchip社 の MCP6V61T-E/OT Operational Amplifiers – Op Amps Zero Drift Op Amp Single ICを使用
 ・オペアンプでボルテージフォロワー回路を構成してクローズドループゲイン1のバッファとして使用
 ・0点を調整できるようにESP32のDAC出力信号をオフセットとして入力
 ・センサ電源用に専用の3.3V電源(Onsemi社 NCV51460SN33T1G)を使用
 ・RCローパスフィルタのカットオフ周波数は159Hzに設定

下がその回路図です。

下の方法でアナログ入力の精度を調べてみます。


・全抵抗5kΩの可変抵抗器を使って3.3Vの電源を可変抵抗器で分圧してアナログ入力端子(回路図上でのADC2_IN)を加える。
・下の簡単なプログラムでESP32の10bitADC(ADC2)で読み取った値をシリアルモニタに出力する。
・可変抵抗器のボリュームを回してテストピンのアナログ入力(TP7)と出力(TP8)をテスターで測定して、シリアルモニタでESP32のADC(ADC2)で読み取った値を確認する。
・エクセルでグラフにして精度が出ているかを調べる。

結果
 ・アナログ入力回路は精度良く入力(ADC2_IN , TP7)と出力(ADC2 , TP8)は最大1[mV]の誤差。
 ・ESP32のADCは、120[mV]程度0点のオフセットが見られ不感帯がある。2.6V以上の直線性が悪い。

アナログ入力回路は精度良く問題ありませんが、ESP32のADCは精度が悪く0点のオフセットと2.6V以上は直線性が悪く対策が必要です。

ESP32のDAC出力信号をオフセットとして入力して0点を調整してみます。
J10コネクタに2.2kΩの抵抗を挿入してDAC出力信号で0点を調整します。

以下のプログラムでDACの設定値を調整してオフセット(約120mV)をキャンセルしてみます。

結果
 ・DACの設定値は6で約120mVの0点のオフセットをキャンセルできた。
 ・1V以下の直線性が悪くなった。
 ・アナログ回路の出力が最大2V程度に低下した。

0点のオフセットはキャンセルできたが、1V以下の直線性が悪く最大2Vまでの出力とDAC出力の影響を受けている。DAC回路に挿入した2.2kΩの抵抗値が小さすぎた。影響を受けない程度の抵抗値に調整してみます。

J10コネクタに200kΩの抵抗を挿入することでDAC出力信号がアナログ入力回路に電圧低下の影響を与えなくなった。これで、ESP32のDAC出力信号をオフセットとして入力して0点を調整してみます。

以下のプログラムでDACの設定値を調整してオフセット(約120mV)をキャンセルしてみます。

結果
 ・DACの設定値は200で約120mVの0点のオフセットをキャンセルできた。
 ・0から2.6V程度までの直線性は問題なし。
 ・ 2.6V以上の直線性が悪い。

2.6V以上の直線性が悪い原因はESP32のADCにありハードでの対応が難しいため、以下で対応したいと思います。
 ・特性変換テーブルを使用して直線性を確保する。
 ・2.6V以上を使用しない様にセンサ側で対応する。今回の全抵抗5kΩの可変抵抗器の場合は、1kΩの抵抗を3.3V電源とセンサ側電源端子の間に挿入する。

1kΩの抵抗を3.3V電源とセンサ側電源端子の間に挿入して2.6V以上を使用しない様にセンサ側で対応した場合は以下になります。可変抵抗器のボリュームがフルで2730mVになります。

上記ではセンサの直線性は良くなりますが、ADCがフルで3300mVのところを2730mVまでしか使用しないため分解能が25%程度悪くなります。

ESP32にはアッテネーターの機能があり、ADCに入力する前に減衰して測定可能な入力電圧を高くすることが出来ます。以下の4段階の減衰があり、初期値は減衰MAXの-11dBの設定になっています。この機能を使って直線性と分解能のどちらも良くなる設定を探してみます。

まず、4段階の減衰がどのように動作するかを見てみます。

0点のオフセットをキャンセルする様にDACの設定値を各アッテネーター設定で調整しました。

画像に alt 属性が指定されていません。ファイル名: gif17.gif

以下のプログラムでアッテネーターの機能を使用してADCの特性を調べてみました。

結果
 ・”-11dB”は0~3.27Vまで測定可能。2.6V以上の直線性は悪い。
 ・”-6dB”は0~1.94Vまで測定可能。直線性は全域で良い。
 ・”-2.5dB”は0~1.40Vまで測定可能。直線性は全域で良い。
 ・”0dB”は0~1.07Vまで測定可能。直線性は全域で良い。

この中で直線性が全域で良くて最も高い測定電圧の”-6dB”を使用してみます。

アッテネーターは”-6dB”を使用して、3.3kΩの抵抗を全抵抗5kΩの可変抵抗器の3.3V電源とセンサ側電源端子の間に挿入して1.98V以上を使用しない様にセンサ側で対応した場合は以下になります。これで、直線性と分解能のどちらも良くなる設定になりました。

ポテンショメータ付きのアクチュエータを動作中に信号にノイズが乗るか以下のプログラムでテストしてみました。

以下のように特にノイズが乗らずきれいな波形で問題ないことを確認出来ました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です