有人使用STM32F303VC開(kāi)發(fā)電源方面的產(chǎn)品,想使用4個(gè)ADC模塊進(jìn)行同時(shí)采樣轉(zhuǎn)換,感覺(jué)不知怎么實(shí)現(xiàn)。這里簡(jiǎn)單介紹下實(shí)現(xiàn)過(guò)程,以供參考。
現(xiàn)在希望四個(gè)ADC模塊同時(shí)進(jìn)行AD轉(zhuǎn)換。我們使用雙ADC主從模式,ADC1與ADC2成為一組,構(gòu)成主從模式。同樣,ADC3與ADC4也成為一組構(gòu)成主從模式。其中,ADC1和ADC3分別為各組中的主,并讓兩組都工作在同時(shí)轉(zhuǎn)換模式,對(duì)規(guī)則通道進(jìn)行ADC轉(zhuǎn)換。
它們的轉(zhuǎn)換使用同一定時(shí)器事件來(lái)觸發(fā),這里選擇TIM4的更新事件來(lái)觸發(fā)所有ADC的轉(zhuǎn)換。如下圖所示,主ADC的CH1與從ADC的CH16同時(shí)進(jìn)行轉(zhuǎn)換,主ADC的CH2與從ADC的CH14同時(shí)進(jìn)行轉(zhuǎn)換,就這樣依次按照紅色箭頭方向進(jìn)行。
對(duì)于工作在主從模式的雙ADC的轉(zhuǎn)換結(jié)果,可以合并成一個(gè)字放在一個(gè)公共數(shù)據(jù)寄存器里ADCx_CDR( x=12 or 34),能被CPU或DMA讀取訪問(wèn)。其中高半字存放從ADC的轉(zhuǎn)換結(jié)果,低半字存放主ADC的轉(zhuǎn)換結(jié)果?!具@里各ADC的分辨率選用12位,轉(zhuǎn)換結(jié)果采用右對(duì)齊方式?!?/p>
大致原理就介紹到這里,更多細(xì)節(jié)還得看STM32參考手冊(cè)。
現(xiàn)在將4個(gè)ADC模塊用起來(lái),同時(shí)進(jìn)行ADC轉(zhuǎn)換,通過(guò)DMA傳輸ADC結(jié)果。這里只用到規(guī)則轉(zhuǎn)換,其中,ADC1使用它的CH1/CH2,ADC2使用它的CH3/CH4, ADC3使用它的CH5/CH6, ADC4使用CH7/CH8。
各ADC模塊的采樣通道連接如下圖所示,ADC經(jīng)定時(shí)器事件觸發(fā)轉(zhuǎn)換。
現(xiàn)在基于STM32CubeMx進(jìn)行初始化配置。
先看TIM4的配置,它的更新事件作為所有ADC的轉(zhuǎn)換觸發(fā)事件。
然后根據(jù)上面的規(guī)劃,對(duì)4個(gè)ADC模塊進(jìn)行配置。
4個(gè)ADC的配置除了各自選擇的通道不一樣外,在上面頁(yè)面里的配置都相同。定時(shí)器觸發(fā),工作在雙模式同時(shí)轉(zhuǎn)換。
因?yàn)橐獙?duì)ADC結(jié)果實(shí)行DMA傳輸,根據(jù)當(dāng)前所選擇的工作模式,這里只需對(duì)ADC1和ADC3兩個(gè)主ADC的轉(zhuǎn)換事件進(jìn)行DMA配置,如下圖所示:
我這里將DMA傳輸配置成循環(huán)模式,基于ADC3事件的DMA傳輸配置跟上面一樣,只是DMA通道不同而已。
將時(shí)鐘等必要的配置完成后即可生成初始化代碼。在初始化代碼的基礎(chǔ)上添加用戶(hù)代碼。
我定義了2個(gè)數(shù)組pData12[4]、pData34[4]分別存放ADC1/2 與ADC3/4合并后的轉(zhuǎn)換結(jié)果。
基于STM32Cube HAL庫(kù)組織代碼,相關(guān)參考代碼如下:
代碼直觀明了,無(wú)須過(guò)多解釋。提醒一點(diǎn),使用雙ADC模式時(shí),從ADC要先于主ADC啟動(dòng)使能。
基于上面的規(guī)劃與代碼,測(cè)試結(jié)果如下:
結(jié)果跟實(shí)際硬件連接情況完全吻合。
上面只是基于雙ADC模塊規(guī)則通道的同時(shí)轉(zhuǎn)換模式做了簡(jiǎn)單應(yīng)用介紹。其實(shí)對(duì)于雙ADC模式,還有其它更多轉(zhuǎn)換模式,在STM32開(kāi)發(fā)應(yīng)用中可以靈活選擇使用。
責(zé)任編輯:pj
-
電源
+關(guān)注
關(guān)注
184文章
17718瀏覽量
250182 -
adc
+關(guān)注
關(guān)注
98文章
6498瀏覽量
544657 -
產(chǎn)品
+關(guān)注
關(guān)注
0文章
87瀏覽量
23338
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論