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

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

[复制链接]
攻城狮Melo 发布时间:2022-11-7 23:48
问题
- H3 m' g: Q- @6 k9 v  今天在使用 STM32F407 的 ADC 时遇到一个问题:ADC 的参考电压都是通过 Vref+ 引脚提供的并作为ADC转换器的基准电压(部分 MCU 没有 Vref+ 引脚)。当我们使用的 Vref+ 是直接取自用 VDD 电压时,当 VDD 电压波动比较大时或稳压性能比较差时,转换结果自然就不准确了!! @( y) M- [& E1 G4 b4 y2 F6 L* L( l. @
& Z+ U# k& T& H- @% I3 L
供电方案1 A8 ?6 O. z6 W8 `! f/ O
  MCU 的参考手册都会有一章节单独介绍 MCU 的电源管理,针对不同的 MCU(封装不同等)其外部电源如何连接也是有要求的,我们在 MCU 上一般都会发现如下引脚(注意不同 MCU 是有区别的):& v- y8 o+ D9 G8 K0 @% d
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.0 U; E1 W7 k; Q" d" d
VDDA / VSSA: VDDA 是A/D转换器,D/A 转换器,参考电压缓冲器,运算放大器和比较器的外部模拟电源。 VDDA 电压电平与 VDD 电压无关。 不使用这些外设时,最好将 VDDA 连接到 VDD。
  M) m  E7 c" g: wVBAT: 当不存在 VDD 时,VBAT 是 RTC,外部时钟 32kHz 振荡器和备用寄存器(通过电源开关)的电源。 对于没有专用引脚的小型封装,VBAT内部连接到了 VDD9 K* s% t# x0 {+ d% D/ @
VREF+ / VREF-: VREF+ 是 ADC 和 DAC 的输入参考电压。 使能后,它也是内部参考电压缓冲器的输出。当不使用 ADC 和 DAC 时,VREF+ 可以接地。VRE- 必须始终等于 VSSA。# M; o4 K8 x0 V( Y& ~- R
VREF- 和 VREF+ 引脚并非在所有封装中都可用。 如果封装上未提供它们,则它们在 MCU 内部分别与 VSSA 和 VDDA 相连。
5 k6 h6 s/ j9 @% a+ D0 G+ g- W" f2 f1 u& t7 M8 h
下面以 STM32F1 和 STM32F2 的 MCU 比较来具体看看。供电架构如下图所示:7 P. [( E" G6 W

: e1 w" H! t. S 20181221103209333.png
, l$ v# o4 k' t! D" c) v, g$ a! {: x* \
不同的供电所管理的供电域
  X$ j1 L  P' D9 ?
# A* \1 U  E! p9 {4 N. o& ] 20181221103219739.png
6 E3 B  R: E2 ?8 m0 K& J0 h" V% z, s' _, Z# i1 {
供电电压范围/ P6 T6 Z" w4 Y  ~7 c
1 U8 `3 [8 j& t2 A" J  k! N
20181221103228475.png ; @- {! o# P0 h, j, @
2 U3 r' k1 s' N' e9 I
VCC: C=circuit 表示电路的意思, 即接入电路的电压1 ^/ L0 d( c( w9 ~4 }
VDD: D=device 表示器件的意思, 即器件内部的工作电压;6 y: K+ B* Y0 S
VSS: S=series 表示公共连接的意思,通常指电路公共接地端电压
" e  K4 |9 H# \) h) F/ h4 PSTM32 的 VDDA 和 VSSA 不能悬空,复位模块和 RC 振荡器需要 VDDA 和 VSSA。否则无法下载程序!1 c& l% N1 w/ o7 e

; v; A7 p: F) `& u7 G& [电源引脚连接
$ s5 D" V! I$ I
VDD 引脚外接去藕电容连到外部稳压源' K+ A# R! I; O. s
一个最小值4.7uF、典型值 10uF 的钽电容或陶瓷电容
" h- _$ |5 A& x% J每个 VDD 引脚再接一个100nF 的陶瓷电容
$ S! B4 g5 l% oVBAT 引脚外接电池。若没有电池,推荐通过100nF的陶瓷电容连到VDD引脚
# U% w) H* D- |/ |4 s6 dVDDA 引脚外接两个去藕电容
; B. s" i! g/ p& A, {2 n: V一个 100nF 的陶瓷电容4 s7 y4 [5 V0 A% k2 O. o" Y
一个 1uF 的钽电容或陶瓷电容
, U) k9 Y, }4 q# o& C' X, _VREF+ 引脚连到 VDDA
' R& V0 z2 ]  f  I* F0 x  @若有单独的参考稳压源连接一个100nF 和 1uF 的电容
/ U6 [# h& Q( c2 \  T1 z( pVCAP1 和 VCAP2 通常只各连接一个 2.2uF 的电容
- M% J9 X# i" g, R特殊封装上,可外接 1.2V 电源来旁路内部主电压调节器
  T) w' _8 }; `/ n! j" k, T2 m: I6 S! `  }$ W' c5 V  F
20181221103312359.png 3 P4 f) Q; Y0 L0 N6 M

; Q! I% |7 H6 B: E( b% ^3 s- }9 w3 m
ADC的参考电压
3 Y/ [8 p* R2 g" T# c
  ADC 可以主要有连个电源: 供电电源 和 参考电源 。参考电源就是在转换数值时候的基准。在部分 MCU 的封装中,会有单独的一个 Vref 引脚,这个引脚就是提供参考电源的- I$ l, k% u! G- ]
) T7 c6 y4 ?6 b" A) f( M
20181221103331368.png   D- }- h$ K) i7 j9 ]0 X& `
: ^) Q  `' Y3 E$ M% F
我们可以把外部基准电压芯片(例如REF3133,输出的电压是标准的3.300V)连接到 Vref 引脚。一般 100 脚的 STM32 MCU(如上图STM32F4)都有 VREF 引脚。对于 100 脚以下的芯片,STM32 没有把 VREF 引脚引出来,而是直接在内部连接到了 VDDA 引脚。这样就导致了 ADC 的供电电源和参考电源实际是一个。
0 Q! g# M$ B* H% c9 u1 w& c2 K# m
  注意,STM32 单片机上面有好多电源引脚,其中有若干 VDD 引脚,只有一个 VDDA 引脚,VDDA 引脚就是模拟供电引脚。不过,需要注意,VDDA 的电压不是随便定义的。例如,STM32F051 系列单片机就规定,VDDA 必须要大于或者等于 VDD 才可以正常工作,所以这时候,最好是给单片机 3.0V 供电,再给 VDDA 采用一个 3.3V 的基准电压芯片供电。% w% r% ^8 [/ M+ a# }9 L, _

: w2 r, ]" D, ?3 @( B* w 20181221103342186.png
; n: r. R8 [6 D; Z, K8 H0 {- T) l+ j# {* V3 f! o+ C" C
为啥会要求 VDDA 必须要大于或者等于 VDD?这是因为在 MCU内部 VDDA 和 ADC 的参考电压有联系。# h% M; y* \2 V1 Z7 Z4 b$ l

( F/ Z: ?6 e8 `4 Z' o; |内部参照电压( j* {$ o" f; q' |& P3 X
  以上两种方法都需要外加基准电压芯片,在实际应用中,往往是 VDDA 引脚和 VDD 引脚连在一起,而没有 VREF 引脚的片子,内部 VREF 有是和 VDDA 接一起的,这就到了整片子都是由电源芯片供电。这个时候如果要提高 ADC 转换准确性该怎么办呢?" S& _% x) W0 W* d/ H( I* H
7 j) i. \* J* ~9 g- h/ Z- }
  针对上面这种情况,在每个 MCU 的内部,都有一个叫内部参照电压的东西。更关于该部分的介绍,位于对应 MCU 的 数据手册 中(不同MCU的 数据手册 介绍有多又少,同样是 STM32F0 的 数据手册 介绍更为详细),如下图:
: f8 f( I# z& k1 u. e, |7 g
) M% b8 s* A2 ]* r 20210305103722301.png 4 y# o/ w5 h. y1 ^8 _! u, G

  O( b' e/ a1 O. k/ p* _但是这个值有可能也是不准确的,那怎么办呢?ST 提供了一个方案:STM32 可以通过配置将 VREFINT 接入到 ADC 内部的通道,然后我们就可以测量 VREFINT 到底是多少。MCU 不同具体链接的 ADC 引脚也是不同的。下面是 STM32F4 芯片的参考手册的说明:
2 `0 y+ V6 ?+ z3 _3 L4 r1 {
' W2 A$ E4 l" U0 _5 v2 p( j 20181221103804392.png
) \6 w( T! o0 b4 k* F7 J" Z5 C! v
" T1 k- {+ K5 M1 W2 V' u在 MCU 出厂测试的时候,ST 为我们提供了一个校准值,校准过程是在外部供 3.3V 电源,将采样内部参考的 ADC 值写入到 MCU 固定的内存中去的7 F1 T6 Z% E: R

5 F0 Y5 @) v8 z# A+ D" r9 E 20181221103504409.png
2 |5 l$ C: f" G* Z" ]
$ w; a  v( B7 A3 @这样我们就可以用 ADC 实际采样,得到 VREFINT 的采样值,然后使用上面的校准值进行计算即可!( E) f, z6 l. t, X# `! ]# k

: ]% j/ I9 B- y7 @  K' W1 G8 P  关于使用内部参照电压的具体方法,只有部分芯片的参考手册中才能找到( 如下图是 STM32F0x ),其他 MCU 的参考手册都是很简单的几句说明。( C, R4 G- Y, L/ L9 i6 M

3 V! {$ q( ?/ A2 m2 x 20181221104254285.png 7 M# s) l$ V2 K5 x

5 b$ O6 P3 Z' g6 t6 O更进一步,在计算其他通道的时候,我们就可以使用以上计算的 VDDA 来作为基准了!
1 {* U' F( t6 w; N+ O6 L; b# ^  Q& X; t0 Y& O$ F
20181221104907972.png % z( I6 ]# N0 l
1 C' v( m- P/ H8 H' D
需要特殊注意的是,在不同系列的芯片中,以上是有区别的,例如以下是 STM32L476 系列的* y1 m9 [) a0 j* b5 j0 Y

* j2 v/ ~: T# O& v  V# m/ z. r 2020011812511465.png
$ ?9 q2 s& ?' n. c1 Z/ d4 e# D2 h- h* {3 z$ r& B
那么,VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA 这个公式是咋么来的的呢?下面我们以上 STM32L476 这个图为例来推导一下。
1 B7 H2 w2 f7 ]: x' v1.ST 通过配置将 VREFINT 连接到 ADC 后,则有:VREFINT = 3.0V * (VREFINT_CAL / 4095); VREFINT_CAL 就是校准条件下的 ADC 采样值
% O2 f; E4 Y8 S3 M5 m) k5 m0 u2.我们自己通过配置将 VREFINT 连接到 ADC:VREFINT = VDDA * (VREFINT_DATA / 4095);+ k* I/ i3 m( ]; C  A8 B
3.因此,VDDA * (VREFINT_DATA / 4095) = 3.0 * (VREFINT_CAL / 4095);& n9 y, B7 Q! {4 h$ C3 V" d
4.VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA
* j6 A  I3 t* b. ^" y7 }9 ^
  k$ Y5 r. H7 T6 `# T* y# }ADC转换时间2 G& z  n5 }4 ?) g1 u
在使用上面的方法时,必须要特殊注意ADC转换时间。否则采样值将出现较大偏差!先看看每个通道的总转换时间公式:每个通道总的转换时间 = TSampling + Tconversion
: T% Z( S1 m! y: `9 O: D5 i7 j$ I% H* K7 W& F
TSampling可配置:SMP@ADC_SMPRx,需要和外部电路的输入阻抗匹配(在对应的数据手册中会有详细说明)5 x2 c! M$ y; ?2 e) |; n
# q- W& Q, K0 W6 D, l4 A
20181221161928944.png
% D* p- B, N6 m- |" U5 }% m4 s' P5 {+ m, g7 v
Tconversion取决于转换精度:RES@ADC_CR1,降低转换精度可提高转换速度) N" X2 V! W3 M' ?! W

6 p% c3 B1 G0 s3 S+ k 20181221161937358.png
9 K# h5 C; k1 Z' |8 C
9 v: V6 C0 ?4 ?. \* w0 }ADC总转换时间为:Ttotal = (SMP + RES) * ADCCLK" I" u) U+ e0 O$ ~0 W
SMP:采样时间,需要和外部输入阻抗搭配: F3 p" ]  B  t7 z
RES:转换精度,降低精度可提高速度
8 k" O- r7 B" U  ~5 _% KADCCLK:ADC模块工作时钟% e( ~, I9 T1 t+ ^" x$ v- z
ADCCLK = APB2时钟分频(2,4,6,8)3 s% q! Z/ _8 c( E( \
ADCCLK最大值还受限于工作电压0 _: Z' C5 B+ A+ p$ `
VDDA=1.8~2.4V fADCmax = 15MHz
/ r- h) o- k7 J0 O4 K2 r: pVDDA=2.4~3.6V fADCmax = 30MHz# ]9 B# y* g, G6 k+ Y
' W/ L/ w" w* l* g! |5 t% Q  _+ ~

# o; @; R/ @$ r3 ?9 a2 x  G1 h为什么要说ADC采样时间?因为上一节所讲的方法,对于采样时间是有限制的!!!2 [$ F# a) ^  B* ~3 B# ~6 g$ B
# |# j7 }5 u+ @, o9 Q4 O
温度传感器( M% N4 Y5 [/ D) j, S( S/ @
9 g. t9 g% J0 ^- X! q
20181221162434663.png
$ h+ b+ e; ^% [: X/ q  u% E- J
. L9 C! p- s5 Y9 ]Vbat
4 `+ z, D& a* e- u$ g6 I* b; ~% h2 E+ T6 E
20181221162545863.png   K8 E$ S# }7 }4 S; ^: S1 u. @
. o) w: g6 Q: e. `4 Z% E, ^
VREFINT: H; D9 R4 E0 a" K' d* k7 v

0 W, e3 W  Z3 A) \ 20181221162456471.png
. x# L" Z4 d# V. r5 d: `5 t
, ?5 X- B9 Y0 J+ ^  @1 h关于采样时间需要和外部输入阻抗搭配,参看下图和对应的 数据手册
& v6 I+ V3 Q+ [* r0 a, @1 P3 W8 x0 K0 J: J5 z* q
20181221162720492.png
& \0 L4 c: c+ g4 O7 O9 H5 _  C' G8 \( M5 q/ X
————————————————$ o$ I4 w( {; h3 R
版权声明:IT 之道
% [  G  \/ A: g' l  Z. R) g% S+ x; m. E* a5 k

6 o3 f2 _9 @4 M: g6 E
收藏 1 评论0 发布时间:2022-11-7 23:48

举报

0个回答

所属标签

相似分享

官网相关资源

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