 A/D轉換講(jiang)解
							時間:2018-02-26      來源:未(wei)知
							A/D轉換講(jiang)解
							時間:2018-02-26      來源:未(wei)知 
							一.基本概(gai)念講解(jie)
A/D是(shi)(shi)我們(men)的(de)模(mo)擬(ni)量(liang)(liang)到數(shu)字(zi)量(liang)(liang)的(de)轉(zhuan)換,依靠(kao)的(de)是(shi)(shi)模(mo)數(shu)轉(zhuan)換器(Analog to Digtial Converter),簡稱ADC;D/A是(shi)(shi)數(shu)字(zi)量(liang)(liang)到模(mo)擬(ni)量(liang)(liang)的(de)轉(zhuan)換,依靠(kao)的(de)是(shi)(shi)數(shu)模(mo)轉(zhuan)換器(Digtial to Analog Converter),簡稱DAC。他們(men)的(de)道理是(shi)(shi)完(wan)全一樣的(de)。只(zhi)是(shi)(shi)轉(zhuan)換的(de)方向完(wan)全不同。
什么是模(mo)擬(ni)量(liang)?就(jiu)(jiu)是指變(bian)量(liang)在(zai)一定(ding)(ding)的(de)范(fan)圍內(nei)可(ke)(ke)(ke)以(yi)連續變(bian)化(hua)的(de)量(liang)。也就(jiu)(jiu)是在(zai)一定(ding)(ding)的(de)范(fan)圍內(nei)可(ke)(ke)(ke)以(yi)取任意(yi)的(de)指。比如我(wo)(wo)們的(de)溫度(du)(du)計。從0度(du)(du)到(dao)100度(du)(du),可(ke)(ke)(ke)以(yi)取任意(yi)值。可(ke)(ke)(ke)以(yi)是1度(du)(du),可(ke)(ke)(ke)以(yi)是0.01度(du)(du),也可(ke)(ke)(ke)以(yi)是0.0001度(du)(du)等。總之(zhi)0到(dao)100度(du)(du)之(zhi)間(jian)有(you)無限個中間(jian)值。所以(yi),稱之(zhi)為連續變(bian)量(liang)的(de)量(liang)。這個就(jiu)(jiu)是我(wo)(wo)們稱之(zhi)的(de)模(mo)擬(ni)量(liang)。如下左圖
  
