1 / 17

ADC 類比轉數位實驗

ADC 類比轉數位實驗. 瞭解類比轉數位的基本原理 寫程式對類比輸入進行採集和轉換,並將結果顯示在超級終端機. 類比轉數位原理. 經常遇到的物理參數 如電流、電壓、溫度、壓力、速度等電量或非電量都是模擬量 模擬量的大小是連續分佈的,且經常也是時間上的連續函數 類比轉換成數位信號需經過 取樣 ——> 量化 ——> 編碼三個基本過程(數位化過程). 類比轉數位原理. 取樣 按取樣定理對類比信號進行等時間間隔取樣 將得到的一系列時域上的樣值去代替 u=f(t) ,即用 u0 、 u1 、 … 、 un 代替 u=f(t) 這些樣值在時間上是離散的值

gili
Download Presentation

ADC 類比轉數位實驗

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ADC類比轉數位實驗 瞭解類比轉數位的基本原理 寫程式對類比輸入進行採集和轉換,並將結果顯示在超級終端機

  2. 類比轉數位原理 • 經常遇到的物理參數 • 如電流、電壓、溫度、壓力、速度等電量或非電量都是模擬量 • 模擬量的大小是連續分佈的,且經常也是時間上的連續函數 • 類比轉換成數位信號需經過 • 取樣——>量化——>編碼三個基本過程(數位化過程)

  3. 類比轉數位原理 • 取樣 • 按取樣定理對類比信號進行等時間間隔取樣 • 將得到的一系列時域上的樣值去代替u=f(t),即用u0、u1、…、un代替u=f(t) • 這些樣值在時間上是離散的值 • 但在幅度上仍然是連續類比量

  4. 類比轉數位原理 • 量化 • 在幅值上再用離散值來表示。方法是用一個量化因數Q去度量;u0、u1、…,便得到整量化的數字量。 • u0=2.4Q 2Q 010 • u1=4.0Q 4Q 100 • u2=5.2Q 5Q 101 • u3=5.8Q 5Q 101 • 編碼 • 將整量化後的數位量進行編碼,以便讀入和識別; • 編碼僅是對數位量的一種處理方法。 • 例如:Q=0.5V/格,設用三位元(二進編碼)

  5. S3C2410X的A/D簡介 • 8通路10位A/D轉換器 • 支援觸控螢幕介面 • 獨立/自動X/Y位置轉換模式 • 轉換器的主要特性: • 解析度:±1LSB • 微分線性度誤差: ±1.5LSB • 積分線形度誤差: ±1LSB • 最大轉化速率:500KSPS • 輸入電壓範圍:0~3.3v • A/D轉換器 • 至少工作在2.5MHz Clock rate下 • 所以轉換速率可以達到500KSPS

  6. S3C2410X A/D轉換器和觸控螢幕介面 • AIN[7]接上拉電阻到VDDA_ADC, 觸控螢幕的 • X通道連接到S3C2410的AIN[7] • Y通道應該連接到AIN[5]

  7. ADC 應用電路

  8. ADC 應用電路位置 J1-ADC輸入介面 U2-ADC AIN1溫度感測器

  9. LM35D溫度感測器元件 • 輸出電壓與攝氏溫度成正比例的溫度傳感器, 可直接讀出溫度值 • 使用時無需外圍元件,也無需調試和較正(標定) • 只要外接一個1V的表頭(如指針式或數字式的萬用表) • 特性: • 靈敏度為10mV/℃ • 工作溫度範圍為0℃-100℃ • 工作電壓為4-30V • 精度為±1℃ • 最大線性誤差為±0.5℃ • 靜態電流為80uA • 該器件如塑封三極管(TO-92)

  10. 設置A/D取樣的時鐘頻率 • 主時鐘的頻率為50MHZ, • A/D取樣預分頻值設為49 • 而完成一次轉換至少需要5個Clock週期 • 則取樣頻率: • f = 50M /(49+1)/5 = 200 KHZ • 轉換時間=1/f=0.5us • 程式實現該功能 • rADCCON=(rADCCON&0xC03F)|(~0xC03F)&(0x31<<6) //設置預分頻值

  11. A/D控制暫存器ADCCON

  12. A/D資料暫存器ADCDAT0

  13. 啟動取樣步驟 • 允許ADC的時鐘輸出 • rCLKCON = rCLKCON | (1<<15) • 將ADCCON暫存器的BIT0置1 • 可以啟動轉換,當啟動轉換後,該位會被自動清除 • 同時啟動轉換時還需要指定轉換通道 • 下面程式啟動通道0的取樣轉換 • rADCCON=0x1|(0x0<<3)

  14. 獲取轉換結果 • 當A/D轉換結束後,可以讀取ADCDAT暫存器的內容 • 下面程式等待通道0的A/D轉換 • 實現的程式如下: • while(!(rADCCON & 0x8000)); //等待,直到A/D轉換結束 • data=rADCDAT; //獲得轉換後的資料

  15. 參數說明:ch : 決定那個通道被選擇   主要功能:指定某一通道(ch)進行轉換,並讀出轉換值 該函數的程式如下: /************************************************************************** Function name: Read_Adc Parameter : ch : ADC的通道,範圍0~7 Description : 讀取相應通道ch的類比轉數位的值 Return : 返回類比轉數位的值 Argument : Autor & date : **************************************************************************/ int ReadAdc(int ch) { int i; static int prevCh=-1; rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); //setup channel if(prevCh!=ch) { rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); //setup channel for(i=0;i<LOOP;i++); //delay to set up the next channel prevCh=ch; } rADCCON|=0x1; //start ADC while(rADCCON & 0x1); //check if Enable_start is low while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high return ( (int)rADCDAT0 & 0x3ff ); } int Read_Adc(unsigned char ch)A/D讀取通道函數

  16. 功能說明:初始化ADC相關暫存器,並讀ADC通道讀寫函數功能說明:初始化ADC相關暫存器,並讀ADC通道讀寫函數 主要程式如下: /************************************************************************** Function name: TestADC Parameter : void Description : 讀通道0,並將讀取的值通過串列埠列印出來 Return : void Argument : 按'ESC'鍵退出實驗測試 Autor & date : **************************************************************************/ void Test_Adc(void) { int a0=0; //Initialize variables U32 rADCCON_save = rADCCON; preScaler = ADC_FREQ; printf("ADC conv. freq. = %dHz\n",preScaler); preScaler = GetMasterClock()/ADC_FREQ -1; //PCLK:50.7MHz printf("PCLK/ADC_FREQ - 1 = %d\n",preScaler); while( getkey() != ESC_KEY ) { a0=ReadAdc(0); printf( "AIN0: %04d\n", a0 ); Delay( 80 ) ; } rADCCON = rADCCON_save; printf("\nrADCCON = 0x%x\n", rADCCON); } ADC測試程式void Test_Adc(void)

  17. 功能說明:主要實現對模擬通道0的轉換,通過調節接在通道0上的可調功能說明:主要實現對模擬通道0的轉換,通過調節接在通道0上的可調 電阻來改變模擬量的輸入,通過串列埠將獲得的資料回顯到串列埠。 主要程式如下: /*************************************************************************** Function name: Main Parameter : void Description : 初始化系統,串列埠,並調用ADC實驗函數 Return : void Argument : Autor & date : **************************************************************************/ void Main(void) { BoardInitStart(); //系統初始化,MMU初始化 SystemClockInit(); //系統時鐘初始化 MemCfgInit(); //設置NAND FLASH的配置暫存器 PortInit(); //S3C2410X的GPIO初始化 SerialSwitch(0); //選擇串列埠0 SerialChgBaud(115200); //串列傳輸速率115200 while( 1 ) { printf("FS2410XP ADC Test,please Enter 'ESC' to exit\n"); Test_Adc(); //調用ADC實驗函數 } } 主函數Main

More Related