STM32 ADC原理介绍&电压电流采集原理

STM32 ADC介绍

STM32 内部的 ADC 采用逐次逼近型 (SAR) 结构。其工作原理是利用内部数模转换器 (DAC) 和比较器,通过逐次逼近的方法将模拟电压转换为数字信号。核心思想是通过比较器不断调整数字近似值,使其逐步逼近真实的模拟电压。

基本转换步骤:

  1. 初始化
    转换开始时,逐次逼近寄存器 (SAR) 先将最高有效位 (MSB) 置为 1,其余位设为 0。此时,SAR 中的数字值对应 ADC 测量范围的一半

  2. 逐位比较

    • SAR 中当前的数字值通过内部 DAC 转换为模拟电压
    • 比较器将此模拟电压与待测的模拟输入电压进行比较
    • 根据比较结果,判断当前位是否应保持为 1,或调整为 0,从而确定下一位的状态
  3. 逼近真实值
    依次对每一位进行上述比较和调整操作,逐步逼近真实的模拟电压值,直到获得最接近输入电压的数字表示

这种方式相当于在二进制的每一位上判断应为0还是1,从而逐步逼近真实的模拟电压值
在这里插入图片描述

量程

在使用ADC时,量程决定了设备能够正常测量的电压范围,同时也保护了设备免受过高电压的损害。STM32 ADC的量程由参考电压引脚决定:

在这里插入图片描述

ADC输入范围由VREF-、 VREF+ 、VDDA 、VSSA、这四个外部引脚决定。在设计原理图的时候一般把VSSA和VREF-接地, 把VREF+和VDDA 接3V3,得到ADC的输入电压范围为:0~3.3V。 在64脚以下的CPU中,没有VREF-和VREF+这两个引脚,ADC电压输入范围直接由VDDA和VSSA决定。

如果我们想让输入的电压范围变宽,去到可以测试负电压或者更高的正电压,我们可以在外部加一个电压调整电路, 把需要转换的电压抬升或者降压到0~3.3V,这样ADC就可以测量

分辨率

STM32内置ADC通常具有12位分辨率,这意味着数字输出范围为 0 到 4095(2¹² = 4096个离散值)

分辨率计算公式为:3.3V/4095≈0.008V 或 0.8mV

这表明 ADC 大约能检测到 0.8 毫伏 的最小电压变化。如果实际电压变化小于此分辨率,ADC 将无法识别这种细微变化。

采样频率

采样频率(Sample Rate):指指的是 ADC 在单位时间内对模拟信号进行采样的次数,通常以赫兹 (Hz) 为单位。它决定了数字信号能够多快地反映输入模拟信号的变化

**采样定理(Nyquist定理):**为了避免混叠(aliasing)现象,采样频率必须至少是信号中最高频率成分的两倍。例如,若信号中最高频率为 f m a x f_{max} fmax,则采样频率 f s f_{s} fs应满足: f s ≥ 2 × f m a x f_{s} ≥ 2×f_{max} fs2×fmax这被称为Nyquist率。如果采样频率低于该值,可能会导致高频信号成分被错误地映射到低频部分,从而失去原始信号的真实信息

转换时间

转换时间(Conversion Time):指的是从ADC开始对一个模拟信号进行采样,到完成整个模数转换过程、获得稳定数字输出所需的时间。对于逐次逼近型ADC,转换时间主要包括以下几个阶段:

  1. 采样阶段(Sample Phase):
    ADC首先利用采样保持电路将输入信号电压捕获并稳定保持,这个过程需要一定的时间来让内部电容充电到输入电压
  2. 逐次逼近阶段(Conversion Phase):
    在这个阶段,SAR逻辑开始依次判断各个位,从最高位开始设定,经过DAC与比较器反复比较,逐步逼近真实电压值。每一位的决策都需要一定的时间,整个过程往往以ADC时钟周期为单位来计算

