由以上關(guān)系可得圖7所示關(guān)聯(lián)圖。

圖7 信噪比及精度轉(zhuǎn)換關(guān)系圖
圖7中,左邊縱軸為信噪比SNR(或動態(tài)范圍DR),單位為3dB;右邊縱軸為位數(shù);橫軸為過采樣率(OSR)。函數(shù)線由式(1)計算所得,n為調(diào)制器的階數(shù)。右縱軸的分布由式(2)計算所得。
DR為信號的動態(tài)范圍,即最大信號與雜散信號之比。由于此處輸入的為理想信號,無諧波分量,雜散信號只有量化噪聲,故動態(tài)范圍即為信噪比SNR。
由圖7可知,8位ADC的理想信噪比大致為45dB,采用一階調(diào)制器實現(xiàn)需要大于64的過采樣率。實現(xiàn)12位精度需要大于380的過采樣率,16位需大于2415。
三、實現(xiàn)
1. 基本方案
如圖8所示為用單片機實現(xiàn)一階Σ-ΔADC的原理圖,虛線框內(nèi)為MCU。

圖8 一階Σ-ΔADC的基本方案原理圖
其中,阻抗變換器實際為一跟隨器,用于減小信號源內(nèi)阻的影響。如果不考慮邊緣的非線性,積分器可用簡單的RC網(wǎng)絡(luò)替代,如圖9所示。

圖9 一階Σ-ΔADC的簡化方案原理圖
一位量化器可用單片機的內(nèi)部比較器,也可以用普通口線替代,只是不同的單片機口線翻轉(zhuǎn)電平不一樣,測量結(jié)果差別很大。一位DAC用口線置高或置低來模擬,需較強的高電平驅(qū)動能力。圖10所示為用P87LPC764內(nèi)部比較器實現(xiàn)的8位ADC原理圖,比較器偏置在(1/2)VCC,輸入信號的內(nèi)阻必須足夠小,必要時可加跟隨器。

圖10 8位Σ-ΔADC的基本方案原理圖
;特殊功能寄存器定義
P1M1 DATA 91H ;P1方式寄存器1
P1M2 DATA 92H ;P1方式寄存器2
PT0AD DATA 0F6H
P0M1 DATA 84H ;P0方式寄存器1
P0M2 DATA 85H ;P0方式寄存器2
CMP1 DATA 0ACH ;比較器1控制寄存器
CMP2 DATA 0ADH ;比較器2控制寄存器
;變量定義
;端口定義
AD_CON BIT P1.6
ORG 0000H
AJMP START
;*******************************************
START:
MOV SP,#60H
MOV PT0AD,#24H ;禁止CMPREF、CIN2A
ANL P0M2,#0DBH
ORL P0M1,#24H
MOV CMP2,#20H ;CIN2A為輸入端
MAINLOOP:
LCALL AD_CONV
SJMP MAINLOOP
;*******************************************
;Σ-Δ ADC轉(zhuǎn)換程序
;占用R2,R3,R4,R5結(jié)果于A中
;*******************************************
AD_CONV:
ORL P1M2,#40H
ANL P1M1,#0BFH ;AD_CON設(shè)為上拉
AD_START:
MOV R4,#2 ;循環(huán)次數(shù)
MOV R2,#0 ;總計數(shù)值256次
AD_TEST:
MOV R3,#0 ;TON計數(shù)值256,開始轉(zhuǎn)換
AD_LOOP:
MOV A,CMP2
JB ACC.1,AD_HIGH
SETB AD_CON ;輸出正脈沖
NOP
NOP
SJMP AD_COUNT
AD_HIGH:
CLR AD_CON ;輸出負脈沖
CJNE R3,#255,AD_INC
SJMP AD_COUNT
AD_INC:
INC R3
NOP
AD_COUNT:
LCALL DELAY10us
DJNZ R2,AD_LOOP ;未完成256次循環(huán),繼續(xù)
DJNZ R4,AD_TEST
MOV A,R3 ;轉(zhuǎn)換完成,存結(jié)果于A
RET
;----------------------------------------------
DELAY10us:
MOV R5,#10
DJNZ R5,$
RET
2. 試驗結(jié)果
表1為試驗測試報告。測試條件:VCC = 4.92V,晶振12MHz,采用以上線路和源代碼。由于沒有采用跟隨器,結(jié)果有些偏差。
表1 測試報告
3. 擴充方案
(1) 原理
圖11所示為一階Σ-ΔADC原理圖。該方案由于相對于被測信號量化,被測信號即為比較基準,被測信號和基準之間無電壓差,其積分為零,故只對反饋信號求積。電容C的信號圍繞Vin上下變化,完成Σ-ΔADC差值(Δ)和積分(Σ)的作用,實現(xiàn)比較巧妙,完全符合一階Σ-Δ模型。輸入信號端加一電阻電容,形成一階RC低通濾波器,濾除高頻雜散信號,有抗混疊濾波的作用,同時也可補償比較器的失調(diào)誤差。