而我(wo)(wo)們的(de)(de)(de)(de)溫度計被我(wo)(wo)們人為的(de)(de)(de)(de)刻上(shang)了(le)符(fu)號,每兩(liang)個(ge)大型的(de)(de)(de)(de)刻度間隔(ge)是(shi)(shi)10度。這(zhe)個(ge)實(shi)際上(shang)就(jiu)是(shi)(shi)我(wo)(wo)們的(de)(de)(de)(de)對模(mo)擬量(liang)數(shu)字(zi)化,由(you)于有一定的(de)(de)(de)(de)間隔(ge),不是(shi)(shi)連(lian)續的(de)(de)(de)(de),所以(yi),我(wo)(wo)們專業的(de)(de)(de)(de)說法叫做離散(san)的(de)(de)(de)(de)。我(wo)(wo)們的(de)(de)(de)(de)ADC就(jiu)是(shi)(shi)把連(lian)續的(de)(de)(de)(de)信(xin)號用離散(san)的(de)(de)(de)(de)數(shu)字(zi)表達處(chu)理啊。我(wo)(wo)們的(de)(de)(de)(de)ADC就(jiu)是(shi)(shi)模(mo)擬量(liang)轉(zhuan)換(huan)成數(shu)字(zi)量(liang)的(de)(de)(de)(de)一種(zhong)機(ji)制。
注:
模擬量可以(yi)是電(dian)壓、電(dian)流等電(dian)信(xin)號(hao),也可以(yi)是壓力、溫度、濕度、位移(yi)、聲音等非電(dian)信(xin)號(hao)。但(dan)在A/D轉(zhuan)換前,輸入到A/D轉(zhuan)換器(qi)的(de)輸入信(xin)號(hao)必(bi)須經(jing)各種傳(chuan)感器(qi)把各種物理量轉(zhuan)換成電(dian)壓信(xin)號(hao)。
A/D轉換后,輸出的數字信號(hao)可(ke)以有8位(wei)(wei)(wei)(wei)、10位(wei)(wei)(wei)(wei)、12位(wei)(wei)(wei)(wei)、14位(wei)(wei)(wei)(wei)和16位(wei)(wei)(wei)(wei)等。
二(er).A/D轉換器的主要技術指(zhi)標(biao)
① 分辨(bian)率(lv):數(shu)字(zi)(zi)量(liang)變(bian)化(hua)一個小量(liang)時模(mo)擬(ni)信(xin)號(hao)(hao)的(de)(de)變(bian)化(hua)量(liang),定義(yi)為(wei)(wei)滿刻度與 2n 的(de)(de)比(bi)值。分辨(bian)率(lv)又稱(cheng)精度,通(tong)常以數(shu)字(zi)(zi)信(xin)號(hao)(hao)的(de)(de)位(wei)(wei)(wei)數(shu)來表(biao)示(shi)(shi)。,它表(biao)示(shi)(shi)對模(mo)擬(ni)信(xin)號(hao)(hao)進行數(shu)字(zi)(zi)化(hua)能(neng)夠達到多細(xi)的(de)(de)程度。通(tong)常用(yong)數(shu)字(zi)(zi)量(liang)的(de)(de)位(wei)(wei)(wei)數(shu)表(biao)示(shi)(shi),如8位(wei)(wei)(wei)、12位(wei)(wei)(wei)、16位(wei)(wei)(wei)分辨(bian)率(lv)等。若(ruo)分辨(bian)率(lv)為(wei)(wei)8位(wei)(wei)(wei),能(neng)夠表(biao)示(shi)(shi)的(de)(de)大(da)數(shu)字(zi)(zi)是255。若(ruo)是我們輸(shu)(shu)入的(de)(de)電(dian)壓位(wei)(wei)(wei)12V,那么其(qi)分辨(bian)率(lv)位(wei)(wei)(wei)12 / 255 = 0.047v(約等于0.047v)也就是說(shuo)模(mo)擬(ni)量(liang)的(de)(de)輸(shu)(shu)入必(bi)須以0.047為(wei)(wei)單位(wei)(wei)(wei)變(bian)大(da)或變(bian)小,其(qi)輸(shu)(shu)出(chu)的(de)(de)數(shu)字(zi)(zi)量(liang)才會有變(bian)化(hua),例(li)如:11.953~12.000的(de)(de)模(mo)擬(ni)量(liang)其(qi)輸(shu)(shu)出(chu)數(shu)字(zi)(zi)量(liang)都(dou)為(wei)(wei)255.分辨(bian)率(lv)越(yue)高,轉換時對輸(shu)(shu)人量(liang)的(de)(de)微小變(bian)化(hua)的(de)(de)反應(ying)越(yue)靈(ling)敏。
②量(liang)程:即所(suo)轉換的(de)(de)電壓范(fan)圍。單極(ji)性工作的(de)(de)芯片有以0V為基準(zhun)的(de)(de)0~+10V,0~-10V等;雙極(ji)性工作的(de)(de)芯片有以0V為基準(zhun)的(de)(de)±5V,±10V等。
③轉(zhuan)(zhuan)換(huan)(huan)時(shi)(shi)間和轉(zhuan)(zhuan)換(huan)(huan)率:完成(cheng)一(yi)次A/D轉(zhuan)(zhuan)換(huan)(huan)所需(xu)要的(de)(de)(de)時(shi)(shi)間稱(cheng)為(wei)轉(zhuan)(zhuan)換(huan)(huan)時(shi)(shi)間,轉(zhuan)(zhuan)換(huan)(huan)時(shi)(shi)間的(de)(de)(de)倒數稱(cheng)為(wei)轉(zhuan)(zhuan)換(huan)(huan)率。不同形(xing)式、不同分辨率的(de)(de)(de)器(qi)件(jian),其轉(zhuan)(zhuan)換(huan)(huan)時(shi)(shi)間的(de)(de)(de)長短相(xiang)差(cha)很大,可為(wei)幾微(wei)妙到幾百(bai)毫秒(miao)。在選擇(ze)器(qi)件(jian)時(shi)(shi),要根據應用(yong)的(de)(de)(de)需(xu)要和成(cheng)本,對這項指標加以(yi)考慮,有時(shi)(shi)還(huan)要同時(shi)(shi)考慮數據傳(chuan)輸過程中轉(zhuan)(zhuan)換(huan)(huan)器(qi)件(jian)的(de)(de)(de)一(yi)些結構和特點。
MSPS--Million Samples per Second
采(cai)樣時間(jian)則是(shi)(shi)另(ling)外(wai)一個(ge)概念,是(shi)(shi)指兩次轉(zhuan)換的(de)間(jian)隔。為了保證(zheng)轉(zhuan)換的(de)正確(que)完成,采(cai)樣速(su)率(lv)(Sample Rate)必(bi)須小于或等于轉(zhuan)換速(su)率(lv)。因此有人習慣上將(jiang)轉(zhuan)換速(su)率(lv)在數值上等同(tong)于采(cai)樣速(su)率(lv)也是(shi)(shi)可以接受的(de)
 
