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