在嵌入式系统中,ADC(模数转换器,Analog-to-Digital Converter)是一个至关重要的组件,它的主要作用是将模拟信号(如温度、光强、声音等)转换为数字信号,以便微处理器或数字系统进行处理。

ADC的基本原理

ADC将模拟信号(通常是一个连续变化的电压信号)转换为数字信号(离散的二进制值)。这个转换过程可以分为以下几个步骤:

  1. 采样:首先,ADC需要对输入的模拟信号进行采样,即在特定的时间点获取输入信号的值。这个采样过程涉及到信号的“离散化”,即每次采样获取的是一个特定时刻的电压值。
  2. 保持:采样后,ADC会将模拟信号的电压保持在一个电容上,这一过程叫做“保持”阶段。保持电压可以确保转换过程不会受到输入信号变化的影响。
  3. 量化:量化是将模拟信号的电压值映射到数字域。根据ADC的位数,将输入信号的电压范围划分为多个离散的区间,每个区间对应一个数字值。比如,8位ADC的数字范围是0255,12位ADC的范围是04095。
  4. 编码:最后,ADC将量化后的信号值转换为二进制数字输出。该数字表示输入信号的离散值。

ADC的工作方式

工作模式描述应用场景优点缺点
单次转换模式仅进行一次转换,转换完成后停止。通过触发信号启动。需要偶尔采样的场景,如一次性测量温度、电压等。- 简单实现,硬件资源占用少。
- 低功耗,适合低能耗应用。
- 不能连续采样,适用于非实时性、低频率采样需求。
- 采样间隔较长。
连续转换模式持续进行转换,数据不断更新,直到被停止。高频采样的应用,如实时监控、音频采集等。- 实时数据采集,适合需要高采样频率的应用。
- 可以连续获取数据,无需额外触发信号。
- 高功耗,长时间运行时可能消耗大量电能。
- 占用更多系统资源,可能影响其他任务的执行。
扫描模式依次对多个输入通道进行转换,适用于多个信号源的同时采样。多通道数据采集应用,如传感器阵列采样、气体传感器等。- 可以同时采样多个通道,适合多输入信号应用。
- 有效利用ADC硬件资源,降低硬件成本。
- 每个通道的转换时间较长,采样间隔会增加。
- 可能导致整体采样频率较低。
触发模式外部触发信号启动转换(定时器、中断、外部引脚等)。需要在特定时刻或条件下采样的数据,如事件驱动采样或周期性采样。- 通过外部信号精确控制采样时机,提高灵活性。
- 只在需要时进行采样,降低无效采样次数。
- 需要外部触发信号,增加系统复杂性。
- 可能会导致采样不稳定或对外部信号过于依赖。
差分输入模式同时采样两个输入信号并返回它们的差值。差分信号处理应用,如差分放大器输出、传感器的差分信号采样。- 减少共模噪声,提高测量精度。
- 提供更高的信号对噪声比,适用于微弱信号的测量。
- 需要额外的硬件支持,如差分放大器。
- 实现相对复杂,电路设计较为复杂。
单端输入模式仅采样单一输入信号,通常参考地(GND)。简单的单信号采样,如电池电压、传感器输出等。- 实现简单,硬件要求低,成本较低。
- 适用于大多数基础测量应用。
- 对地噪声敏感,容易受到环境干扰。
- 对低信号精度要求的应用可能导致测量误差较大。

ADC数据对齐

在ADC数据转换过程中,结果数据在寄存器或内存中的存储方式。

数据对齐方式描述应用场景优点缺点
左对齐(Left Alignment)将数据的高位(MSB)存储在寄存器的高位,低位(LSB)存储在寄存器的低位。适用于需要高精度位移或进一步数据处理的场景,如高精度测量或多次数据处理。- 数据对齐更加精确,适合高精度应用。
- 便于后续的位操作,如位移、掩码等。
- 可能会浪费寄存器的低位,尤其是在数据较短时。
- 处理器或硬件可能需要额外的支持。
右对齐(Right Alignment)将数据的低位(LSB)存储在寄存器的低位,高位(MSB)存储在寄存器的高位。适用于数据后续需要与其他较低精度数据结合的应用场景,如数字滤波器输出、数据组合。- 更适合低精度数据的存储和处理。
- 使用简单,适合数据集成和直接读取。
- 可能导致高位数据丢失,特别是在高精度应用中。
- 对数据处理要求较高时,可能需要进行位移处理。

