STM32芯片的ADC模塊往往都支持模擬看門狗功能,即可以對單個或多個通道開啟模擬轉換值的監測。當模擬通道ADC值超出設定的閾值時可以產生模擬看門狗事件并可觸發看門狗中斷。【注:下面截圖或數據都是基于STM32L4系列芯片的,其它STM32系列與其類似。】
結合上圖,當選定的ADC通道的轉換結果比設置的閾值上限還高或比設定的閾值下限還低時都可以通過硬件觸發模擬看門狗事件或中斷。
假設現有STM32用戶有這樣一個應用需求,他希望STM32的供電電壓低于一定程度時就提示低壓報警,然后軟件將進行相關處理。
關于這個應用需求,我們就可以利用片內的一個參考電壓和模擬看門狗來實現。
我們知道,STM32芯片內部都內置了一個比較穩定的內部參考電壓,即VREFINT。它的電壓值一般在1.2v上下,每顆芯片之間可能存在差異。該電壓信號固定與某ADC通道在片內相連。ST公司在芯片出廠時對所有芯片的這個內部參考電壓都做了ADC轉換值的準確測量,得到一個校準值。測量是在常溫條件下,ADC參考電壓vdda=vref+為3.0V的條件下進行,結果存儲在特定地址。
下圖是STM32L4系列芯片的數據手冊中對VREFINT的ADC校準值的測試條件及其存放地址的信息。
我們通過讀出芯片特定存儲地址的VREFINT轉換值,進而可以求算出它的具體電壓值。我從手邊一塊STM32L4開發板讀取相應地址的內容,如下面截圖所示:
我們從圖中可知VERFINT的ADC值為0x067c,據此可以反求出它的電壓值:【這里是12位ADC分辨率,據資料可知校準測試時的VDDA=3V。后面都以該芯片數據展開】
0xfff:3.0 = 0x067c:VREFINT
根據上式可以得到該芯片的VREFINT為1.216v。
在較寬泛的芯片供電范圍內,該內部參考電壓值是個比較穩定而準確的數據。現在假設目前的應用場景滿足VDDA=VDD,VDD在使用過程中會隨時間慢慢下降,當VDD低到一定程度時需告警并需軟件提前做些處理。
盡管VDDA/VDD在變,但VDDA始終是ADC模塊的基準電壓,它對應的ADC值始終是滿量程值【0xfff】,另外VREFINT的電壓值也沒變,不過隨著VDDA的變化,VREFINT所對應ADC值會一直在變化。但在任一時刻下面的關系式總是成立的【當然,電源電壓至少要保障芯片能正常工作】:
VDDA:4095 = VREFINT:Adc_vrefint
上式中的Adc_vrefint為VREFINT在當前VDDA條件下所對應的ADC值,VREFINT為前面計算出來的電壓值1.216v.
不難理解,對于同一VREFINT,隨著VDDA的不斷走低,它所對的轉換值則是不斷走高。
假設當VDDA低到2.65V時告警,我們可將上式中的VDDA換成2.65v,即可求出VREFINT此時所對應ADC值,經計算此時Adc_vrefint等于1879。也就是說,當VREFINT的所對應的ADC轉換值等于1879時,VDDA就降到了2.65V.當VREFINT的轉換值大于1879時,意味著VDDA比2.65V還要低。【具體使用時可以考慮一定裕量】
基于上述原理,我們開啟VREFINT通道的模擬看門狗功能,擬定出合適的模擬看門狗的閾值。結合剛才的描述,1879就可以做VREFINT通道模擬看門狗的閾值上限,當VREFINT的轉換值大于1879時就會產生模擬看門狗事件及中斷。
下圖是使用STM32CubeMx進行相關配置的部分截圖。
上面主要基于STM32芯片和一個特定應用需求,大致介紹了如何使用片內參考電壓實現模擬看門狗的基本思路,同時也順便介紹了基于內部參考電壓對芯片電源進行監測的方案。當然,有人可能注意到了,有關芯片電源監測話題前面也專門分享過,但沒提模擬看門狗的內容。
-
看門狗
+關注
關注
10文章
566瀏覽量
70945 -
adc
+關注
關注
99文章
6533瀏覽量
545743 -
STM32
+關注
關注
2272文章
10923瀏覽量
357549
原文標題:ADC模擬看門狗應用方案介紹
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論