見出し画像

Wio BG770Aの研究8〜アナログ入力を理解する〜

Wio BG770Aの研究シリーズでは、Seeed社のLTE-M対応IoT開発ボードWio BG770Aについて、調査・検証した内容を共有しています。前回の記事ではデジタル入出力を取り上げました。今回は、アナログ入力の使い方を、実際のサンプルコードをもとに検証し、理解することを目指します。
なお、本記事は、SORACOM Advent Calendar 2024シーズン2にエントリーしています。


■ アナログ入力のコードを理解する

アナログ入力のサンプルコードを探すと、可変抵抗の値を読み取るgove-rotary-angle-sensor.inoが見つかりました。ここでは、このコードを通してアナログ入力のコードを理解していきます。

アナログ入力の分解能(ビット数)は、デフォルトで10ビットです。Wio BG770Aは、最大14ビットまで対応しているため、より細かく計測したい場合はビット数を変更します。

analogReadResolution(14); // 分解能(ビット数)を指定。この行がなければ10ビット。

analogRead()でアナログ入力ピンの電圧を読み取り、14ビットのデジタル値を取得します。

const auto rotaryAngleRaw = analogRead(ROTARY_ANGLE_PIN);

下記コードでアナログ値をデジタル値に変換します。最初このコードの意味がよくわかりませんでした。調べてみると、基準電圧が0.6V、デフォルトのゲインが1/6のようです。このため、0.6V x 6倍 = 3.6Vのときに2^14-1、つまり16383になります。
3.3V=16383ではなく、3.6V=16383であることに注意です!

const auto rotaryAngleVoltage = (float)rotaryAngleRaw / 16383 * 0.6f / (1.0f / 6);

サンプルコードでは、可変抵抗を用いた回転量センサーが用いられています。回転量がminのとき0Vが出力され、maxのとき3.3Vが出力されるため、得られた電圧値を3.3Vで割ることで、0〜1に正規化できます。

const auto rotaryAngle = rotaryAngleVoltage / 3.3f;

■ アナログ入力試験結果

アナログ入力の精度を知るため、試験を行いました。結果、理論値に近い近似式を得ることができました。以下詳細です。

◎ 試験目的

・アナログ入力の精度を知る
・AD変換の式として、理論式を用いてよいか確認する(背景として、M5StackのAD変換は理論式と実際の値に差があったため、Wio BG770Aは理論式を用いてよいか確認したい)

◎ 試験方法

・安定化電源で、アナログピンに0〜3.3Vを入力する
・テスターでアナログピンに入力されている電圧を計測する
・Wio BG770AのanalogRead()で16回読み取り、平均値をプロットする

なお、nRF52840の仕様書を見ると、アナログピンの最大許容電圧は3.3Vであるため、この電圧を超えないよう、注意が必要です!

◎ 試験結果

平均値をプロットとした結果が下記です。R2=1と、きれいな近似式になりました。理論式は、y = 16383/3.6x = 4551xであり、別途計算してみると、理論式と近似式のAD変換時の差はmVオーダーです。理論式を用いてOKですね。

AD変換試験結果(グラフ)

生データを細かく見ると、0V〜1.0Vではややばらつきがあり、1.5V〜3.0Vは相当にばらつきが小さいです。

AD変換試験結果(データ)

◎ 気になった点

アナログピンに3.3Vを入力したところ、平均15000強のanalogRead()値に対し、たまに14000強の値が取得されることがありました。なんでしょうか?
なお、今回の試験の範囲内において、3.0V以下ではこの現象は発生しませんでした。

3.3V入力時のanalogRead()の値

■ アナログ出力は無い

アナログ出力の機能は無さそうです。アナログ出力したければ、別途DACモジュールを購入する必要がありそうです。

■ まとめ

今回の記事では、Wio BG770Aのサンプルコードを通して、デジタル入力を深堀りしました。以下がポイントです。

  • アナログ入力を理解する上で、gove-rotary-angle-sensor.inoが参考になる!

  • アナログ入力の分解能は標準は10ビットだが、14ビットまで対応している!

  • AD変換における基準電圧は0.6V、ゲインが1/6であるため、0.6Vx6倍=3.6VのときにanalogRead()の最大値となる!

  • 試験の結果、AD変換の精度が高く、理論式を用いればOK!

  • アナログ出力の機能はない。アナログ出力したければ、別途DACモジュールを購入!

次回は、このアナログ入力の機能を用い、Wio BG770Aに供給される自分自身の電源電圧を計測する方法について、調べてみたいと思います。

ここまでお読みいただき、ありがとうございます!この記事が参考になった方は、スキ、コメント、フォローいただけると励みになります。


《 参考》

・Wio 770Aの研究シリーズの各記事を、マガジンにまとめています。

・grove-rotary-angle-sensor.inoの公式解説ページです。

いいなと思ったら応援しよう!