天天看點

STM32CubeMx-ADC

本章通過兩個例程介紹STM32的模數轉換器(ADC),第一個通過ADC采集内部溫度傳感器通道電壓,然後得出MCU内部溫度。第二個通過DMA的方式采集兩個ADC通道電壓。

1.ADC

本章程式在序列槽printf工程的基礎上修改,複制序列槽printf的工程,修改檔案夾名。擊xxx.ioc打開STM32cubeMX的工程檔案重新配置。ADC1外設選擇溫度傳感器通道。

STM32CubeMx-ADC

ADC1配置如下,選擇預設設定。其Date Alignment設定為資料右對齊; 采樣時間 239.5周期。對于每個要轉換的通道,采樣時間建議盡量長一點,以獲得較高的準确度,但是這樣會降低 ADC 的轉換速率。 ADC 的轉換時間可以由以下公式計算:

Tcovn=采樣時間+12.5 個周期

其中: Tcovn 為總轉換時間,采樣時間是根據每個通道的 SMP 位的設定來決定的。例如,

當 ADCCLK=14Mhz 的時候,并設定 1.5 個周期的采樣時間,則得到:  TCONV = 1.5 + 12.5 = 14周期 = 14×(1 / (14 × 1000000)) = 1μs。

STM32CubeMx-ADC
STM32CubeMx-ADC

生成報告以及代碼,編譯程式。在adc.c檔案中可以看到ADC初始化函數。

在stm32f1xx_hal_adc.h頭檔案中可以找到如下ADC操作函數。和序列槽一樣,ADC也可以通過三種方式控制。

STM32CubeMx-ADC

在main()函數前面聲明變量儲存AD采集的值

STM32CubeMx-ADC

在main()函數while(1)循環裡面添加函數聲明變量儲存AD采集的值

STM32CubeMx-ADC

在adc.c還要添加ADC校準

STM32CubeMx-ADC

HAL_ADC_GetValue(&hadc1);讀取ADC轉換資料,資料為12位。檢視資料手冊可知,寄存器為16位存儲轉換資料,資料右對齊,則轉換的資料範圍為0~2^12-1,即0~4095.

STM32CubeMx-ADC

AD_Value*3300/4096為将轉換後的資料轉化為電壓,機關為mV,參考電壓為3.3V。查詢資料手冊可以電壓和溫度的關系。經過計算公式裝換後等到MCU内部溫度值。

STM32CubeMx-ADC
STM32CubeMx-ADC

編譯程式并下載下傳到開發闆。打開序列槽調試助手。設定波特率為115200。序列槽助手上會顯示MCU溫度。

2.ADC_DMA

前面介紹了通過ADC輪詢的方式采集單通道的資料。現在介紹一下通過DMA方式采集多通道的資料。

   複制序列槽printf工程的工程,修改檔案夾名。點選xxx.ioc打開STM32cubeMX的工程檔案重新配置。使用PA6,PA7管腳作為ADC1的輸入管腳。

STM32CubeMx-ADC

ADC1配置:使能掃描轉換模式(Scan Conversion Mode),使能連續轉換模式(Continuous Conversion Mode),使能DMA連續請求。ADC規則組選擇轉換通道數為2(Number Of Conversion)。其他為預設設定。

添加DMA設定,設定為連續傳輸模式,資料長度為字

STM32CubeMx-ADC

生成報告以及代碼,編譯程式。在adc.c檔案中可以看到ADC初始化函數。

在main函數前面添加變量。其中ADC_Value作為轉換資料緩存數組,ad1,ad2存儲PA6,PA7的電壓值。

STM32CubeMx-ADC

在while(1)前面以DMA方式開啟ADC裝換。HAL_ADC_Start_DMA()函數第二個參數為資料存儲起始位址,第三個參數為DMA傳輸資料的長度。

STM32CubeMx-ADC

由于DMA采用了連續傳輸的模式,ADC采集到的資料會不斷傳到到存儲器中(此處即為數組ADC_Value)。ADC采集的資料從ADC_Value[0]一直存儲到ADC_Value[99],然後采集到的資料又重新存儲到ADC_Value[0],一直到ADC_Value[99]。是以ADC_Value數組裡面的資料會不斷被重新整理。這個過程中是通過DMA控制的,不需要CPU參與。我們隻需讀取ADC_Value裡面的資料即可得到ADC采集到的資料。

      其中ADC_Value[0]為通道6(PA6)采集的資料,ADC_Value[1]為通道7(PA7)采集的資料,ADC_Value[2]為通道6采集的資料,如此類推。數組偶數下标的資料為通道6采集資料,數組奇數下标的資料為通道7采集資料。

在while(1)循環中添加應用程式,将采集的資料裝換為電壓值并輸出。

STM32CubeMx-ADC

程式中将數組偶數下标資料加起來求平均值,實作均值濾波的功能,再将資料轉換為電壓值,即為PA6管腳的電壓值。同理對數組奇數下标資料處理得到PA7管腳的電壓值。

編譯程式并下載下傳到開發闆。打開序列槽調試助手。設定波特率為115200。序列槽助手上會顯示采集到的電壓值,使用杜邦線連接配接開發闆上的3.3v和GND引腳測試。