你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32如何通过内部VREF得到实际的VDDA值

[复制链接]
STMCU小助手 发布时间:2022-12-24 17:40

) ^/ f9 Z3 y- w" K/ w- P/ i
fcd1f568d11a4ee38393991659146fa2.png ( M  J4 K& j+ |  I# K% l7 C" a% j
6a730d5c2f444d45bb559b03c98a39d5.png ! G0 w- N7 a+ ?
7 S6 o5 h$ p- T0 v) C- G9 r6 ~
我们经常会使用STM32 ADC功能测试外部电压,在一些精度不高的场合,我们一般就用3.3V作为参考电压来计算测到的电压值。
' [  T" f+ P! R( l0 x' V7 l( t2 i
不过,这种情况很少见,可能只有单片机学习板才会这样使用。* F* p! x0 X6 v: C6 B& {

4 S+ `+ Y! s2 m$ _- i- M& }# E因为我们使用的3.3V稳压芯片,很少有标准的3.300V输出,有可能是3.270V,也可能是3.345V,而且,还存在个体差异,这个板子上的电压是3.294V,另外一个板子上面,就可能是3.312V。6 I0 F  p  r% l: k& i/ A2 C
" h7 O+ a- U- k: U+ v, S% ]
如果我们都用3.300来计算的话,同样的电压,测出来的结果就会存在mV级别的差异。
& r& p$ L9 D( N% n1 E- |
. A% ?0 N1 Q( e* J% n4 ~3 N在实际使用中,我们一般使用外部基准电压芯片,例如,100脚的STM32一般都有VREF引脚,就是用来接外部基准电压芯片,例如REF3133,输出的电压是标准的3.300V。
& F! w' f  n4 q$ e( x& O( e
5 H, Z, z0 Z( E9 C" @
为什么不用基准电压芯片作为电源供电芯片?  \5 K  s$ o  c& [- G, F
! C. o* n9 r  [& q7 v
因为基准电压芯片的输出电流都是小于25mA的,对于一般的电路板应用,这么点输出电流不足以让电路板工作。/ X! u9 e0 S4 }  |) M/ j

- \  D2 W  ]; G0 j$ d; {不同的STM32 如何使用基准电压芯片?/ O6 i2 a9 z* V7 r7 m

* i0 n7 \5 Q1 @' {对于100脚及其以上的芯片,把基准电压芯片连接到VREF芯片即可。
+ w4 n  c( O! S5 W1 F/ ~4 \5 f% Z, p6 j9 l; _
对于100脚以下的芯片,STM32没有把VREF引脚引出来,所以,我们只能把基准电压芯片连接到VDDA引脚。
* I3 o- \: L( Y& w4 M3 u* T, ?

) B& H  ?, L4 `- q( r1 ]注意,STM32单片机上面有好多电源引脚,其中有若干VDD引脚,只有一个VDDA引脚,VDDA引脚就是模拟供电引脚。
) E& l8 J' i# t+ t
7 k( _! E/ M$ @% x8 X
不过,需要注意,VDDA的电压不是随便定义的。例如,STM32F051系列单片机就规定,VDDA必须要大于或者等于VDD才可以正常工作,所以这时候,最好是给单片机3.0V供电,再给VDDA采用一个3.3V的基准电压芯片供电。9 Y: z! ?1 y  _7 M: m
8 [4 k1 c. L! m
不用电压基准电压芯片可以吗?" d0 N- U7 Q/ W7 N) f4 ~+ S9 O

5 y0 s- k- }& o% J如果在你的应用中,VDDA引脚和VDD引脚连在一起,都是由电源芯片供电,这时候,如果你能知道VDDA的实际电压,也可以得到精确的ADC结果。6 R% q( Z. g  I- T

! p) y3 M" \+ T+ H例如,你可以用万用表测到VDDA电压,例如,是3.286V,你就可以使用3286来计算。
5 L7 m% q) p. H
0 {7 Z- l5 ^* k* {
不过,这也只能是在实验的时候,在实际使用中,如果你做了1万个板子,然后需要用万用表量1万个板子的电源电压,然后再给每个板子修改程序,显然是不可能的。
' ?; R& \2 S* Z
$ n4 v8 ?$ K" J; G/ I所以,STM32给我们一个解决方案,STM32在内部都有一个参考电压引脚,可以通过配置,把这个脚连接到ADC输入引脚,是内部连接。然后再通过这个值计算实际的VDDA值。
6 N# b# }3 z% y7 ^  G  n% f' |1 U& W

- \8 C) T1 }. B7 f或者选择单片机的供电电压的精度比较高的。
' K4 h" P, r# B4 R6 ~
/ E# J; I) }5 w1 O& W. B3 o
不过,STM32也存在个体差异,所以,它并没有在手册上给出我们这个参考电压是多大。而是用出厂时调教好的校准值和得到的参考电压值一起使用。如下图:
( p. S: N! @/ H2 M! ?( L' L, k8 J, j3 `
9a0c061367727b5afdf404960ab04d9d.png
, s8 h7 `2 s$ @2 W. `4 |. b/ V+ D' n& \

* D+ p1 Y( C. {. N6 k/ BVREFINT_CAL是校准值,这个值,每个单片机都不一样,被存储到了0X1FFFF7BA和0X1FFFF7BB,使用的时候,需要先读出来。! J8 i' l- b1 [: f: y4 t

7 M4 N0 I! `5 B0 B2 s0 f给你个程序看吧,程序当中,有读取VREFINT_CAL和VREFINT_DATA值的语句。你可以看个究竟。
4 C: x, w. I1 d8 M4 F* \1 ]9 `% t# K9 V% [6 ?9 P4 a
这个程序已经实践验证过了,不会有问题,下面是实验结果:6 P6 @" B+ @0 q5 L# a
4 Y2 ?! B& E3 W
f49f089d010c5e942693c25e90fdf680.png
8 R4 c5 I. t1 _" P+ U) W( g& \8 v. \, E
. b6 j. o5 v5 R
我把测到的VDDA值,发送到了串口查看。然后我用万用表测了一下实际的VDDA值,由于我的万用表精度有限,只能测到小数点后2位数字,万用表得到的是3.32V和3.31V之间跳动。
( y5 v; ^8 c: Q8 k/ ^% H8 D0 g0 q3 B8 q8 N& ~9 m
串口发送的值,小数点后第三位四舍五入之后,结果也是3.32V和3.31V,结果是一致的!
) t! N) n9 E7 O! v" h$ n————————————————
* g& G6 ~0 W5 S+ Y版权声明:位文杰TOP9 a7 z& J1 J7 f
" g1 p  @" V4 I* G# x

# `3 M; ~5 ?& N0 O
赞 收藏 评论0 发布时间:2022-12-24 17:40

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版