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
/ \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
$ 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
% 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
% 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
+ ]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
" 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
# 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
9 M K1 e# {8 Q3 T# k3 G2 S
pmi1wjqneye64014731327.gif
% M, i& h5 l0 M% P点击阅读原文,更精彩~ |