ADC的分辨率与精度

  • 分辨率(Resolution)
    ADC的分辨率决定了输出数字的位数,也即转换精度。例如,8位ADC能够提供0255的数字输出,12位ADC提供04095的数字输出。分辨率越高,ADC能表示的电压变化就越精细,精度更高。

  • 参考电压(V_ref): ADC的转换精度与参考电压密切相关。假设ADC是12位,参考电压是3.3V,那么最小的电压分辨率就是 ,即每次数字增量对应的电压值。参考电压的稳定性和准确性直接影响ADC的转换精度。

  • 量化误差:由于ADC是离散化过程,原始模拟信号的真实值与转换结果之间会存在误差,这个误差叫做量化误差。量化误差的大小与ADC的分辨率相关,高分辨率的ADC能更精确地逼近模拟信号的真实值。

10位ADC与8位ADC的关系

  • 10位ADC的精度是8位ADC的10倍。
  • 10位ADC转换为8位应取其低8位

采样率与带宽

  • 采样率
    采样率指ADC每秒钟可以采样的次数,通常以S/s(Samples per second)来表示。采样率决定了ADC的响应速度和频率带宽。较高的采样率适用于快速变化的模拟信号,但也会增加处理器的负担。

  • 奈奎斯特定理
    为了避免混叠现象(aliasing),采样率必须至少是输入信号最高频率的两倍。因此,如果信号频率高于采样率的一半,会出现信息丢失或失真。

ADC的输入类型

  • 单端输入(Single-ended Input): 单端输入是最常见的ADC输入类型,其中信号源的电压与地之间的电压差作为输入信号。输入信号通过一个电压参考和地之间的电压差来转换为数字值。

  • 差分输入(Differential Input): 在差分输入模式下,ADC同时测量两个输入端之间的电压差。这种方式通常具有更高的抗干扰能力,并且能在噪声较大的环境中提供更精确的信号测量。

ADC的性能指标

  • 线性度(Linearity)
    ADC的线性度指ADC转换结果与输入信号之间的关系是否线性。如果ADC的输出与输入之间有误差,就会影响测量精度。理想情况下,ADC的输出应该与输入电压成线性关系。

  • 转换时间(Conversion Time)
    转换时间是指从ADC开始转换到输出结果稳定所需的时间。此时间由ADC的分辨率和工作模式决定。

  • 信噪比(SNR)
    信噪比是描述ADC转换结果中有用信号与噪声的比例。较高的SNR意味着ADC能够更好地分辨真实信号,而不是受到噪声的干扰。

嵌入式中ADC的应用

  • 传感器数据采集
    ADC在嵌入式系统中的应用最广泛的是传感器数据采集,例如温度传感器、压力传感器、光传感器等。这些传感器通常提供模拟信号,必须通过ADC将信号转化为数字数据供处理器使用。

  • 音频处理
    在音频信号处理中,ADC用于将模拟音频信号转换为数字信号。由于音频信号的频率范围较宽,因此需要较高的采样率和分辨率。

  • 电池电量监控
    ADC常用于电池电压监测。通过测量电池电压的模拟信号,ADC可以将其转换为数字信号,供系统评估电池电量。

ADC的控制与配置

在嵌入式系统中,ADC通常由微控制器(MCU)控制。在STM32等嵌入式平台上,ADC的配置包括:

  1. 选择输入通道:选择哪个输入引脚连接到ADC模块。
  2. 配置分辨率和采样时间:选择ADC的分辨率(例如12位、10位)和采样时间。
  3. 启用ADC:配置ADC的工作模式(单次转换或连续转换)。
  4. 启动转换并读取数据:在ADC启动后,读取转换结果。

例如,在STM32中,配置ADC通常涉及设置寄存器,如ADC_CR1(控制寄存器)、ADC_SQR1(采样序列寄存器)等。

keysking

逐次逼近法

二分确定电压值,从高位开始依次与结果比较,依次确定每一位bit值得到比较结果。

STM32

16个外部转换通道。