類比數位轉換器 ADC
1. ADC 的控制
SPCE061A 有 8 個 10 位 ADC 通道,其中一個通道(MIC_In)用於語音輸入,
類比訊號 經過自動增益控制器和放大器放大後進行 A/D 轉換。其餘 7 個通道 (Line_In 1-7)和 IOA[0~6]接腳共用,可以將輸入的類比電壓訊號轉換為數位訊號。
SPCE061A 的 A/D 轉換範圍是整個輸入範圍,即 0V~AVdd 。無效的 A/D 類比 信號 (超過 VDD+0.3V 或是低於 VSS–0.3V)將影響轉換電路的工作範圍,從而 降低 ADC 的性能,電路製作時須加以避免。由於 Line_In 通道 [1~7]和 IOA[0~6]
接腳共用,建議使用者選擇其他的 IO 接腳(非 IOA[0~6])當做 GPIO 使用,以 避免由於無效的 IO 訊號造成電壓不穩 (超過 VDDIO+0.7V 或低於 VSSIO–0.7V) 而降低 ADC 的性能。
圖 2.1、 ADC 輸入介面的結構
圖 2.2、 ADC 電路示意圖
2.
系統時脈頻率與 ADC 轉換速率3. ADC 直流電氣特性
註:
[1] LSB 表示為最小有效單位,在 VRT=3V 的情況下,1LSB 為 2.93 mv。
[2] 此由最大取樣率(Sample rate max) 得來,即 Sample rate max =ADC 最 高轉換時脈/16=1536KHz/16=96KHz。
4. ADC 和 DAC 相關暫存器
ADC 的控制埠
在 ADC 內,由數位至類比轉換器 DAC0 和逐次逼近暫存器 SAR 組成逐 次逼近式類比至數位轉換器,向 P_ADC_Ctrl(寫)($7015H)單元第 0 位元(ADE) 寫入“1”用以啟動 ADC。系統內定設置為 ADE=0,即遮罩 ADC。
ADC 採用自動方式工作。硬體 ADC 的最高速率限定為(Fosc/32/12)Hz,如果速 率超過此值, 當從 P_ADC(讀)($7014H)單元讀出資料時會發生錯誤。
P_ADC_Ctrl 暫存器
註:
[1] 此為 DAC_I 的內定選擇。
[2] b15 只用於 MIC_IN 通道輸入。
[3] 當類比信號通過麥克風的 MIC_IN 通道輸入時,可選擇 AGCE 為‘1’,
即運算放大器的增益可在其線性區域內自動調整。AGCE 內定選擇為‘0’,即 取消自動增益控制功能。
[4] 寫入時需注意 b5 = 1, b4=1, b3 =1 和 b1=0。
在 ADC 被啟用後,會產生出一個啟動信號,即 RDY=0。此時,DAC0 的 電壓模擬量輸出值與外部的電壓類比量輸入值進行比較,以儘快找出外部電壓類 比量的數位量輸出值。逐次逼近式控制首先將 SAR 中資料的最高有效位元試設 為‘1’,而其他位則全設為‘0’,即 100000 0000B。這時,DAC0 輸出電 壓 VDAC0(1/2 滿電壓)就會與輸入電壓 Vin 進行比較。如果 Vin>VDAC0,則保 持原先設置為‘1’的位(最高有效位)仍為‘1’;否則,該位會被清‘0’。接 著,
逐次逼近式控制又將下一位試設為‘1’,其餘低位依舊設為‘0’,即 110000 0000B,VDAC0 與 Vin 進行比較的結果若 Vin>VDAC0,則仍保持原先設置位 的值,否則便清‘0’該位。這個逐次 逼近的過程一直會延續到 10 位中的所有 位都被測試之後,A/D 轉換的結果保存在 SAR 內。
當 10 位 A/D 轉換完成時,RDY 會被置‘1’。此時,用戶通過讀取
P_ADC (7014H)或 P_ADC_MUX_Data(702CH) 可以獲得 10 位元 A/D 轉換的資 料。而從該單元讀取資料後,又會使 RDY 自動清‘ 0 ’來重新開始進行 A/D 轉換。若未讀取 P_ADC(7014H)或 P_ADC_MUX_Data(702CH)單元中的資料,
RDY 仍保持為‘1’,則不會啟動下一次的 A/D 轉換。
外部信號由 LIN_IN[1~7]即 IOA[0~6]或通道 MIC_IN 輸入。從 LIN_IN[1~7]
輸入的類比信號直接被送入緩衝器 P_ADC_MUX_Data(702CH);從 MIC_IN 輸 入的類比信號則要經過緩衝器和放大器。AGC 功能將通過 MIC_IN 通道輸入的 類比信號的放大值控制在一定範圍內,然後放大 信號經取樣-保持模組被送至比 較器參與 A/D 轉換值的確定,最後送入 P_ADC (7014H)。
ADC 多通道控制單元 P_ADC_MUX_Ctrl (讀/寫)
註 :
[1] Ready_MUX 只用於 Line_in[7:1].
[2] 一般情況下,該位元總為‘0’。以下情況除外:由於 MIC_IN 的優先順序 高於 AD LINE_IN,所以在 LIN_IN AD 轉換過程裏又有 MIC_IN 時,若 AD 切換到 MIC 輸入,原 LINE_IN 的資料會出現問題,此時 FAIL 被置為
‘1’。 MIC AD 完成之後,該位元被清為‘0’。
LINE_IN 輸入與 IOA[0~6]
類比電壓輸入的儲存單元 P_ADC_MUX_Data(讀) ($702CH)
P_ADC_MUX_Data 單元用於讀出 LINE_IN[7:1]10 位元 ADC 轉換的數位資 料,即:
10 位元 ADC 轉換的數位資料存放格式
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6
D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
範例一: 電壓信號從 IOA0 (lin_in1) 輸入由 B Port LED 顯示二進制值。
電路圖如下圖所示。
#include "SPCE061V004.H"
void Init_B_Port();
main() {
unsigned int ADV;
Init_B_Port(); //規劃 B Port 為同相的低電位輸出 *P_ADC_MUX_Ctrl = 0x0001; //LINE_IN---IOA0 *P_ADC_Ctrl = 0x0001; //ADC 致能
while (1) {
ADV = *P_ADC_LINEIN_Data; //ADC start, dummy read
while ( !(*P_ADC_MUX_Ctrl & 0x8000) ) ; //等待,直到 ADC 完成
ADV = (*P_ADC_LINEIN_Data) & 0xFFC0; //讀取 10 bit ADC 資料,右半邊 6 bit 不要 ADV >>= 6; // 右 移 6 bit
*P_IOB_Buffer = ADV; //*P_IOB_Data = ADV;
*P_Watchdog_Clear = 0x0001; //清看門狗 }
}
//============================================
void Init_B_Port() {
*P_IOB_Dir = 0xffff; //規劃 B Port 為同相的低電位輸出 *P_IOB_Attrib = 0xffff;
*P_IOB_Data = 0;
}
練習 1.
電路圖如下圖所示,做出四個 ADC 顯示在 LCD 上,顯示如下所示(X)為輸 入的類比電壓值。比方說,輸入的電壓是 2.3V,則會顯示,AD1: 2.3v,
注意,你必須要把數位的 10 位元值轉換回相對應的電壓值,求到電壓小數第一 位。四個電阻調整將會個別改變相對的電壓值。
A D 1 : X . X
v
A D 1 : X . Xv
A D 3 : X . Xv
A D 3 : X . Xv
材料需求表:
61*1、LED*16、電阻 330*16、LCD 顯示器*1、可變電阻 10k*4、麵包板*1、單 心線適量。