转换时间与采样频率的关系:

  • 转换速度限制:
    ADC内部完成一次转换所需的时间决定了最大转换速率。如果单片机尝试以高于ADC转换速度的速率读取数据,会出现未完成转换的新采样数据被重复读取的情况,导致数据失真
  • 平衡CPU资源:
    除了ADC自身的转换时间外,单片机还需要考虑如何合理调度资源。如果采样频率远超ADC的转换速度,不仅无法得到更高精度的数据,还会浪费CPU的计算资源

注意一些细节问题

参考电压的选择

在使用ADC时,通常的用法是 V r e f + V_{ref+} Vref+接电源 $V_{DD}$3.3V,然后计算时直接用3.3V做参考电压。然而,这种方法忽略了一些实际情况,例如供电电压可能因外部大电流用电器的运行而出现波动,或者给 MCU 供电的低压差线性稳压器 (LDO) 的精度可能存在个体差异。在这种情况下,仍然使用 3.3V 的固定值作为参考电压进行计算,显然会导致测量结果与实际电压之间存在较大的偏差

解决方案:

通常,引脚数在 100 以上的 STM32 MCU 会引出专门的 VREF 引脚。对于引脚数少于 100 的芯片,STM32 通常不会引出 VREF 引脚,而是将其在内部直接连接到 VDDA 引脚。这导致 ADC 的供电电源和参考电源实际上是同一个。在典型的项目中,VDDA 也连接到 VDD。如果存在 VREF 引脚,可以在 VREF 上连接一个稳定且精度高的外部电压源作为参考电压

另一种方法是启用内部参考电压:除了通过外部引脚提供稳定的参考电压外,STM32 还提供了启用内部参考电压的选项。这在实际应用中能有效改善由供电波动或 LDO 精度不足带来的误差问题。

内部参考电压的原理与特点

  • 原理简介:
    内部参考电压(通常称为VREFINT)是芯片内部产生的一个稳定电压参考值。其电压值通常经过精密设计和校准,与外部电源无关,能够提供一个较为恒定的参考基准,这个电压基本不随外部供电电压的变化而变化

    不同的芯片这个参考电压的范围不一样

在这里插入图片描述
如果以这个为参考电压,我们仍需测量其值,该值对于不同的芯片是一个范围,并不是确定值。 STM32 可以通过配置将 VREFINT 接入到 ADC 内部的通道17,然后就可以测量 VREFINT。注意MCU 不同,具体连接的 ADC 通道也是不同的

在这里插入图片描述

  • 使用方式:
    在 STM32 的 ADC 模块中,可以通过配置相应的寄存器来启用内部参考电压通道。启用后,ADC 在进行转换时可以同时采集内部参考电压的数值。通过比较采集到的内部参考电压的数字值和其已知的精确值(通常在数据手册中给出典型值和范围),可以对其他 ADC 通道的采集结果进行校正,或者反过来推算出当前的供电电压波动情况

ADC测量电压

在实际应用中,待测电压往往可能超出ADC的直接测量范围,或者信号源内部阻抗较高,导致直接接入ADC存在误差和安全隐患。为了确保测量准确性与系统稳定性,通常采用信号调理技术,其中电阻分压是一种常用的方案

电阻分压器由两个串联电阻组成,其主要作用是将输入电压按一定比例降至ADC的量程内。基本公式如下:
V OUT = V IN × R 2 R 1 + R 2 V_{\text{OUT}} = V_{\text{IN}} \times \frac{R_2}{R_1 + R_2} VOUT=VIN×R1+R2R2
在这里插入图片描述
最简单的电阻测量电路如下图:
在这里插入图片描述
这时候测量点的电压计算公式为:V=R2 / (R1 + R2) * Uref,如果事先知道R1,R2阻值,就能算出来电压。

如果是负电压,参考这个原理:https://www.firebbs.cn/forum.php?mod=viewthread&tid=12680

ADC测量电流

