STM32 CubeMX ADC采集(HAL庫)
ADC介紹
12位ADC是一種逐次逼近型模擬數(shù)字轉(zhuǎn)換器。它有多達18個通道,可測量16個外部和2個內(nèi)部
信號源。各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對齊或右
對齊方式存儲在16位數(shù)據(jù)寄存器中。
模擬看門狗特性允許應(yīng)用程序檢測輸入電壓是否超出用戶定義的高/低閥值。
ADC的輸入時鐘不得超過14MHz,它是由PCLK2經(jīng)分頻產(chǎn)生。
ADC主要特征
● 12位分辨率(最小識別電壓)
● 轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門狗事件時產(chǎn)生中斷
● 單次和連續(xù)轉(zhuǎn)換模式
● 從通道0到通道n的自動掃描模式
● 自校準
● 帶內(nèi)嵌數(shù)據(jù)一致性的數(shù)據(jù)對齊
● 采樣間隔可以按通道分別編程
● 規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項
● 間斷模式
● 雙重模式(帶2個或以上ADC的器件)
● ADC轉(zhuǎn)換時間:
─ STM32F103xx增強型產(chǎn)品:時鐘為56MHz時為1μs(時鐘為72MHz為1.17μs)
─ STM32F101xx基本型產(chǎn)品:時鐘為28MHz時為1μs(時鐘為36MHz為1.55μs)
─ STM32F102xxUSB型產(chǎn)品:時鐘為48MHz時為1.2μs
─ STM32F105xx和STM32F107xx產(chǎn)品:時鐘為56MHz時為1μs(時鐘為72MHz為1.17μs)
● ADC供電要求:2.4V到3.6V
● ADC輸入范圍:VREF- ≤ VIN ≤ VREF+
● 規(guī)則通道轉(zhuǎn)換期間有DMA請求產(chǎn)生。
Vref+的電壓(2.4~3.6)就是ADC參考電壓2.4V(相當于秤砣)
最小識別電壓值:2.4/4096≈0.6mv(不考慮誤差)
一、STM32 CubeMX設(shè)置
開啟連續(xù)掃描使能,1.5采樣周期
我們設(shè)置 PCLK2=72M,經(jīng)過 ADC 預(yù)分頻器能分頻到最大的時鐘只能是 12M,采樣周期設(shè)置為 1.5 個周期,算出最短的轉(zhuǎn)換時間為 1.17us,
二、代碼部分
HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
HAL_ADCEx_Calibration_Start(&hadc1); //AD校準
HAL_ADC_Start_IT(&hadc1); //開啟ADC中斷轉(zhuǎn)換
ADC_Value =HAL_ADC_GetValue(&hadc1);
三,單通道輪詢采樣速度
測試方法:
{(adc轉(zhuǎn)換時間+io反轉(zhuǎn)時間)-io反轉(zhuǎn)時間} =adc轉(zhuǎn)換速度
IO口直接反轉(zhuǎn)
測得實際轉(zhuǎn)換時間:3us-0.3us=2.7.us
理論值:上面我們設(shè)置ADC時鐘12Mhz,采樣一次最短時間位1.17us
注釋:
可編程的通道采樣時間:TCONV = 采樣時間+ 12.5個周期
**例如**:
當ADCCLK=14MHz,采樣時間為1.5周期
TCONV = 1.5 + 12.5 = 14周期 = **1μs**
我們設(shè)置 PCLK2=72M,經(jīng)過 ADC 預(yù)分頻器能分頻到最大的時鐘只能是 12M,采樣周期設(shè)置為 1.5 個周期,算出最短的轉(zhuǎn)換時間為 1.17us,
四、內(nèi)部溫度傳感器
HAL_ADC_Start(&hadc1); //啟動ADC轉(zhuǎn)換
HAL_ADC_PollForConversion(&hadc1,10); //等待轉(zhuǎn)換完成,10ms表示超時時間
AD_Value = HAL_ADC_GetValue(&hadc1); //讀取ADC轉(zhuǎn)換數(shù)據(jù)(12位數(shù)據(jù))
// HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
Vol_Value = AD_Value*(3.3/4096); //AD值乘以分辨率即為電壓值
printf("ADC1_IN16 VOL value: %.2fV\r\n",Vol_Value);
Temperature = (1.43 - Vol_Value)/0.0043 + 25; //根據(jù)公式算出溫度值
printf("MCU Internal Temperature: %.2f\r\n",Temperature);
多通道輪詢方式
設(shè)置 CubeMX
修改代碼部分
int main(void)
{
/* USER CODE BEGIN 1 */
int aa=0;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start(&hadc1); //AD校準
// printf("Test int: i = %d\r\n", aa); // printf輸出int型數(shù)據(jù)
int ADC_value[5];
char i=0;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
for(i=0;i<5;i++)
{
HAL_ADC_Start(&hadc1); //啟動ADC轉(zhuǎn)換
HAL_ADC_PollForConversion(&hadc1, 50); //等待轉(zhuǎn)換完成,50為最大等待時間,單位為ms
ADC_value[i]=HAL_ADC_GetValue(&hadc1);
}
printf("ADC value 0 PA0: %d \r\n",ADC_value[0]);
printf("ADC value 1 PA1: %d \r\n",ADC_value[1]);
printf("ADC value 2 PA2: %d \r\n",ADC_value[2]);
printf("ADC value 3 PA3: %d \r\n",ADC_value[3]);
printf("ADC value 4 PA4: %d \r\n",ADC_value[4]);
HAL_Delay(1000);
// AD_Value = HAL_ADC_GetValue(&hadc1); //讀取ADC轉(zhuǎn)換數(shù)據(jù)(12位數(shù)據(jù))
//
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
// Vol_Value = AD_Value*(3.3/4096); //AD值乘以分辨率即為電壓值
// aa
// Temperature = (1.43 - Vol_Value)/0.0043 + 25; //根據(jù)公式算出溫度值
// printf("MCU Internal Temperature: %.2f\r\n",Temperature);
}
/* USER CODE END 3 */
}
實驗現(xiàn)象
PA0接地;PA1接VCC;PA2接地;PA3浮空;PA4浮空
文章來源:http://www.zghlxwxcb.cn/news/detail-739381.html
總結(jié)
以上就是今天要講的內(nèi)容,本文僅僅簡單介紹了ADC的使用,而ADC提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-739381.html
到了這里,關(guān)于STM32 CubeMX ADC采集 單通道,多通道,內(nèi)部溫度(輪詢,DMA,中斷)(HAL庫)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!