我們在做ADC應用時,有些場合需要精確測量出待測信號的數據,有時可能并不關心ADC結果多準確,只要滿足某個范圍即可,這時我們就可以考慮使用STM32ADC看門狗功能了。
STM32
ADC基本上都支持模擬看門狗功能,即ADC模塊對被檢測的模擬通道的轉換結果基于硬件對其合法性、安全性進行監測。我們可以設置被監測通道的轉換結果合法性檢查的上下閾值,若結果處于閾值之外則視為異常,并可以觸發中斷。
尤其有些場合,我們可能使用到數個ADC通道,8個、10個甚至更多,同時程序還需要基于各通道的轉換結果進行合法性或安全性監測,此時使用ADC模擬看門狗功能就很方便。我們可以先讓模擬看門狗做第一步把關,只有出現異常數據時才去進一步檢查確認。不然的話,每次一批數據出來后,我們得逐個去檢查合法性。一般來講,多數情況下異常可能只是偶爾、個別通道發生,這樣每次轉換完成后總是不分青紅皂白地去逐一檢查、確認,顯然有點浪費時間,啰嗦無益,這也會影響系統性能。
我這里使用STM32L4開發板,簡單演示下實現過程,供有需要的人士參考。
這里只開啟ADC1模塊的8個規則通道,使用DMA傳送轉換結果,并設置模擬看門狗。使用CubeMx圖形化配置工具進行工程配置。
我只啟用了模擬看門狗1,針對8個規則通道的轉換結果進行實時監測。【當然你可以有其它更為靈活的設計。各個STM32系列這個地方不完全一樣。】
開啟ADC模擬看門狗的中斷。
代碼里設置一個記錄ADC結果異常的標志Flag_ADC_Abnormal,若發生結果異常會在ADC中斷對該標志變量賦非0值。
在主循環里若發現異常標志非0,然后去進一步做所有ADC結果的確認。
上面演示過程中監測到一個異常數據,觸發了模擬看門狗中斷,ADC結果異常標志被賦0xff值,會做進一步異常數據的確認。
我在上面采用的一個模擬看門狗對8個通道的結果進行監測,如果一輪掃描轉換下來出現多個異常數據,會觸發幾次中斷呢?
不妨基于同一開發板驗證下。我加個ADC中斷次數累計變量ADC_Res_CNT,并把閾值下限調整為1200,其它不動。【見下圖】
然后進行測試,得到下面結果。
從結果看,除了2個數據正常外其它均異常,故一輪轉換下來發生了6次中斷,顯然我們可以根據中斷次數進一步判斷一輪轉換下來的異常通道數。【注:這里ADC配置為單次掃描模式,DMA配置為Normal模式。】
-
mcu
+關注
關注
146文章
17184瀏覽量
351691 -
adc
+關注
關注
98文章
6513瀏覽量
545040 -
STM32
+關注
關注
2270文章
10910瀏覽量
356598
發布評論請先 登錄
相關推薦
評論