Anda di halaman 1dari 33

嵌入式系統概論 - 以 S3C2440 核心為架

第 10 章 ADC 類比數位轉換

大綱

10.1 類比轉換數位原理
10.2 S3C2440A 的 A/D 轉換器特性
10.3 A/D 轉換器程式設計
10.4 實驗步驟

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.1 類比轉換數位原理

A/D 轉換器 (Analog-to-Digital Converter) 即是將類


比訊號 ( 電壓或是電流的形式 ) 轉換成數位信號。
這種數位訊號可讓電腦週邊介面或是微處理機來加
以操作或是使用。
一般 A/D 轉換器的選用考量因素大致是以
 解析度
 轉換速度

在輸出位元數越多 ( 解析度越好 ) 以及轉換時間越快


的要求下,其製造成本與單價就越貴。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.1 類比轉換數位原理

一個完整的 A/D 轉換過程中,必須包括取樣


、保持、量化與編碼等幾部分電路。
A/D 轉換器需注意的項目:
 取樣與保持
 量化與編碼
 解析度
 轉換誤差
 轉換時間
 絕對精準度、相對精準度

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.1 類比轉換數位原理

取樣與保持
 由於取樣時間極短,取樣輸出為一串斷續的窄脈衝。要把
每個取樣的窄脈衝信號數位化,是需要一定的時間。
 因此在兩次取樣之間,應將取樣的類比信號暫時儲存到下
個取樣脈衝到來,這個動作稱之為保持。
 在類比電路設計上,因此需要增加一個取樣 - 保持電路。
為了保證有正確轉換,類比電路要保留著還未轉換的資料

 一個取樣 - 保持電路可保證類比電路中取樣時,取樣時間
的穩定並儲存,通常使用電容元件來儲存電荷。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.1 類比轉換數位原理

取樣與保持
 根據數位訊號處理的基本原理, Nyquist 取樣定理,若要
能正確且忠實地呈現所擷取的類比訊號,必須取樣頻率至
少高於最大頻率的 2 倍。
 例如,若是輸入一個 100Hz 的正弦波的話,最小的取樣頻
率至少要 2 倍,即是 200Hz 。
 雖說理論值是如此,但真正在應用時,最好是接近 10 倍
才會有不錯的還原效果 ( 因取樣點越多 ) 。若針對多通道
的 A/D 轉換器來說,就必須乘上通道數,這樣平均下去,
每一個通道才不會有失真的情況產生。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.1 類比轉換數位原理

量化與編碼
 量化與編碼電路是 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 。

 量化結果也造成了所謂的量化誤差。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.1 類比轉換數位原理

解析度
 指 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 。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.1 類比轉換數位原理

解析度
 選擇適用的 A/D 轉換器是相當重要的,並不是解
析度越高越好。
 不需要解析度高的場合,所擷取到的大多是雜訊。
 解析度太低,會有無法取樣到所需的訊號。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.1 類比轉換數位原理

轉換誤差
 通常以相對誤差的形式輸出,其表示 A/D 轉換器
實際輸出數位值與理想輸出數位值的差別,並用
最低有效位 LSB 的倍數表示。

轉換時間
 轉換時間是 A/D 轉換完成一次所需的時間。
 從啟動信號開始到轉換結束並得到穩定的數位輸出值為
止的時間間隔。轉換時間越短則轉換速度就越快。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.1 類比轉換數位原理

精準度
 對於 A/D
轉換器,精準度指的是在輸出端產生所
設定的數位數值,其實際需要的類比輸入值與理論
上要求的類比輸入值之差。
 精確度依計算方式不同,可以區分為
 絕對精確度
 相對精確度;
 所謂的絕對精確度是指實際輸出值與理想理論輸出
值的接近程度,其相關的關係是如下式子所列:

絕對精確度=
實際輸出  理想輸出
 100%
理想的輸出
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
10.1 類比轉換數位原理

相對精準度指的是滿刻度值校準以後,任意數位輸
出所對應的實際類比輸入值 ( 中間值 ) 與理論值 ( 中
間值 ) 之差。
對於線性 A/D 轉換器,相對精準度就是它的線性程
度。由於電路製作上影響,會產生像是非線性誤差
,或是量化誤差等減低相對精準度的因素。
相對精確度是指實際輸出值與一理想理論之滿刻輸
出值之接近程度,其相關的關係是如下式子所列:

實際輸出  理想輸出
相對精準度=  100%
理想的滿刻度輸出
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
10.1 類比轉換數位原理

基本上,一個 n-bit 的轉換器就有 n 個數位輸


