牛逼,不用外部電路檢測(cè)芯片工作電壓!
本篇筆記主要包含以下內(nèi)容(電池供電產(chǎn)品尤其實(shí)用):
1、如何進(jìn)行 ADC 校準(zhǔn),ADC 校準(zhǔn)基本原理
2、如何直接通過(guò)內(nèi)部參考電壓得到芯片的工作電壓
3、常見(jiàn)應(yīng)用場(chǎng)合
在一些應(yīng)用場(chǎng)合,往往需要得到芯片的工作電壓,確保芯片工作正常,比如低壓時(shí)進(jìn)行必要保護(hù)、 ADC 采集時(shí)校準(zhǔn)等。
一般情況下,我們使用分壓電阻方式獲得芯片工作時(shí)的電壓,比如 STM32 可工作在 2.0~3.6 V(你沒(méi)看錯(cuò),2.0 V 也能工作,魚(yú)鷹有段時(shí)間不小心用了 5 V 電壓,芯片竟然也能工作,沒(méi)燒壞,也是奇跡,但不建議這么干)。但是需要增加額外電路。
另外,如果你能得到芯片的工作電壓(或 ADC 的基準(zhǔn)電壓),在 ADC 校準(zhǔn)方面也是有奇效。因?yàn)槿绻愕膮⒖茧妷鹤兓?,那么你通過(guò) ADC 計(jì)算得到值必然也是有問(wèn)題的。
測(cè)量電壓值 = (ADC 值 * 參考電壓值 3.3)/ ADC 最大值 4096
即上式的 參考電壓 3.3v 變化了,那么你計(jì)算的測(cè)量電壓就和實(shí)際的不符。因?yàn)樵谶@個(gè)公式里面,你假設(shè)參考電壓穩(wěn)定不變?yōu)?3.3v ,但實(shí)際上如果因?yàn)槟撤N原因,導(dǎo)致電壓上升或下降了,那么計(jì)算的測(cè)量電壓值就是有問(wèn)題的。
所以,為了精確測(cè)量電壓,就有了校準(zhǔn)。
既然參考電壓也在變化,那么我們就直接把參考電壓也一起采集了,作為公式的參數(shù)輸入,如此一來(lái),就能保證測(cè)量電壓的穩(wěn)定性了。
但是參考電壓又應(yīng)該怎么測(cè)量呢?還是使用分壓方式嗎?我們本身就是為了讓分壓方式測(cè)量的電壓更精確才使用校準(zhǔn)的呀?這不是陷入了雞生蛋、蛋生雞的死循環(huán)?
如何跳出這一循環(huán)呢?關(guān)鍵在于是否存在一個(gè)電壓,可不隨外部電壓變化而變化,起碼不應(yīng)該在芯片(2.0 ~ 3.6 V)正常工作時(shí)而變化,超出電壓范圍外就和我沒(méi)關(guān)系了。
就此我們可以想到一種常用器件,LDO (低壓差線性穩(wěn)壓器),比如 5 V 轉(zhuǎn) 3.3 V,只要輸入電壓在芯片規(guī)定范圍內(nèi),它總是能穩(wěn)定輸出 3.3 V。
在 STM32 中,內(nèi)部都內(nèi)置了一個(gè)比較穩(wěn)定的內(nèi)部參考電壓,即 VREFINT,一般電壓 1.2 V,但由于芯片差異,這也是不確定的,所以為了更加確定這個(gè)電壓值,芯片出廠時(shí)會(huì)進(jìn)行校準(zhǔn)(又來(lái)一次校準(zhǔn)),即把實(shí)際采集到的電壓 ADC 值保存到一個(gè)地址里面。
怎么理解這次校準(zhǔn)呢?這個(gè)參考電壓內(nèi)部連接到 ADC 外設(shè)中的一個(gè)通道,而 ADC 外設(shè)使用高精度穩(wěn)壓源穩(wěn)定供電 3.0 V,而此時(shí)該參考電壓也會(huì)輸出一個(gè)電壓,大概在 1.2V, 然后通過(guò) ADC 采集這個(gè)電壓的 ADC 值,并把這一次電壓值保存在一個(gè)地址里面。
這里舉一個(gè)具體例子(參考文章里面的):
在這個(gè)芯片里面的參考電壓輸出就是 1.216 V,可以說(shuō)相當(dāng)精確了,但是另一個(gè)同款芯片就不一定就是這個(gè)電壓了(但也基本在 1.2 V 左右,不會(huì)差太多),這就是所謂的差異,也是為什么要校準(zhǔn)的原因。
那么得到這樣一個(gè)穩(wěn)定的參考電壓有什么用,它的特點(diǎn)又是什么呢?
這個(gè)參考電壓你可以理解為,只要芯片工作在 2.0 ~ 3.6 V,它總是能輸出 1.216 V(當(dāng)然是說(shuō)上面那顆芯片,其它芯片就不一定是這個(gè)電壓了)。
這樣一來(lái),我們讓 VDDA(ADC 外設(shè)的基準(zhǔn)電壓)= VDD(芯片工作電壓)。當(dāng)工作電壓下降時(shí),VDDA 電壓也在下降,也就是說(shuō) 4095 在下降前代表 3.3 V,那下降后代表的電壓值肯定更小了(還是代表 VDDA 的值,即總是代表的基準(zhǔn)電壓)。
(圖片來(lái)源:茶話 MCU)
但是不管 VDDA(VDD) 怎么變化,Vrefint 的電壓值總是穩(wěn)定在 1.216 V(但是這個(gè) ADC 值是處于變化中的)。而這也是我們反推外部電壓的基礎(chǔ)。
于是我們可以得到下面公式(前提芯片能正常工作,即 2.0 ~ 3.6 V):
VDDA : 4095 = VREFINT : Adc_vrefint
因?yàn)?VDDA 等于 VDD,所以也可以認(rèn)為是芯片的工作電壓。在這個(gè)公式中,Adc_vrefint 的 ADC 值我們可以通過(guò) ADC 的特殊通道(VREFINT 通道)采集回來(lái),而 VREFINT 我們?cè)谇懊嫱ㄟ^(guò)某個(gè)地址的 ADC 值已經(jīng)計(jì)算出來(lái)了,就是 1.216 V,那么只有 VDDA 一個(gè)值不確定,計(jì)算它就是輕而易舉的事情了。
于是,通過(guò)采集 VREFINT 通道的 ADC 值,即可得到我們需要的 VDDA 值,也就是我們的芯片工作電壓!?。?/p>
這就是不用外部電路檢測(cè)芯片電壓的內(nèi)幕(原理)!
本來(lái)應(yīng)該一切順利,這篇筆記也有一個(gè)完美的結(jié)局,但是很不幸的是,魚(yú)鷹找遍了手冊(cè),網(wǎng)上也是到處找,始終沒(méi)有找到 STM32F1xx 系列芯片校準(zhǔn)值的保存地址,而據(jù)網(wǎng)上的說(shuō)法是,這款芯片并沒(méi)有校準(zhǔn)值,這就很讓人尷尬了(其它系列是否存在該校準(zhǔn)值,可以看對(duì)應(yīng)的數(shù)據(jù)手冊(cè),如果有道友知道 STM32F1xx的地址,可留言告知)。
但是如果你對(duì)電壓精度要求不是很高的話,你可以直接認(rèn)為參考電壓就是 1.200 V,用它來(lái)大概計(jì)算芯片的工作電壓也是問(wèn)題不大的。而如果你要更高的精度,那么你也可以像前面說(shuō)的那樣,自己找出每一顆芯片的實(shí)際參考電壓,人工校準(zhǔn)。當(dāng)然工作量就大了那么一些了(專(zhuān)門(mén)寫(xiě)一個(gè)校準(zhǔn)程序,把校準(zhǔn)值寫(xiě)入內(nèi)部 FLASH 中)。
應(yīng)用
那么這個(gè)功能一般用于什么場(chǎng)合呢?
實(shí)時(shí)檢測(cè)芯片的工作電壓,我們就知道芯片是否正常工作,從而排除芯片因?yàn)殡娫床环€(wěn)導(dǎo)致的一些問(wèn)題。同時(shí),我們可以把這個(gè)電壓值用于前面所說(shuō)的 ADC 校準(zhǔn)中,這樣不管芯片工作電壓怎么變化(前提是芯片工作電壓和 ADC 基準(zhǔn)電壓是一同一個(gè)),你測(cè)量的電壓值一定是準(zhǔn)確的(即使電壓源紋波比較大)。
這個(gè)功能對(duì)于電池供電的產(chǎn)品尤其實(shí)用,因?yàn)殡姵仉妷涸谑褂眠^(guò)程中,肯定會(huì)發(fā)生變化,這也意味著可能你的 ADC 基準(zhǔn)電壓發(fā)生了變化(當(dāng)然你也可以使用額外的穩(wěn)壓源,這樣就會(huì)增加成本)。
當(dāng)工作電壓低到一定程度時(shí),我們希望能做一些保護(hù)工作,或者保存一些參數(shù),我們?cè)撊绾巫瞿??三種方法:
1、通過(guò)上述方法,定時(shí)采集 參考電壓 的 ADC 值,從而得到工作電壓,當(dāng)電壓低于一定水平時(shí),再采取一些措施。
2、使用 ADC 模擬看門(mén)狗功能,將這個(gè)通道的值加入到看門(mén)狗中,如此一來(lái),只要電壓下降到你想要的值,就可以觸發(fā)看門(mén)狗,比方法一更及時(shí),這也是參考文章介紹的一個(gè)應(yīng)用,強(qiáng)烈建議各位道友看看這位大佬寫(xiě)的。
3、芯片內(nèi)部有低電壓保護(hù)功能,當(dāng)電壓低到一定水平時(shí),可觸發(fā)中斷,但是只有幾個(gè)固定電平可選,不像上述方法可設(shè)置任意電平。
而在已出貨的產(chǎn)品中,可能當(dāng)時(shí)我們并沒(méi)有考慮那么多,并沒(méi)有預(yù)留檢測(cè)工作電壓的電路,使用這個(gè)方法,就可以只更新軟件即可獲取工作電壓,相當(dāng)實(shí)用。
這個(gè)方法魚(yú)鷹也曾用高精度穩(wěn)壓源測(cè)試過(guò),發(fā)現(xiàn)計(jì)算出來(lái)的電壓值精度相當(dāng)高,而當(dāng)魚(yú)鷹改變電壓大小時(shí),計(jì)算出來(lái)的電壓也在實(shí)時(shí)變化,可謂實(shí)用的一匹,再也不用怕硬件工程師說(shuō)你采集的 ADC 值(軟件)有問(wèn)題了。
簡(jiǎn)單總結(jié)就是,采集 ADC 外設(shè)中的 VREFINT 通道值,通過(guò)上面公式簡(jiǎn)單計(jì)算,即可得到芯片當(dāng)前的 ADC 參考電壓,也可認(rèn)為是芯片工作電壓。代碼和普通的 ADC 采集沒(méi)多大區(qū)別,只是采集的通道由外部通道變?yōu)榱藘?nèi)部通道,所以魚(yú)鷹就不再提供具體參考例子了(可惜忘記截圖了,否則更有說(shuō)服力)。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。