xfxjf4za4rg64014730425.gif
+ a3 k2 j0 f8 |9 b$ J) A( V7 m
点击上方蓝色字体,关注我们
7 y4 n* R3 S3 v& C8 c$ a x* F% H& ]1 x& b/ }; Z; ]
然而,很多工程师对ADC参考电压(VREF)的认识仍然存在模糊,尤其是在电池供电、电压不稳场景下。
" l1 i4 r9 k, f6 M) l+ D4 @2 F0 \) j6 D- u1 a! Q2 A7 u
ADC参考电压定义了ADC输入电压与数字输出之间的比例关系: ?. ]# u O, l$ A
6 l+ \% x2 S! z6 G
3tdk3xbpjlw64014730526.png
( p x6 \6 d9 T; B
& g1 N# u1 {$ [( J# A/ V
其中 N 是ADC分辨率(如STM32F103为12位)。
5 c1 [& R- o9 w; K
9 q! O! x- y6 Q- \4 |
3go1kd5pqjp64014730626.png
+ t" `, x4 |% r6 c$ Y% y5 G/ O4 P; W' C5 D1 @1 F
当VREF(即VDDA)稳定时,ADC转换是准确的。 x: J! P, W$ t
. c$ d5 n, l1 _4 {, m/ g但如果VDDA电压波动,比如电池电量下降,而系统仍使用初始VREF假定值去换算ADC结果,则会导致测量误差。 6 x K. [4 [* U# R1 {( d" Y
4 k S ^5 Y- L( @ i以前我做低功耗设备遇到过的一个现象:初始VDDA=3.3V,测得电压2.0V,对应ADC=2482。后来VDDA降到3.0V,但仍用3.3V计算 → 误差超出9%以上!
Z' K! c7 n& R8 f# J+ F) `. W7 ~" a1 o- ^) d
所以,在供电电压变化的应用中(如电池供电设备),必须动态感知参考电压变化。$ s) W, y' L" B+ m4 e0 c" e
" q" O7 K. w, S1 [5 i
STM32F103内部集成了一个稳定的基准电压源VREFINT,典型值约1.20V。它连接到ADC通道17,可以通过采样通道17的数据推算实际VREF。
+ w |6 F" f7 o1 B2 a2 ~7 W6 ?& N+ `: Z7 a7 r
0ogltosmxa564014730726.png
4 j0 n/ @) A8 t, B1 v
+ i W A; r/ M" X* i
采样VREFINT得到数据 DATAREFINT_DATA ,则有:
- A Y% c. C( l5 g3 K' l2 Y! Z' g7 V, F# I
2yclfxhg11364014730826.png
D5 v1 H8 C# |! M2 [9 |( y6 p
" c) M8 w; F. p2 T; L/ ~! w进一步,采样实际通道ADCHX的数据 ADCHX_DATA,可计算实际输入电压:
$ l* G1 O2 w! R- F+ N
^2 ^$ R& e+ J, p% u! b
qszge4hmyyu64014730927.png
1 p$ i* A, T6 e& Y
6 ]8 O/ o- u4 k% j- t' R
简化公式:
. Y2 L8 U, L8 F6 t' o& Y% O
; ]) h2 @* {1 o8 W# w
dwm4mwhsvpx64014731027.png
- H. p1 h, F) z- r) X
2 ~7 S2 o2 k$ f6 L3 N示例代码如下:
2 q! k6 Q& g+ j1 S9 g$ G
( q1 K* T- E9 Vuint16_tRead_ADC_Channel(uint8_t channel);#define FULL_SCALE 4095.0f#define VREFINT_TYP 1.20f // 典型值
4 N: H& X0 h% } n# kfloatRead_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;}( u! M; Q: Y2 h2 w
由于每颗芯片的VREFINT存在个体差异(工艺浮动),需要出厂或用户自校准,校准方法如下:0 S; w X b# |& @+ c. {5 I
供电稳定(如VDDA=3.3V);读取VREFINT通道,记录为REFINT_CAL;保存至Flash存储。) t; o! W, m, K+ P: p3 a5 K( [' B) X
0 ^2 q& }; D4 {$ M. v计算公式更新:0 p. O1 E6 A0 g/ `8 }: f
7 n; B# f8 r+ F! U6 [- _
kgrxvrfskqa64014731127.png
& e4 f* H3 ~5 G4 S3 ^
9 M4 `9 @' v* G新一代STM32(如STM32L5、STM32G4等)内部集成了VREFBUF模块,支持输出稳定参考电压如2.048V或2.5V,直接作为ADC参考电压源。 1 e/ G% O/ L' }4 o/ I
fkz3hl2soca64014731227.jpg
! f; F. O! h: p. R* K# p3 C
pmi1wjqneye64014731327.gif
! ?" H/ A0 s& f+ H7 v点击阅读原文,更精彩~ |