出位元。這種所產生的位元數值是等效於在 A
/D 轉換器的輸入端的類比大小特性值。
如果外部所要輸入電壓或是電流量較大的話
,所轉換後的的位元數值也就較大。
透過並列埠介面或是微處理機連接 A/D 轉換
器時,必須了解如何去控制或是驅動這顆 A/D
轉換器的問題。因此需要瞭解到 A/D 轉換器
上的控制信號有哪些。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.1 類比轉換數位原理

圖 10.1 、 A/D 轉換器的基本腳位配置圖


如圖 10.1 所示,一個 A/D 轉換器具備了:
 輸出引線 (D0~D7 ,以 8-bit 為例 ) ,
 一個開始轉換 (Start of Converter , SOC)
 結束轉換 (End of Conversion , EOC) 訊號。
 輸出致能腳位

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.2 S3C2440A 的 A/D 轉換器特性

S3C2440 內建了一個 8 通道 10-bit A/D 轉換器,且其


以 2.5MHz A/D 轉換器時脈下,可以具備最高的 500
Ksps 最高轉換率。
此 A/D 轉換器提供取樣保持功能以及電源功率下降
的功能。
A/D 轉換器也整合了觸控螢幕功能。觸控螢幕介面
能控制 / 選擇觸控螢幕的 X 與 Y 位置轉換的端子
(XP, XM, YP, YM) 。
觸控螢幕介面包含了觸控螢幕端子控制邏輯與具備
中斷產生邏輯的 A/D 轉換器介面邏輯。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.2 S3C2440A 的 A/D 轉換器特性

S3C2440 支援觸控螢幕介面。
A/D 轉換器的主要特性:
 解析度: ±1LSB
 微分線性度誤差: ±1.0LSB
 積分線形度誤差: ±2.0LSB
 最大轉化速率: 500KSPS
 類比輸入電壓範圍: 0~3.3v
 電源供應電壓: 3.3V
 低功率消耗
 內建取樣保持功能
 個別 X/Y 位置轉換模式
 自動(循序的) Z/Y 位置轉換模式
 等待中斷模式

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.2 S3C2440A 的 A/D 轉換器特性
 如圖 10.2 所示,為 S3C2440A A/D 轉換器和觸控螢幕介面的功能方塊圖

 AIN[7] 應該接提升電阻到 VDDA_ADC 。觸控螢幕的 X 通道應連接到 S3
C2440 的 AIN[7] ,觸控螢幕的 Y 通道應該連接到 AIN[5] 。

圖 10.2 、 S3C2440A A/D 轉換器和觸控螢幕介面的功能方塊圖


嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
10.2 S3C2440A 的 A/D 轉換器特性

在這裡需注意到,若是使用了觸控螢幕裝置, 對於
觸控螢幕介面介面, 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 。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.2 S3C2440A 的 A/D 轉換器特性

A/D 轉換實驗相關暫存器
 以下,我們將介紹與 A/D 轉換有關的暫存器。而
另外一些與觸控螢幕有關的暫存器,則在觸控螢
幕章節中加以介紹。
 A/D 控制 (ADCCON) 暫存器
 如表 10.1 所示,為 A/D 控制 (ADCCON) 暫存器
的位址和各個位元定義一覽表。
 表 10.1 A/D 控制 (ADCCON) 暫存器的位址和各個
位元定義一覽表

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.2 S3C2440A 的 A/D 轉換器特性
表 10.1 、 ADCCON 暫存器之位址與各個位元定義一覽表

在此需注意到,當觸控螢幕端子 (YM , YP , XM 與 XP) 被除能後,這些輸入


IO 埠能以 A/D 轉換器的類比輸入埠 (AIN4 , IN5 , AIN6 與 AIN7) 來使用。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.2 S3C2440A 的 A/D 轉換器特性
 A/D 資料( ADCDAT0 )暫存器
 如表 10.2 所示,為 A/D 資料( ADCDAT0 )暫存器的位址和各個位元定義一覽表。

表 10.2 、 ADCDAT0 暫存器的位址和各個位元定義一覽表

 ADCDAT0 工作在正常 A/D 轉換器轉換模式下。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.3 A/D 轉換器程式設計

圖 10.3 、 A/D 的專案架構的視窗圖


嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
10.3 A/D 轉換器程式設計

設定 A/D 取樣的時脈頻率


 假定 CPU 主時脈的頻率為 50MHZ ,並且將 A/D 取樣的
