WOBにはアナログ入出力もあります。「アナログ量」とは数値で表す前の「これくらい」とか「そのくらい」の量のことです。WOBではある端子の電圧がどのくらいかを数値に変換したものをアナログ入力としています。ではアナログ出力も端子の電圧を任意の値で出力することかというと、そうではなくて後述のPWM制御という方法で出力をします。
アナログ入力は電圧
アナログ電圧から数値への変換にはCPU内蔵のアナログ-デジタル変換器(A/Dコンバータ)が使われます。端子に印加できる電圧は、下はグラウンドレベルの0Vから、上は電源電圧の5Vまでで、これをはみ出すとCPUが壊れます。
設定値 | 名称 | 説明 |
---|---|---|
0 | AREF | AREF端子の電圧 |
1 | AVcc | CPUの電源電圧5V |
2 | 1.1V | 内蔵電圧源1.1V |
3 | 2.56V | 内蔵電圧源2.56V |
変換の結果、フルスケールで0から1023までの数値出力が得られます。このフルスケールの時の電圧=基準電圧を変更することが可能です(右表)。たとえば基準電圧1.1Vを選択すれば1.1V=1100mVがフルスケールですから1100mV÷1023=1.075mVが最小ステップ(数値出力の「1」の高さ)となり、かなり精密な測定ができることになります。
アナログ出力はパルス幅
アナログ出力は電圧出力ではなくPWM出力です。PWMはPulse Width Modulationの略で、日本語では「パルス幅変調」と呼ばれます。PWM出力は常に一定の周波数*1で、「0」と「1」の間で発振しています。…ー0ー1ー0ー1ー0ー1ー…と。0と1の長さが同じときは50%を表します。0と1の長さの比を変えることで0%~100%のアナログ量を表す仕組みです。非常に簡単な仕組みで電力を制御するのに適している方法です。
WOBでは0~255の値でこれを制御します。255がフルスケールです。100%÷255=0.392%が制御値「1」の幅ということになります。
*1 WOBでは約1221Hzです。20MHz÷64÷256=1220.70Hz
I/Oマップ
WOBのアナログ入出力に関するI/OマップをI/O領域の表から抽出します。隣に端子名を付加しておきました。
メモリ | I/O命令 | アクセス | 対応するI/Oポート、 | 端子名 | |||
---|---|---|---|---|---|---|---|
アドレス | アドレス | タイプ | メモリ、メソッド | カテゴリ | 説明 | コネクタ | CPU |
3072-3075 | 18 | W | analogReference | アナログ | 基準選択(0-3:AREF/AVcc/1.1V/2.56V) | AREF | AREF AVcc |
3076-3079 | 19 | R | analogRead(0) | 入力(0-1023) | A0 | PA0 | |
3080-3083 | 20 | R | analogRead(1) | 入力(0-1023) | A1 | PA1 | |
3084-3087 | 21 | R | analogRead(2) | 入力(0-1023) | A2 | PA2 | |
3088-3091 | 22 | R | analogRead(3) | 入力(0-1023) | A3 | PA3 | |
3092-3095 | 23 | R | analogRead(4) | 入力(0-1023) | A4 | PA4 | |
3096-3099 | 24 | R | analogRead(5) | 入力(0-1023) | A5 | PA5 | |
3100-3103 | 25 | R | analogRead(6)*1 | 入力(0-1023) | なし | PA6 | |
3104-3107 | 26 | R | analogRead(7)*1 | 入力(0-1023) | なし | PA7 | |
3108-3111 | 27 | W | analogWrite(6) | 出力(0-255) | D6*2 | PD6 | |
3112-3115 | 28 | W | analogWrite(7) | 出力(0-255) | D7*2 | PD7 |
*1 Arduino互換コネクタには存在しないが、基板上のPA6とPA7にパッドが設けてあります。
*2 D6とD7はデジタル入出力と兼用になっていますが、アナログ出力への書き込みが発生するとデジタル入出力は自動的にこのピンから切り離されますので、プログラム上でそのことを気にする必要はありません。
使い方(入力)
- フルスケール電圧から基準電圧を決める。
- どのアナログ入力端子を使うか決め、入力デバイス(たとえばセンサーの電圧出力)を接続する。
- 「基準選択」を0~3で設定する。AREF(=0)に設定した場合はAREF端子に基準電圧を与えるための回路を接続しなくてはならない。いったんこの操作を行えば、基準電圧を変えない限りこの操作はしなくてもよい。
- 「アナログ入力」を読み込む。
使い方(出力)
- どのアナログ出力端子を使うか決め、出力デバイス(たとえば電流制限抵抗付きLED)を接続する。
- 「アナログ出力」に値を0~255の間で書き込む。
サンプルコードはこちら