一個(gè)單片機(jī)ADC的挖坑填坑之旅
[導(dǎo)讀] 本文來(lái)解析一個(gè)盆友在使用STM32采集電池電壓踩過(guò)的坑。以STM32F4 的ADC屬于逐次逼近SAR 型ADC為例進(jìn)行分析,參考STM32F405xx Datasheet,對(duì)于如何編寫ADC程序就不做描述了。
先描述一下坑
采集電池電壓,利用兩個(gè)電阻將電池電壓分壓,然后送入單片機(jī),當(dāng)電阻如上分別取4M歐/1M歐時(shí),ADC采集到的ADC值與萬(wàn)用表測(cè)得的ADC輸入端相差很大,取30K歐以及10k歐時(shí),則相差變小。
盆友咨詢我這是為什么?我給出了建議,先賣個(gè)關(guān)子,先來(lái)看看應(yīng)用最為廣泛的STM32單片機(jī)的一些特性。
STM32 ADC:
STM32 12位ADC是逐次逼近型的模數(shù)轉(zhuǎn)換器。它有多達(dá)19個(gè)多路復(fù)用通道,允許它測(cè)量來(lái)自16個(gè)外部源、2個(gè)內(nèi)部源和VBAT通道的信號(hào)。通道的A/D轉(zhuǎn)換可以在單次、連續(xù)、掃描或間斷模式下進(jìn)行。ADC的結(jié)果存儲(chǔ)在左對(duì)齊或右對(duì)齊的16位數(shù)據(jù)寄存器中。模擬看門狗功能允許應(yīng)用程序檢測(cè)輸入電壓是否超過(guò)用戶定義的、更高或更低的閾值。
主要功能,具體操作,怎么編程這些細(xì)節(jié),有大量的資料就不羅嗦了,主要來(lái)看看電氣特性。
電氣特性
-
ADC 可支持采樣頻率 受供電電壓影響,供電電壓高,可支持采樣頻率范圍更高 -
可支持輸入電壓 范圍須在參考電壓范圍內(nèi) -
外部輸入阻阻抗 最大為 -
開關(guān)切換阻抗 最大為 -
內(nèi)部采樣保持電容 為4pF
上面的公式用于確定誤差小于1/4 LSB時(shí)允許的最大外阻抗。N = 12(12位分辨率),k是在ADC_SMPR1寄存器中定義的采樣周期數(shù)。
ADC精度vs.負(fù)注入電流:應(yīng)該避免在任何模擬輸入引腳上注入負(fù)電流,因?yàn)檫@會(huì)顯著降低在另一個(gè)模擬輸入上執(zhí)行轉(zhuǎn)換的精度。建議在模擬引腳上增加一個(gè)肖特基二極管(引腳接地),這可能會(huì)注入負(fù)電流。
Page 136 圖例(上圖中標(biāo)識(shí)解釋):
見(jiàn)表68 實(shí)際轉(zhuǎn)移曲線的示例。 理想轉(zhuǎn)移曲線 終點(diǎn)相關(guān)線 ET =未調(diào)整總誤差:實(shí)際和理想傳遞曲線之間的最大偏差。EO =偏移誤差:第一個(gè)實(shí)際過(guò)渡與第一個(gè)理想過(guò)渡之間的偏差。EG =增益誤差:最后一個(gè)理想過(guò)渡與最后一個(gè)實(shí)際過(guò)渡之間的偏差。ED =微分線性誤差:實(shí)際步長(zhǎng)與理想步長(zhǎng)之間的最大偏差。EL =積分線性誤差:任何實(shí)際過(guò)渡和終點(diǎn)相關(guān)線之間的最大偏差。
寄生電容表示PCB的電容(取決于焊接和PCB布局質(zhì)量)加上焊盤電容(大約5 pF)。寄生電容值高會(huì)降低轉(zhuǎn)換精度。為了解決這個(gè)問(wèn)題,應(yīng)該減少fADC。
回到坑里
將盆友的電路等效繪制一下,忽略ADC采樣通道內(nèi)部ESD保護(hù)二極管,以及等效電流源,如下圖:
好了,這圖一畫出來(lái),問(wèn)題的原因就顯而易見(jiàn)了,SAR ADC是將采樣電容上的電壓通過(guò)逐次逼近原理轉(zhuǎn)換為數(shù)字量的,按上述圖,由于R2為兆級(jí)電阻,那么等效加載在采樣電容上的電壓就不能簡(jiǎn)單的看成是R1/R2的分壓了,此時(shí)ADC的輸入阻抗在百50K歐級(jí)別,簡(jiǎn)化定性看一下,忽略分布電容影響,計(jì)算方便將輸入阻抗看成50K直流電阻(實(shí)際深入動(dòng)態(tài)分析的話則不可忽略,假定電池電壓為5V),具體計(jì)算就不做了。
為什么電阻選這么大呢?我想估計(jì)是為了將電池電壓監(jiān)控取樣回路的電流降低,以節(jié)省電量。
跳出坑里
怎么辦呢?我覺(jué)得這樣應(yīng)該可以:
找一個(gè)低功耗的運(yùn)放做一個(gè)阻抗變換就可以兼顧兩者需求,當(dāng)然如果更完善一點(diǎn),還可以考慮串入一個(gè)RC低通濾波環(huán)節(jié),可以有效降低噪聲。
總結(jié)一下
對(duì)于單片機(jī)ADC的使用,個(gè)人總結(jié)了這幾點(diǎn):
-
將輸入短路,可測(cè)量熱噪聲。實(shí)際應(yīng)用時(shí),將輸入端短路,采集一定數(shù)量的樣本,由于熱噪聲符合高斯分布,可計(jì)算出其期望、方差,接入真實(shí)信號(hào)可以利用統(tǒng)計(jì)規(guī)律進(jìn)行相應(yīng)的噪聲濾波處理。
-
量化噪聲,可以通過(guò)輸入一定幅度及頻率的正弦波,進(jìn)行度量系統(tǒng)的量化噪聲。
-
設(shè)計(jì)ADC采樣電路時(shí),需要注意閱讀芯片手冊(cè)的電氣特性參數(shù),這個(gè)對(duì)于設(shè)計(jì)一個(gè)穩(wěn)定的模數(shù)采集系統(tǒng)至關(guān)重要。
至此,我想要寫的關(guān)于ADC的筆記文章就暫時(shí)總結(jié)分享到此了,如果覺(jué)得本文有價(jià)值,在看轉(zhuǎn)發(fā)起來(lái),也算對(duì)我的肯定支持。
—END—
長(zhǎng)按關(guān)注 |
加群交流 |
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!