前置分頻器 (Prescaler) 設為 49 ,而完成一次轉換至少需
要 5 個時脈週期,則取樣頻率可以採用下面公式來計算:
 f = 50M / ( 49+1 ) /5 = 200 KHZ 轉換時間 =1/f=0.5us

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.3 A/D 轉換器程式設計

下面的程式片段則實現此功能的設定:
 rADCCON
= (1<<14)|(preScaler<<6)|(ch<<3) // 設
定前置分頻器與通道

啟動取樣步驟
 將 ADCCON 暫存器的 bit-0
設定為 1 ,即可啟動
轉換,當啟動轉換後,該位元會被自動清除。同
時啟動轉換時還需要指定轉換通道。

下面程式啟動通道 0 的取樣轉換:
 rADCCON|=0x1;

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.3 A/D 轉換器程式設計

擷取轉換結果
 當 A/D 轉換結束後,可以讀取ADCDAT 暫存器
的內容下面程式等待通道 0 的 A/D 轉換,完畢後
讀取資料,實現的程式如下:
while(!(rADCCON & 0x8000));
// 等待,直到 A/D 轉換結束。
return ( (int)rADCDAT0 & 0x3ff )
// 擷取轉換後的資料。
 int Read_Adc(int ch)A/D 讀取通道函式
 參數說明: ch : 設定那個通道被選擇。
 主要功能:指定某一通道( ch )進行轉換,並讀出轉
換數值

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.3 A/D 轉換器程式設計

 相關程式範例,如下所列:
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
}

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.3 A/D 轉換器程式設計

ADC 測試程式 void Test_Adc(void)


 功能說明:初始化 ADC 相關暫存器,並讀 ADC 通道讀寫
函式。
 相關程式範例,如下所列:
void Test_Adc(void) {
int a0=0; // 設定通道 0 初始數位值
U32 rADCCON_save = rADCCON;

Uart_Printf( "ADC INPUT Test, press ESC key to exit !\n" ) ;


preScaler = ADC_FREQ;
Uart_Printf("ADC conv. freq. = %dHz\n",preScaler);
preScaler = 50000000/ADC_FREQ -1;
//PCLK:50.7MHz

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.3 A/D 轉換器程式設計
Uart_Printf("PCLK/ADC_FREQ - 1 = %d\n",preScaler);

while( Uart_GetKey() != ESC_KEY ){


a0=ReadAdc(0);
Uart_Printf( "AIN0: %04d\n", a0 );
Delay( 500 ) ;
}

//rADCCON=(0<<14)|(19<<6)|(7<<3)|(1<<2);
// 待機模式以減少功率的消耗
rADCCON = rADCCON_save;
Uart_Printf("\nrADCCON = 0x%x\n", rADCCON);
}

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.3 A/D 轉換器程式設計
主函式 Main
 功能說明:主要實現對模擬通道 0 的轉換,透過調整接
在通道 0 上的可變電阻來改變類比的輸入,透過串列埠
將獲得的資料顯示到串列埠。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.3 A/D 轉換器程式設計

相關程式範例,如下所列:
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 檔
案夾。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.4 實驗步驟
為了測試本實驗的工作,我們需按照下列的步驟依
序執行:
 兩條纜線連接:首先,用串列纜線將 PC 主機的 COM1 與
開發平台的 UART1 連起來,再用 USB 纜線 (A 接頭 ->B
接頭 ) 將 PC 主機的 USB 埠與開發平台的 USB 裝置介面
連起來,最後插上 12V 電源 。
 開啟專案編譯:雖然在範例光碟片中,已經包含了完整的
程式範例 -ADC ,但建議讀者還是重新開啟新的專案,並
產生一個 bin 燒錄檔。
 下載並執行:該步驟操作過程與上一章的 6.3.2.1 小節的執
行完整的測試程式的步驟是類似的。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


10.4 實驗步驟
觀察實驗結果是否與程式內容相符。實驗結果應該
是讀者旋轉後,透過 A/D 轉換器,即可抓取正確
的類比電壓轉換後的數值並顯示在超級終端機上。
ADC conv. freq. = 2500000Hz
PCLK/ADC_FREQ - 1 = 19
AIN0: 0843
AIN0: 0844
AIN0: 0845

若無法按照程式執行,檢查相關纜線是否正
確連接,再完成此章的實驗練習

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和


問題與討論

請讀者重新編譯本章範例,並驗證是否正常工作。
若是無法工作,請檢查是否有纜線為正確連接,或
是相關設定未正確配置。
請讀者試著將 A/D 轉換器轉換的高四位元顯示對應
到 4 顆 LED ,並驗證是否能正確顯示。

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

Anda mungkin juga menyukai