STM32 - ADC数模转换

ADC:模拟数字转换器,用于将模拟信号转换为数字形式,以便在数字系统中进行处理。

ADC工作原理:(两个阶段)

  1. 采样阶段:ADC首先对模拟信号进行采样,即在一定时间内获取信号的瞬时值。

  2. 量化阶段:采样后的模拟信号通过量化器,将其转换为相应的数字形式,这个数字形式通常是二进制代码。

ADC主要参数:

  1. 参考电压(Reference Voltage):ADC使用参考电压来确定模拟信号的幅度范围。通常,ADC需要一个已知的电压作为参考,以便将模拟电压映射到数字代码。

  2. 通道数(Number of Channels):表示ADC能够同时处理的模拟输入通道的数量。多通道ADC可以同时转换多个信号

  3. 采样率(Sampling Rate):表示ADC每秒可以进行多少次采样。采样率越高,ADC能够捕获更高频率的信号。

  4. 分辨率(Resolution):表示ADC可以将模拟信号分成多少个离散级别。以数字信号的位数N来表示,一般有10位、12位、16位等,例如:12位ADC具有4096个离散级别(2的12次方)

  5. 转换时间(Conversion Time):表示ADC从开始转换到完成转换所需的时间,转换时间通常由ADC的时钟频率和分辨率决定。

STM32的ADC:

  1. STM32F103系列提供了3个ADC,精度为12位,每个ADC最多有16个通道和2个内部信号源。
  2. STM32F103的ADC是一种逐次逼近型模拟数字转换器。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阈值。ADC的输入时钟不得超过14****MHz,它是由PCLK2经分频产生。

ADC常见类型:

  1. 逐次逼近型(Successive Approximation):这是最常见的ADC类型之一,通过逼近法逼近模拟信号的大小,STM32中的ADC通常采用这种类型。
  2. Sigma-Delta型:通过比较信号的累积值和一个参考值,产生一个高精度的输出。
  3. Flash型:通过一组比较器和编码器,以高速并行方式进行转换,适用于高速应用。(精度不高)

逐次逼近型ADC工作原理:

  • 采样:先采集输入模拟电压,并保持稳定。
  • 二分搜索
    1. 从**最高位(MSB)**开始,依次猜测每一位是1还是0
    2. 每次猜测后,用DAC生成对应的模拟电压,与输入电压比较:
      • 输入电压 ≥ DAC****电压,该位保留1,否则置0
    3. 重复此过程,直到确定最低位(LSB
  • 输出结果:最终寄存器中的数字值就是转换结果。

ADC可以中断:

  1. 转换结束中断:
    • 数据转换结束后,可以产生中断,中断分为三种:规则通道转换结束中断,注入转换通道转换结束中断,模拟看门狗中断。其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断服务程序。
  2. 模拟看门狗中断:
    • 当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模拟看门狗中断,其中低阈值和高阈值由 ADC_LTR 和 ADC_HTR 设置。例如我们设置高阈值是2.5V,那么模拟电压超过 2.5V 的时候,就会产生模拟看门狗中断,反之低阈值也一样。

ADC可以产生DMA请求:

  • 规则和注入通道转换结束后,除了产生中断外,还可以产生DMA请求,把转换好的数据直接存储在内存里面。要注意的是只有ADC1和ADC3可以产生DMA请求

数据对齐原理:

  • 16位的寄存器只用到了其中的12位。

  • 可以使用高12位,数据就是左对齐。

  • 也可以使用低12位,数据就是右对齐。

  • **右对齐:**高4位补零,读取的值就是实际值。

    ADC1

  • **左对齐:**低4位补零,读取的值是实际值的16倍。

    ADC2

  • 实际使用中,最好使用低12位,这样就得到数据可以直接使用。

ADC转换时间计算:

  • ADC使用若干个ADC_CLK周期对输入电压采样。总转换时间如下计算:
  • T(CONV) = 采样时间+ 12.5个ADC周期。
  • 当ADCCLK=14MHz,假设采样时间为1.5周期。
  • T(CONV) = 1.5 + 12.5 = 14周期 = 1μs。

参考链接: