登录/注册

stm32的adc讲解

更多

STM32 的 ADC(模数转换器)是一种将模拟信号转换为数字信号的外设,广泛应用于传感器数据采集、电压检测等场景。以下是关于 STM32 ADC 的核心讲解:


一、ADC 主要特性

  1. 分辨率

    • 通常为 12 位(如 STM32F1/F4),部分型号支持 16 位(如 STM32H7)。
    • 输出范围为 0–4095(12 位)或 0–65535(16 位)。
  2. 采样率

    • 取决于 ADC 时钟频率(最高可达数十 MHz,具体由型号决定)。
    • 例如:STM32F407 的 ADC 时钟最高为 36 MHz,采样率可达 2.4 MSPS(每秒百万次采样)。
  3. 输入通道

    • 外部通道:最多 16-24 个(不同型号不同),用于外部模拟信号输入。
    • 内部通道:温度传感器、内部参考电压(VREFINT)、电池电压(VBAT)等。
  4. 工作模式

    • 单次模式:触发一次,转换一次。
    • 连续模式:自动循环转换。
    • 扫描模式:自动按顺序转换多个通道。
    • 间断模式:分组转换,每组需触发信号。

二、ADC 时钟配置

ADC 的时钟通常由 APB2 总线分频得到(如 STM32F1/F4)。
示例配置


三、校准流程

ADC 需校准以提高精度,步骤如下:

  1. 上电后等待 ADC 稳定。
  2. 执行校准命令:
    HAL_ADCEx_Calibration_Start(&hadc);  // HAL 库函数
  3. 校准值会自动存储在 ADC 寄存器中。

四、DMA 传输

多通道或连续采样时,建议使用 DMA 自动搬运数据,避免 CPU 频繁中断:

  1. 配置 DMA 为循环模式。
  2. 绑定 ADC 到 DMA,设置数据长度和存储地址。
  3. 示例代码:
    HAL_ADC_Start_DMA(&hadc, (uint32_t*)adc_buffer, BUFFER_SIZE);

五、配置步骤(以 HAL 库为例)

  1. 初始化 ADC

    hadc.Instance = ADC1;                   // 选择 ADC 实例
    hadc.Init.Resolution = ADC_RESOLUTION_12B;  // 分辨率
    hadc.Init.ScanConvMode = ENABLE;        // 扫描模式(多通道时启用)
    hadc.Init.ContinuousConvMode = ENABLE;  // 连续转换模式
    hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 数据右对齐
    hadc.Init.NbrOfConversion = 3;          // 转换通道数
    HAL_ADC_Init(&hadc);
  2. 配置通道与采样时间

    ADC_ChannelConfTypeDef sConfig = {0};
    sConfig.Channel = ADC_CHANNEL_0;        // 选择通道(如 PA0)
    sConfig.Rank = 1;                       // 转换顺序
    sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES; // 采样时间
    HAL_ADC_ConfigChannel(&hadc, &sConfig);
  3. 启动 ADC 并读取数据

    • 轮询方式
      HAL_ADC_Start(&hadc);
      if (HAL_ADC_PollForConversion(&hadc, 100) == HAL_OK) {
       uint16_t value = HAL_ADC_GetValue(&hadc);
      }
    • 中断方式
      HAL_ADC_Start_IT(&hadc);  // 启动中断
      // 在中断回调函数中读取数据
      void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
       uint16_t value = HAL_ADC_GetValue(hadc);
      }

六、注意事项

  1. 参考电压(VREF+):确保稳定,噪声过大会影响精度。
  2. 模拟输入阻抗:信号源阻抗过高时,增加采样时间或使用缓冲电路。
  3. 温度传感器:需先使能内部通道,并等待启动时间(见数据手册)。
  4. 电源噪声:模拟部分(VDDA)与数字部分(VDD)建议通过磁珠隔离。

七、应用示例:多通道 DMA 扫描

// 定义存储数组
uint16_t adc_results[3];

// 配置 ADC 和 DMA
hadc.Init.ScanConvMode = ENABLE;
hadc.Init.ContinuousConvMode = ENABLE;
hadc.Init.NbrOfConversion = 3;
HAL_ADC_Init(&hadc);

// 配置三个通道(如 PA0, PA1, PA2)
ADC_ChannelConfTypeDef sConfig;
for (int i = 0; i < 3; i++) {
    sConfig.Channel = ADC_CHANNEL_0 + i;
    sConfig.Rank = i + 1;
    sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES;
    HAL_ADC_ConfigChannel(&hadc, &sConfig);
}

// 启动 DMA 传输
HAL_ADC_Start_DMA(&hadc, (uint32_t*)adc_results, 3);

八、总结

STM32 ADC 的核心配置包括 时钟分频、通道设置、校准、DMA 传输。实际应用中需根据信号特性优化采样时间和抗干扰设计。不同型号的 STM32 可能存在差异,务必参考对应型号的 数据手册(Datasheet)参考手册(Reference Manual)

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

第12章-ADC采集电压和显示 基于STM32的ADC—电压采集(详细讲解

2024-08-21 16:31:34

STM32开发板之ADC功能框图讲解

STM32f103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。其中

2023-08-14 12:42:51

STM32F103 GPIO内部电路图讲解

STM32F103 GPIO内部电路图讲解

2023-02-01 16:32:14

AVR单片机ADC使用讲解

AVR单片机ADC使用讲解(电源技术杂志社编辑部)-该文档为AVR单片机ADC使用讲解

资料下载 刘杰 2021-09-27 15:56:40

MCS-51与DAC、ADC的接口讲解

MCS-51与DAC、ADC的接口讲解(通信电源技术官网)-该文档为MCS-51与DAC、ADC的接口

资料下载 李勇 2021-09-27 15:46:36

STM32ADC学习历程

STM32的ADC学习历程(电源技术期刊影响因子)- STM32的ADC

资料下载 王越建 2021-09-27 12:32:55

STM32ADC驱动程序

STM32的ADC驱动程序(电源技术被踢出核心)-  STM32的ADC

资料下载 刘满贵 2021-09-23 13:43:22

STM32ADC代码例程

STM32的ADC代码例程(普德新星电源技术有限公司怎么样)- STM32的ADC

资料下载 vinww特烦恼 2021-09-23 09:53:19

STM32-ADC模块讲解 精选资料分享

文章目录一.ADC简介二.ADC功能框图讲解 1.电压输入范围 2.输入通道 3.转换顺序 4.触发源 5.转换时间 6.数据寄存器 7.中断

2021-08-20 07:57:11

STM32 ADC框图讲解

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

2021-08-19 08:59:42

STM32F103VET6——ADC单通道中断读取实验讲解 精选资料推荐

STM32F103VET6——ADC单通道中断读取实验讲解参考 《STM32

2021-08-04 08:09:32

STM32ADC详解 精选资料分享

文章目录ADC简介ADC功能框图讲解ADC简介

2021-08-02 09:21:23

何谓ADCSTM32中的ADC有什么功能?

STM32F103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。

2021-06-11 17:46:16

STM32_ USART输入输出的讲解

STM32_USART输入输出的讲解

2020-04-08 10:46:26

浅谈STM32控制IO基本配置的讲解

STM32控制IO基本配置的讲解

2020-04-08 09:24:23

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