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

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

[复制链接]
STMCU小助手 发布时间:2022-12-24 17:40
/ R, b8 W: d/ H: E5 B% A
fcd1f568d11a4ee38393991659146fa2.png . Z. N. H( }& c) E, q) P; a& q- b
6a730d5c2f444d45bb559b03c98a39d5.png   E# j1 H: r; O

) p- y) c. |: P我们经常会使用STM32 ADC功能测试外部电压,在一些精度不高的场合,我们一般就用3.3V作为参考电压来计算测到的电压值。1 z5 m# g7 e% V1 ^, f3 y
2 F5 T  r- K( H: F8 R
不过,这种情况很少见,可能只有单片机学习板才会这样使用。% Z3 X; v0 k, i1 Z0 B7 ?

* @1 S, K9 N: K, y因为我们使用的3.3V稳压芯片,很少有标准的3.300V输出,有可能是3.270V,也可能是3.345V,而且,还存在个体差异,这个板子上的电压是3.294V,另外一个板子上面,就可能是3.312V。# `% I& q; w! @2 l! p5 j& s: Z
& N- d0 \3 o1 X3 g8 F1 m
如果我们都用3.300来计算的话,同样的电压,测出来的结果就会存在mV级别的差异。% x, H8 s2 \; O6 g
2 E7 ]8 g  ]% X" O/ v. {# T
在实际使用中,我们一般使用外部基准电压芯片,例如,100脚的STM32一般都有VREF引脚,就是用来接外部基准电压芯片,例如REF3133,输出的电压是标准的3.300V。* y- M2 K% p+ @6 u0 T% m& Y# d
! i! E8 K1 q  i, L* B$ q2 S
为什么不用基准电压芯片作为电源供电芯片?
- W6 r. m: `8 C% N& A( P6 ]/ i2 S: s5 W8 G5 _& N
因为基准电压芯片的输出电流都是小于25mA的,对于一般的电路板应用,这么点输出电流不足以让电路板工作。
  `% b6 z$ ]& `/ m
8 G! S8 K7 A4 r9 H( p! S& Q0 Z不同的STM32 如何使用基准电压芯片?5 G1 ]( ?2 n, Q  R8 h  z4 q

5 S0 Q+ l" M/ N9 `对于100脚及其以上的芯片,把基准电压芯片连接到VREF芯片即可。& ^7 d( u- i( [' ~" l+ f

2 V; y- k7 ^5 A" W' m+ Y对于100脚以下的芯片,STM32没有把VREF引脚引出来,所以,我们只能把基准电压芯片连接到VDDA引脚。
4 D6 Y7 Z/ o1 [8 E
1 c# {7 ^3 w+ \* W& d" S
注意,STM32单片机上面有好多电源引脚,其中有若干VDD引脚,只有一个VDDA引脚,VDDA引脚就是模拟供电引脚。! r  x; p+ n, T- y: y" z, p4 C
, f# Q  K$ \7 b( g" @
不过,需要注意,VDDA的电压不是随便定义的。例如,STM32F051系列单片机就规定,VDDA必须要大于或者等于VDD才可以正常工作,所以这时候,最好是给单片机3.0V供电,再给VDDA采用一个3.3V的基准电压芯片供电。
4 H- B0 n4 J/ ?6 O( A/ E# [8 `, Y
, j# X3 R1 K2 }3 t# V
不用电压基准电压芯片可以吗?
7 U1 {3 n' u; b! a* V+ E! u, b. G; _/ b  }" B8 i  E
如果在你的应用中,VDDA引脚和VDD引脚连在一起,都是由电源芯片供电,这时候,如果你能知道VDDA的实际电压,也可以得到精确的ADC结果。5 F8 l4 ?# Y5 z4 X+ r( h

- e) J' b+ J( e0 x0 h例如,你可以用万用表测到VDDA电压,例如,是3.286V,你就可以使用3286来计算。
  |. Q+ L4 ?! x( S7 Z9 X$ z
3 W9 ?: u+ K- x" y' f& W$ L3 @6 `6 E0 C
不过,这也只能是在实验的时候,在实际使用中,如果你做了1万个板子,然后需要用万用表量1万个板子的电源电压,然后再给每个板子修改程序,显然是不可能的。' u$ s+ Q" T7 l. b. u# Q

% ]# z( W/ ?4 \' i5 W所以,STM32给我们一个解决方案,STM32在内部都有一个参考电压引脚,可以通过配置,把这个脚连接到ADC输入引脚,是内部连接。然后再通过这个值计算实际的VDDA值。% t2 }: g8 ?7 m
- b9 s. K8 s  [" @
或者选择单片机的供电电压的精度比较高的。
! m- k( A7 T- ]. r

+ F+ M: f8 j! {8 e不过,STM32也存在个体差异,所以,它并没有在手册上给出我们这个参考电压是多大。而是用出厂时调教好的校准值和得到的参考电压值一起使用。如下图:
! M  D* c& A0 X) f( u0 _7 S2 P3 `) Y8 O' H9 N* n% e
9a0c061367727b5afdf404960ab04d9d.png 2 _3 H; ~% G4 R3 ^' b1 ~0 H
; r. X5 u6 g1 s: ]6 i; Q

+ Q# y$ g: z) a! l* EVREFINT_CAL是校准值,这个值,每个单片机都不一样,被存储到了0X1FFFF7BA和0X1FFFF7BB,使用的时候,需要先读出来。2 K  [0 M( H2 B9 Z9 O) b4 U. c
6 A* U- l( R8 P
给你个程序看吧,程序当中,有读取VREFINT_CAL和VREFINT_DATA值的语句。你可以看个究竟。/ E% g' e: Q! Y

- M: n- S# B% ]这个程序已经实践验证过了,不会有问题,下面是实验结果:4 k  d; r8 {% T) K
" [# c$ H8 ~4 b+ k( u
f49f089d010c5e942693c25e90fdf680.png
% h# G2 i: Q) r- z- V
6 ?% S' y" b; f
  b6 H, D( e4 `
我把测到的VDDA值,发送到了串口查看。然后我用万用表测了一下实际的VDDA值,由于我的万用表精度有限,只能测到小数点后2位数字,万用表得到的是3.32V和3.31V之间跳动。
7 b8 h4 s- T% j% M3 V7 p: k+ u
) z7 Y8 s6 k2 i. l' I串口发送的值,小数点后第三位四舍五入之后,结果也是3.32V和3.31V,结果是一致的!
: ~. r! O% P- }) w7 h8 `————————————————2 d5 F) E( N! w1 E& _, l; |
版权声明:位文杰TOP
6 O3 p& {9 F8 k  q% B9 h% n6 }2 ^" z( V& C+ T, q

9 y& [, k3 h0 j( j
收藏 评论0 发布时间:2022-12-24 17:40

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版