例如:
我們有(you)(you)一把塑料尺子(zi),它的(de)量程是10厘(li)米(mi)(mi),上(shang)面有(you)(you)100個刻度,能夠都出來的(de)小的(de)單位是1毫(hao)米(mi)(mi)有(you)(you)效(xiao)值,那么(me)我們就說我們這個尺子(zi)的(de)分辨率為1毫(hao)米(mi)(mi)。
三.電路(lu)圖分析
我們(men)觀(guan)察(cha)到開(kai)發板上有一個電位器(qi)(滑動變(bian)阻器(qi)),上面(mian)的編號為VR1,我們(men)就可以通過搜(sou)索VR1來觀(guan)察(cha)滑動變(bian)阻器(qi)的阻值情況。
在《FS4412-DevBoard-V5.pdf》搜索VR1(或者(zhe)直(zhi)接(jie)搜索ADC),觀察到下圖。
 
當我(wo)們的滑動(dong)變阻器變化(hua)的時候(hou),通過檢測XadcAIN3引腳電(dian)壓變化(hua)轉換(huan)車成(cheng)數字。
我(wo)們在芯片手冊(ce)《FS4412_CoreBoard_V2.pdf》中,同樣搜索到的內容如下:
  
三.芯(xin)片手冊大(da)致(zhi)翻譯
56 ADC
56.1 ADC 概述(shu)
10 位(wei)(wei)或 12 位(wei)(wei) CMOS 再循環式(shi)模擬數(shu)字轉(zhuan)換(huan)器,它具有(you) 4 通道輸入,并可將模擬量轉(zhuan)換(huan)為 10 位(wei)(wei)或 12位(wei)(wei)二進(jin)制數(shu)。 5MHz A/D 轉(zhuan)換(huan)時(shi)鐘時(shi),大(da) 1MSPS(Million Samples per Second)。 A/D 轉(zhuan)換(huan)操作具有(you)樣(yang)本保持的功能,同時(shi)也支(zhi)持降(jiang)功耗(hao)模式(shi)。
特性
ADC 接口包括如下(xia)特性:
Ø 10bit/12bit 輸出位(wei)可選。
Ø 微(wei)分誤差±2.0LSB。
Ø 積分誤差(cha)±4.0LSB。
Ø 大轉(zhuan)換(huan)速率: 1 Msps。
Ø 功耗少(shao),電壓輸入 3.3v。
Ø 模(mo)擬量輸入范圍: 0~3.3v。
Ø 支持片上樣本保(bao)持功能。
Ø 通用轉換模式。
56. ADC 選擇
Exynos 4412 SCP 有(you)2個ADC 設備塊(kuai),分別是ADC和MTCADC_ISP。我(wo)們可以選擇其中一個ADC塊(kuai)設備,通過設置(zhi)SFR(special function register)寄存器(qi)中的ADC_CFG[16]來(lai)選擇。
 
56.4.2 A/D 轉換時間
當一個PLCK 時鐘頻(pin)率(lv)是(shi)66MHZ,并且分(fen)頻(pin)值是(shi)65,選擇的是(shi)12位的分(fen)辨率(lv)的時候。
我們的(de)計算公式如(ru)下(xia):
 
