登录/注册

stm32电压adc转换

更多

在STM32微控制器中实现电压的ADC转换,主要涉及配置ADC外设、读取原始数据并转换为实际电压值。以下是基本步骤和示例:


1. ADC基本概念


2. 配置步骤

(1) 初始化ADC

// 启用ADC时钟
__HAL_RCC_ADC1_CLK_ENABLE();

// 配置GPIO为模拟输入模式
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0;          // 假设使用PA0(ADC1通道0)
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// 配置ADC参数
ADC_HandleTypeDef hadc;
hadc.Instance = ADC1;
hadc.Init.Resolution = ADC_RESOLUTION_12B; // 12位分辨率
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 数据右对齐
hadc.Init.ScanConvMode = DISABLE;          // 单通道模式
hadc.Init.ContinuousConvMode = DISABLE;    // 单次转换模式
HAL_ADC_Init(&hadc);

// ADC校准
HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED);

(2) 启动ADC转换

// 选择通道并启动转换
HAL_ADC_Start(&hadc);  // 启动ADC
HAL_ADC_PollForConversion(&hadc, 10); // 等待转换完成(超时10ms)

// 读取ADC原始值
uint32_t adc_value = HAL_ADC_GetValue(&hadc);

(3) 转换为实际电压

float voltage = (adc_value * 3.3f) / 4095.0f;  // 假设参考电压为3.3V

3. 注意事项

  1. 参考电压:若使用外部参考电压(如2.5V),需替换公式中的3.3V。
  2. 采样时间:高阻抗信号源需增加采样时间(通过hadc.Init.SamplingTime配置)。
  3. 滤波:软件上可通过多次采样取平均减少噪声。
  4. 多通道扫描:需启用扫描模式并配置通道顺序。

示例代码(单次转换)

#include "stm32f1xx_hal.h"

ADC_HandleTypeDef hadc;

void ADC_Init() {
  // 初始化GPIO和ADC
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_ADC1_CLK_ENABLE();

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  hadc.Instance = ADC1;
  hadc.Init.Resolution = ADC_RESOLUTION_12B;
  hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc.Init.ScanConvMode = DISABLE;
  hadc.Init.ContinuousConvMode = DISABLE;
  HAL_ADC_Init(&hadc);

  HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED);
}

float Read_Voltage() {
  HAL_ADC_Start(&hadc);
  if (HAL_ADC_PollForConversion(&hadc, 10) == HAL_OK) {
    uint32_t adc_val = HAL_ADC_GetValue(&hadc);
    return (adc_val * 3.3f) / 4095.0f;
  }
  return 0.0f;
}

常见问题

根据具体型号(如STM32F1/F4/H7等),需参考对应手册调整配置。

STM32F407输出的2片ADC转换值与输入ADC电压值相同了,不知道是何原因?

采用STM32F407 控制2片ADS125550sps速率进行ADC采样,使用外部基准,单元上电后偶然会出现STM32F407 输出的2片

2025-01-22 08:15:20

第12章-ADC采集电压和显示 基于STM32ADC电压采集(详细讲解+HAL库)

第12章-ADC采集电压和显示 基于STM32的ADC—

2024-08-21 16:31:34

STM32ADC采集到传感器输出的电压怎么转换成烟雾浓度?

STM32的ADC采集到传感器输出的电压,怎么转换成烟雾浓度?单片机

2023-10-24 07:20:47

ADC基于stm32电压电流采集

ADC基于stm32的电压电流采集原理与源程序。

资料下载 jinyi7016 2022-03-22 12:14:55

STM32---ADC模数转换详解

的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。stm32

资料下载 佚名 2021-11-23 18:21:38

单片ADC转换电压

单片ADC转换电压(实用电源技术手册pdf)-单片机ADC

资料下载 佚名 2021-09-24 11:44:22

STM32F4 ADC模数转换实验例程

STM32F4 ADC模数转换实验例程(深圳市普德新星电源技术有限公司)-STM32

资料下载 佚名 2021-09-16 10:21:50

STM32多个ADC模块同时采样转换的应用示例

STM32多个ADC模块同时采样转换的应用示例(深圳市普德新星电源技术有限公司怎么样)-本文重点介绍利用含有3个

资料下载 石玉兰 2021-08-04 18:47:30

STM32模数转换器 (ADC)介绍

STM32F4xx系列提供的12位ADC是逐次逼近型模数转换器。

2023-07-22 16:37:00

STM32中的SAR ADC是怎么一回事?

STM32中的ADC是逐次逼近型ADC(Successive Approximation

2023-05-16 11:20:54

STM32 ADC是如何去实现AD转换并进行电压采集的

STM32的ADC模数转换器有何功能?STM32

2021-12-13 06:38:37

STM32ADC电压输入范围为多大

STM32的ADC 电压输入范围为: VREF- ≤ VIN ≤ VREF+。一般设计的时候会把VREF-和地相连, VREF+和VDDA相连。

2021-08-04 06:47:56

ADC模数转换

的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。stm32

2021-07-23 07:20:50

STM32ADC详解和代码设计

模拟信号转换为表示一定比例电压值的数字信号。 从STM32F207的数据手册中下图看到,

2021-02-20 14:29:47

STM32的多个ADC模块如何同时采样转换详细应用实例说明

同时工作,比方3个ADC模块同时采样转换。这时如果芯片内含有3个ADC模块,并支持同时采样

2019-06-30 10:40:39

7天热门专题 换一换
相关标签