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

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

[复制链接]
攻城狮Melo 发布时间:2022-11-7 23:48
问题
6 m8 D4 U; }/ ~' v! O) S" b& `1 `  今天在使用 STM32F407 的 ADC 时遇到一个问题:ADC 的参考电压都是通过 Vref+ 引脚提供的并作为ADC转换器的基准电压(部分 MCU 没有 Vref+ 引脚)。当我们使用的 Vref+ 是直接取自用 VDD 电压时,当 VDD 电压波动比较大时或稳压性能比较差时,转换结果自然就不准确了!! p0 u. w. G4 s: H# t! u

# n& e  B: |, e4 y: L( }供电方案
4 t# P3 L* A1 N2 S( ]8 I. z  MCU 的参考手册都会有一章节单独介绍 MCU 的电源管理,针对不同的 MCU(封装不同等)其外部电源如何连接也是有要求的,我们在 MCU 上一般都会发现如下引脚(注意不同 MCU 是有区别的):" k) ]& x3 e  c: t# a: V" K
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." ]2 P& ?: ^2 U+ w" W1 [
VDDA / VSSA: VDDA 是A/D转换器,D/A 转换器,参考电压缓冲器,运算放大器和比较器的外部模拟电源。 VDDA 电压电平与 VDD 电压无关。 不使用这些外设时,最好将 VDDA 连接到 VDD。# h) [. Y; t. N# g  ?# }( ~/ h
VBAT: 当不存在 VDD 时,VBAT 是 RTC,外部时钟 32kHz 振荡器和备用寄存器(通过电源开关)的电源。 对于没有专用引脚的小型封装,VBAT内部连接到了 VDD
" h& v! @" |2 [) o6 Y4 d& CVREF+ / VREF-: VREF+ 是 ADC 和 DAC 的输入参考电压。 使能后,它也是内部参考电压缓冲器的输出。当不使用 ADC 和 DAC 时,VREF+ 可以接地。VRE- 必须始终等于 VSSA。
# o% y8 r9 D5 NVREF- 和 VREF+ 引脚并非在所有封装中都可用。 如果封装上未提供它们,则它们在 MCU 内部分别与 VSSA 和 VDDA 相连。
7 T& D' ^* N+ |' \" r9 g' U0 |
4 h# a" }0 B7 u' d; s; S9 K# Q. o下面以 STM32F1 和 STM32F2 的 MCU 比较来具体看看。供电架构如下图所示:- Z' l' f, h" m% K4 h

8 B. d  E) g6 _+ P' o, I: a- u 20181221103209333.png
; h, q$ D# E$ ?
* c  S7 |# Z6 O' b% ]不同的供电所管理的供电域3 g) H3 Z1 f4 Y8 o