圖11 一階Σ-ΔADC的擴充方案原理圖
圖11所示電路,采樣頻率500kHz(20μs采樣一次),過采樣率OSR=256>64,輸出數(shù)據(jù)速率 1.95kHz,采用一級256階梳狀濾波后完全可滿足8位精度的要求。
另外,這種電路形式對信號源的輸入阻抗沒有要求,因而可達到更高的精度。
為了進一步認識其工作過程,作一下時域分析。1位DAC輸出可看作PWM脈沖。
對于RC時間常數(shù)遠大于脈沖寬度標準PWM信號,有
Vin=Vref [Ton/(Ton+Toff)] (1)
如果分級地調(diào)整波形使較大的時間常數(shù)穩(wěn)定下來,這將消耗很長的時間。如采用對分搜索,可大大加快計算過程,可能效果會比較理想,但要花費較大的軟件資源。
這里,我們采用一種新的思路(Σ-Δ),使用相對小的時間常數(shù),每20μs對比較器作一次采樣。VC<Vin時,輸出為正脈沖,反之為負脈沖。這種方法在固定周期內(nèi)把PWM波形分解成數(shù)個小脈沖,代替表示占空比的單脈沖。
Vin=Vref [ΣTon/Σ(Ton+Toff)] (2)
我們把該系統(tǒng)看作一個動態(tài)的控制系統(tǒng),系統(tǒng)動態(tài)平衡時,電容的充電電荷等于其放電電荷。VC在Vin上下波動,VC≈Vin,故充放電公式寫作:
Vcharge = (Vout-VC) [1-exp(-t/RC)] ≈
(Vout-Vin) [1-exp (-t/RC)]
Vdischarge = (VC-V0) [1-exp(-t/RC)] ≈
(Vin-V0) [1-exp (-t/RC)]
令 n=Ton脈沖的總次數(shù);
m=Toff脈沖的總次數(shù);
t=采樣時間。
則 n (Vout-Vin) [1-exp(-t/RC)] =
m (Vin-V0) [1-exp(-t/RC)]
解得
Vin = (nVout+mV0) / (n+m) (3)
其中Vout=Vref-Vos,Vos為口線的失調(diào)電壓,Vref =VCC,V0為口線的低電平電壓。所以
Vin = nVref /(n+m)-(nVos-mV0) / (n+m) (4)
前面一項為測量結(jié)果,后面為誤差,方程中不存在RC值,它不是誤差因子。比較器的失調(diào)電壓和口線的失調(diào)電壓均會影響測量精度。前者使VC不能正確地跟蹤Vin而造成誤差。
(2) 利用P87LPC764 內(nèi)部比較器實現(xiàn)8位Σ-ΔADC
這里,用P87LPC764的內(nèi)部比較器來實現(xiàn),如圖12所示。在正確測量之前,必須保證VC = Vin(實際有一微小誤差)。為此,進行兩次測量:第一次使VC鎖定Vin,扔掉測量結(jié)果;第二次進行真正測量。8位精度需256個計數(shù)。

圖12 8位Σ-ΔADC的擴充方案原理圖
圖13是8位Σ-ΔADC實現(xiàn)原理流程圖。

