450 likes | 1.11k Views
第 10 章 ADC 類比數位轉換器. 大綱. 10.1 類比轉換數位原理 10 .2 S3C2440A 的 A/D 轉換器特性 10 .3 A/D 轉換器程式設計 10.4 實驗步驟. 10 .1 類比轉換數位原理. A/D 轉換器 (Analog-to-Digital Converter) 即是將類比訊號 ( 電壓或是電流的形式 ) 轉換成數位信號。 這種數位訊號可讓電腦週邊介面或是微處理機來加以操作或是使用。 一般 A/D 轉換器的選用考量因素大致是以 解析度 轉換速度
E N D
大綱 • 10.1 類比轉換數位原理 • 10.2 S3C2440A的A/D轉換器特性 • 10.3 A/D轉換器程式設計 • 10.4實驗步驟
10.1 類比轉換數位原理 • A/D轉換器(Analog-to-Digital Converter)即是將類比訊號(電壓或是電流的形式)轉換成數位信號。 • 這種數位訊號可讓電腦週邊介面或是微處理機來加以操作或是使用。 • 一般A/D轉換器的選用考量因素大致是以 • 解析度 • 轉換速度 • 在輸出位元數越多(解析度越好)以及轉換時間越快的要求下,其製造成本與單價就越貴。
10.1 類比轉換數位原理 • 一個完整的A/D轉換過程中,必須包括取樣、保持、量化與編碼等幾部分電路。 • A/D轉換器需注意的項目: • 取樣與保持 • 量化與編碼 • 解析度 • 轉換誤差 • 轉換時間 • 絕對精準度、相對精準度
10.1 類比轉換數位原理 • 取樣與保持 • 由於取樣時間極短,取樣輸出為一串斷續的窄脈衝。要把每個取樣的窄脈衝信號數位化,是需要一定的時間。 • 因此在兩次取樣之間,應將取樣的類比信號暫時儲存到下個取樣脈衝到來,這個動作稱之為保持。 • 在類比電路設計上,因此需要增加一個取樣-保持電路。為了保證有正確轉換,類比電路要保留著還未轉換的資料。 • 一個取樣-保持電路可保證類比電路中取樣時,取樣時間的穩定並儲存,通常使用電容元件來儲存電荷。
10.1 類比轉換數位原理 • 取樣與保持 • 根據數位訊號處理的基本原理,Nyquist取樣定理,若要能正確且忠實地呈現所擷取的類比訊號,必須取樣頻率至少高於最大頻率的2倍。 • 例如,若是輸入一個100Hz的正弦波的話,最小的取樣頻率至少要2倍,即是200Hz。 • 雖說理論值是如此,但真正在應用時,最好是接近10倍才會有不錯的還原效果(因取樣點越多)。若針對多通道的A/D轉換器來說,就必須乘上通道數,這樣平均下去,每一個通道才不會有失真的情況產生。
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。 • 量化結果也造成了所謂的量化誤差。
10.1 類比轉換數位原理 • 解析度 • 指A/D轉換器所能分辨的最小類比輸入量。通常用轉換成數位量的位元數來表示,如8-bit,10-bit,12-bit與16-bit等。 • 位元數越高,解析度越高。若小於最小變化量的輸入類比電壓的任何變化,將不會引起輸出數位值的變化。 • 採用12-bit 的AD574,若是滿刻度為10V的話,解析度即為10V / 212 = 2.44mV。 • 而常用的8-bit 的ADC0804,若是滿刻度為5V的話,解析度即為5V / 28 = 19.53mV。
10.1 類比轉換數位原理 • 解析度 • 選擇適用的A/D轉換器是相當重要的,並不是解析度越高越好。 • 不需要解析度高的場合,所擷取到的大多是雜訊。 • 解析度太低,會有無法取樣到所需的訊號。
10.1 類比轉換數位原理 • 轉換誤差 • 通常以相對誤差的形式輸出,其表示A/D轉換器實際輸出數位值與理想輸出數位值的差別,並用最低有效位LSB的倍數表示。 • 轉換時間 • 轉換時間是A/D轉換完成一次所需的時間。 • 從啟動信號開始到轉換結束並得到穩定的數位輸出值為止的時間間隔。轉換時間越短則轉換速度就越快。
10.1 類比轉換數位原理 • 精準度 • 對於A/D轉換器,精準度指的是在輸出端產生所設定的數位數值,其實際需要的類比輸入值與理論上要求的類比輸入值之差。 • 精確度依計算方式不同,可以區分為 • 絕對精確度 • 相對精確度; • 所謂的絕對精確度是指實際輸出值與理想理論輸出值的接近程度,其相關的關係是如下式子所列: 絕對精確度=
10.1 類比轉換數位原理 • 相對精準度指的是滿刻度值校準以後,任意數位輸出所對應的實際類比輸入值(中間值)與理論值(中間值)之差。 • 對於線性A/D轉換器,相對精準度就是它的線性程度。由於電路製作上影響,會產生像是非線性誤差,或是量化誤差等減低相對精準度的因素。 • 相對精確度是指實際輸出值與一理想理論之滿刻輸出值之接近程度,其相關的關係是如下式子所列: 相對精準度=
10.1 類比轉換數位原理 • 基本上,一個n-bit的轉換器就有n個數位輸出位元。這種所產生的位元數值是等效於在A/D轉換器的輸入端的類比大小特性值。 • 如果外部所要輸入電壓或是電流量較大的話,所轉換後的的位元數值也就較大。 • 透過並列埠介面或是微處理機連接A/D轉換器時,必須了解如何去控制或是驅動這顆A/D轉換器的問題。因此需要瞭解到A/D轉換器上的控制信號有哪些。
10.1 類比轉換數位原理 • 如圖10.1所示,一個A/D轉換器具備了: • 輸出引線(D0~D7,以8-bit為例), • 一個開始轉換(Start of Converter,SOC) • 結束轉換(End of Conversion,EOC)訊號。 • 輸出致能腳位 圖10.1、A/D轉換器的基本腳位配置圖
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轉換器介面邏輯。
10.2 S3C2440A的A/D轉換器特性 • S3C2440支援觸控螢幕介面。 • A/D轉換器的主要特性: • 解析度:±1LSB • 微分線性度誤差: ±1.0LSB • 積分線形度誤差: ±2.0LSB • 最大轉化速率:500KSPS • 類比輸入電壓範圍:0~3.3v • 電源供應電壓:3.3V • 低功率消耗 • 內建取樣保持功能 • 個別X/Y位置轉換模式 • 自動(循序的)Z/Y位置轉換模式 • 等待中斷模式
10.2 S3C2440A的A/D轉換器特性 • 如圖10.2所示,為S3C2440A A/D轉換器和觸控螢幕介面的功能方塊圖。 • AIN[7]應該接提升電阻到VDDA_ADC。觸控螢幕的X通道應連接到S3C2440的AIN[7],觸控螢幕的Y通道應該連接到AIN[5]。 圖10.2、 S3C2440A A/D轉換器和觸控螢幕介面的功能方塊圖
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。
10.2 S3C2440A的A/D轉換器特性 • A/D轉換實驗相關暫存器 • 以下,我們將介紹與A/D轉換有關的暫存器。而另外一些與觸控螢幕有關的暫存器,則在觸控螢幕章節中加以介紹。 • A/D控制(ADCCON)暫存器 • 如表10.1所示,為A/D控制(ADCCON)暫存器的位址和各個位元定義一覽表。 • 表10.1 A/D控制(ADCCON)暫存器的位址和各個位元定義一覽表
10.2 S3C2440A的A/D轉換器特性 表10.1、 ADCCON暫存器之位址與各個位元定義一覽表 在此需注意到,當觸控螢幕端子(YM,YP,XM與XP)被除能後,這些輸入IO埠能以A/D轉換器的類比輸入埠(AIN4,IN5,AIN6與AIN7)來使用。
10.2 S3C2440A的A/D轉換器特性 • A/D資料(ADCDAT0)暫存器 • 如表10.2所示,為A/D資料(ADCDAT0)暫存器的位址和各個位元定義一覽表。 • ADCDAT0工作在正常A/D轉換器轉換模式下。 表10.2、ADCDAT0暫存器的位址和各個位元定義一覽表
10.3 A/D轉換器程式設計 圖10.3、 A/D的專案架構的視窗圖
10.3 A/D轉換器程式設計 • 設定A/D取樣的時脈頻率 • 假定CPU主時脈的頻率為50MHZ,並且將A/D取樣的前置分頻器(Prescaler)設為49,而完成一次轉換至少需要5個時脈週期,則取樣頻率可以採用下面公式來計算: • f = 50M /(49+1)/5 = 200 KHZ 轉換時間=1/f=0.5us
10.3 A/D轉換器程式設計 • 下面的程式片段則實現此功能的設定: • rADCCON = (1<<14)|(preScaler<<6)|(ch<<3) //設定前置分頻器與通道 • 啟動取樣步驟 • 將ADCCON暫存器的bit-0設定為1,即可啟動轉換,當啟動轉換後,該位元會被自動清除。同時啟動轉換時還需要指定轉換通道。 • 下面程式啟動通道0的取樣轉換: • rADCCON|=0x1;
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)進行轉換,並讀出轉換數值
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 }
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
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); }
10.3 A/D轉換器程式設計 • 主函式Main • 功能說明:主要實現對模擬通道0的轉換,透過調整接在通道0上的可變電阻來改變類比的輸入,透過串列埠將獲得的資料顯示到串列埠。
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檔案夾。
10.4實驗步驟 • 為了測試本實驗的工作,我們需按照下列的步驟依序執行: • 兩條纜線連接:首先,用串列纜線將PC主機的COM1與開發平台的UART1連起來,再用USB纜線(A接頭->B接頭)將PC主機的USB埠與開發平台的USB裝置介面連起來,最後插上12V電源 。 • 開啟專案編譯:雖然在範例光碟片中,已經包含了完整的程式範例-ADC,但建議讀者還是重新開啟新的專案,並產生一個bin燒錄檔。 • 下載並執行:該步驟操作過程與上一章的6.3.2.1小節的執行完整的測試程式的步驟是類似的。
10.4實驗步驟 • 觀察實驗結果是否與程式內容相符。實驗結果應該是讀者旋轉後,透過A/D轉換器,即可抓取正確的類比電壓轉換後的數值並顯示在超級終端機上。 ADC conv. freq. = 2500000Hz PCLK/ADC_FREQ - 1 = 19 AIN0: 0843 AIN0: 0844 AIN0: 0845 • 若無法按照程式執行,檢查相關纜線是否正確連接,再完成此章的實驗練習
問題與討論 • 請讀者重新編譯本章範例,並驗證是否正常工作。若是無法工作,請檢查是否有纜線為正確連接,或是相關設定未正確配置。 • 請讀者試著將A/D轉換器轉換的高四位元顯示對應到4顆LED,並驗證是否能正確顯示。