在使用ST MCU開(kāi)發(fā)過(guò)程中,有人問(wèn)如果電源電壓是變動(dòng)的,詢(xún)問(wèn)有無(wú)辦法用比較簡(jiǎn)潔的辦法對(duì)電源電壓進(jìn)行監(jiān)測(cè),或者說(shuō)電源電壓波動(dòng)情況下能否檢測(cè)出其它待測(cè)的AD輸入電壓。
這里跟大家分享交流一個(gè)方法。就是在沒(méi)有其它外來(lái)參考電壓,用芯片電源電壓VDD作為ADC的參考電壓,同時(shí)該電源電壓又在一定范圍內(nèi)變動(dòng)的情況下【這個(gè)范圍就是在保證芯片正常工作的范圍】,利用MCU芯片內(nèi)部自帶基準(zhǔn)電壓對(duì)電源電壓進(jìn)行監(jiān)測(cè)。
在我印象中【ST MCU系列和型號(hào)太多了,記不住】,幾乎每顆ST MCU芯片內(nèi)部都有個(gè)相對(duì)穩(wěn)定且不受電源電壓一定范圍內(nèi)波動(dòng)影響的基準(zhǔn)電壓。這里以STM8L15x 芯片為例來(lái)介紹。
STM8L151系列芯片內(nèi)部有個(gè)參考輸出電壓,ST的技術(shù)手冊(cè)里命名為VREFINT。
該內(nèi)部參考電壓的值即使芯片電源電壓在工作范圍內(nèi)波動(dòng)時(shí),它基本維持不變即1.224V,而且該電壓信號(hào)可以通過(guò)指令控制直接連接到ADC的某個(gè)AD通道而求得該電壓對(duì)應(yīng)的AD值。
這里提前厘清下:該內(nèi)部參考電壓VREFINT并非ADC的參考電壓,ADC的參考電壓依然是VDD。即使VDD有所波動(dòng),這個(gè)VREFINT電壓恒定不變,對(duì)于ADC電路而言,它只是個(gè)測(cè)試點(diǎn)。這里經(jīng)常有人犯迷糊,把VREFINT內(nèi)部基準(zhǔn)參考電壓跟ADC模塊的參考電壓混為一談。
在某一固定的ADC參考電壓情況下,所有被測(cè)電壓點(diǎn)的AD轉(zhuǎn)換值與該點(diǎn)電壓值保持同一比例關(guān)系,換句話(huà)說(shuō),對(duì)于ADC參考電壓固定情況下,各點(diǎn)的電壓與ADC值與成線(xiàn)性關(guān)系。
下面圖形是8L15X芯片分別在3個(gè)不同參考電壓下的AD轉(zhuǎn)換曲線(xiàn)示意圖,這里參考電壓接不同的VDD。下面三根斜線(xiàn)分別是VDD為2.8V、3.2V、3.6V時(shí)的AD轉(zhuǎn)換曲線(xiàn)示意圖。那根黃色垂直虛線(xiàn)是表示內(nèi)部VREFINT電壓(1.22V)所在的位置。
![]()
![]()
![]()
![]()
不難理解,對(duì)于不同的參考電壓,同一待測(cè)電壓【VREFINT】1.22V所測(cè)得的AD轉(zhuǎn)換值是不一樣的,從上面圖也可以直觀(guān)的看出。這里AD的參考電壓就是VDD,顯然VDD越大,1.22V VREFINT電壓對(duì)應(yīng)的AD轉(zhuǎn)換值越小。
對(duì)于某一個(gè)參考電壓來(lái)說(shuō),如果能測(cè)得1.22V所對(duì)應(yīng)的AD轉(zhuǎn)換值,假設(shè)記為Val_AD1.2 那參考電壓VDD對(duì)應(yīng)的AD轉(zhuǎn)換值自然是此時(shí)該AD的滿(mǎn)量程值,記為 Val_Full,【如果精度是10位,就是1024,如果是12位,那就是4096】。
不管VDD怎么變動(dòng),某時(shí)刻的VDD對(duì)應(yīng)的滿(mǎn)量程值Val_Full跟內(nèi)部基準(zhǔn)電壓【VREFINT】1.22V的AD轉(zhuǎn)換值Val_AD1.2 的線(xiàn)性比例關(guān)系總是存在的。即有:
VDD:Val_Full = 1.22 : Val_AD1.2 【Val_AD1.2 為實(shí)時(shí)測(cè)得值】
那么VDD = (1.22 / Val_AD1.2) * Val_Full
這樣你就可以達(dá)到監(jiān)測(cè)芯片供電VDD的電壓之目的了。當(dāng)然你也可以利用上述原理和類(lèi)似條件做別的應(yīng)用,比如說(shuō)電源電壓一定范圍內(nèi)波動(dòng)情況下還是可以檢測(cè)出其它待測(cè)點(diǎn)的電壓。