圖13 8位Σ-ΔADC實現(xiàn)原理流程圖
;特殊功能寄存器定義
PT0AD DATA 0F6H
P0M1 DATA 84H ;P0方式寄存器1
P0M2 DATA 85H ;P0方式寄存器2
P1M1 DATA 91H ;P1方式寄存器1
P1M2 DATA 92H ;P1方式寄存器2
CMP1 DATA 0ACH ;比較器1控制寄存器
CMP2 DATA 0ADH ;比較器2控制寄存器
;變量定義
;端口定義
AD_CON BIT P1.7
;**************************************************
;Σ-Δ AD 轉(zhuǎn)換程序
;占用R2,R3,R4,R5結(jié)果于A中
;**************************************************
AD_CONV:
ANL P1M1,#7FH
ORL P1M2,#80H ;AD_CON設(shè)為上拉
MOV PT0AD,#24H ;禁止CMPREF、CIN2A
ANL P0M2,#0DBH
ORL P0M1,#24H
MOV CMP2,#20H ;比較器2的CIN2A為輸入端
AD_START:
MOV R4,#2 ;循環(huán)次數(shù)
MOV R2,#0 ;總計數(shù)值256次
AD_TEST:
MOV R3,#0 ;Ton計數(shù)值256次,開始轉(zhuǎn)換
AD_LOOP:
MOV A,CMP2
JB ACC.1,AD_HIGH
CLR AD_CON ;輸出負脈沖
DEC R3
SJMP AD_COUNT
AD_HIGH:
SETB AD_CON ;輸出正脈沖
NOP
NOP
NOP ;平衡時間
AD_COUNT:
LCALL DELAY10us
DJNZ R2,AD_LOOP ;未完成256次循環(huán),繼續(xù)
DJNZ R4,AD_TEST
MOV A,R3 ;轉(zhuǎn)換完成,存結(jié)果于A
RET
;----------------------------------------------
DELAY10us:
MOV R5,#10
DJNZ R5,$
RET
表2為測試報告。測試條件:VCC = 4.87V,晶振6MHz采用以上線路和源代碼。
表2 測試報告
由以上結(jié)果可知,Σ-ΔADC轉(zhuǎn)換具有非常高的準確度和線性度。
(3) 利用P87LPC764雙比較器實現(xiàn)4路A/D

圖14 4路8位Σ-ΔADC的原理圖
圖14為4路8位Σ-ΔADC原理圖。
;特殊功能寄存器定義
PT0AD DATA 0F6H
P0M1 DATA 84H ;P0方式寄存器1
P0M2 DATA 85H ;P0方式寄存器2
1M1 DATA 91H ;P1方式寄存器1
P1M2 DATA 92H ;P1方式寄存器2
CMP1 DATA 0ACH ;比較器1控制寄存器
CMP2 DATA 0ADH ;比較器2控制寄存器
;變量定義
AD_BUF DATA 30H ;結(jié)果單元
;端口定義
AD_CON BIT P1.7
;----------------------------------------------
AD_4_CH:
ANL P1M1,#7FH
ORL P1M2,#80H ;AD_CON設(shè)為上拉
MOV PT0AD,#3EH ;禁止CMPREF、CIN1A、;CIN1B、CIN2A、CIN2B數(shù)字輸入、輸出
ANL P0M2,#0C1H
ORL P0M1,#3EH
MOV R0,#AD_BUF
MOV CMP2,#30H ;比較器2的CIN2B為輸入端
LCALL AD_START2
MOV @R0,A ;存第一路結(jié)果
INC R0
MOV CMP2,#20H ;CIN2A為輸入端
LCALL AD_START2
MOV @R0,A ;存第二路結(jié)果
INC R0
MOV CMP1,#30H ;CIN1B為輸入端
LCALL AD_START1
MOV @R0,A ;存第三路結(jié)果
INC R0
MOV CMP1,#20H ;CIN1A為輸入端
LCALL AD_START1
MOV @R0,A ;存第四路結(jié)果
AD_START1:
MOV R4,#2 ;循環(huán)次數(shù)
MOV R2,#0 ;總計數(shù)值256次
AD_TEST1:
MOV R3,#0 ;TON計數(shù)值256次,開始轉(zhuǎn)換
AD_LOOP1:
MOV A,CMP1
JB ACC.1,AD_HIGH1
CLR AD_CON ;輸出負脈沖
DEC R3
SJMP AD_COUNT1
AD_HIGH1:
SETB AD_CON ;輸出正脈沖
NOP
NOP
NOP ;平衡時間
AD_COUNT1:
LCALL DELAY10us
DJNZ R2,AD_LOOP1 ;未完成256次循環(huán),繼續(xù)
DJNZ R4,AD_TEST1
MOV A,R3 ;轉(zhuǎn)換完成,存結(jié)果于A
RET
;----------------------------------------------
AD_START2:
MOV R4,#2 ;循環(huán)次數(shù)
MOV R2,#0 ;總計數(shù)值256次
AD_TEST2:
MOV R3,#0 ;TON計數(shù)值256次,開始轉(zhuǎn)換
AD_LOOP2:
MOV A,CMP2
JB ACC.1,AD_HIGH2
CLR AD_CON ;輸出負脈沖
DEC R3
SJMP AD_COUNT2
AD_HIGH2:
SETB AD_CON ;輸出正脈沖
NOP
NOP
NOP ;平衡時間
AD_COUNT2:
LCALL DELAY10us
DJNZ R2,AD_LOOP2 ;未完成256次循環(huán),繼續(xù)
DJNZ R4,AD_TEST2
MOV A,R3 ;轉(zhuǎn)換完成,存結(jié)果于A
RET
;----------------------------------------------
DELAY10us:
MOV R5,#10
DJNZ R5,$
RET





