01、前言
最近在看ADC電壓采樣的相關(guān)資料,目前用的比較多的就是逐次逼近寄存器型ADC,又叫做SAR ADC,我們用ADC的目的就是把模擬信號(hào)轉(zhuǎn)換成相應(yīng)的二進(jìn)制編碼,之后再通過軟件把相應(yīng)的二進(jìn)制編碼轉(zhuǎn)換成十進(jìn)制AD值,最后通過相應(yīng)的轉(zhuǎn)換公式把十進(jìn)制AD值轉(zhuǎn)換成電壓值。對(duì)應(yīng)的轉(zhuǎn)換公式有些資料中認(rèn)為12位ADC的Vin=AD值*Vref/4095,有些資料中認(rèn)為認(rèn)為12位ADC的Vin=AD值*Vref/4096,各大論壇里各位硬件專家也是爭(zhēng)論的十分激烈,可謂是公說公有理,婆說婆有理,那么到底哪個(gè)是對(duì)的呢?
02、SAR ADC工作原理說明
先溫習(xí)一下SAR ADC的工作原理吧,
1.采樣和保持
首先,輸入的模擬電壓(VIN)通過采樣/保持電路保持穩(wěn)定,以便進(jìn)行轉(zhuǎn)換。初始化:N位寄存器(SAR寄存器)被初始化為中間值,即最高有效位(MSB)設(shè)置為1,其余位為0。例如,對(duì)于8位寄存器,初始值為10000000。
2.DAC轉(zhuǎn)換
數(shù)模轉(zhuǎn)換器(DAC)將寄存器中的值轉(zhuǎn)換為對(duì)應(yīng)的模擬電壓(VDAC)。初始時(shí),VDAC為基準(zhǔn)電壓(VREF)的一半,即VREF/2。
3.比較
比較器比較VIN和VDAC。如果VIN大于VDAC,比較器輸出高電平(邏輯1),寄存器中的MSB保持為1;如果VIN小于VDAC,比較器輸出低電平(邏輯0),寄存器中的MSB清零。
4.逐位逼近
SAR控制邏輯將寄存器移到下一位,并將該位設(shè)置為高電平。DAC再次將更新后的寄存器值轉(zhuǎn)換為新的VDAC。比較器再次比較VIN和VDAC,并更新寄存器中的當(dāng)前位。這一過程重復(fù)進(jìn)行,每次都移到下一位,直到所有位(從MSB到LSB)都經(jīng)過比較和更新。
5.完成轉(zhuǎn)換
當(dāng)所有位都經(jīng)過比較和更新后,寄存器中的值即為對(duì)應(yīng)的數(shù)字輸出,代表輸入模擬電壓的數(shù)字量化值。最終的N位數(shù)字結(jié)果存儲(chǔ)在寄存器中,完成模數(shù)轉(zhuǎn)換過程。
03、12位ADC是4095 or?4096?
為了便于理解,我們以3位ADC,F(xiàn)s為參考電壓為例,下圖是不同的輸入電壓對(duì)應(yīng)的二進(jìn)制編碼值,參考電壓是Fs,3位ADC實(shí)際上是分了8段模擬輸入電壓范圍進(jìn)行編碼,每一段對(duì)應(yīng)的模擬輸入電壓為Fs/2^3=Fs/8V,那么:
0(0~Fs/16V):000
Fs/8(/16V~3*Fs/16V):001
...
Fs*7/8(13*Fs/16V~Fs*V):111
這樣就能得到傳遞函數(shù):Vin=AD值*Fs/2^3=AD值*Fs/8。
這個(gè)時(shí)候肯定有人會(huì)有疑問,如果輸入電壓Vin等于參考電壓Fs,此時(shí)對(duì)應(yīng)的AD值是7,那上面的等式不就不成立了?
這里有個(gè)誤區(qū)在于我們認(rèn)為的滿量程就是參考電壓Fs,比如我們的ADC參考電壓是5V,那么我們想當(dāng)然認(rèn)為5V就是滿量程電壓,但是基于下面的輸入電壓-編碼圖可知,111對(duì)應(yīng)的是Fs*7/8,并非是Fs,也就是ADC的滿量程定義為Fs-1LSB。所以雖然參考電壓是Fs,但是ADC的ADC的滿量程為Fs-1LSB,這樣當(dāng)輸入電壓等于Fs-1LSB時(shí)就已經(jīng)達(dá)到了滿量程,對(duì)應(yīng)的編碼就是111。
所以對(duì)于12位ADC,Vin=AD值*Vref/4096,12位ADC的二進(jìn)制編碼值對(duì)應(yīng)是10進(jìn)制AD值范圍就是0~2^12 -1,也就是0~4095,但是我們?cè)谕ㄟ^AD值計(jì)算輸入電壓時(shí)是4096哦。
有問題歡迎在評(píng)論區(qū)留言交流哦!