Skip to main content

ADC模数转换

ADC是模拟世界与数字世界的接口!

up的视频讲解:

1 ADC原理

1.1 ADC 简介

ADC (Analog-to-Digital Converter) 是指将连续变量的模拟信号转换为离散的数字信号的器件

  • 简单地说就是将模拟电压值,转换成对应的肉眼可读的数值

  • 光照警报实验中, 通过光敏电阻将光强转化为电压信号, 再通过ADC将电信号转化为具体的数值

  • 温度警报实验中, 通过NTC热敏电阻将温度转化为电压信号, 再通过ADC将电压信号转化为具体的数值

STM32F103C8t6一共有2个12位ADC(数值范围:0 ~ 4095)

  • ADC1, ADC2 (该型号无ADC3)

  • 18 个信号输入的通道

    • 16个外部通道:芯片上有16个引脚是可以接到模拟电压上进行电压值检测的

    • 2个内部信号源 : 一个是内部温度传感器,一个是内部参考电压

  • 各通道的A/D转换可以单次、连续、扫描或间断模式执行

  • ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器

1.2 ADC 计算公式

ADC 转换精度

STM32的工作电压(0 ~ 3.3V), 它的ADC精度是12位(0 ~ 4095)

  • 也就是说可以将0到3.3v分成4096个单位, 而一个单位电压就是ADC的精度

  • ADC精度 计算公式: 3.3 / 4096 = 0.0008 V

ADC值 -> 测量电压值

  • 计算公式: 测量电压值 = ADC值 * (3.3/4096)

1.3 ADC 框架结构

我们先大致了解下ADC的框架结构, 它的工作流程:

信号输入通道-> ADC触发 -> ADC转换 -> ADC转换完成标志 -> CPU读取ADC数据值

ADC 框架结构

  1. ADC 输入通道
  • 外部通道:ADCx_IN0 ~ ADCx_IN15,对应芯片上的 GPIO 引脚

  • 内部通道:片内温度传感器TEMP Sensor、内部参考电压VREFINT,只能由 ADC1 采集

  • VDDA/VSSA给 ADC 供电,VREF+/VREF-是转换的参考电压,决定量程

  • Analog MUX(模拟多路器):像一个开关,切换选中的通道

  1. ADC 触发方式
  • EXTRIG规则组触发:控制常规通道的转换启动

  • JEXTRIG注入组触发:控制高优先级注入通道的转换启动,可打断规则组

  1. ADC 转换
  • ADCCLK DAC时钟:由预分频器提供,决定转换速度上限(最大14MHz)

  • 规则通道(最多 16 个):常规采集

  • 注入通道(最多 4 个):高优先级采集(相当于规则通道的中断)

  1. ADC 转换完成标志
  • EOC:规则通道转换完成。

  • JEOC:注入通道转换完成。

  • AWD:模拟看门狗事件

  1. ADC 数据寄存器
  • regular Channels 规则组数据寄存器:只有 1 个 16 位寄存器

  • Injected Channels 注入组数据寄存器:4 个独立的 16 位寄存器

  • CPU 直接读取寄存器,通过Address/Data BUS地址 / 数据总线获取数据

  • DMA 请求:规则组转换完成后自动触发 DMA,将数据直接搬运到内存,无需 CPU 干预

  • 对齐方式:支持左对齐 / 右对齐,决定 12 位数据在 16 位寄存器中的存放位置

规则通道与注入通道

规则通道与注入通道

ADC采样周期计算

ADC采样周期 就是 ADC完成一次 整个采样转换 所花费的时间

T = 采样周期 + 12.5个周期(固定)

  • 其中1周期为1/ADCCLK

  • 采样周期可以选择: 1.5 周期 7.5 周期 13.5 周期 28.5 周期 41.5 周期 55.5 周期 71.5 周期 239.5 周期

  • 采样周期越长,采集越稳,但采样速度变慢

1.3 ADC 转换模式

  • 单次转换模式:ADC只执行一次转换

  • 连续转换模式:转换结束之后马上开始新的转换

  • 扫描模式:多通道依次轮询采集

  • 间断模式:触发一次,转换一个通道,再触发,再转换

1.4 ADC 数据对齐

因为ADC是12bit的, 也就是说他将采集到的电压转换为了12bit数据, 但是数据寄存器是16位的, 所以说就有了左对齐右对齐这两种方式

ADC 数据对齐

  • SEXTSign Extension(符号扩展位) 注入组的数据寄存器中, 用于区分正负

  • 规则组的结果是无符号 12 位数据,范围 0~4095,直接用 0 填充高位

光照采集实验

温度采集实验

声音采集实验