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

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

[复制链接]
攻城狮Melo 发布时间:2022-11-7 23:48
问题
: N2 q5 h9 M5 e: U3 }, G' I# B! A' {% S  今天在使用 STM32F407 的 ADC 时遇到一个问题:ADC 的参考电压都是通过 Vref+ 引脚提供的并作为ADC转换器的基准电压(部分 MCU 没有 Vref+ 引脚)。当我们使用的 Vref+ 是直接取自用 VDD 电压时,当 VDD 电压波动比较大时或稳压性能比较差时,转换结果自然就不准确了!
1 H/ C* V6 C/ J! {: f0 [- h5 L" t! N( o; C9 v) G! J1 K
供电方案
" j: n, L0 ?9 q6 Q& V; e4 ?6 \5 J  MCU 的参考手册都会有一章节单独介绍 MCU 的电源管理,针对不同的 MCU(封装不同等)其外部电源如何连接也是有要求的,我们在 MCU 上一般都会发现如下引脚(注意不同 MCU 是有区别的):
1 O# r8 |5 @& CVDD / 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.
4 @) C- F! K4 P1 m  P9 z2 s8 XVDDA / VSSA: VDDA 是A/D转换器,D/A 转换器,参考电压缓冲器,运算放大器和比较器的外部模拟电源。 VDDA 电压电平与 VDD 电压无关。 不使用这些外设时,最好将 VDDA 连接到 VDD。7 H6 S/ z2 u4 z( t8 ~6 d" g) Y
VBAT: 当不存在 VDD 时,VBAT 是 RTC,外部时钟 32kHz 振荡器和备用寄存器(通过电源开关)的电源。 对于没有专用引脚的小型封装,VBAT内部连接到了 VDD/ Q. v8 [2 S/ Y& ~5 G/ H8 t! L, [
VREF+ / VREF-: VREF+ 是 ADC 和 DAC 的输入参考电压。 使能后,它也是内部参考电压缓冲器的输出。当不使用 ADC 和 DAC 时,VREF+ 可以接地。VRE- 必须始终等于 VSSA。
/ ~  x  Q$ e6 Y! \6 B7 XVREF- 和 VREF+ 引脚并非在所有封装中都可用。 如果封装上未提供它们,则它们在 MCU 内部分别与 VSSA 和 VDDA 相连。
8 k( f- D$ J, k0 l" W; X% u
8 o9 z% v, q3 v下面以 STM32F1 和 STM32F2 的 MCU 比较来具体看看。供电架构如下图所示:- E) z3 s+ o, p

8 r5 J0 W9 O9 | 20181221103209333.png , O& C$ C" a% n

: X9 g- x3 L" ~4 }$ d" X% `" a不同的供电所管理的供电域
5 T0 G1 C9 E3 Q8 K0 k
4 E5 e( `. r/ a# ]. S0 Z 20181221103219739.png
( K: h, W. }6 |  X; v4 t4 ~# v3 `( B3 l, W" |& Y
供电电压范围
% ^9 ~0 N& C, q) n( E, u, K  G9 m+ g2 V
20181221103228475.png 6 p8 P  G3 D/ z# F2 |6 l6 m

* ~: J+ a, p% DVCC: C=circuit 表示电路的意思, 即接入电路的电压
" S( V* I+ y# P/ T' MVDD: D=device 表示器件的意思, 即器件内部的工作电压;
, H" ]) [, }2 v% OVSS: S=series 表示公共连接的意思,通常指电路公共接地端电压1 P  T2 Y* P( x8 ?( i
STM32 的 VDDA 和 VSSA 不能悬空,复位模块和 RC 振荡器需要 VDDA 和 VSSA。否则无法下载程序!
# p* r7 t6 q0 O! \
  E2 [+ T0 v/ F4 K! S电源引脚连接
9 R$ |  p5 N4 H& S, z6 I% ^
VDD 引脚外接去藕电容连到外部稳压源1 N  I" f: o: t; V$ t
一个最小值4.7uF、典型值 10uF 的钽电容或陶瓷电容
. d: U! }8 l7 w: \, F$ I2 a每个 VDD 引脚再接一个100nF 的陶瓷电容
% t0 y- L+ g$ r$ O5 q) ]VBAT 引脚外接电池。若没有电池,推荐通过100nF的陶瓷电容连到VDD引脚
* @2 W* R. T/ a4 mVDDA 引脚外接两个去藕电容
) `7 v! \7 k2 a1 v( s3 M1 G' N. C一个 100nF 的陶瓷电容% n# c. p; r; I3 H, B
一个 1uF 的钽电容或陶瓷电容7 C7 ~' O1 G+ v) K1 ^9 Z8 G0 q
VREF+ 引脚连到 VDDA
; N/ S/ @- l. S. S4 K若有单独的参考稳压源连接一个100nF 和 1uF 的电容
1 v% {' |9 e- W" M% \5 H8 oVCAP1 和 VCAP2 通常只各连接一个 2.2uF 的电容
$ D1 Z: d* g: l2 i4 Q  }3 L6 i5 K特殊封装上,可外接 1.2V 电源来旁路内部主电压调节器
/ a* w( z+ P3 P& }
6 ~+ |1 \4 o1 m: A, J7 x 20181221103312359.png . l9 C; ^% F8 x) G! \; ]
; f3 c. }2 A5 y6 I
* d! q7 D+ F  ~% j% G/ W
ADC的参考电压

. P9 t1 e3 `0 B7 g  ADC 可以主要有连个电源: 供电电源 和 参考电源 。参考电源就是在转换数值时候的基准。在部分 MCU 的封装中,会有单独的一个 Vref 引脚,这个引脚就是提供参考电源的
. R! ^% `9 }' J+ p6 T
* e9 x8 b! X) b) Q; D( D 20181221103331368.png * k& g/ d/ n3 o" r

2 F, j( c: e% {我们可以把外部基准电压芯片(例如REF3133,输出的电压是标准的3.300V)连接到 Vref 引脚。一般 100 脚的 STM32 MCU(如上图STM32F4)都有 VREF 引脚。对于 100 脚以下的芯片,STM32 没有把 VREF 引脚引出来,而是直接在内部连接到了 VDDA 引脚。这样就导致了 ADC 的供电电源和参考电源实际是一个。$ y8 y* c, V8 e

  Z5 P! Z7 C! R1 ~  注意,STM32 单片机上面有好多电源引脚,其中有若干 VDD 引脚,只有一个 VDDA 引脚,VDDA 引脚就是模拟供电引脚。不过,需要注意,VDDA 的电压不是随便定义的。例如,STM32F051 系列单片机就规定,VDDA 必须要大于或者等于 VDD 才可以正常工作,所以这时候,最好是给单片机 3.0V 供电,再给 VDDA 采用一个 3.3V 的基准电压芯片供电。
5 @4 S( ^+ H* u8 p, K, d0 p) @1 _0 y3 N' v! c/ G1 _
20181221103342186.png
" g3 L' I9 `8 U/ H( G" b+ y  [5 W* H" b& B4 h5 u8 @4 R
为啥会要求 VDDA 必须要大于或者等于 VDD?这是因为在 MCU内部 VDDA 和 ADC 的参考电压有联系。( P3 o% Y* N& g. O5 e/ Y
7 Q4 }$ p" h- S) m- u
内部参照电压
9 \8 O1 n$ n7 r7 ~2 P  以上两种方法都需要外加基准电压芯片,在实际应用中,往往是 VDDA 引脚和 VDD 引脚连在一起,而没有 VREF 引脚的片子,内部 VREF 有是和 VDDA 接一起的,这就到了整片子都是由电源芯片供电。这个时候如果要提高 ADC 转换准确性该怎么办呢?
; j/ l- [8 {& B0 M3 R4 q1 K9 S9 d8 s% l: S
  针对上面这种情况,在每个 MCU 的内部,都有一个叫内部参照电压的东西。更关于该部分的介绍,位于对应 MCU 的 数据手册 中(不同MCU的 数据手册 介绍有多又少,同样是 STM32F0 的 数据手册 介绍更为详细),如下图:
. }; h: J4 U/ l: J- g9 Z" S1 F
# _0 |# |& X1 Q% e# D; W9 K" c 20210305103722301.png
6 V5 l5 Q8 X( T& w- u  o, p; X- ~
  ?6 S% h+ R& s: c# z5 B: {但是这个值有可能也是不准确的,那怎么办呢?ST 提供了一个方案:STM32 可以通过配置将 VREFINT 接入到 ADC 内部的通道,然后我们就可以测量 VREFINT 到底是多少。MCU 不同具体链接的 ADC 引脚也是不同的。下面是 STM32F4 芯片的参考手册的说明:2 ?# E5 r$ j  @$ L

1 T  o# a* X' _) g( `- J- A 20181221103804392.png
) ]/ a" `& B+ I7 T/ L& j! {7 e
' f( N& l' |& A( U, u" V2 F在 MCU 出厂测试的时候,ST 为我们提供了一个校准值,校准过程是在外部供 3.3V 电源,将采样内部参考的 ADC 值写入到 MCU 固定的内存中去的
# U* p  b) J) Y+ J- y
* I1 g+ Z6 ?6 n 20181221103504409.png ; t6 {1 m/ Y. K0 v: K5 @9 A- R

& Q9 L  W  g& ^0 ~2 ]4 Q  P' P这样我们就可以用 ADC 实际采样,得到 VREFINT 的采样值,然后使用上面的校准值进行计算即可!- I/ v/ K, i) o, c' z2 q

! [+ W, a; d* H: X  关于使用内部参照电压的具体方法,只有部分芯片的参考手册中才能找到( 如下图是 STM32F0x ),其他 MCU 的参考手册都是很简单的几句说明。
) K3 E+ G) t3 D9 O& H' j( d0 j1 G/ m" q( M
20181221104254285.png
" x) \# f2 X4 i, V' P! @" i5 ]/ n4 C2 G/ A6 B
更进一步,在计算其他通道的时候,我们就可以使用以上计算的 VDDA 来作为基准了!. `  [: C7 r# m: U  S# T$ L
* Q% r8 Q) `) }5 `# o
20181221104907972.png
3 r$ k& u! r3 v2 n7 S9 b) L+ H3 Q, d9 p! j( c
需要特殊注意的是,在不同系列的芯片中,以上是有区别的,例如以下是 STM32L476 系列的
# j( M' L5 v) H( w( z$ {$ d( u/ L- j3 [
2020011812511465.png $ B  O$ D- m( @' a

1 `2 N: H0 T) H$ D2 l6 f那么,VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA 这个公式是咋么来的的呢?下面我们以上 STM32L476 这个图为例来推导一下。1 l- ~  j9 M8 P9 }
1.ST 通过配置将 VREFINT 连接到 ADC 后,则有:VREFINT = 3.0V * (VREFINT_CAL / 4095); VREFINT_CAL 就是校准条件下的 ADC 采样值& }" U$ Z$ o7 _: L
2.我们自己通过配置将 VREFINT 连接到 ADC:VREFINT = VDDA * (VREFINT_DATA / 4095);8 k# q; r. r  h' W5 G
3.因此,VDDA * (VREFINT_DATA / 4095) = 3.0 * (VREFINT_CAL / 4095);
# P% L: C8 e; Q9 g4.VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA
# v# z7 [7 r& }+ C+ m( [
* ^/ z  h. r- X0 B% t  P, IADC转换时间
) L' D& U5 J4 n; ?, |5 L在使用上面的方法时,必须要特殊注意ADC转换时间。否则采样值将出现较大偏差!先看看每个通道的总转换时间公式:每个通道总的转换时间 = TSampling + Tconversion4 t$ T1 b: U2 i" U# r4 e$ l: g
2 E% r- E4 Y4 p9 k7 O
TSampling可配置:SMP@ADC_SMPRx,需要和外部电路的输入阻抗匹配(在对应的数据手册中会有详细说明)
* n: i. V, @" m6 E/ [4 ?  ~8 J2 i
20181221161928944.png , F9 I' A7 F1 l/ L  S& C: n) H9 J6 v8 c

; G. T- u$ T+ J" hTconversion取决于转换精度:RES@ADC_CR1,降低转换精度可提高转换速度' B# t+ K* l$ v! }/ V) w% f
/ R" }3 T: f2 c
20181221161937358.png
& ], V5 Z+ F# e# ~3 F: d5 c7 _% F# B+ v* T" _% D* g
ADC总转换时间为:Ttotal = (SMP + RES) * ADCCLK/ \  i! |: L% I* r
SMP:采样时间,需要和外部输入阻抗搭配: x; p3 j1 K( N5 w: l) r! ]' U
RES:转换精度,降低精度可提高速度
5 s) s4 X* Y" C- x: v( zADCCLK:ADC模块工作时钟, r! @' x! ]9 B" v5 K
ADCCLK = APB2时钟分频(2,4,6,8)
  ^/ I% _4 H1 v+ AADCCLK最大值还受限于工作电压4 c1 ?/ N5 @8 N: m- ~. ~; X& f
VDDA=1.8~2.4V fADCmax = 15MHz$ E8 l0 z4 Q  r* m+ `$ s' l1 s
VDDA=2.4~3.6V fADCmax = 30MHz# I2 `8 Y4 O/ r! s0 L/ \& w+ U/ d: F# }8 l
* u5 Q, t; Y( s
8 d' ?8 z$ j9 M3 _6 M- k' J
为什么要说ADC采样时间?因为上一节所讲的方法,对于采样时间是有限制的!!!  l$ K. v; D: Z& d# d% Q# G
1 k7 a5 L- [  ?5 f+ T5 b; E  o
温度传感器
) H: u; [+ l# P8 y* J
3 @& y3 j- }/ Y, N/ i3 P( e 20181221162434663.png
$ V9 `3 H, X$ D$ F0 X2 D
4 x& U6 ^7 s/ }1 ~/ S, eVbat
1 A" e0 M! n4 M% ]
7 Y( K, V7 t2 W& T% n 20181221162545863.png
: _- D. v: E# n' b. k& _5 z" g; b$ J. r1 j
VREFINT2 P' R: l1 m9 B4 D' V+ |

  C4 l1 a! Q; n1 a9 I) T5 f; m 20181221162456471.png
$ K2 v; N2 Q1 J* B$ G& g  C; k4 o8 w
关于采样时间需要和外部输入阻抗搭配,参看下图和对应的 数据手册
8 z2 P2 {. [; Z: z; h, U
+ m+ k; r; M, I5 f 20181221162720492.png
/ p) a6 j) Y' {5 J/ p
1 {+ v3 a% y7 I9 K$ i; V8 d' ]. o————————————————8 ?# u- B$ z/ U$ F$ @
版权声明:IT 之道
9 M4 y0 I% p% \/ E; n/ k2 V4 e! |% P( d! F: r( a

: a) {1 ^# C& R6 z
赞 收藏 1 评论0 发布时间:2022-11-7 23:48

举报

0个回答

所属标签

相似技术帖

官网相关资源

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