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