第 10 章 ADC 類比數位轉換
器
大綱
10.1 類比轉換數位原理
10.2 S3C2440A 的 A/D 轉換器特性
10.3 A/D 轉換器程式設計
10.4 實驗步驟
取樣與保持
由於取樣時間極短,取樣輸出為一串斷續的窄脈衝。要把
每個取樣的窄脈衝信號數位化,是需要一定的時間。
因此在兩次取樣之間,應將取樣的類比信號暫時儲存到下
個取樣脈衝到來,這個動作稱之為保持。
在類比電路設計上,因此需要增加一個取樣 - 保持電路。
為了保證有正確轉換,類比電路要保留著還未轉換的資料
。
一個取樣 - 保持電路可保證類比電路中取樣時,取樣時間
的穩定並儲存,通常使用電容元件來儲存電荷。
取樣與保持
根據數位訊號處理的基本原理, Nyquist 取樣定理,若要
能正確且忠實地呈現所擷取的類比訊號,必須取樣頻率至
少高於最大頻率的 2 倍。
例如,若是輸入一個 100Hz 的正弦波的話,最小的取樣頻
率至少要 2 倍,即是 200Hz 。
雖說理論值是如此,但真正在應用時,最好是接近 10 倍
才會有不錯的還原效果 ( 因取樣點越多 ) 。若針對多通道
的 A/D 轉換器來說,就必須乘上通道數,這樣平均下去,
每一個通道才不會有失真的情況產生。
量化與編碼
量化與編碼電路是 A/D 轉換器的核心組成的部分
,一般對取樣值的量化方式有下列兩種:
只捨去不進位
首先取一最小量化單位 Δ=U/2n , U 是輸入類比電壓的最大值, n
是輸出數位數值的位元數。
當輸入類比電壓 U 在 0~Δ 之間,則歸入 0Δ ,當 U 在 Δ~2Δ 之間,
則歸入 1Δ 。透過這樣的量化方法產生的最大量化誤差為 Δ/2 ,而且
量化誤差總是為正,+ 1/2LSB 。
有捨去有進位
如果量化單位 Δ=2U/(2n+1–1) ,當輸入電壓 U 在 0 ~ Δ/2 之間,歸入
0Δ ,當 U 在 Δ/2~3/2Δ 之間的話,就要歸入 1Δ 。這種量化方法產生
的最大量化誤差為 Δ/2 ,而且量化誤差有正,有負,為 1/2LSB 。
量化結果也造成了所謂的量化誤差。
解析度
指 A/D 轉換器所能分辨的最小類比輸入量。通常
用轉換成數位量的位元數來表示,如 8-bit , 10-b
it , 12-bit 與 16-bit 等。
位元數越高,解析度越高。若小於最小變化量的
輸入類比電壓的任何變化,將不會引起輸出數位
值的變化。
採用 12-bit 的 AD574 ,若是滿刻度為 10V 的話,解析
度即為 10V / 212 = 2.44mV 。
而常用的 8-bit 的 ADC0804 ,若是滿刻度為 5V 的話,
解析度即為 5V / 28 = 19.53mV 。
解析度
選擇適用的 A/D 轉換器是相當重要的,並不是解
析度越高越好。
不需要解析度高的場合,所擷取到的大多是雜訊。
解析度太低,會有無法取樣到所需的訊號。
轉換誤差
通常以相對誤差的形式輸出,其表示 A/D 轉換器
實際輸出數位值與理想輸出數位值的差別,並用
最低有效位 LSB 的倍數表示。
轉換時間
轉換時間是 A/D 轉換完成一次所需的時間。
從啟動信號開始到轉換結束並得到穩定的數位輸出值為
止的時間間隔。轉換時間越短則轉換速度就越快。
精準度
對於 A/D
轉換器,精準度指的是在輸出端產生所
設定的數位數值,其實際需要的類比輸入值與理論
上要求的類比輸入值之差。
精確度依計算方式不同,可以區分為
絕對精確度
相對精確度;
所謂的絕對精確度是指實際輸出值與理想理論輸出
值的接近程度,其相關的關係是如下式子所列:
絕對精確度=
實際輸出 理想輸出
100%
理想的輸出
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
10.1 類比轉換數位原理
相對精準度指的是滿刻度值校準以後,任意數位輸
出所對應的實際類比輸入值 ( 中間值 ) 與理論值 ( 中
間值 ) 之差。
對於線性 A/D 轉換器,相對精準度就是它的線性程
度。由於電路製作上影響,會產生像是非線性誤差
,或是量化誤差等減低相對精準度的因素。
相對精確度是指實際輸出值與一理想理論之滿刻輸
出值之接近程度,其相關的關係是如下式子所列:
實際輸出 理想輸出
相對精準度= 100%
理想的滿刻度輸出
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
10.1 類比轉換數位原理
S3C2440 支援觸控螢幕介面。
A/D 轉換器的主要特性:
解析度: ±1LSB
微分線性度誤差: ±1.0LSB
積分線形度誤差: ±2.0LSB
最大轉化速率: 500KSPS
類比輸入電壓範圍: 0~3.3v
電源供應電壓: 3.3V
低功率消耗
內建取樣保持功能
個別 X/Y 位置轉換模式
自動(循序的) Z/Y 位置轉換模式
等待中斷模式
在這裡需注意到,若是使用了觸控螢幕裝置, 對於
觸控螢幕介面介面, XM 或 PM 僅能連接至接地點。
反之當未使用到觸控螢幕裝置時,對於正常的 A/D
轉器器的轉換, XM 或 PM 需連接至類比輸入訊號
端。
.A/D 轉換時間
當 GCLK 頻率為 50MHz ,以及除頻數值是 49 ,那麼 10-
bit 轉換時間如下:
A/D 轉換頻率 =50MHz / ( 49+1 ) =1MHz
轉換時間 =1/ ( 1MHz/5 個週期) =1/200KHz=5us
A/D 轉換器設計在最高的 2.5MHz 時脈下,所以轉換速率
可以達到 500KSPS 。
A/D 轉換實驗相關暫存器
以下,我們將介紹與 A/D 轉換有關的暫存器。而
另外一些與觸控螢幕有關的暫存器,則在觸控螢
幕章節中加以介紹。
A/D 控制 (ADCCON) 暫存器
如表 10.1 所示,為 A/D 控制 (ADCCON) 暫存器
的位址和各個位元定義一覽表。
表 10.1 A/D 控制 (ADCCON) 暫存器的位址和各個
位元定義一覽表
下面的程式片段則實現此功能的設定:
rADCCON
= (1<<14)|(preScaler<<6)|(ch<<3) // 設
定前置分頻器與通道
啟動取樣步驟
將 ADCCON 暫存器的 bit-0
設定為 1 ,即可啟動
轉換,當啟動轉換後,該位元會被自動清除。同
時啟動轉換時還需要指定轉換通道。
下面程式啟動通道 0 的取樣轉換:
rADCCON|=0x1;
擷取轉換結果
當 A/D 轉換結束後,可以讀取ADCDAT 暫存器
的內容下面程式等待通道 0 的 A/D 轉換,完畢後
讀取資料,實現的程式如下:
while(!(rADCCON & 0x8000));
// 等待,直到 A/D 轉換結束。
return ( (int)rADCDAT0 & 0x3ff )
// 擷取轉換後的資料。
int Read_Adc(int ch)A/D 讀取通道函式
參數說明: ch : 設定那個通道被選擇。
主要功能:指定某一通道( ch )進行轉換,並讀出轉
換數值
相關程式範例,如下所列:
int ReadAdc(int ch){
int i;
static int prevCh=-1;
rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); // 設定通道
if(prevCh!=ch){
rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); // 設定通道
for(i=0;i<LOOP;i++);// 延遲以設定下一個通道
prevCh=ch;
}
rADCCON|=0x1; // 啟動 A/DC
while(rADCCON & 0x1); // 檢查是否 Enable_start 為低電壓
while(!(rADCCON & 0x8000));
// 檢查是否 EC(End of Conversion) 旗標是高電壓
return ( (int)rADCDAT0 & 0x3ff );
// 回傳轉換後的數位數值,且取 10-bit
}
//rADCCON=(0<<14)|(19<<6)|(7<<3)|(1<<2);
// 待機模式以減少功率的消耗
rADCCON = rADCCON_save;
Uart_Printf("\nrADCCON = 0x%x\n", rADCCON);
}
相關程式範例,如下所列:
void Main(void){
PortInit(); //S3C2440A 的 GPIO 初始化
Uart_Select(1 ); // 選擇串列埠 1
Uart_Init( 0,115200 ); // 串列傳輸速率 115200
Uart_Printf("test ADC \n");
Test_Adc();}
}
上面是關於該實驗所涉及到的部分函式,完整的專
案程式請參考附贈光碟目錄的 \ADS\CH10\ADC 檔
案夾。
若無法按照程式執行,檢查相關纜線是否正
確連接,再完成此章的實驗練習
請讀者重新編譯本章範例,並驗證是否正常工作。
若是無法工作,請檢查是否有纜線為正確連接,或
是相關設定未正確配置。
請讀者試著將 A/D 轉換器轉換的高四位元顯示對應
到 4 顆 LED ,並驗證是否能正確顯示。