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

STM32 之供电系统及内部参照电压(VREFINT)使用及改善ADC参考电

[复制链接]
攻城狮Melo 发布时间:2022-11-7 23:48
问题  X* G, I. a5 _6 ~# `; \8 f
  今天在使用 STM32F407 的 ADC 时遇到一个问题:ADC 的参考电压都是通过 Vref+ 引脚提供的并作为ADC转换器的基准电压(部分 MCU 没有 Vref+ 引脚)。当我们使用的 Vref+ 是直接取自用 VDD 电压时,当 VDD 电压波动比较大时或稳压性能比较差时,转换结果自然就不准确了!* d9 k8 X1 b4 U. |( F; j
* k3 C2 j2 ]' @0 ~7 O( P9 k
供电方案
, B' G/ x+ [" z8 }  {: W7 b  MCU 的参考手册都会有一章节单独介绍 MCU 的电源管理,针对不同的 MCU(封装不同等)其外部电源如何连接也是有要求的,我们在 MCU 上一般都会发现如下引脚(注意不同 MCU 是有区别的):* S/ ^) z! p9 N  {+ @0 T
VDD / VSS: VDD is the external power supply for the I/Os, the internal regulator and the system analog such as reset, power management and internal clocks. It is provided externally through VDD pins.* y  a* E- q1 q) g' M- v# [
VDDA / VSSA: VDDA 是A/D转换器,D/A 转换器,参考电压缓冲器,运算放大器和比较器的外部模拟电源。 VDDA 电压电平与 VDD 电压无关。 不使用这些外设时,最好将 VDDA 连接到 VDD。
5 ^4 d7 u, \7 pVBAT: 当不存在 VDD 时,VBAT 是 RTC,外部时钟 32kHz 振荡器和备用寄存器(通过电源开关)的电源。 对于没有专用引脚的小型封装,VBAT内部连接到了 VDD7 i/ |! H! E# r0 ?2 _2 H
VREF+ / VREF-: VREF+ 是 ADC 和 DAC 的输入参考电压。 使能后,它也是内部参考电压缓冲器的输出。当不使用 ADC 和 DAC 时,VREF+ 可以接地。VRE- 必须始终等于 VSSA。! P8 Y3 b, g" N( K! R( L1 R
VREF- 和 VREF+ 引脚并非在所有封装中都可用。 如果封装上未提供它们,则它们在 MCU 内部分别与 VSSA 和 VDDA 相连。! T7 W( D5 i! c6 E& P3 D
5 u0 S* O. ^0 Z; Z. ]
下面以 STM32F1 和 STM32F2 的 MCU 比较来具体看看。供电架构如下图所示:
7 _9 |. o$ D  R
* ~, v5 N/ s; K& s4 M' S 20181221103209333.png , p# e; ]; h! W9 g5 ^

