つれづれなる備忘録

日々の発見をあるがままに綴る

Tinkercadによるマイコンシミュレーション5

 今回はmicro:bitのピンからアナログ電圧を入出力する方法について紹介したい。

atatat.hatenablog.com

1. micro:bitのアナログ入出力

 前回のデジタル入出力とほぼ同じ要領でアナログ電圧の入力、出力ができる。デジタル入出力はLow(0V)かHigh(3.3V)の2値になるがアナログ入出力は3.3Vに対して1024(0-1023)分割した整数値を入出力することができる。今回は、端子0(P0)に対して電源から電圧を入力し、ボタンAを押すとLED上にアナログの電圧値を表示する。またボタンBを押すと、0~3.3Vの中間の電圧を端子1(P1)から出力する例を紹介する。

Tinkercadのモデルは、P0端子に電源を接続して電圧を入力、またP1端子にマルチメータを接続して出力電圧を読み出せるようにする。 なおモデルを簡単にするため電源から直接端子に接続しているが、実際には過電流がmicro:bitに流れることを防ぐため抵抗を入れる、電源に出力電流のリミットを設定するなどの処置が必要。

"アナログ電圧入出力"
アナログ電圧入出力

2. アナログ入出力コード

 端子入出力は前回のデジタルピンを読み取る/書き込むの代わりにアナログピンを読み込む/書き込むを使用すればよい。ただし、読み取り、書き出しは3.3Vをフルスケールとして0~1023の整数のため、電圧値を取り扱うためには演算を行う必要がある。例えば読み出しを電圧値に変換するには

 \displaystyle V_{disp}=\frac{3.3}{1023}*V_{read}

VreadはP0から読み出される0~1023の整数値

逆に所望の電圧値を出力する場合は

 \displaystyle V_{out}= \mathrm{int} ( \frac{1023}{3.3}*V_{input} )

VoutはP1に入力される0~1023の整数値

そこでアナログピンを読み込む、書き込むの内部に上記の演算を実行するよう計算ブロックを入れておく。計算ブロックを複数組み合わせるためのコードブロックの操作に少し難がある印象。 以下がコードブロックの完成例になる。

"アナログ入出力コード"
アナログ入出力コード

2. 実行例

 アナログ電圧入力の実行例を以下に示す。ボタンAを押すとLED上に1.2Vと1文字づつ流れて表示される。

"アナログ電圧入力の実行例"
アナログ電圧入力の実行例

次にボタンBを押してアナログ電圧1Vを端子P1から出力する実行例を以下に示す。

"アナログ電圧出力の実行例"
アナログ電圧出力の実行例

なおmicro:bitのアナログ電圧出力は3.3Vを矩形変調するPWM出力になっている。(Arduinoの場合と同じで詳細は以下参照)

atatat.hatenablog.com

オシロスコープを追加してP1端子の出力波形を観察すると矩形波形が出力されている。

"アナログ電圧の出力波形"
アナログ電圧の出力波形

3. まとめ

 今回はmicro:bitのピンからアナログ電圧を入出力する方法について紹介した。デジタル入出力とほぼ同じだが、電圧値を扱おうとすると整数値から変換するための演算が必要で、コードブロックを組み合わせる操作が少し難がある。