我們在做ADC應(yīng)用時,有些場合需要精確測量出待測信號的數(shù)據(jù),有時可能并不關(guān)心ADC結(jié)果多準(zhǔn)確,只要滿足某個范圍即可,這時我們就可以考慮使用STM32ADC看門狗功能了。
STM32
ADC基本上都支持模擬看門狗功能,即ADC模塊對被檢測的模擬通道的轉(zhuǎn)換結(jié)果基于硬件對其合法性、安全性進(jìn)行監(jiān)測。我們可以設(shè)置被監(jiān)測通道的轉(zhuǎn)換結(jié)果合法性檢查的上下閾值,若結(jié)果處于閾值之外則視為異常,并可以觸發(fā)中斷。
尤其有些場合,我們可能使用到數(shù)個ADC通道,8個、10個甚至更多,同時程序還需要基于各通道的轉(zhuǎn)換結(jié)果進(jìn)行合法性或安全性監(jiān)測,此時使用ADC模擬看門狗功能就很方便。我們可以先讓模擬看門狗做第一步把關(guān),只有出現(xiàn)異常數(shù)據(jù)時才去進(jìn)一步檢查確認(rèn)。不然的話,每次一批數(shù)據(jù)出來后,我們得逐個去檢查合法性。一般來講,多數(shù)情況下異??赡苤皇桥紶枴€別通道發(fā)生,這樣每次轉(zhuǎn)換完成后總是不分青紅皂白地去逐一檢查、確認(rèn),顯然有點浪費時間,啰嗦無益,這也會影響系統(tǒng)性能。
我這里使用STM32L4開發(fā)板,簡單演示下實現(xiàn)過程,供有需要的人士參考。
這里只開啟ADC1模塊的8個規(guī)則通道,使用DMA傳送轉(zhuǎn)換結(jié)果,并設(shè)置模擬看門狗。使用CubeMx圖形化配置工具進(jìn)行工程配置。
我只啟用了模擬看門狗1,針對8個規(guī)則通道的轉(zhuǎn)換結(jié)果進(jìn)行實時監(jiān)測?!井?dāng)然你可以有其它更為靈活的設(shè)計。各個STM32系列這個地方不完全一樣。】
開啟ADC模擬看門狗的中斷。
代碼里設(shè)置一個記錄ADC結(jié)果異常的標(biāo)志Flag_ADC_Abnormal,若發(fā)生結(jié)果異常會在ADC中斷對該標(biāo)志變量賦非0值。
在主循環(huán)里若發(fā)現(xiàn)異常標(biāo)志非0,然后去進(jìn)一步做所有ADC結(jié)果的確認(rèn)。
上面演示過程中監(jiān)測到一個異常數(shù)據(jù),觸發(fā)了模擬看門狗中斷,ADC結(jié)果異常標(biāo)志被賦0xff值,會做進(jìn)一步異常數(shù)據(jù)的確認(rèn)。
我在上面采用的一個模擬看門狗對8個通道的結(jié)果進(jìn)行監(jiān)測,如果一輪掃描轉(zhuǎn)換下來出現(xiàn)多個異常數(shù)據(jù),會觸發(fā)幾次中斷呢?
不妨基于同一開發(fā)板驗證下。我加個ADC中斷次數(shù)累計變量ADC_Res_CNT,并把閾值下限調(diào)整為1200,其它不動。【見下圖】
然后進(jìn)行測試,得到下面結(jié)果。
從結(jié)果看,除了2個數(shù)據(jù)正常外其它均異常,故一輪轉(zhuǎn)換下來發(fā)生了6次中斷,顯然我們可以根據(jù)中斷次數(shù)進(jìn)一步判斷一輪轉(zhuǎn)換下來的異常通道數(shù)?!咀ⅲ哼@里ADC配置為單次掃描模式,DMA配置為Normal模式?!?/p>
-
mcu
+關(guān)注
關(guān)注
146文章
17473瀏覽量
354598 -
adc
+關(guān)注
關(guān)注
99文章
6568瀏覽量
546748 -
STM32
+關(guān)注
關(guān)注
2277文章
10951瀏覽量
359234
發(fā)布評論請先 登錄
相關(guān)推薦
STM32中的獨立看門狗和窗口看門狗是什么

stm32看門狗時間計算 獨立看門狗和窗口看門狗的特性是什么
STM32看門狗配置(獨立看門狗IWDG和窗口看門狗WWDG)

STM32的看門狗配置詳情解說

基于STM32、FreeRTOS 實現(xiàn)硬件看門狗+軟件看門狗監(jiān)測多任務(wù)的方法
STM32芯片如何使用片內(nèi)參考電壓實現(xiàn)模擬看門狗

STM32 ADC模擬看門狗及其應(yīng)用

STM32CubeMX配置ADC模擬看門狗實現(xiàn)掉電保存——基于(STM32G070+STM32CubeMX+HAL庫+ADC模擬看門狗)

STM32中的獨立看門狗和窗口看門狗
詳解獨立看門狗的實現(xiàn)原理
STM32 ADC模擬看門狗應(yīng)用演示過程

評論