* f5 k/ d4 w- [3 [不同的供电所管理的供电域
8 J6 u6 w8 h, \% V$ e, a
8 R0 A  k: ^( H* z$ A) t 20181221103219739.png * ~0 ]  J: D# s) P% o" a
( B% ]: j4 z* X$ D0 V
供电电压范围" ]5 k8 z* b6 e/ _, o
" ]& r+ x( U' U1 P/ e. g
20181221103228475.png 4 M0 O- ~& F2 x+ y; q# `" T' p

4 z+ l0 Y* P4 ~& j5 UVCC: C=circuit 表示电路的意思, 即接入电路的电压
" b: D5 m, n: a/ D- {4 P0 KVDD: D=device 表示器件的意思, 即器件内部的工作电压;2 u6 W. ?# |) ?) ^8 M
VSS: S=series 表示公共连接的意思,通常指电路公共接地端电压! Y* h/ e7 W6 B% v
STM32 的 VDDA 和 VSSA 不能悬空,复位模块和 RC 振荡器需要 VDDA 和 VSSA。否则无法下载程序!: J. N! x7 n+ D9 b& p- J$ S

* R7 s( ^# `1 j. c9 n, a电源引脚连接

. e# B7 j8 B# j5 K  h' r, x! ?VDD 引脚外接去藕电容连到外部稳压源
: V3 Q  F+ z$ `5 w  b& k, b4 }一个最小值4.7uF、典型值 10uF 的钽电容或陶瓷电容
' D# V) p! ~- b8 t8 T) H: m每个 VDD 引脚再接一个100nF 的陶瓷电容
6 ?& x! ?: x# Y/ \: t. FVBAT 引脚外接电池。若没有电池,推荐通过100nF的陶瓷电容连到VDD引脚
7 Y; b& n: c9 V3 ?VDDA 引脚外接两个去藕电容7 N2 s% m% J) N! s; g5 T' d* b
一个 100nF 的陶瓷电容
1 x& o3 G3 R, J1 Q  o一个 1uF 的钽电容或陶瓷电容
" u' }0 r( D5 q' t8 p' f3 BVREF+ 引脚连到 VDDA4 X# J' d* C% U+ |
若有单独的参考稳压源连接一个100nF 和 1uF 的电容/ k3 e7 p% w4 i% }, H* p) [: U8 J
VCAP1 和 VCAP2 通常只各连接一个 2.2uF 的电容
9 i# T% b6 t+ ?6 T  q, V- K特殊封装上,可外接 1.2V 电源来旁路内部主电压调节器2 w3 u1 n) A( k$ b7 E- y
+ S) o" X( U2 l& d) i
20181221103312359.png 7 N. ^6 ^+ I' G  T

& J% N4 @; @9 k& l, S* C* u7 A& T  Q$ r8 C: v5 _& l4 D: x' p
ADC的参考电压

) F$ H3 P, w0 }: f( `3 J# ~  ADC 可以主要有连个电源: 供电电源 和 参考电源 。参考电源就是在转换数值时候的基准。在部分 MCU 的封装中,会有单独的一个 Vref 引脚,这个引脚就是提供参考电源的
: k9 h' _6 w9 N
; x* t4 Y' f5 e5 |8 t" B 20181221103331368.png ! y  Y. t$ A6 X# u8 R0 a
# ?7 n& c2 q5 h( x! G# {
我们可以把外部基准电压芯片(例如REF3133,输出的电压是标准的3.300V)连接到 Vref 引脚。一般 100 脚的 STM32 MCU(如上图STM32F4)都有 VREF 引脚。对于 100 脚以下的芯片,STM32 没有把 VREF 引脚引出来,而是直接在内部连接到了 VDDA 引脚。这样就导致了 ADC 的供电电源和参考电源实际是一个。
# Q6 ~( ~6 a0 t9 l6 f1 y+ C6 |8 K8 m8 ^6 k2 k, u- S; Z' Y. U. l
  注意,STM32 单片机上面有好多电源引脚,其中有若干 VDD 引脚,只有一个 VDDA 引脚,VDDA 引脚就是模拟供电引脚。不过,需要注意,VDDA 的电压不是随便定义的。例如,STM32F051 系列单片机就规定,VDDA 必须要大于或者等于 VDD 才可以正常工作,所以这时候,最好是给单片机 3.0V 供电,再给 VDDA 采用一个 3.3V 的基准电压芯片供电。
9 z4 J+ L) m& g( P5 K( x; G
% P& G; n; M& |- @, t" h* P 20181221103342186.png
( G+ |# W" O+ v( R4 k) S
6 u# q4 ~0 i5 h% B为啥会要求 VDDA 必须要大于或者等于 VDD?这是因为在 MCU内部 VDDA 和 ADC 的参考电压有联系。+ D3 q0 ]% l3 Y* y3 l' v5 e% m

7 V% b" s, i# w0 h! W2 f内部参照电压
# X) E. e& c- e# F/ }& `  以上两种方法都需要外加基准电压芯片,在实际应用中,往往是 VDDA 引脚和 VDD 引脚连在一起,而没有 VREF 引脚的片子,内部 VREF 有是和 VDDA 接一起的,这就到了整片子都是由电源芯片供电。这个时候如果要提高 ADC 转换准确性该怎么办呢?5 o, o3 G- @/ ?% i$ z
2 j5 N5 Q! N. F; U) o
  针对上面这种情况,在每个 MCU 的内部,都有一个叫内部参照电压的东西。更关于该部分的介绍,位于对应 MCU 的 数据手册 中(不同MCU的 数据手册 介绍有多又少,同样是 STM32F0 的 数据手册 介绍更为详细),如下图:
+ Q. p* Q# M) m/ Y/ i+ I( M8 _& Q, ^  \9 S7 g8 D
20210305103722301.png
( e. h/ d6 d! T* D1 X! D& @8 Q
3 n7 ]5 Q# j+ _" k/ g- f但是这个值有可能也是不准确的,那怎么办呢?ST 提供了一个方案:STM32 可以通过配置将 VREFINT 接入到 ADC 内部的通道,然后我们就可以测量 VREFINT 到底是多少。MCU 不同具体链接的 ADC 引脚也是不同的。下面是 STM32F4 芯片的参考手册的说明:6 y; A& B  B4 a4 b
5 V7 q( O1 y) ?, P% {
20181221103804392.png
9 ^0 y- e: u; B  j' P3 R
4 g$ u! i* w* b" `& |1 J& \8 e# `( ?在 MCU 出厂测试的时候,ST 为我们提供了一个校准值,校准过程是在外部供 3.3V 电源,将采样内部参考的 ADC 值写入到 MCU 固定的内存中去的0 n0 u5 N: f; g& s3 Z! s1 j

3 y5 ~$ s4 M5 v) i; }# `! A2 a8 t 20181221103504409.png
  c; D$ g5 z/ p
  E! n, c& l3 V$ K. o) o这样我们就可以用 ADC 实际采样,得到 VREFINT 的采样值,然后使用上面的校准值进行计算即可!0 O7 U% Z9 l1 q0 J( v5 ^1 h
* s- _* W: g/ u( S0 }1 C  G; j! i
  关于使用内部参照电压的具体方法,只有部分芯片的参考手册中才能找到( 如下图是 STM32F0x ),其他 MCU 的参考手册都是很简单的几句说明。5 B" v9 T2 V/ R& g; h

0 H  P; l2 N$ j9 u" w  B 20181221104254285.png 6 t6 q6 \, h# R  M: K

% Q  }5 P7 |% [更进一步,在计算其他通道的时候,我们就可以使用以上计算的 VDDA 来作为基准了!
  P; p  {: G1 {/ m2 j
; _- r: n+ ^: W1 u) o. ` 20181221104907972.png
" J& @! d5 }) l* L0 t& k) K& W% }; u3 h
需要特殊注意的是,在不同系列的芯片中,以上是有区别的,例如以下是 STM32L476 系列的( u- Z" a+ o( d& |- A& Q" I
" R/ j* D+ b% q! I
2020011812511465.png
2 M' ^! D4 T: Q6 O6 z3 U2 c5 H3 U
6 T' f( _; a# A& @6 [那么,VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA 这个公式是咋么来的的呢?下面我们以上 STM32L476 这个图为例来推导一下。! b# k! C' H# A+ r
1.ST 通过配置将 VREFINT 连接到 ADC 后,则有:VREFINT = 3.0V * (VREFINT_CAL / 4095); VREFINT_CAL 就是校准条件下的 ADC 采样值
: Q: `& U' X' [) Y. s# V$ a2.我们自己通过配置将 VREFINT 连接到 ADC:VREFINT = VDDA * (VREFINT_DATA / 4095);
: y6 ]" U2 Y; y8 ^3 M% O' G; @8 v+ e# M3.因此,VDDA * (VREFINT_DATA / 4095) = 3.0 * (VREFINT_CAL / 4095);) w! Q2 D, D% r) j6 s) P
4.VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA  @1 C* l4 E! _; H6 M) E
' C2 {4 w4 c/ N! ^1 ^( i+ |: q
ADC转换时间6 G" E; }( G, k
在使用上面的方法时,必须要特殊注意ADC转换时间。否则采样值将出现较大偏差!先看看每个通道的总转换时间公式:每个通道总的转换时间 = TSampling + Tconversion8 M& B* v6 i1 r' y0 x
1 C& |8 h$ [- L" J5 ]3 R2 M
TSampling可配置:SMP@ADC_SMPRx,需要和外部电路的输入阻抗匹配(在对应的数据手册中会有详细说明)
6 P/ C2 e- j6 _, b  R4 |9 K% y+ Y+ I3 F& o: \
20181221161928944.png
& u; \2 y' L, ]
+ `/ b  |5 n* l+ c$ nTconversion取决于转换精度:RES@ADC_CR1,降低转换精度可提高转换速度
- M' B, p5 |, r4 f# Y7 b( ~/ t- o; ~) P6 d# K) t7 d
20181221161937358.png
% K2 e( I+ W$ y) U1 s; D1 f  M3 m2 K. R5 \
ADC总转换时间为:Ttotal = (SMP + RES) * ADCCLK
) T2 w+ G1 t6 jSMP:采样时间,需要和外部输入阻抗搭配
0 H! i9 ~) i* G( u+ v2 r. `RES:转换精度,降低精度可提高速度& g. q9 ~& r# ~! \9 V6 F$ W: r
ADCCLK:ADC模块工作时钟' c3 E9 Q3 ?' `
ADCCLK = APB2时钟分频(2,4,6,8)
& W4 _9 B4 I8 E! H; n/ OADCCLK最大值还受限于工作电压; _1 A* X. j: V3 h/ `
VDDA=1.8~2.4V fADCmax = 15MHz
  z' Z: z" [) R# E. J  _) KVDDA=2.4~3.6V fADCmax = 30MHz( b8 G( o' g6 N% `; W1 G* P, a

0 E: f: l  o- X
6 `/ R; u6 e2 E* e1 }4 @: v为什么要说ADC采样时间?因为上一节所讲的方法,对于采样时间是有限制的!!!
/ C" }+ Z8 S3 {9 e0 {. p
9 @/ }* h  [" B温度传感器
8 `( j2 @9 `2 D& R. Q9 ]& [8 @9 x% U! c) {% T2 O  s) z* i( F4 }, a
20181221162434663.png
2 |& j" X# I/ }- ]6 W; w( P+ `. H. `! ]$ {2 Y% l
Vbat
' F! O5 Z# S; L5 i4 y1 w  n; B
0 U9 K9 ?+ ]' c" ?6 ?- W5 \! ` 20181221162545863.png
: J6 V. L5 h6 W7 g3 j4 }& k  @; V1 B) L3 Y1 `% d2 @
VREFINT  |: n3 N! H% T2 A# d. R

7 y6 }+ V0 K8 {5 m- q% H 20181221162456471.png
' [- c. W) M, I# c. A
- k& V! I2 F! f! c+ N' c" J关于采样时间需要和外部输入阻抗搭配,参看下图和对应的 数据手册# e' L+ m3 N+ r1 Z1 s9 Y6 K% a8 {# W
5 @1 o& T! s) I9 b: Y% X* i; v8 _
20181221162720492.png ) U8 _" p: \2 ]; C! y: S8 Y1 a
4 X" B7 n4 U0 A9 V- V, `8 N
————————————————  d1 T& f. k6 a6 `1 ]! S
版权声明:IT 之道7 t7 ^, h* M2 Y' u

, S$ ^9 K  B4 O! m5 }2 u5 H* l9 J6 ^7 Q7 B. y1 d) h4 g/ c
赞 收藏 1 评论0 发布时间:2022-11-7 23:48

举报

0个回答

所属标签

相似技术帖

官网相关资源

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