見出し画像

Micro:bitのADCが変?

Micro:bit + BLEでデータを集める」と言う記事に書いたようにMicro:bit V2.2内臓のADCを使い、P0端子とP1端子に入力した電圧を500msec間隔で測定しています。環境はタイトル画像の通り、MakeCode editorです。

ところが、P0, P1に同じ電圧を印加した時のADC変換値が何割と言うレベルで異なっています。
このままでは使えないと考えて幾つか試したところ「裏技的」な方法で改善を確認しました。

不具合現象

両端子に同じ電圧を印加した時にP0の変換値がP1の0.77倍程度と小さな値になった。ADCの変換誤差と言った範囲ではなく、P1の値の方が印加電圧(実測)の理論値(10bitADC)に近いようでした。

試したこと

以下を試しても改善は認められませんでした。
1.P0サンプリングに続くP1サンプリングの間に100msecに遅延時間を挿入
2.500msec毎に交互にサンプリング

改善した方法

試しに、アナログサンプリングに続けてデジタルサンプリングをさせてみたところ改善が認められました。

具体的には下図のようなコード(ブロック?)です。
(説明用に一部を抜き出したものです。)

画像1

変数P0dにADC変換値を読み出した後で、変数trashにデジタルサンプリング値を読み出し(読み捨て)ています。

1CHだけサンプリングする場合も同様にした方が安定するようです。
5時間程度連続動作させて経時変化を確認し、安定しています。

変換誤差

今回の回路はフルスイング・オペアンプのボルテージフォロアに直列抵抗とコンデンサを付けたものでした。6回路(4つのMicro:bit)について各々変換誤差を測定した結果は下図のようなものでした。

画像2

0.5V以下が不穏な結果に成りましたが、今回の用途では1V付近の精度が重要で他はザックリで良いので採用です。
個別に補正係数を設定することは避けたいので、一律に1.035倍して使うことにしました。この状態で圧力センサのバラツキに対して半分未満に抑えられることから良しとします。

詳しく見ていませんが回路によって変換誤差が異なるようです。
御自身の回路で確かめて使う方が良いと思います。

感想

Micro:bit (MakeCode)側の不具合だと思いますが、「裏技的」とは言え対策出来て良かったと感じています。

何等かお役に立てれば幸いです。


今後とも宜しくお願い致します。





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

uPyC
出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。