單片機(jī)外圍模塊漫談之二,如何提高ADC轉(zhuǎn)換精度這篇文章,介紹過如何提高ADC的轉(zhuǎn)換精度。關(guān)于ADC的參考電壓,我發(fā)現(xiàn)有不少工程師了解的并不是很清楚。尤其是對(duì)于比如電池直接給MCU供電,用到ADC的場(chǎng)景。本篇文章對(duì)此做個(gè)簡(jiǎn)單總結(jié)。
以經(jīng)典的STM32F103為例,ADC的參考電壓是通過外部引腳VREF+/VREF-輸入的。對(duì)于部分64pin及以下型號(hào),VREF+在芯片內(nèi)部與VDDA信號(hào)線相連,沒有引出到片外,此時(shí)ADC參考電壓就是VDDA。
當(dāng)ADC參考電壓穩(wěn)定不變時(shí),正常采集和計(jì)算就可以。但是當(dāng)參考電壓發(fā)生變化時(shí),由于無法直接獲取變化后的參考電壓值,如果還使用之前的參考電壓就會(huì)引起測(cè)量誤差。
這種情況下該怎么辦?可以利用芯片內(nèi)部參考電壓VREFINT,它是一個(gè)相對(duì)固定的電壓,典型值為1.20V。
它內(nèi)部連接著ADC通道17,如果對(duì)ADC測(cè)量精度要求不是很高,可認(rèn)為VREFINT就是固定的1.2V。這時(shí)可通過讀取該通道的值REFINT_DATA,反推出當(dāng)前ADC的參考電壓值。因?yàn)?.2V=VREF_ADC*REFINT_DATA/FULL_SCALE
所以VREF_ADC=1.2V* FULL_SCALE/ REFINT_DATA,其中FULL_SCALE為4095(ADC分辨率12bit)
利用反推出的這個(gè)參考電壓值,再去計(jì)算實(shí)際ADC測(cè)量值。
Vchx = VREF_ADC*ADCHX_DATA/ FULL_SCALE =1.2V * (ADCHX_DATA/REFINT_DATA)。
但實(shí)際上每個(gè)芯片個(gè)體之間VREFINT會(huì)有差異,若需更高精度,可采用校準(zhǔn)的方法:
在VDDA穩(wěn)定為3.3V時(shí),通過ADC采集VREFINT通道的值,記為REFINT_CAL。這樣就可以得到每一顆芯片的準(zhǔn)確VREFINT電壓。實(shí)際使用中需要將REFINT_CAL保存在MCU Flash里,以供后續(xù)使用。之后再按照上述方法(即先讀取ADC通道17反推出當(dāng)前ADC實(shí)際參考電壓,再讀取實(shí)際需要采集的通道值)去計(jì)算ADC測(cè)量值。
Vchx =(3.3V *REFINT_CAL/ FULL_SCALE) *(ADCHX_DATA/REFINT_DATA)。
該方法對(duì)于用戶來說增加了一定的工作量,因?yàn)镾TM32F103是很多年前的老產(chǎn)品,沒有做出廠校準(zhǔn),后面出的產(chǎn)品如STM32F030,出廠時(shí)其實(shí)已經(jīng)做了上述校準(zhǔn)的工作,用戶直接使用即可。
說到這里大家可能會(huì)好奇這個(gè)內(nèi)部的參考電壓到底是什么,它其實(shí)叫Bandgap電壓。MCU的 Bandgap 電壓(帶隙基準(zhǔn)電壓)是一種高度穩(wěn)定的電壓基準(zhǔn)源,通常由集成電路內(nèi)部的 帶隙基準(zhǔn)電路(Bandgap Reference Circuit)生成。Bandgap電路利用雙極性晶體管的正負(fù)溫度系數(shù)相互抵消,生成一個(gè)幾乎不隨溫度變化的電壓(典型值約為 1.2V,具體值因工藝和設(shè)計(jì)而異)。
說了這么多,內(nèi)部的這個(gè)Bandgap電壓其實(shí)并不是ADC的直接參考電壓源。只不過利用了它去反推出實(shí)際的參考電壓值。使用這個(gè)方法也是有一定的局限性,因?yàn)樗枰狝DC先采集Bandgap通道電壓,后采集實(shí)際通道電壓,如果恰好在這個(gè)采集過程中參考電壓出現(xiàn)了劇烈的變化,那么轉(zhuǎn)換出來的值也是不準(zhǔn)確的,因?yàn)榉赐瞥龅膮⒖茧妷阂呀?jīng)變了,當(dāng)然這種情況出現(xiàn)的幾率相對(duì)較小,對(duì)于大部分場(chǎng)景這么用是沒問題的。
還有一些MCU,內(nèi)部是帶有電壓基準(zhǔn)源的,比如STM32L5,叫做VREFBUF。
它可以支持2種電壓2.048V和2.5V,這個(gè)電壓是可以直接作為ADC參考電壓的。
其基準(zhǔn)源仍來自Bandgap電壓,通過分壓電路生成不同檔位輸出。從下圖框圖可以看到因運(yùn)放的虛短特性,運(yùn)放的負(fù)向輸入端與正向輸入端(Bandgap基準(zhǔn)電壓)電壓相等,通過右側(cè)分壓電阻調(diào)節(jié)分壓比例使 VREFBUF 輸出電壓達(dá)到設(shè)定檔位。使用這個(gè)功能時(shí)注意要占用Vref+引腳,并且要接對(duì)地的電容,否則是產(chǎn)生不了這個(gè)參考電壓的。
VREFBUF的偏差是比較小的,手冊(cè)中有描述:
使用VREFBUF就方便很多了,只需要采集需要的通道即可,需要注意采集的電壓值不能超過VREFBUF電壓值,比如采集的電壓值是3V,那么就需要做分壓后采集。
當(dāng)然如果系統(tǒng)里ADC的外部參考電壓本身就很穩(wěn)定,以上介紹的這些就都用不到了。
掃碼加入嵌入式交流群: