170 likes | 438 Views
ADC 類比轉數位實驗. 瞭解類比轉數位的基本原理 寫程式對類比輸入進行採集和轉換,並將結果顯示在超級終端機. 類比轉數位原理. 經常遇到的物理參數 如電流、電壓、溫度、壓力、速度等電量或非電量都是模擬量 模擬量的大小是連續分佈的,且經常也是時間上的連續函數 類比轉換成數位信號需經過 取樣 ——> 量化 ——> 編碼三個基本過程(數位化過程). 類比轉數位原理. 取樣 按取樣定理對類比信號進行等時間間隔取樣 將得到的一系列時域上的樣值去代替 u=f(t) ,即用 u0 、 u1 、 … 、 un 代替 u=f(t) 這些樣值在時間上是離散的值
E N D
ADC類比轉數位實驗 瞭解類比轉數位的基本原理 寫程式對類比輸入進行採集和轉換,並將結果顯示在超級終端機
類比轉數位原理 • 經常遇到的物理參數 • 如電流、電壓、溫度、壓力、速度等電量或非電量都是模擬量 • 模擬量的大小是連續分佈的,且經常也是時間上的連續函數 • 類比轉換成數位信號需經過 • 取樣——>量化——>編碼三個基本過程(數位化過程)
類比轉數位原理 • 取樣 • 按取樣定理對類比信號進行等時間間隔取樣 • 將得到的一系列時域上的樣值去代替u=f(t),即用u0、u1、…、un代替u=f(t) • 這些樣值在時間上是離散的值 • 但在幅度上仍然是連續類比量
類比轉數位原理 • 量化 • 在幅值上再用離散值來表示。方法是用一個量化因數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/格,設用三位元(二進編碼)
S3C2410X的A/D簡介 • 8通路10位A/D轉換器 • 支援觸控螢幕介面 • 獨立/自動X/Y位置轉換模式 • 轉換器的主要特性: • 解析度:±1LSB • 微分線性度誤差: ±1.5LSB • 積分線形度誤差: ±1LSB • 最大轉化速率:500KSPS • 輸入電壓範圍:0~3.3v • A/D轉換器 • 至少工作在2.5MHz Clock rate下 • 所以轉換速率可以達到500KSPS
S3C2410X A/D轉換器和觸控螢幕介面 • AIN[7]接上拉電阻到VDDA_ADC, 觸控螢幕的 • X通道連接到S3C2410的AIN[7] • Y通道應該連接到AIN[5]
ADC 應用電路位置 J1-ADC輸入介面 U2-ADC AIN1溫度感測器
LM35D溫度感測器元件 • 輸出電壓與攝氏溫度成正比例的溫度傳感器, 可直接讀出溫度值 • 使用時無需外圍元件,也無需調試和較正(標定) • 只要外接一個1V的表頭(如指針式或數字式的萬用表) • 特性: • 靈敏度為10mV/℃ • 工作溫度範圍為0℃-100℃ • 工作電壓為4-30V • 精度為±1℃ • 最大線性誤差為±0.5℃ • 靜態電流為80uA • 該器件如塑封三極管(TO-92)
設置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) //設置預分頻值
啟動取樣步驟 • 允許ADC的時鐘輸出 • rCLKCON = rCLKCON | (1<<15) • 將ADCCON暫存器的BIT0置1 • 可以啟動轉換,當啟動轉換後,該位會被自動清除 • 同時啟動轉換時還需要指定轉換通道 • 下面程式啟動通道0的取樣轉換 • rADCCON=0x1|(0x0<<3)
獲取轉換結果 • 當A/D轉換結束後,可以讀取ADCDAT暫存器的內容 • 下面程式等待通道0的A/D轉換 • 實現的程式如下: • while(!(rADCCON & 0x8000)); //等待,直到A/D轉換結束 • data=rADCDAT; //獲得轉換後的資料
參數說明: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讀取通道函數
功能說明:初始化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)
功能說明:主要實現對模擬通道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