登录/注册

stm32adc如何采集电压

更多

在STM32中使用ADC采集电压的步骤如下:


1. 硬件准备


2. 软件配置(以HAL库为例)

(1) 初始化ADC

// 启用ADC时钟(例如ADC1)
__HAL_RCC_ADC1_CLK_ENABLE();

// 配置ADC参数
ADC_HandleTypeDef hadc1;
hadc1.Instance = ADC1;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;   // 12位分辨率
hadc1.Init.ScanConvMode = DISABLE;           // 单通道禁用扫描模式
hadc1.Init.ContinuousConvMode = DISABLE;     // 单次转换模式
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;  // 数据右对齐
hadc1.Inch.NbrOfConversion = 1;              // 转换通道数

HAL_ADC_Init(&hadc1);

(2) 配置ADC通道

// 配置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_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_0;      // 对应引脚通道
sConfig.Rank = ADC_REGULAR_RANK_1;    // 转换顺序
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES;  // 采样时间(越长抗噪越好)
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

(3) 校准ADC

HAL_ADCEx_Calibration_Start(&hadc1);  // 校准提高精度

3. 采集电压

// 启动ADC转换
HAL_ADC_Start(&hadc1);

// 等待转换完成(超时时间可调)
if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) {
    // 读取ADC原始值(12位,范围0~4095)
    uint16_t adc_value = HAL_ADC_GetValue(&hadc1);

    // 计算实际电压(假设VREF=3.3V)
    float voltage = (adc_value * 3.3f) / 4096.0f;
}

4. 其他模式(可选)


注意事项

  1. 抗噪处理:在ADC输入端并联0.1μF电容滤除高频噪声。
  2. 输入阻抗:高阻抗信号源需加电压跟随器。
  3. VREF稳定性:参考电压波动会直接影响精度。

示例代码(简化版)

#include "stm32f1xx_hal.h"

ADC_HandleTypeDef hadc1;

void ADC_Init() {
    // 初始化ADC1,通道0,12位分辨率
    hadc1.Instance = ADC1;
    hadc1.Init.Resolution = ADC_RESOLUTION_12B;
    hadc1.Init.ScanConvMode = DISABLE;
    hadc1.Init.ContinuousConvMode = DISABLE;
    hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    HAL_ADC_Init(&hadc1);

    // 配置通道0(PA0)
    ADC_ChannelConfTypeDef sConfig = {0};
    sConfig.Channel = ADC_CHANNEL_0;
    sConfig.Rank = ADC_REGULAR_RANK_1;
    sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES;
    HAL_ADC_ConfigChannel(&hadc1, &sConfig);

    // 校准ADC
    HAL_ADCEx_Calibration_Start(&hadc1);
}

float Read_Voltage() {
    HAL_ADC_Start(&hadc1);
    if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) {
        uint16_t adc_val = HAL_ADC_GetValue(&hadc1);
        return (adc_val * 3.3f) / 4096.0f;
    }
    return 0;
}

通过以上步骤,即可在STM32中实现电压采集。具体参数需根据实际硬件型号(如STM32F1/F4/H7等)调整。

IEPE信号如何读取,采用什么芯片采集比较好?

信号偏置电压+9~+13VDC,采集的信号为 -5V~+5V,最后传给stm32ADC

2025-03-24 07:03:17

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

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

2024-08-21 16:31:34

怎样用stm32ADC检测输入5V的电压

用stm32ADC采样测量0-5V的电压,只能实现0-3.3V的测量,老师只给了一块开发板,没有别的外设。

2024-06-19 00:40:29

ADC基于stm32电压电流采集

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

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

STM32 HAL库 CubeMX教程(七)ADC电压采集串口输出

STM32 HAL库 CubeMX教程(七)ADC电压采集

资料下载 张辉 2022-01-12 20:24:01

STM32 HAL库 CUBEMX配置 ADC采集

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录STM32 HAL库 CUBEMX配置 ADC采集软硬件型号1.单通道不

资料下载 佚名 2021-12-27 18:57:09

STM32ADC转换

ADC模数转换一、概述ADC翻译过来是模数转换,意思就是将外部世界采集到的模拟量的数据信息通过

资料下载 佚名 2021-12-24 19:25:55

STM32单片机ADC采集

STM32单片机ADC采集

资料下载 佚名 2021-11-18 20:36:05

STM32ADC中断的使用注意事项和优化建议

STM32ADC中断的使用注意事项和优化建议 STM32ADC(模拟数字转换器)是STMicroelectronics开发的一款用于外部模拟信号转换为数字信号的器件。在使用

2024-01-12 15:17:50

怎么查看当前STM32ADC的采样频率?

STM32ADC的采样频率怎么看呢

2023-10-15 11:02:10

使用STM32ADC看门狗测量出待测信号

我们在做ADC应用时,有些场合需要精确测量出待测信号的数据,有时可能并不关心ADC结果多准确,只要满足某个范围即可,这时我们就可以考虑使用STM32ADC

2023-07-17 10:31:16

stm32ADC求助

萌新请教下stm32adc采样如果要采集音频(原接口接喇叭sp+和sp-现在想用单片机adc

2022-03-06 21:45:00

STM32 ADC模块温度传感器的单通道采集与多通道采集实现

关于这个模块其实我在前面的博客中已经写的比较详细了,因此我在这只是放一下代码而已。传送门:STM32ADC模块-温度传感器的单通道采集与多通道采集

2022-02-22 08:22:19

STM32 ADC框图讲解

目录01、ADC简介02、STM32的ADC外设03、STM32ADC框

2021-08-19 08:59:42

STM32F0xx_ ADC采集电压配置详细过程

STM32F0xx_ADC采集电压配置详细过程

2020-04-08 09:01:16

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