AD変換・DA変換

D/A 変換と A/D 変換
大豆生田利章
2014/6/24
1
D/A 変換
ディジタルデータをアナログ信号に変換することを D/A 変換とよぶ.変
換可能なアナログ信号の最小値を 0 最大値を VREF とする.ディジタルデー
タが n ビットとすると,ディジタルデータが 1 ビット増えるごとにアナログ
信号は VREF /2n だけ増加する.図 1 に 3 ビットのときの対応例を示す.
図 1: ディジタルデータとアナログ信号との対応
ディジタルデータの 0 から 2n − 1 に対応するアナログ信号は 0 から
2n − 1
·VREF となる.n が十分に大きいときは,アナログ信号の範囲は 0 から
2n
VREF であるとしてよい.例えば,8 ビット D/A 変換器において,VREF = 5.0 V
であるとする.このとき,8 ビットデータ H’AC を入力したときに出力され
るアナログ電圧は
10 × 24 + 12
× 5.0 V ; 3.36 V
28
(1)
である.逆にアナログ電圧として,2.0 V を出力させたいときに D/A 変換器
に対する入力データは
2.0 V
= 102.4 ; 102 = H0 66
(5.0 V/28 )
となる.
1
(2)
c 大豆生田利章 2014
°
2
A/D 変換
2
2.1
逐次比較形 A/D 変換
アナログ信号をディジタルデータに変換することを A/D 変換とよぶ.こ
こでは多くのマイコンで用いられている逐次比較形 A/D 変換(SAR 1 形
A/D 変換)を説明する.逐次比較形 A/D 変換では比較電圧との大小関係に
よりディジタルデータの最上位ビット (MSB) から値を決めていく.図 2 は
A/D 変換の基準電圧が 5 V であるときに,アナログ信号電圧 3.4 V がどの
ようにディジタルデータに変換されていくかを示したものである.MSB で
は比較電圧 2.5 V より 3.4 V が大きいのでディジタルデータは 1 となる.次
のビットでは比較電圧 3.75 V より 3.4 V が小さいのでディジタルデータは 0
となる.以下,同様の操作を繰り返す.
図 2: 逐次比較形 A/D 変換の考え方
以上の原理を実現するための回路の概要は,図 3 のようになる.ここで比
較器は 2 つの入力電圧の大小により出力電圧が決定される回路であり,ここ
ではディジタル信号の 0 または 1 を出力するものとする.
図 3: 逐次比較形 A/D 変換回路の概要
一般的な逐次比較型 A/D 変換の動作は以下のようになる.MSB から n ビッ
ト目までの値が確定しているとする.ここで,n ビット目までを確定した値,
1 successive
approximation register
c 大豆生田利章 2014
°
3
n + 1 ビット目を 1 ,n + 2 ビット目以降を 0 としたディジルデータを D/A
変換する.この D/A 変換した値と,入力信号の大きさを比較する.入力信
号が大きいときは n + 1 ビット目を 1 で確定させ,小さいときは n + 1 ビッ
ト目を 0 で確定させる.図 2 の例で 3 ビット目を確定させるときの状態を,
図 4 に示す.
図 4: 逐次比較形 A/D 変換の動作
図 2 および図 4 に示した逐次比較形 A/D 変換の動作中のレジスタの内容
および D/A 変換器と比較器の出力を表 1 に示す.
表 1: 逐次比較形 A/D 変換の動作例(VIN = 0.68VREF )
レジスタ D/A 変換器 比較器
2.2
1000
1100
0.5VREF
0.75VREF
1
0
1010
1011
0.625VREF
0.6875VREF
1
0
その他の A/D 変換
フラッシュコンバータ(並列比較形)フラッシュコンバータでは図 5 のように
nVREF
N 個の抵抗 R と比較器を並べ,入力電圧 VIN と各比較器の入力
)
N
を一度に比較する.これにより,比較器の出力はあるところを境にして
0 または 1 が連続することになる.この比較器の出力をエンコーダで 2
進数に変換する.
二重積分型 二重積分型 AD コンバータを図 6 に示す.まず,入力電圧 VIN
で時間 T1 だけコンデンサ C を充電する.次に比較電圧 −VREF でコ
c 大豆生田利章 2014
°
4
図 5: フラッシュコンバータ
ンデンサ C を放電する.充電時間 T1 と放電時間 T2 から以下の式の
ように入力電圧と比較電圧の比が求まる.
VIN
T2
=
VREF
T1
(3)
VREF および T1 をあらかじめ定めておき,T2 をカウンタで測定するこ
とにより AD 変換したディジタルデータが得られる.
図 6: 二重積分型 AD コンバータ
追従比較形 図 7 のようにカウンタの値をインクリメントしていき,カウン
タの値を D/A 変換した電圧と入力電圧と比較する.D/A 変換した電圧
が入力電圧を超えると A/D 変換が終了する.
デルタシグマ形(シグマデルタ形)図 8 にデルタシグマ形 AD コンバータの
原理図を示す.比較器の出力が 0 のときは減算器の出力は VIN + VREF
c 大豆生田利章 2014
°
5
図 7: 追従比較型 AD コンバータ
となり,比較器の出力が 1 のときは減算器の出力は VIN − VREF となる.
加算器はそれまでの減算器の出力の和を出力する.
図 8: デルタシグマ形 AD コンバータ
図 9 にデルタシグマ形 AD コンバータの入力電圧 VIN が,0,VREF お
よび −VREF のときの動作を示す.図 8 に示した減算器,加算器,比較
器の最初の出力はすべて 0 であるとしている.図に示すように,
.VIN
が 0 のときは 0 と 1 が交互に出力され,VIN が VREF のときは 1 が連
続出力され,VIN が −VREF のときは 0 が連続出力される.このように,
入力に応じて比較器の出力の 0 と 1 の割合が変化する.比較器の出力
はそのままでは雑音の影響が大きいので,をディジタルフィルタで処理
することにより雑音を除去したデータが得られる.
VREF
VIN =
のときのデルタシグマ形 AD コンバータの動作例を表 2
2
に示す.ここでは,VREF を 1 としている.
c 大豆生田利章 2014
°
6
図 9: デルタシグマ形 AD コンバータの動作
表 2: デルタシグマ形 AD コンバータの動作例
減算器出力 加算器出力 比較器出力
0
0
0
3/2
3/2
1
−1/2
−1/2
−1/2
1
1/2
0
1
1
0
3/2
1
3/2
(以下繰り返し)
c 大豆生田利章 2014
°
7
H8 マイコンの D/A 変換と A/D 変換
3
3.1
D/A 変換
H8/3062BF には D/A 変換器が 2 チャネル用意されていて,8 ビットのディ
ジタルデータをアナログ信号に変換する.アナログ信号の出力端子 DA0 お
よび DA1 はポート 7 の端子 P76 および P77 と兼用されている.D/A 変換
はデータレジスタ(DADR0 または DADR1)に 8 ビットデータを書き込む
ことにより行なわれる.書き込まれた 8 ビットディジタルデータは,最大で
10 µs の変換時間を経て,アナログデータに変換される.アナログ出力電圧
#DADR
はデータレジスタの数値を #DADR とすると
× VREF となる.こ
256
こで,VREF はリファレンス電圧端子の電圧である.D/A 変換の制御は D/A
コントロールレジスタ (DACR) と D/A スタンバイコントロールレジスタ
(DASTCR) で行なう.DACR のビット構成を図 10 に示す.DAOE0 ある
いは DAOE1 が 1 のときは D/A 変換が許可され,DA0 (P76) または DA1
(P77) から変換結果が出力される.DAE は DAOE0 および DAOE1 と組み合
わせて表 3 に示すように D/A 変換の制御を行なう.なお,第 0 ビットから第
4 ビットは未使用である.DASTCR はソフトウェアスタンバイモード 2 時の
D/A 変換の禁止・許可を設定するもので,初期値は禁止に設定されている.
図 10: DACR のビット構成
表 3: D/A コントロールレジスタによる変換制御
DAOE1 DAOE0 DAE チャネル 0 チャネル 1
0
1
0
1
0
1
2 SLEEP
0
1
禁止
禁止
許可
禁止
許可
許可
0
1
禁止
許可
許可
許可
-
許可
許可
命令により CPU 機能を停止した状態.
c 大豆生田利章 2014
°
3.2
8
A/D 変換
H8/3062BF には逐次比較型 A/D 変換器が 8 チャネル用意されていて,ア
ナログ信号を 10 ビットのディジタルデータに変換する.変換時間は 1 チャネ
ル当たり最小 5.36 µs である.A/D 変換には単一モードとスキャンモードの
2 種類の動作モードがある.単一モードは指定した 1 つのチャネルの A/D 変
換を行うもので,スキャンモードは指定した複数のチャネルの A/D 変換を順
に行うものである.
A/D 変換の制御は A/D コントロール/ステートレジスタ (ADCSR) と
A/D コントロールレジスタ (ADCR) で行なう.ADCR は外部トリガまたは
タイマによる A/D 変換開始を許可するときに設定するレジスタであり,初
期値では外部からの A/D 変換開始は禁止されている.ADCSR のビット構成
を図 11 に示す.これらのうち重要なものは ADF,ADST,CH2,CH1 およ
び CH0 の 5 ビットである.第 4 ビットの SCAN を 1 にセットすることでス
キャンモードへの切り替わる 3 .
図 11: ADCSR のビット構成
ADCSR の CH2 から CH0 は表 4 のように A/D 変換するアナログ入力チャ
ネルを選択する.
CH2
0
1
表 4: A/D 変換のチャネルセレクト
CH1 CH0 単一モード スキャンモード
0
0
AN0
AN0
1
1
0
AN1
AN2
AN0, AN1
AN0 ∼ AN2
1
AN3
AN0 ∼ AN3
0
0
1
AN4
AN5
AN4
AN4, AN5
1
0
1
AN6
AN7
AN4 ∼ AN6
AN4 ∼ AN7
A/D 変換されたデジタルデータは A/D データレジスタ (ADDR) に格納さ
れる.ADDR は ADDRA から ADDRD の 4 本があり,さらに上位 8 ビット
3 初期値は単一モードである.
c 大豆生田利章 2014
°
9
と下位 2 ビットに分割される.ADDR とアナログ入力チャネルの対応を表 5
に示す.
表 5: アナログ入力チャネルと A/D データレジスタの対応
アナログ入力チャネル
AN0
AN1
AN2
AN3
A/D データレジスタ
AN4
AN5
AN6
AN7
ADDRA
ADDRB
ADDRC
ADDRD
図 12 に A/D 変換(単一モード)のフローチャートを示す.ADCSR の
A/D スタートビット (ADST) を 1 にセットすることで A/D 変換を開始す
る.A/D 変換が終了すると ADCSR の A/D エンドフラグ (ADF) が 1 にな
る.ADCSR の ADST は A/D 変換が終了すると自動的に 0 にクリアされ
る.ADF を 0 クリアして,A/D データレジスタから A/D 変換された値を読
み込む.
図 12: A/D 変換のフローチャート(単一モード)
スキャンモードの A/D 変換は以下のように実行される.単一モードと異な
り,スキャンモードでは ADST は自動的にクリアされない.
1. ADST を 1 にセットすることにより,A/D 変換が開始される.
2. 表 4 で選択した各チャネルの A/D 変換を順番に実行する.ディジタル
データは表 5 に示された A/D データレジスタに書き込まれる.
3. 選択したすべてのチャネルの A/D 変換が終了すると ADF が 1 になる.
c 大豆生田利章 2014
°
10
4. 以後,2. の動作を繰り返す.
5. ADST を 0 にクリアすることにより,A/D 変換が終了する.
スキャンモードの動作を図示すると図 13 のようになる.
図 13: A/D 変換(スキャンモード)の動作
4
プログラム例
リスト 1 に A/D 変換を応用したプログラムの例を載せる.これはアナロ
グ入出力ボードの可変抵抗を変化させることにより,IO ボードの LED の点
滅間隔を変更するものである.
プログラムリスト 1: A/D 変換を応用したプログラム例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
. CPU 300 HA
ADDRDH . EQU H ’ FFFE6 ; A D デ ー タ 上 位 レ ジ ス タ AN3 VPA <-> Analog I / O board VPA
ADCSR
. EQU H ’ FFFE8 ; A D コ ン ト ロ ー ル / ス テ ー ト レ ジ ス タ
P4DDR
. EQU H ’ EE003
PBDDR
. EQU H ’ EE00A
P4DR
. EQU H ’ FFFD3 ; VPD <-> I / O board VP1
PBDR
. EQU H ’ FFFDA ; VPE <-> I / O board VP2
ADST
. BEQU 5 , ADCSR ; A / D start
ADF
. BEQU 7 , ADCSR ; A / D end flag
. SECTION PROG , DATA , LOCATE =H ’00000
. DATA . L RESET
. SECTION P , CODE , LOCATE =H ’00800
RESET : MOV . L #H ’ FFF00 , ER7 ; S P 設 定
MOV . B #H ’ FF , R0L
MOV . B R0L , @P4DDR ; ポ ー ト 4 出 力
MOV . B R0L , @PBDDR ; ポ ー ト B 出 力
MOV . B #H ’03 , R0L ; A / D チ ャ ネ ル 3 を 選 択
MOV . B R0L , @ADCSR
MOV . B #H ’33 , R0L ; ポ ー ト B の 出 力 初 期 値
LOOP :
BSET ADST ; A D 変 換 開 始 ( ADST =1)
LOOP1 : BTST ADF ; A D 変 換 終 了 ?
BEQ LOOP1 ; ADF =0 な ら 変 換 中
BCLR ADF ; A D F を ク リ ア
MOV . B @ADDRDH , R0H ; 上 位 8 ビ ッ ト を R 0 H に 取 り 込 み
MOV . B R0H , @P4DR ; 上 位 8 ビ ッ ト を ポ ー ト 4 に 出 力
MOV . B R0L , @PBDR ; ポ ー ト B 出 力
NOT . B R0L ; R0L 反 転
; タ イ マ ー R0H x 1 ms
TIMER : MOV . L
#D ’3125 , ER6 ;1 ms timer
TIMER1 : DEC . L
#1 , ER6 ; E R 6 を 1 減 ら す
c 大豆生田利章 2014
°
11
NOP
BNE
TIMER1 ; E R 6 が 0 に な る ま で
DEC . B
R0H
BNE
TIMER ; R0H が 0 に な る ま で
JMP @LOOP
. END
31
32
33
34
35
36
A
AD/DA 変換関係のレジスタ
表 6 に AD/DA 変換関係のレジスタを載せる.なお,表 6 中のアドレス
は H8/3062BF のものである.
表 6: AD/DA 変換関係レジスタ
名称
略称
アドレス
D/A データレジスタ 0
DADR0
H’FFFF9C
D/A データレジスタ 1
DADR1
H’FFF9D
D/A コントロールレジスタ
DACR
H’FFF9E
D/A スタンバイコントロールレジスタ
DASTCR
H’EE01A
A/D データレジスタ
ADDRAH
H’FFFE0
ADDRAL
ADDRBH
H’FFFE1
H’FFFE2
ADDRBL
ADDRCH
ADDRCL
H’FFFE3
H’FFFE4
H’FFFE5
ADDRDH
ADDRDL
H’FFFE6
H’FFFE7
A/D コントロール/ステートレジスタ
ADCSR
H’FFFE8
A/D コントロールレジスタ
ADCR
H’FFFE9