完成一次 A/D 轉換(huan)需要 5 個時(shi)鐘(zhong)周(zhou)期(qi)。 A/D 轉換(huan)器的大工(gong)作時(shi)鐘(zhong)為 5MHz,所以大的采(cai)樣率可以達到 1Mbit/s。
56.4.3 ADC 轉換模(mo)式
轉換模式中AIN0~AIN3是類似(si)的。若是需要初始化這個(ge)模式,通過(guo)設置ADCCON(ADC控制寄存器)即可(ke). 轉換的數(shu)據可(ke)以(yi)通過(guo)ADCDAT這個(ge)寄存器來(lai)讀。
ADC編程步驟:
設置預分配器
 
根據(ju)上(shang)述公式,我們選擇預(yu)分配位255,終得到的結果位
ADCCON[14] = 1; //使(shi)能分配(pei)器
ADCCON[6:13] = 0xff //選(xuan)擇分(fen)配(pei)系數
時(shi)鐘頻(pin)率(lv) 100 MHZ /(255 + 1) = 25 / 64 MHZ
(2) 設置(zhi)精度(選擇分辨(bian)率 8位,12位等)
ADCCON[16] = 1 //選擇12bit 的(de)A/D轉換
注(zhu):量化(hua)位(wei)數是12位(wei),那么數字(zi)表(biao)示的范圍(wei)是0~4096
假(jia)如我(wo)們輸入(ru)小的電壓范圍位0~1.8V,那么我(wo)們
低(di)有(you)效位1LSB 表示(shi)大小 1.8V / 4096 。
當我們(men)量化的(de)位數越(yue)大的(de)時候(hou),每位能給你識(shi)別的(de)電壓越(yue)小(xiao),精(jing)度越(yue)高。
(3) 選擇通(tong)道
 
ADCMUX[3:0] = 0011
(4)使能,啟(qi)動A/D轉換
  
  
注:由圖所知,我們的可以選擇ADCCON [0]和ADCCON[1].
ADCCON[0] 使(shi)能(neng)A/D轉(zhuan)換開(kai)始。我們知(zhi)道當我們的(de)A/D轉(zhuan)換開(kai)始后,若是
我們讀了(le)之后,這位會被自動的(de)清除(chu)。故我們每次都(dou)需(xu)要設(she)置。
ADCCON[1] A/D轉(zhuan)換由讀(du)來開始。通過讀(du)來使能開始,我們(men)知(zhi)道了,當我們(men)
讀了一次之后,我(wo)們(men)的A/D轉換才開始,若是不讀的話,我(wo)們(men)的
A/D轉換不會啟動。
//ADC轉換后的數值
  
ADCCON[2] = 0 //選擇正常模式
ADCCON[1] = //使能(neng)讀功能(neng),可(ke)以讀ADCDAT中的信息
temp = ADCDAT[0 : 11] //讀取一次后,轉(zhuan)換開始。若(ruo)是(shi)不(bu)讀取,A/D轉(zhuan)換不(bu)會(hui)啟動(dong)。
(1) 獲得轉換(huan)后-的(de)數值
While(!(ADDCCON[15] == 1)) //每次(ci)讀取結束(shu)后ADDCCON的值(zhi)會自動設置位1表示結束(shu)
Temp = ADCDAT[0 : 11]
代碼簡介:
void adc_init()
{
//enable prescaler
REG_WRITE(ADCCON,REG_READ(ADCCON) | (1 << 14));
//prescaler 256
REG_WRITE(ADCCON,(REG_READ(ADCCON) & ~(0Xff << 6)) | (0xff << 6));
//設置(zhi)精度(du) 12bit
REG_WRITE(ADCCON,REG_READ(ADCCON) | (1 << 16));
//選擇通道3
REG_WRITE(ADCMUX,(REG_READ(ADCMUX) & ~(0Xf)) | (0x3));
//normal 模式
REG_WRITE(ADCCON,REG_READ(ADCCON) & ~(1 << 2));
//設置通(tong)過的(de)(de)讀的(de)(de)方(fang)式(shi)使能adc轉(zhuan)換
REG_WRITE(ADCCON,REG_READ(ADCCON) | ( 1 << 1));
//讀一次之后,啟(qi)動我們(men)的(de)ADC
adcval = REG_READ(ADCDAT);
}
int adc_read()
{
int val;
while(!(REG_READ(ADCCON) & (1 << 15)));
val = REG_READ(ADCDAT) & 0xfff;
return val;
}
int main()
{
adc_init();
while(1)
{
adcval = adc_read();
delay_ms(500);
uart_printf("adc = %d\r\n",adcval);
}
return 0;
}