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