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

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

[复制链接]
攻城狮Melo 发布时间:2022-11-7 23:48
问题% L1 q+ C. J( K+ m, Z6 y
  今天在使用 STM32F407 的 ADC 时遇到一个问题:ADC 的参考电压都是通过 Vref+ 引脚提供的并作为ADC转换器的基准电压(部分 MCU 没有 Vref+ 引脚)。当我们使用的 Vref+ 是直接取自用 VDD 电压时,当 VDD 电压波动比较大时或稳压性能比较差时,转换结果自然就不准确了!
1 n5 E6 V8 f: G: F- {* q
* R2 \2 X/ q  T供电方案9 y, ^# i$ L9 P7 h  N: X9 p
  MCU 的参考手册都会有一章节单独介绍 MCU 的电源管理,针对不同的 MCU(封装不同等)其外部电源如何连接也是有要求的,我们在 MCU 上一般都会发现如下引脚(注意不同 MCU 是有区别的):
3 U5 |  Q* M% D2 S( T2 d7 FVDD / 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.9 Q8 _1 }7 C0 S
VDDA / VSSA: VDDA 是A/D转换器,D/A 转换器,参考电压缓冲器,运算放大器和比较器的外部模拟电源。 VDDA 电压电平与 VDD 电压无关。 不使用这些外设时,最好将 VDDA 连接到 VDD。
% k* q6 Z1 k& B9 f% nVBAT: 当不存在 VDD 时,VBAT 是 RTC,外部时钟 32kHz 振荡器和备用寄存器(通过电源开关)的电源。 对于没有专用引脚的小型封装,VBAT内部连接到了 VDD! {2 T/ p3 h% p, r7 S
VREF+ / VREF-: VREF+ 是 ADC 和 DAC 的输入参考电压。 使能后,它也是内部参考电压缓冲器的输出。当不使用 ADC 和 DAC 时,VREF+ 可以接地。VRE- 必须始终等于 VSSA。
5 s. S! f- I: qVREF- 和 VREF+ 引脚并非在所有封装中都可用。 如果封装上未提供它们,则它们在 MCU 内部分别与 VSSA 和 VDDA 相连。3 ^6 T( B& V1 @# |. W- s
# F8 a6 e, E& W* c# ~. I
下面以 STM32F1 和 STM32F2 的 MCU 比较来具体看看。供电架构如下图所示:
! s: v5 ~* }+ s: D2 w& e2 _& q% Y" ]" s. h7 N
20181221103209333.png
/ b$ C  q8 V# a% H: V# H+ H$ U; f4 v& b/ Q* E) L
不同的供电所管理的供电域
+ U/ Y1 J& Q. X: t' c7 P4 U# I) q* }
20181221103219739.png # @7 I# A5 q$ d

! [0 H5 Y2 X9 e% q9 C供电电压范围
6 t7 [! j/ N3 X& h. J6 W& }! S" Y0 a: k8 z
20181221103228475.png
5 m4 W; _; f+ S5 Z. z+ d) Z
, m! N4 ~( o  x# f1 E9 r6 y- ZVCC: C=circuit 表示电路的意思, 即接入电路的电压( `) y9 |' P0 p' a4 s
VDD: D=device 表示器件的意思, 即器件内部的工作电压;1 n) u1 q$ D# d$ T" s% \
VSS: S=series 表示公共连接的意思,通常指电路公共接地端电压
$ ]5 q. p8 ]0 \; J7 X8 [+ YSTM32 的 VDDA 和 VSSA 不能悬空,复位模块和 RC 振荡器需要 VDDA 和 VSSA。否则无法下载程序!% n, |. Q' \8 e5 R
6 Q3 R* Z4 W+ y  F& ~7 q' n
电源引脚连接
, p" }: U' v9 ~8 j. k9 |) `
VDD 引脚外接去藕电容连到外部稳压源0 N. a% Y" u1 Q4 y
一个最小值4.7uF、典型值 10uF 的钽电容或陶瓷电容
, p9 n  Q, ]) G% d每个 VDD 引脚再接一个100nF 的陶瓷电容! u0 [  N9 Q1 o- ]) d
VBAT 引脚外接电池。若没有电池,推荐通过100nF的陶瓷电容连到VDD引脚
2 j; U7 y& Z  |* c( W+ QVDDA 引脚外接两个去藕电容4 F+ N# t6 j$ B6 B  r
一个 100nF 的陶瓷电容/ C) S( b7 C8 E+ M/ ?/ t  i
一个 1uF 的钽电容或陶瓷电容1 j1 c' X1 [* `3 k- Z+ p
VREF+ 引脚连到 VDDA
5 N2 c& u5 [7 e* n若有单独的参考稳压源连接一个100nF 和 1uF 的电容
: \0 C4 Q  d) \/ t4 Z0 c# j. tVCAP1 和 VCAP2 通常只各连接一个 2.2uF 的电容  m. W# c9 w  r, b" L7 _0 w
特殊封装上,可外接 1.2V 电源来旁路内部主电压调节器
( F) x; U1 Z! M: C: r/ g5 n3 V  o2 @9 S7 g) s& i9 \
20181221103312359.png
( }5 \; h$ h( C2 r! C' b. p% a6 A
0 S4 j* |! [: T, B) M1 i5 o. G; f9 P4 N4 R4 x
ADC的参考电压

3 n1 ?, j/ S& {* c8 q  ADC 可以主要有连个电源: 供电电源 和 参考电源 。参考电源就是在转换数值时候的基准。在部分 MCU 的封装中,会有单独的一个 Vref 引脚,这个引脚就是提供参考电源的
. p6 o. d6 \* U7 Z# Q8 i6 L2 h) }1 b5 C: A  i# n
20181221103331368.png / X( [# J5 U8 r- D  A# s
& U3 N! \: b4 d; S4 h4 U+ y4 B
我们可以把外部基准电压芯片(例如REF3133,输出的电压是标准的3.300V)连接到 Vref 引脚。一般 100 脚的 STM32 MCU(如上图STM32F4)都有 VREF 引脚。对于 100 脚以下的芯片,STM32 没有把 VREF 引脚引出来,而是直接在内部连接到了 VDDA 引脚。这样就导致了 ADC 的供电电源和参考电源实际是一个。
( j0 J% R. L. Q+ o
5 Y1 w3 {. u2 I4 c- C% {6 S& M9 m  注意,STM32 单片机上面有好多电源引脚,其中有若干 VDD 引脚,只有一个 VDDA 引脚,VDDA 引脚就是模拟供电引脚。不过,需要注意,VDDA 的电压不是随便定义的。例如,STM32F051 系列单片机就规定,VDDA 必须要大于或者等于 VDD 才可以正常工作,所以这时候,最好是给单片机 3.0V 供电,再给 VDDA 采用一个 3.3V 的基准电压芯片供电。
8 S/ Z5 ]0 E) [7 X4 G
+ |/ j1 o( v# Z" F* f 20181221103342186.png
0 I3 s$ }, F# w+ s6 q  l% o
2 a! |& C  u3 O" o2 H- R为啥会要求 VDDA 必须要大于或者等于 VDD?这是因为在 MCU内部 VDDA 和 ADC 的参考电压有联系。6 x1 l- s& z* H/ R  b0 G, [

% ]3 W+ Y1 m  a3 l8 h2 J内部参照电压
% P9 L0 g0 b* r- N0 U  以上两种方法都需要外加基准电压芯片,在实际应用中,往往是 VDDA 引脚和 VDD 引脚连在一起,而没有 VREF 引脚的片子,内部 VREF 有是和 VDDA 接一起的,这就到了整片子都是由电源芯片供电。这个时候如果要提高 ADC 转换准确性该怎么办呢?
8 r' Z3 Q0 H7 j( x! Q2 F3 Q$ C
3 x( x' `& G; T7 T6 R- H- h8 k  针对上面这种情况,在每个 MCU 的内部,都有一个叫内部参照电压的东西。更关于该部分的介绍,位于对应 MCU 的 数据手册 中(不同MCU的 数据手册 介绍有多又少,同样是 STM32F0 的 数据手册 介绍更为详细),如下图:
9 Z9 f* R6 R4 y, O; v! V5 S
3 i* [! s, @  k; ^- c 20210305103722301.png
9 R0 E- W. y5 b, ?
6 N$ n+ I0 w* S1 T4 o但是这个值有可能也是不准确的,那怎么办呢?ST 提供了一个方案:STM32 可以通过配置将 VREFINT 接入到 ADC 内部的通道,然后我们就可以测量 VREFINT 到底是多少。MCU 不同具体链接的 ADC 引脚也是不同的。下面是 STM32F4 芯片的参考手册的说明:
' A/ V3 Z/ t7 |7 f( |0 g2 j% ]6 W4 t* g" O5 ]
20181221103804392.png
3 D  s' @, N8 X+ u9 y: R/ u
* x$ Y+ }  l( y# V3 d/ }7 c在 MCU 出厂测试的时候,ST 为我们提供了一个校准值,校准过程是在外部供 3.3V 电源,将采样内部参考的 ADC 值写入到 MCU 固定的内存中去的. X/ ]5 s1 V% v* }
3 a$ Y/ ~, d. E
20181221103504409.png
2 b' L& O  d& l9 L: y1 c1 a8 M0 a* g- f4 i" T
这样我们就可以用 ADC 实际采样,得到 VREFINT 的采样值,然后使用上面的校准值进行计算即可!  T4 d2 l" E* w7 L2 Y7 r
4 w6 i+ [2 P; u  z( t: a* p
  关于使用内部参照电压的具体方法,只有部分芯片的参考手册中才能找到( 如下图是 STM32F0x ),其他 MCU 的参考手册都是很简单的几句说明。# t  [/ s' _) B$ [& i5 e* h
0 H# k- n* B$ P3 u0 k
20181221104254285.png   o; C  q& D4 k, Y# d% \. G
" _& C+ X& W) \9 t. Q9 Q2 l
更进一步,在计算其他通道的时候,我们就可以使用以上计算的 VDDA 来作为基准了!( I* D9 {( J8 B' b" Y5 u
5 n. }3 \% D* p$ v
20181221104907972.png ( l5 Y% [/ f1 n, L) P  w

$ L& j  L+ s2 S; L需要特殊注意的是,在不同系列的芯片中,以上是有区别的,例如以下是 STM32L476 系列的" ]! t/ n4 ]2 u3 H; t7 k

* E8 y( C' y% D( g( V/ Z 2020011812511465.png 0 s2 r& Z+ r9 i% g3 w* d' R

# m+ t* M  o  w; s4 T那么,VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA 这个公式是咋么来的的呢?下面我们以上 STM32L476 这个图为例来推导一下。0 j  Q5 t% t1 T
1.ST 通过配置将 VREFINT 连接到 ADC 后,则有:VREFINT = 3.0V * (VREFINT_CAL / 4095); VREFINT_CAL 就是校准条件下的 ADC 采样值
; _; r- ^- m1 A0 O/ P5 u; y4 K  o! i2.我们自己通过配置将 VREFINT 连接到 ADC:VREFINT = VDDA * (VREFINT_DATA / 4095);) F, h% I9 z: f
3.因此,VDDA * (VREFINT_DATA / 4095) = 3.0 * (VREFINT_CAL / 4095);
6 L1 Y& i, ~7 p- A: E! H4.VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA! N6 w2 B8 X' e% S3 x

# f; }0 C: N; @" w4 C; bADC转换时间
& W3 \1 `7 g- w$ G6 q在使用上面的方法时,必须要特殊注意ADC转换时间。否则采样值将出现较大偏差!先看看每个通道的总转换时间公式:每个通道总的转换时间 = TSampling + Tconversion; p1 N7 G& o. h; P4 d
/ k! g( f$ r8 z/ |
TSampling可配置:SMP@ADC_SMPRx,需要和外部电路的输入阻抗匹配(在对应的数据手册中会有详细说明)4 O: {+ x$ @8 x: U. y6 f. b  L' }- G

. l6 Y/ M7 R9 F. m) z 20181221161928944.png % B3 g# x# _% J& U; r
6 O$ ~& u% l3 |" V8 f6 a- x! h
Tconversion取决于转换精度:RES@ADC_CR1,降低转换精度可提高转换速度
$ Q. ?0 Y1 @/ \& z# h: h
! U5 x7 g! J& K; b0 [) M2 p. H3 _ 20181221161937358.png " _" e: d' s% K! ?. y

# u* U. h3 }1 m3 A- uADC总转换时间为:Ttotal = (SMP + RES) * ADCCLK
# I$ k6 z" y4 I, n& A% oSMP:采样时间,需要和外部输入阻抗搭配
0 ~2 Y* i- f6 M2 _. v2 x3 XRES:转换精度,降低精度可提高速度5 j6 ]! t+ _/ W
ADCCLK:ADC模块工作时钟" ^  o6 n( |) M( H
ADCCLK = APB2时钟分频(2,4,6,8)
! Y  e' M. P4 q0 d7 o4 C+ u7 b/ XADCCLK最大值还受限于工作电压
; z- j" ~: L3 z) x* [, SVDDA=1.8~2.4V fADCmax = 15MHz
: j! B0 w! q- |0 _5 ~3 PVDDA=2.4~3.6V fADCmax = 30MHz% `/ l3 f7 ^: i2 a
( E* Z: J' |! F/ X& K/ b

, u- F6 M# q4 ?5 q# Q8 s% E为什么要说ADC采样时间?因为上一节所讲的方法,对于采样时间是有限制的!!!8 c( y1 E7 a! l) w. b0 S

* z3 D. W" u" v温度传感器
8 e+ k+ c3 P$ q  e! X3 Y# w1 ]1 ?# Z
20181221162434663.png
& u6 [9 v# k  m; R
% I; v  [! x" EVbat) O) D; B; U) g, N7 X" D/ L  G

5 S/ I' z% y' \ 20181221162545863.png * k. X2 Y3 J0 t3 {! A+ R7 j0 ~1 ~
+ e& Z9 R9 E. k4 Z
VREFINT: N) q: {9 Y1 D
, O. t0 R8 b9 ^4 _' H8 I
20181221162456471.png 5 i5 a, ~: o' ~3 }/ V! r8 j6 K
% `+ D9 N3 j, D& ?% T- ?: _
关于采样时间需要和外部输入阻抗搭配,参看下图和对应的 数据手册
! h/ t  k) X/ [. N* |  w: ~: W' _1 P$ z9 G( K( G# M
20181221162720492.png 8 k1 [  C4 Z% S9 E  Y1 @
2 D' t9 I: w4 m# z% t! v* D* I
————————————————
. I2 M8 ~! V/ ?% h! o( q" Z版权声明:IT 之道; N$ o7 x& P  G3 O6 U: |* u( K
9 {3 D7 v9 ~- b% J3 c+ Z7 B
" G, u6 [7 r" ~( {+ R: b6 j
收藏 1 评论0 发布时间:2022-11-7 23:48

举报

0个回答

所属标签

相似分享

官网相关资源

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