于ADC只能直接测量电压,实际工程中电流采样通常依赖于把电流转换为电压信号的方法。常用的方案是在被测电路中串联一个高精度采样电阻,通过测量该电阻两端的电压降,再利用欧姆定律换算成电流值

ADC直接测量的是电压,而要测量电流,首先需要将电流信号转换为电压信号。常见方法是串联采样电阻法

在被测电路中串联一个精密采样电阻 ( R_s ) ,流过的电流 ( I ) 在该电阻上产生电压降 ( U )。根据欧姆定律:
U = I × R s U = I \times R_s U=I×Rs
然后利用ADC采集 ( U ) 值,通过电压转换电流公式得到实际电流:

I = U R s I = \frac{U}{R_s} I=RsU
采样电阻的选型:

  • 精度与温漂: 为确保测量精度,采样电阻必须选用高精度、低温漂的元件。温漂小可以保证在温度变化时阻值保持稳定,避免因阻值变化引入测量误差。

  • 功耗与电压降: 采样电阻的阻值选择需要兼顾两方面:

    • 阻值过大: 电压降较大,易于采集但会增加功耗并可能影响被测电路的正常工作
    • 阻值过小: 电压降微小,ADC采集时可能精度不足,因此一般需要后续放大处理

信号放大:

在实际应用中,电流信号转换后形成的电压变化范围往往很小(例如几十毫安电流通过1mΩ或几毫欧的电阻得到的电压可能仅为几十毫微伏至几百毫伏),这时需要将信号放大

ADC转换与电流换算

ADC将放大后的电压信号 (Uadc) 进行数字化转换,转换关系通常为:

D = ( U adc V ref ) × ( 2 n − 1 ) D = \left(\frac{U_{\text{adc}}}{V_{\text{ref}}}\right) \times (2^{n} - 1) D=(VrefUadc)×(2n1)

  • ( D ):ADC采集的数字值
  • ( Vref):参考电压(通常为3.3V或其他精密参考电压)
  • ( n ):ADC位数(如10位满量程为1023,12位满量程为4095)

假设放大后的电压 (Uadc) 与采样电阻 ( R_s ) 之间仍满足欧姆定律关系,那么实际电流 ( I ) 为:

I = U adc R s × A I = \frac{U_{\text{adc}}}{R_s \times A} I=Rs×AUadc
其中 ( A ) 是放大器的增益。结合ADC转换公式,可以将ADC数值 ( D ) 反推为实际电流:

I = D × V ref ( 2 n − 1 ) × R s × A I = \frac{D \times V_{\text{ref}}}{(2^{n} - 1) \times R_s \times A} I=(2n1)×Rs×AD×Vref
例如:

  • ADC分辨率: 12位(4095满量程)
  • 参考电压: 3.3V
  • 采样电阻: 10mΩ
  • 放大器增益: 50

则电流计算公式为:

I = D × 3.3 4095 × 0.01 × 50 I = \frac{D \times 3.3}{4095 \times 0.01 \times 50} I=4095×0.01×50D×3.3
实际工程中,可以通过实验测量确定一个校正系数,再进行软件补偿以获得更准确的电流值

工程实践中的注意事项

单片机I/O电流限制:单片机引脚的输入通常具有较高阻抗,不会直接影响电流测量。但输出引脚的电流能力有限(一般为20mA,整体不超过120mA),在设计输出驱动或信号放大时需注意保护单片机I/O不被过大电流损坏

校正与温度补偿:已知电流条件下采集ADC值,确定系统换算系数,利用内部参考电压及温度传感器数据进行补偿,确保长期测量精度。由于采样电阻和放大电路的参数可能随温度漂移,添加温度补偿电路或在软件中进行校正是提高准确度的重要手段

噪声与滤波:在采样电阻两端或放大电路输入端加入RC低通滤波器,能有效降低高频噪声的影响,提高ADC采样的稳定性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值