: Y6 j- Y% K, [. | 20181221103219739.png
* r3 v5 R, H" V9 J2 R
3 l: L2 e8 t) S- S8 Y4 b5 u供电电压范围$ `, C  S9 v. ^3 O5 r  P
% y2 t8 U7 ^7 I9 `
20181221103228475.png
1 ~6 o6 s5 e& V: O6 k* e
$ l/ [0 U' Z4 y+ I& m' L  A8 gVCC: C=circuit 表示电路的意思, 即接入电路的电压3 A- b1 q) y' t7 F$ I% b+ v
VDD: D=device 表示器件的意思, 即器件内部的工作电压;% S) M- |2 ~8 n! u, m5 g3 L
VSS: S=series 表示公共连接的意思,通常指电路公共接地端电压: A" ]1 v  P1 R; b. d) q
STM32 的 VDDA 和 VSSA 不能悬空,复位模块和 RC 振荡器需要 VDDA 和 VSSA。否则无法下载程序!3 O( U& o$ k2 ^$ e
1 n( x8 S' ]7 U6 i% y6 e2 n. n4 G8 s0 p
电源引脚连接

0 I- ~; ], w, F- H. ]( L- d; p" i( r+ CVDD 引脚外接去藕电容连到外部稳压源8 ~2 o7 R4 l% p& H9 m
一个最小值4.7uF、典型值 10uF 的钽电容或陶瓷电容
4 k) d4 j9 s/ T; Y) }每个 VDD 引脚再接一个100nF 的陶瓷电容4 X7 p/ ^1 |: L8 C& I
VBAT 引脚外接电池。若没有电池,推荐通过100nF的陶瓷电容连到VDD引脚/ q/ E& z  P; B2 ]% m( b
VDDA 引脚外接两个去藕电容
6 Y+ D/ [( u* v3 ?3 A/ Z一个 100nF 的陶瓷电容; _, `0 I  z" [5 D2 Y" N- c
一个 1uF 的钽电容或陶瓷电容
; h& u) y" `/ o# l0 U( WVREF+ 引脚连到 VDDA6 L& T! A0 j( l: E7 K
若有单独的参考稳压源连接一个100nF 和 1uF 的电容$ G3 z) Z0 \+ H9 Y& `  w' G
VCAP1 和 VCAP2 通常只各连接一个 2.2uF 的电容
% ~5 S- G7 O, n, q) Z: M特殊封装上,可外接 1.2V 电源来旁路内部主电压调节器
' ?+ r  ^( J& t& f1 m+ |, R* V, R2 v: Z- q1 t: ^
20181221103312359.png
5 T8 n8 q  D( w  a* D4 n3 p$ p
2 `8 e% @' X, |1 d3 M2 g3 A$ N+ s& |% u+ e
ADC的参考电压

' q% n* [* l- B" [8 F  c5 x  ADC 可以主要有连个电源: 供电电源 和 参考电源 。参考电源就是在转换数值时候的基准。在部分 MCU 的封装中,会有单独的一个 Vref 引脚,这个引脚就是提供参考电源的; j- t- v& _4 a3 l# M

. _0 Q+ `9 J0 N; [5 j0 P7 r3 A& n 20181221103331368.png 0 a1 Q: X( E: c% o) O1 _) D5 l' O6 i

' [' ^/ F. M) }# ~# F我们可以把外部基准电压芯片(例如REF3133,输出的电压是标准的3.300V)连接到 Vref 引脚。一般 100 脚的 STM32 MCU(如上图STM32F4)都有 VREF 引脚。对于 100 脚以下的芯片,STM32 没有把 VREF 引脚引出来,而是直接在内部连接到了 VDDA 引脚。这样就导致了 ADC 的供电电源和参考电源实际是一个。
( P' T1 \0 F8 t8 G5 k. m' b( ^7 m
2 B, |) t7 f' u' v& D  注意,STM32 单片机上面有好多电源引脚,其中有若干 VDD 引脚,只有一个 VDDA 引脚,VDDA 引脚就是模拟供电引脚。不过,需要注意,VDDA 的电压不是随便定义的。例如,STM32F051 系列单片机就规定,VDDA 必须要大于或者等于 VDD 才可以正常工作,所以这时候,最好是给单片机 3.0V 供电,再给 VDDA 采用一个 3.3V 的基准电压芯片供电。
% t4 n8 {+ r$ j* Z
" n: I  H; d! g: f, h6 p9 T7 \  V* e, @ 20181221103342186.png 6 H- n) {- o( c) r* a6 Z
! f0 k7 Z5 ?1 \/ P4 ^
为啥会要求 VDDA 必须要大于或者等于 VDD?这是因为在 MCU内部 VDDA 和 ADC 的参考电压有联系。
" o( N/ M4 l4 a. R. |! k
' \! ^$ j& Z* m  \; h: V内部参照电压$ {8 r! W1 `8 x  b8 ~2 N
  以上两种方法都需要外加基准电压芯片,在实际应用中,往往是 VDDA 引脚和 VDD 引脚连在一起,而没有 VREF 引脚的片子,内部 VREF 有是和 VDDA 接一起的,这就到了整片子都是由电源芯片供电。这个时候如果要提高 ADC 转换准确性该怎么办呢?
$ z8 t" F2 c7 {% z. S( U7 Y& |' s  _
  针对上面这种情况,在每个 MCU 的内部,都有一个叫内部参照电压的东西。更关于该部分的介绍,位于对应 MCU 的 数据手册 中(不同MCU的 数据手册 介绍有多又少,同样是 STM32F0 的 数据手册 介绍更为详细),如下图:
' s3 E/ m4 S/ f0 ?) Q( O
" M1 n+ `; |, u/ e 20210305103722301.png 1 R% u5 A. b1 m" e

4 A- f+ X" d( S2 S: {但是这个值有可能也是不准确的,那怎么办呢?ST 提供了一个方案:STM32 可以通过配置将 VREFINT 接入到 ADC 内部的通道,然后我们就可以测量 VREFINT 到底是多少。MCU 不同具体链接的 ADC 引脚也是不同的。下面是 STM32F4 芯片的参考手册的说明:
8 {6 ?! m% P3 N8 ~
& p9 p2 k& L' r6 ]: j5 y, e 20181221103804392.png & L: y" G& }8 h" U3 M
& M" z0 |2 ^7 C
在 MCU 出厂测试的时候,ST 为我们提供了一个校准值,校准过程是在外部供 3.3V 电源,将采样内部参考的 ADC 值写入到 MCU 固定的内存中去的. C' L& `4 i% X
8 J4 V  M6 w" D" j7 Z# f# \
20181221103504409.png 8 j1 k+ d% V" a* S
' A# B' x' z$ S9 h* d! F5 d. n, d
这样我们就可以用 ADC 实际采样,得到 VREFINT 的采样值,然后使用上面的校准值进行计算即可!7 q% K& y5 A; `/ x" d

7 U4 u1 Y% R; P/ Y0 P  关于使用内部参照电压的具体方法,只有部分芯片的参考手册中才能找到( 如下图是 STM32F0x ),其他 MCU 的参考手册都是很简单的几句说明。
0 }9 j6 ?; o( N% r5 N6 F$ s, G# F( `7 h
20181221104254285.png
% b, i9 s, H6 S; }4 M! P( i1 e
/ J8 J/ Q/ Y: U7 X) O  P更进一步,在计算其他通道的时候,我们就可以使用以上计算的 VDDA 来作为基准了!* f' J# Y3 k) \3 D# m! ]
( {/ _! R% T7 c  I) g% r/ z
20181221104907972.png
, O1 `+ [' W8 ?4 E6 K& O8 W6 B! _  n/ [3 `
需要特殊注意的是,在不同系列的芯片中,以上是有区别的,例如以下是 STM32L476 系列的
1 r9 L# }" A- Q) D
1 M' S# Z8 f! Q5 ]7 ~ 2020011812511465.png ( \) v% D8 X/ x% [9 j/ z% A
, i; P! z/ \  D. e1 h5 H8 A$ s
那么,VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA 这个公式是咋么来的的呢?下面我们以上 STM32L476 这个图为例来推导一下。
! N5 @' u/ E/ j: N1.ST 通过配置将 VREFINT 连接到 ADC 后,则有:VREFINT = 3.0V * (VREFINT_CAL / 4095); VREFINT_CAL 就是校准条件下的 ADC 采样值7 l3 F7 M* Z  h" r, v! q8 Z
2.我们自己通过配置将 VREFINT 连接到 ADC:VREFINT = VDDA * (VREFINT_DATA / 4095);
* b$ h. J' z  P3.因此,VDDA * (VREFINT_DATA / 4095) = 3.0 * (VREFINT_CAL / 4095);2 R1 {% i/ x0 X  i5 h* i! e$ K
4.VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA
/ x/ L8 L. J8 P9 R  `# T% K
( S! _2 _1 i/ h0 K3 MADC转换时间8 g8 F3 s$ F5 k. [  b
在使用上面的方法时,必须要特殊注意ADC转换时间。否则采样值将出现较大偏差!先看看每个通道的总转换时间公式:每个通道总的转换时间 = TSampling + Tconversion1 G, Q% K, f& O( y5 F1 O
' y0 _- a" l$ U+ c4 o/ i4 D
TSampling可配置:SMP@ADC_SMPRx,需要和外部电路的输入阻抗匹配(在对应的数据手册中会有详细说明)  {( d" Y( S! i, g- v6 N5 L
0 {# C1 C, r" C  T# ]
20181221161928944.png 8 d. T0 c  ?4 q5 K/ `/ @) d8 Z( J

+ K: H, i& u6 B7 \Tconversion取决于转换精度:RES@ADC_CR1,降低转换精度可提高转换速度
0 x5 T* b3 z" \5 Y# M/ j, |2 E
) ^: @- A; s6 S% z. d 20181221161937358.png : c9 o1 T0 n0 ^2 ^
  S4 J% r$ c# o9 U. D
ADC总转换时间为:Ttotal = (SMP + RES) * ADCCLK' O" F4 y( a/ ^) U* v) p
SMP:采样时间,需要和外部输入阻抗搭配0 ?3 f$ s9 H8 `- f9 e
RES:转换精度,降低精度可提高速度
! q9 @& T/ y# d7 m1 R4 hADCCLK:ADC模块工作时钟/ ~* ?, \* u4 I+ ~0 ~  Q
ADCCLK = APB2时钟分频(2,4,6,8)
0 v8 G' S. l3 T) l7 n$ kADCCLK最大值还受限于工作电压
; b7 i6 ~  x' E* u% ^* o  z9 }1 sVDDA=1.8~2.4V fADCmax = 15MHz
6 W2 X" @( P, B: y# HVDDA=2.4~3.6V fADCmax = 30MHz/ A" _$ O# p0 B, }

, j: }; A/ K; p9 }- s# ]
/ z4 I$ V" e: C2 d3 ^为什么要说ADC采样时间?因为上一节所讲的方法,对于采样时间是有限制的!!!8 }- C5 r6 f/ k) F! I9 q3 l
7 R1 a0 |/ H2 y; O
温度传感器
/ D8 Y. @1 U+ p; u
2 d1 M9 T9 s  r 20181221162434663.png
$ A& I# I; @- {1 w) S9 k- w9 N$ g+ S" P0 u: G
Vbat, E$ ]2 E* z6 d; D

& ]4 X  x, v+ R5 ^1 a 20181221162545863.png
/ P8 F; m" f, e: O, X
. A/ D  K: Z1 j6 m: ?VREFINT$ R1 b2 M3 [3 M+ u0 P/ i" D, I
+ {5 [. z" k9 H* f1 t1 E
20181221162456471.png & b# w* T3 N, J3 ~3 N

0 g( ^0 d, t# y- i关于采样时间需要和外部输入阻抗搭配,参看下图和对应的 数据手册
( S2 M. J/ S& E" U7 m0 J& J9 n! p0 B' }
20181221162720492.png 8 _/ w4 C+ C1 O  I( ?, Z. D7 z
1 Q, B8 e8 d. O0 Y
————————————————
+ H. E# _! V+ ^& G版权声明:IT 之道
( }4 k% f( L" f3 v# Z. g% B2 |7 ]$ P4 g: s( N9 `! X* l: {2 O
! K! C* S+ @  L9 `7 p
收藏 1 评论0 发布时间:2022-11-7 23:48

举报

0个回答

所属标签

相似技术帖

官网相关资源

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