A/D変換

PUPPYに搭載されているジャイロセンサ、電流センサの出力はアナログ量です。アナログ量をマイコンが処理できるディジタル量にするのがA/D変換です。PUPPY対応ベースボードのH8/3687Fを例にとると、A/D変換を行えるアナログポートはAN0〜AN7の合計8本あります。今回の演習ではAN1に接続されているジャイロセンサ(図1)のA/D変換を行います。

図1

ジャイロセンサは角速度を計測するセンサで、図2のように角速度の変化に比例したアナログ電圧を出力します。

図2

今回はシリアル通信の演習で使用したsci_sampleのプログラムを利用します。sci_sampleフォルダの中のmain.cを開いて下さい。main.cをリスト1のように書き直します。

リスト1

リスト1はAN1に接続されているジャイロセンサの出力をA/D変換しパソコンにシリアル転送するプログラムです。

詳しくはハードウェアマニュアルのA/D変換の章を見ていただくとして、A/Dコントロール/ステータスレジスタ(ADCSR)でA/D変換の開始や変換速度、変換チャネル等を設定し、ADDRA(A/DデータレジスタA)〜ADDRD(A/DデータレジスタD)に変換結果が格納されます。

12行目: ADCSRの設定 今回の例では表1のように設定します。

ADCSR
ビット名 簡単な説明 設定値
bit7 ADF A/D変換が終了したときにセットされるフラグ 0
bit6 ADIE A/D変換終了後、割り込みを発生させたい場合は1にする 0
bit5 ADST A/D変換開始時に1にセットする 1
bit4 SCAN 複数のチャネルを連続してA/D変換したい場合は1にセットする 0
bit3 CKS A/D変換時間を早くしたいときは1にセットする 1
bit2 CH2 CH2・CH1・CH0でA/D変換を実施するチャネルを選択する 0
bit1 CH1 0
bit0 CH0 1

表1

15行目: A/D変換終了待ち 12行目の設定でA/D変換が開始され、A/D変換が終了するとADCSRのbit7のADFに1がセットされるのでADFが0の間は待ちます。

18行目: A/D変換結果はADDRA〜ADDRCに表2のように格納されるので6ビット右シフトします。

ADDRx
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
A/D変換値 10ビット 0 0 0 0 0 0
右シフト→
ADDRx
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
0 0 0 0 0 0 A/D変換値 10ビット

表2

このプログラムを実行するとハイパーターミナル上で図3のような表示になります。

図3

jジャイロセンサは角速度に比例した電圧を出力します。PUPPYを動かさないでいると数値は300前後、前に倒すと値が減り、後に倒すと値が増えることが確認できると思います。このマイコンのA/D変換器の分解能は10ビットなので、GND(0V)〜VCC(5V)を1024(2の10乗)分割した数値になりますので、静止状態の300という値は

300 × 5 / 1024 = 約1.46V

となります。このジャイロセンサの静止時出力は1.35Vなので概ね正しくA/D変換が行われているようです。

演習課題

PUPPYにはマイコン用の電源(単三乾電池2本)とモータ用の電源(単三乾電池2本)がそれぞれあります。それぞれAN4とAN5に接続されていてA/D変換で電池電圧をモニタできるようになっています。そこでこの2つの電圧をA/D変換しハイパーターミナルに表示するプログラムを作ってみましょう。

演習課題ができたらココ