有人使用STM32芯片做產品開發,需用到多個通道的ADC轉換。大致需求是這樣的:
有2個ADC通道需要每10ms啟動一次轉換,另外5個通道希望50ms啟動一次轉換。試問如何實現上述功能比較好。
這里不妨以STM32F302芯片為例,來介紹兩種實現上述功能的大致方案以供參考。方案里涉及到ADC規則通道、注入通道的使用、DMA的使用、定時器的靈活使用,具備一定綜合性。下面介紹以貼圖為主,沒法一點一滴做解釋了。
第一種方案,我們使用ADC1模塊的CH1到CH7連續的7個通通來做AD轉換,其中CH6/CH7配置為注入通道【我將其戲稱之為插隊通道】,另外5個通道配置為規則通道。
其中,規則通道的觸發選用TIM1的觸發輸出信號【TRGO】,注入通道的觸發選擇TIM1通道4的比較事件。我們將TIM1的計數模式選擇向上單向計數模式,計數周期設置為10ms,并開啟TIM1_CH4的PWM輸出功能,周期也是10ms,這樣就可以實現每10ms觸發一次注入通道的轉換動作。
另外,我們將RCR重復計數寄存器設置為4,即每溢出4+1次則產生一次定時器更新事件,并將其將做為TIM1的TRGO信號,這樣就保證了每50ms觸發一次規則通道的ADC動作?!咀ⅲ篟CR寄存器只有高級定時器才有】
規則通道的ADC結果通過DMA取走送到指定內存單元,DMA配置為Normal模式。
利用STM32CubeMx進行配置后,添加必要的用戶代碼。
兩個數組分別存放規則通道和注入通道的轉換結果。
開啟TIM1以及通道4的PWM輸出;
開啟ADC規則通道/注入通道,只待觸發信號。
在規則通道的DMA傳輸完成中斷里重啟ADC的轉換。
編譯運行查看結果【下表中分別為規則通道和注入通道結果】:
一路下來,只要各個環節都弄清楚、做到位了還是挺簡單的。
當然,TIM1作為高級定時器有時可能有它用,沒法用在這里。我們知道,STM32芯片的定時器往往較多,而且很多都可以產生ADC的觸發事件,此時我們不妨稍加調整即可得出新方案。
比方還是開篇的應用需求和STM32F3芯片,我們可將規則通道和注入通道的觸發事件分別調整為TIM6的觸發輸出和TIM15的觸發輸出,時間參數各種獨立配置即可。
好,本示例就介紹到這里,文筆不佳,但求行文簡捷。實現方案也不是唯一的,最終要結合具體應用場景和所選擇的芯片型號。在此只希望能帶給大家一些相關應用方面的啟示或借鑒。
-
芯片
+關注
關注
456文章
50931瀏覽量
424606 -
adc
+關注
關注
98文章
6512瀏覽量
544990 -
STM32
+關注
關注
2270文章
10906瀏覽量
356530
原文標題:基于STM32多通道ADC綜合應用示例
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論