电子产业一站式赋能平台

PCB联盟网

搜索
查看: 18|回复: 0
收起左侧

MCU ADC参考电压变化怎么办?

[复制链接]

1001

主题

1001

帖子

8801

积分

高级会员

Rank: 5Rank: 5

积分
8801
发表于 昨天 08:00 | 显示全部楼层 |阅读模式

xfxjf4za4rg64014730425.gif

xfxjf4za4rg64014730425.gif
% v; V. D; {; A$ M5 m
点击上方蓝色字体,关注我们7 Z8 |1 [; O  ?; n( v$ ?  c; J  r

7 g7 O6 V5 \7 B; {( W然而,很多工程师对ADC参考电压(VREF)的认识仍然存在模糊,尤其是在电池供电电压不稳场景下。5 c% y: `0 A  s( B( K5 e+ E4 A; }

3 x& g0 v. z6 ]/ tADC参考电压定义了ADC输入电压与数字输出之间的比例关系:- D+ s% M$ l5 g1 M

0 `7 ~: ~6 D. J2 v9 ^- p) ]' t" g

3tdk3xbpjlw64014730526.png

3tdk3xbpjlw64014730526.png
/ \0 p+ Y# }) u& E
( K8 B5 R7 P% k' R1 d
其中 N 是ADC分辨率(如STM32F103为12位)。 5 ^/ h7 N, G0 T( {3 P5 H7 n

& N3 D. ?$ B5 o+ g+ e4 A: Z0 O

3go1kd5pqjp64014730626.png

3go1kd5pqjp64014730626.png

$ t9 M. q! k5 F4 u5 X# K' x. P) n# J9 r$ E
VREF(即VDDA)稳定时,ADC转换是准确的。
* a% b( G3 r/ f' h3 H; Z: [) ~$ @/ F
% Y  @, t: p/ o& {. @) h但如果VDDA电压波动,比如电池电量下降,而系统仍使用初始VREF假定值去换算ADC结果,则会导致测量误差
6 t0 s3 m* R2 {' t# ]
6 [8 V( i9 I6 `  x以前我做低功耗设备遇到过的一个现象:初始VDDA=3.3V,测得电压2.0V,对应ADC=2482。后来VDDA降到3.0V,但仍用3.3V计算 → 误差超出9%以上!
; ~9 ]% A6 L0 `% M, a* C. [& {6 i- i. j$ S2 P9 U
所以,在供电电压变化的应用中(如电池供电设备),必须动态感知参考电压变化* p% ^0 P5 z( _. D

2 g* v' j5 b/ @- `. A" k% dSTM32F103内部集成了一个稳定的基准电压源VREFINT,典型值约1.20V。它连接到ADC通道17,可以通过采样通道17的数据推算实际VREF。  I2 T+ A3 W7 o9 W/ Y4 b, W- w7 U
' {- J9 I. p% g. w  K3 q

0ogltosmxa564014730726.png

0ogltosmxa564014730726.png

% X2 i' ]6 l) b5 ]
# o3 c& r$ D$ D8 j/ V9 ?# b  }' u采样VREFINT得到数据 DATAREFINT_DATA ,则有:
: {+ D1 A6 O' v! }. t" e& y5 B
1 K& g4 [! w3 ~' @

2yclfxhg11364014730826.png

2yclfxhg11364014730826.png

% Y6 R& H8 h6 J4 r3 R1 i: R) a- s, u
进一步,采样实际通道ADCHX的数据 ADCHX_DATA,可计算实际输入电压:  p; C$ s( g- Z6 u; I

6 @9 s# t& ~2 u8 }- ~. E& d

qszge4hmyyu64014730927.png

qszge4hmyyu64014730927.png

+ ]4 l! h/ F6 ?) @* c9 {
/ v' c3 J( }# X8 k* ?3 z9 O& b% e简化公式:7 U& E2 D/ S0 x1 N% z+ g+ t
7 R0 K4 |" [+ M, h- b9 d

dwm4mwhsvpx64014731027.png

dwm4mwhsvpx64014731027.png
" H+ m( A7 y* c) V, ^
/ ?5 P6 b0 X) r- s; [: k
示例代码如下:
- c" T0 p9 P4 m% k. v3 ]3 ?" R2 z9 B5 l* n, P, t
  • uint16_tRead_ADC_Channel(uint8_t channel);#define FULL_SCALE    4095.0f#define VREFINT_TYP   1.20f  // 典型值/ P' n' a# b3 ?5 U" {8 h" Q
    floatRead_Actual_Voltage(uint8_t channel){  uint16_t refint_data = Read_ADC_Channel(17);   // 读取VREFINT  uint16_t chx_data    = Read_ADC_Channel(channel); // 读取实际通道  float voltage = VREFINT_TYP * ((float)chx_data / (float)refint_data);  return voltage;}" S; V9 P. l  h
    由于每颗芯片的VREFINT存在个体差异(工艺浮动),需要出厂或用户自校准,校准方法如下:
    3 \( \! S6 I: d( {9 Q. K
  • 供电稳定(如VDDA=3.3V);
  • 读取VREFINT通道,记录为REFINT_CAL
  • 保存至Flash存储。
    " [* }" p2 Q9 \: [) c

    : P; n8 d0 j* O3 \0 N/ U2 L计算公式更新:% @% j6 \0 L, Y4 w1 o

    ' Z. I9 z: `: J. ]

    kgrxvrfskqa64014731127.png

    kgrxvrfskqa64014731127.png
    # O, W& s' n- W- M
    0 S, V6 p; C! p5 v$ G  O; a, Y; y
    新一代STM32(如STM32L5、STM32G4等)内部集成了VREFBUF模块,支持输出稳定参考电压如2.048V或2.5V,直接作为ADC参考电压源。
    " I8 E/ M: X5 K0 @  F, {9 u

    fkz3hl2soca64014731227.jpg

    fkz3hl2soca64014731227.jpg
    9 M  K1 e# {8 Q3 T# k3 G2 S

    pmi1wjqneye64014731327.gif

    pmi1wjqneye64014731327.gif

    % M, i& h5 l0 M% P点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表