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

嵌入式必知——ADC的点点滴滴

[复制链接]
gaosmile 发布时间:2020-5-27 18:06
[导读]  生活环境周围信号万万千,对于一个嵌入式er。我们利用技术去了解世界、改变世界。而一个产品要与外界物理环境打交道,一个至关重要的触角就是采样真实模拟世界的信号,翻译成芯片可理解的数字信号,进而实现很多为人服务的应用产品。那么提到采样,ADC技术你绕不开,今天总结分享一下ADC的点点滴滴。
8 {5 w- a2 p1 A6 ^- s8 @& f% p; a% r) A* s
啥是ADC/ h! C7 @" D$ L$ h" G8 P

# T9 c& m' o0 Q* }; W$ ~3 [- o
) V2 X) d. j2 ?9 b, O% O
在现代电子工业技术中,模数转换器(ADC, A/D,或A-to-D)是一种将模拟信号转换成数字信号的系统。ADC还可以提供隔离的测量,例如将输入模拟电压或电流转换为表示电压或电流大小的数字的电子设备。通常情况下,数字输出是一个与输入成比例的二进制补码,但也有其他的可能性。举些栗子:
4 G2 m. P# \  g1 A7 M
  • KTV中麦克风将你唱歌的声音转成数字音频信号,经由信号处理,功放再播放出来
  • 数码相机将物体表面反射的光线转换为数字信号,从而成像
  • 疫情期间必用物资额温枪,将人体红外辐射经由光电转换成电压,最终转换为数字信号进行温度显示
  • .......举不胜举。
    ( B/ H' Y; p% R8 y
: e- Z" q6 m' i# @6 g
$ Q! U# J- L, q* i0 z
ADC将连续时间和连续幅度的模拟信号转换为离散时间和离散幅度的数字信号。转换涉及输入的量化,因此必然会引入少量的误差或噪声。此外,ADC不会连续执行转换,而是定期进行转换,对输入进行采样,从而限制了输入信号的允许带宽。- t( G& v# L+ G; A, ]: Q" e$ ~
ADC的性能主要由其带宽和信噪比(SNR)来表征。
  • ADC带宽 (Band width):ADC的带宽主要由其采样率来表征。
  • ADC的SNR:SNR(signal noise ratio)是指信噪比,受许多因素影响,包括分辨率,线性度和准确性(量化级别与真实模拟信号的匹配程度),混叠和抖动。ADC的SNR通常以其有效位数( effective number of bits:ENOB),它返回的每个度量的位数平均来表示,而不是噪声。理想的ADC的ENOB等于其分辨率。
    4 z" K' F6 ]0 W- \! t9 i! G

3 \# R9 A" X+ @
% a% }' j3 p' H* J+ F& l
故,选择ADC以匹配待数字化信号的带宽和所需的SNR。如果ADC的采样率大于信号带宽的两倍,那么根据Nyquist–Shannon采样定理,就可以实现完美的重构。量化误差的存在甚至限制了理想ADC的SNR。但是,如果ADC的SNR超过输入信号的SNR,则其影响可能会被忽略,从而导致模拟输入信号的本质上是完美的数字表示。
5 t' X( t0 p4 @+ \
整这么多文字还是不直观易懂,到底啥是ADC,来个会动的图吧:3 K) p, z! [$ w6 b9 _
微信图片_20200527175843.gif $ G7 g7 P( J: X  E- p
+ s$ E0 |; e4 }+ |

" M% n4 Q- ]; Z7 M# Z9 p须理解的指标分辨率$ p) Z. _& V7 d+ S, A" a

  g4 ?9 o7 @. O! j( k

# I$ v4 n$ E1 `  k( LADC看成一个黑匣子,基本的有一个模拟输入及其等效数字输出。下图 所示示例为一个N位ADC。N通常是6到24之间的任何值,常见的是8、10、12或16位。参考电压可能为单端电压,也可能为一个~,是一个正负电压参考源。
: Q; E7 A$ q4 K. m7 N6 V 微信图片_20200527175856.png
+ {4 S1 f, h1 x2 `: |" t
6 j3 L  H9 i1 Z( F; [

3 G0 P& t" ]5 x输入是一个模拟电压,范围从0到参考电压,参考电压取决于实际ADC及外围电路。假设使用N位,则可能有个可能的数字输出值,则1位表示的值为。在很多书上也称这个指标为LSB(Least Significant Bit)。
& O. f" O1 O! |$ L3 U8 x
. S/ f) z& I) X* E2 F. _+ ]
这便是分辨率的概念。模数转换器的分辨率表示在模拟值范围内它可以产生的离散值的数量。该分辨率决定了量化误差的大小,因此决定了不使用过采样的理想ADC的最大平均信噪比。
3 A0 u  `  `1 y9 f6 c  o8 W) m; ~8 ?, ^
7 n& Y2 o+ p* M, O, q
举个栗子,如果给定ADC的最大输入值为5.0V,而ADC为10位类型,则每一位表示 1590574184(1).png 。这个ADC的分辨率,或者说量化步长,是4.89 mV。这是它的绝对理论分辨率。在这种特殊情况下,信号的分辨率不能高于 1590574537(1).png 。这个极限称为量化误差,所有的ADC,即使是完美的ADC,都有一定程度的量化误差,具体取决于ADC的分辨率。分辨率的数学定义为:
  ?% \, F! |( l8 V/ _5 l* T3 [ 1590574586(1).png
: _# ?+ f0 q% T+ X4 g' }
/ h/ Q% c, U1 [6 }! ?! A
其中 1590574660(1).png 为ADC的参考电压,M为ADC的量化位数。可见M越大,Q数值越小,分辨率越高。! T' U" ~( D; I7 i/ [. A3 l
0 K. e/ I. m0 o

& k/ E6 b9 X& I. F4 T7 P
量化误差
+ r! [, d# N! u6 c
) G; Q2 t5 k8 k) r' ]
9 V# Z1 G+ a/ W/ [/ y
量化误差是由理想ADC中的量化过程产生的。由于ADC的模拟输入电压与输出数字化值之间的存在舍入误差。 在理想的ADC中,量化误差均匀地分布在之间,并且信号具有覆盖所有量化水平的均匀分布,因此信号量化噪声比SQNR(Signal-to-quantization-noise ratio)定义为:9 B3 t. j4 E# J1 S% t
1590574744.png ( v& T0 ?8 W& x
, c$ t$ `. F& c. C% W$ s' w# R3 n
其中,M为ADC的位数,M位数越大或越高,SQNR也越大。6 x% u; q$ S* P: o% g1 A

$ i4 Z. Q% _0 C3 K. ^9 w2 a
( |) s: Z2 K: V3 v* _8 S
精度$ |1 n/ l' J0 q& M- O, a2 D

+ W) a9 ^* h$ R
2 E+ n) s$ Q' x
量化误差和非线性是模数转换器所固有的误差指标。用最低有效位(LSB)的单位进行度量。比如一个10位ADC, 1590574800(1).png
) c# _2 g7 b" s( `& W: \) u& _& A) v$ |3 w( M* ^# F

' W! _# `1 K  _$ I0 H4 @6 G7 g非线性度
1 L  v- T8 {, ?* I' m4 t$ i% ?( U& _  `0 k; ^. S

# d  k1 M4 b7 M. d8 z5 q实际使用的ADC除了上面说的量化误差外,还具有更多的误差源:3 G# R4 L, z- D5 b+ e
  • 差分非线性误差DNL(Differential Non-Linearity):当ADC输出在应该改变的时候没有改变,就会出现DNL误差。例如,假设给定输入的当前输出代码是01101100,并且输入值增加了半步量化。代码应该是01101100 + 1位,或者01101101。当输入电压低于当前输入电压时,也会发生相反的情况。此时由于种种原因,这种情况可能不会发生。在本例中,ADC的误差为±1位DNL。
  • 积分非线性误差INL(Integral Non-Linearity):如果量化水平在整个输入范围内分布不均匀,就会出现INL误差。例如,某ADC具有12位(4096个计数)分辨率和4.096V的参考电压。每个比特数正好表示输入电压变化的1.000mV,因此,输入电压为4096 mV,输出电压为1111 1111 1111,即0xFFF。对于某些adc,输入4095mV,甚至4094mV,仍然会得到0xFFF的数字输出。实际情况是,在整个输入范围内,1位的值发生了非常微小的变化,比如1.001mV或0.999mV。积累的误差会导致一个或两个比特精度的全量程误差。
    / y* I  a+ K1 C5 _3 V
在为特定应用指定ADC时必须考虑这些因素。
  ~4 W* Y1 l. `  f  W3 ]( r 微信图片_20200527175859.png
( c- y: T7 Z2 |9 q0 {  y% Z* X* {3 M' Y5 r/ X5 n
所有ADC都存在由其物理缺陷引起的非线性误差,导致其输出偏离其输入的线性函数(或其他函数,在故意使用非线性ADC的情况下)。这些误差有时可以通过校准来减轻,或通过测试来避免。所谓校准,比如可以通过量点线性校准,假定y为ADC数值,x为输入模拟电压:; E1 w4 m" \$ p" @6 G
1590574916(1).png
; `) M& k) L5 A& }8 L

3 y. z9 \% _" k, {- a9 B+ k
应用实施策略:将上述k/b,利用两个点进行校准,将校准数据k/b存储在非易失存储器中。补充说一下:工程实践中需要校准的原因还因为选取的外围电阻、电容器件都有误差,所以这也是另一个需要标定的重要原因。  s' C2 m5 Y. _; j/ G+ y; e+ x

0 b, o6 x4 v1 t* Y: o; {) t
6 R5 b. b  B- e4 I. t9 J, N  B( u
采样率- y- z  P# q- U: _4 K& P

2 f" H3 ^0 B( o

+ O! e& G& i3 i0 T9 d7 P模拟信号在时间上是连续的,因此有必要将其转换为数字序列,这是数字信号处理的基础。因此,需要定义从模拟信号中采样数字序列的速率。该速率称为转换器的采样率或采样频率。可以采样连续变化的带限信号,然后可以通过重构滤波器从离散时间值中再现原始信号。奈奎斯特-香农采样定理表明,只有当采样率高于信号最高频率的两倍时,才可以忠实再现原始信号。个人在使用时,一般会选4倍以上。由于实际的ADC不能进行瞬时转换,因此在转换器执行转换期间(称为转换时间)输入值必须保持恒定。一个被称为采样保持电路——在大多数情况下,它使用一个电容来存储输入端的模拟电压,并使用一个电子开关或栅极来断开电容与输入端的连接。许多ADC集成电路包括内部的采样保持电路模块。图中的T为采样周期,其倒数就是采样频率。 微信图片_20200527175902.png 5 y% v/ E" @& z) f" h' H

- f4 O" u0 Q1 f
! U4 b3 N. M4 R8 v5 Y- G
混叠
/ _' Z7 L0 k6 ^- @" y( T* d8 O6 y0 Z% X' m
( ?$ Y6 W' }- A: w/ I
ADC通过在不连续时间间隔(离散的含义)内对输入值进行采样来工作。假设以高于奈奎斯特速率的频率对输入进行采样(定义为有用信号频率的两倍),则可以重构信号中的所有频率。如果对高于奈奎斯特速率一半的频率进行采样,则会将它们错误地检测为较低频率,这一过程称为混叠。之所以会出现混淆,是因为每个周期对函数进行两次或两次以下的瞬时采样会导致丢失周期,从而出现频率错误地降低的情况。例如,以1.5 kHz采样的2 kHz正弦波将重构为500 Hz正弦波。
& e: s  }1 m% m, O* {: r7 n/ n 微信图片_20200527175905.png
6 q" d2 S  Q* c7 s- h) z9 G0 w8 A1 |& r/ Q9 q) o) I
! o/ p" F+ ~9 J5 g( l' x- m6 t
为了避免混叠,ADC的输入必须经过硬件低通滤波,最简单的实现形式为一阶无源RC滤波网络,以去除采样率一半以上的频率。这种滤波器被称为抗混叠滤波器,它对于实际的ADC系统至关重要,该系统适用于具有更高频率内容的模拟信号。在需要防止混叠的应用程序中,可以使用过采样来大大减少甚至消除混叠。( P4 X# O! Q) A. _  a

6 j* F- R# N2 F! f例如:六种不同采样速率采集的数字序列重建的4种波形。其中两种波形在采样率足够情况下未出现混叠。另外两个说明了在较低速率下会失真(混叠增加)。
' A, W" r5 [$ d3 s 微信图片_20200527180307.gif
! k- a, U5 M6 ~) q  |过采样& T" j1 t( y/ ~5 ~0 P
. C2 e- l9 t8 {9 O8 Y1 p/ T
为了经济起见,通常以所需的最小速率对信号进行采样,结果是引入的量化误差是白噪声在转换器整个通带上的扩散。如果以远高于奈奎斯特速率的速率采样信号,然后进行数字滤波以将其限制为信号带宽,则会产生以下优点:
  • 过采样可以更轻松地实现模拟抗混叠滤波器
  • 降低的噪声,尤其是在过采样之外还采用噪声整形处理后。
    ; n- l+ j) h( ?1 U0 H0 S
白噪声长啥样?3 g4 \9 Q/ X0 o( F7 ?$ r: {
微信图片_20200527175908.png 2 V0 O6 a, J2 O) w& k
( i( k: t& `9 V* Z3 W
过采样通常用于音频ADC中,与典型晶体管电路的时钟速度(> 1 MHz)相比,所需的采样率(通常为44.1或48 kHz)非常低。在这种情况下,可以以很少的成本或不增加成本就可以大大提高ADC的性能。此外,由于任何混叠信号通常也都在频带外,因此使用非常低成本的滤波器通常可以完全消除混叠。下图比较直观,可以看出提高采样频率,可以更为真实的重建原始信号,而采样频率低些,对于信号的细部则无法准确重建。
- y- p, m( s4 [2 W+ C
  h. K) X/ J1 f. o' N& W  ~( k 微信图片_20200527175912.jpg
+ w7 S8 c8 Q( A4 J* o( ^9 G2 d+ U, i8 d
ADC类型积分型ADC
6 r4 E3 N) {8 k2 _9 y7 ^# A$ o1 x4 s. u

6 w( A  f" r: o0 k
优点
  • 积分型ADC分辨率高,位数可做到12位甚至更高
  • 线性度非常好。本质上,输入端与一个集成的参考电压相比较来决定输出端,所以线性度将取决于比较器的精度。
  • 电路实现拓扑简单,用于实现这些设备的元件相对较少,因此电路相对简单且生产成本较低。- d) [$ ~; Y% y7 c/ P& j6 g! a
缺点:
  • 主要缺点是转换速度慢。N位ADC,输出可能需要长达2个N的时钟周期来转换单个采样点
    ) T. H. d7 p; i
  • 转换原理都是基于对电压积分并将积分后电压与另一电压比较以控制计数,计数输出即为ADC输出。积分对象要么是基于参考电压,要么是基于参考电压和输入电压。
  • 主要用于传感器应用和诸如电压表和电流表等设备,在这些设备中,精度比速度更重要。换句话说积分型ADC采样速度比较低,但精度非常高
  • 积分型ADC有不同的种类,常见的有单、双斜率积分等。增加一个“斜率”,以牺牲转换时间为代价而增加精度。
    & B: M6 A& ?) U$ ~) i% v
3 @$ [; |8 L; B, [! s6 W

( L9 t" [0 i8 S- l) @单斜率积分ADC
( i- A5 {8 ~' f7 j- t
) C, Y, w# a. h  T) s

: @, ^: _0 C. m  n 微信图片_20200527175916.png 0 A& d" F* K+ B+ ^, @, I5 \$ _
# r6 M7 Z$ s) Q/ T  ]$ [2 R! z; i* V
# K% X2 x0 |8 m' H/ n/ x2 V
比较器将输入电压与集成基准电压的值进行比较(请注意,由于已连接至运算放大器的反相输入,因此我们将设为负)。同时计算时钟周期数。当积分器输出等于时,比较器输出逻辑“ 0”,触发计数器和积分器复位,锁存器保持数字输出。+ u- K$ T! Y1 K

8 W5 }7 ?. [$ ~% h0 Z9 `
' c9 B" e! m8 V) s
6 @" R+ H" C  `; {# P$ K这就是转换时间,知道为啥说这种积分型ADC慢了吧。来看下最差的情况吧,假设输入电压,假定,假定是20位ADC,那么!
  C" H2 {: w$ {0 I3 @  |' I, ^$ o" H
; C1 T1 w: R' {0 S& R: G/ K
双斜率积分ADC8 F+ F# G* K# M7 K
微信图片_20200527175919.png % h, d9 ?  ?/ F; m* `

7 \3 R, z, n% x: P" m) v

6 E8 F9 O' @. D  p  T双斜率ADC与单斜率ADC的不同之处在于,现在将与地进行比较,并集成了两个电压。刚开始时,负输入连接到积分器,使斜升直到计数器溢出。由于在反相输入会切换到一个负值进行积分,因此积分器输出将始终为正且大于零,因此计数器将继续运行直到溢出为止,这需要2N个时钟周期(= T1)。5 f! T; v) x5 k6 U0 ]9 a' u

6 ^2 o1 s7 r+ @+ g2 A' g  q 微信图片_20200527175922.png
1 J7 G& ?; i7 I4 p/ _4 E在T2时刻,将等于之和,且为0,也即:0 t. {1 ^7 g6 F8 X3 m* C
1590575046(1).png
! m( O) f& O' p' F

! a; F$ y7 ]; U1 e0 G6 m& D% J- ~. `8 n+ D- b) g4 g
因此,即为ADC转换的原理,双斜率比单斜率ADC更慢,由于执行了两次积分, 与积分器斜率相关的误差将被抵消,从而从原理上提高了精度。1 C) T% K  ^# k9 W+ h

0 K- ]5 r" s" E1 s( @: g6 j% S7 s0 `) Q
+ t& K" r2 g7 a  q
Sigma-Delta Σ-∆ ADC
* m: I1 }+ j3 p9 R! I& ^. r( \" O; a! p/ Q
3 y: D2 G, A  V  a! g: c% v3 O! M
微信图片_20200527175926.png % g, l2 v9 S! k, _
- J1 k7 \7 K- [6 t4 d

# K. R' D. G2 Z4 V) Y( T# A4 L 1590575137(1).png - o  Y! b7 x4 p4 U5 H* _- a

: K: ]  e" b& P2 A2 \! N8 g& D

3 J/ f3 \: O' X3 Y4 U- u
Σ-∆ ADC 对所处理信号进行过采样(这个概念见模数采样知多少),并对待处理信号进行低通滤波。通常,在过滤器之后使用Flash ADC转换的比特数小于所需的比特数。所产生的信号连同由FLASH离散电平产生的误差,被反馈回并从输入中做差然后输入到滤波器。这个负反馈的可对噪声形成抑制作用,使它不出现在期望的信号频率。ADC之后的数字滤波器(利用抽取滤波器)可降低采样率,滤除不想要的噪声信号并提高输出分辨率(故称为sigma-delta调制,也称为delta-sigma调制)。# J; K; b5 Q+ K
4 J3 ]8 Y" ~+ H# r6 F1 N- `
/ T5 s8 f! ?$ `' X! z: V) B
Flash ADC也称直接比较型
( P% n, y8 o+ x$ f' Z( }- E
" M$ h! M; f3 Z* X9 i4 ^% C

" M& m2 r* [/ b" m! t; x, G+ aFLASH ADC的原理可能是最容易理解的。下图是一个两位ADC的示意图,由许多比较器组成,每个比较器都被提供了比上一个基准值高一个位值的基准电压。因此,对于一个8位ADC,需要256个这样的比较器。对于10位,则需要1024。/ D' P1 O! w( r

) c* o: a9 i* M( Y$ o

6 [7 i$ \, n7 z$ H6 {; ?0 X 微信图片_20200527175929.png 4 H& G8 u. w+ ]; f& J- U
2 H" E, F5 B2 p- o, ~" d

- \+ Y9 v# L3 ]  L! aFLASH ADC(直接比较型)速度很快。它直接转换输入,而不需要任何采样或繁重的后期处理。问题是,它需要很多比较器,而且很多比较器占用了芯片上的大量硅空间。因此,只有在需要其他ADC实现方法无法达到的极高速度时才使用Fash ADC。; g( H5 Q3 {3 u& m5 |# Y

% D2 d4 i0 A7 _! q) K( h0 T
/ I/ Y/ H( A7 s# Y* H8 ?% B
二分法在硬件中体现
( Z! |% ~5 E  |( U! Q. x5 m
5 l, \: y- y1 |; ?

0 X: m$ b+ n! Q/ q2 h& y8 d实际应用中,还有一个变种比较常用,半 FLASH ADC。它使用两步的过程来减少实际转换链中所需的转换器数量:
2 e# O" r3 K  o; k6 k7 e
  • 首先,将输入信号与恰好位于半的电平集进行比较。如果它更低,那么最高有效的位MSB,被设置为0,输入被馈送到一个比较器链与参考电压设置为,以转换得到其余的位。
  • 如果输入信号高于,则将MSB设置为1,从输入信号中减去。比较器链再次用于获取剩余的位。所以,本质上,半步FLASH ADC,以牺牲一个额外的比较,来节省一半比较器。这种思路还可以继续推演扩展,比如4分 FLASH ADC等等。5 h% ]3 r$ V3 _$ Y9 E3 m2 B

) u0 ]' A  j7 m! d

- T, s% |. P- H9 X, d2 N& n- J( A. S逐次逼近寄存器SAR7 D3 L; S( a8 U6 y% i$ x; A

( E- ~) J+ Y8 O$ o( E
$ D$ E% M4 H2 q  g" s
逐次逼近寄存器(Successive Approximation Register):逐次逼近ADC使用比较器逐次缩小包含输入电压的范围。在每个连续的步骤中,转换器将输入电压与内部数字与模拟转换器的输出进行比较,后者可能表示所选电压范围的中点。在这个过程的每一步,近似都被存储在一个逐次逼近寄存器(SAR)中。例如,假设输入电压为6.3 V,初始范围为0到16v。对于第一步,输入6.3 V与8v (0-16V范围的中点)进行比较。比较器报告输入电压小于8v,因此SAR被更新为将范围缩小到0 - 8v。第二步,将输入电压与4v (0 - 8v的中点)进行比较,比较器报告输入电压高于4v,因此更新SAR以反映输入电压在4 - 8v范围内。第三步,输入电压与6v比较(4v与8v的一半);比较器报告输入电压大于6伏,搜索范围变为6 - 8伏。继续这些步骤,直到达到预期的解决方案为止。其拓扑结构如下,$ g, m. F5 x7 w$ j: G3 T2 l
微信图片_20200527175932.png : N7 x- c8 N7 X
为了直观,看看前文的动图:) [$ S; A" v3 q/ H0 P1 |' R
微信图片_20200527180416.gif
" [' o2 l! B" a" e. X% {0 G# r" O& W! A2 a

, D. m8 _+ ]- y! E6 ~: B, OPipelined ADC8 \' O, [, s1 j! b. C" P
: x; \+ D7 E2 x) |: X
流水线ADC(也称为子例程量化器)使用两个或多个流水线。首先,进行粗略的转换。第二步,用数模转换器(DAC)确定输入信号的差异。然后将这个差异转换为更细的值,并在最后一步中合并结果。这可以被认为是后续逼近ADC的一种改进,其中反馈参考信号由整个范围的比特(例如,4比特)的中间转换组成,而不仅仅是下一个最重要的比特。结合逐次逼近法和flash adc的优点,该类型具有速度快、分辨率高、模具尺寸小等优点。 微信图片_20200527175936.jpg
4 S! W- [4 p$ h5 T/ R  W* U1 d# E3 P& U3 k: S
3 F6 p( H/ z) M& q' r: C: S
在这个原理图中,模拟输入VIN首先被采样并由采样保持器(S&H)保持稳定,而第一阶段的flash ADC将其量化为三位。然后将3位输出馈给3位DAC(精确到12位),然后从输入中减去模拟输出。这个“剩余量”扩大4倍并被送入下一阶段(第二阶段)。这个增加的剩余量继续通过下级流水线,每一阶段提供3位,直到它到达4位flash ADC,将解析最后的4LSB位。因为每个阶段的位是在不同的时间点确定的,所以相同样本对应的所有位在被馈送到数字错误校正逻辑之前都与移位寄存器进行了时间对齐。请注意,当一个流水完成对输入样本的处理,确定本流水采集位并将残差传递到下一个流水时,它便可以开始处理从每个流水中嵌入的采样保持器接收到的下一个样本。这种流水线操作是高吞吐量的原因,这也是流水的概念。先描述一下坑本文来解析一个盆友在使用STM32采集电池电压踩过的坑。以STM32F4 的ADC属于逐次逼近SAR 型ADC为例进行分析,参考STM32F405xx  Datasheet,对于如何编写ADC程序就不做描述了。
6 g! D3 T0 K  I' S/ Q6 a+ `( y8 M$ S- J4 j
微信图片_20200527175940.png 微信图片_20200527175944.png
6 I( c& [' A9 s) F+ K, B- D2 Y. m
3 b7 J" Q7 H: |( f
1 N2 a2 w( |, n3 S, g
采集电池电压,利用两个电阻将电池电压分压,然后送入单片机,当电阻如上分别取4M欧/1M欧时,ADC采集到的ADC值与万用表测得的ADC输入端相差很大,取30K欧以及10k欧时,则相差变小。# `4 T& u$ D; Q4 O7 P; a7 H
; C; Q6 R! H1 d5 W6 ?9 L0 W$ s: ^
! D" M+ X8 V# N7 d
盆友咨询我这是为什么?我给出了建议,先卖个关子,先来看看应用最为广泛的STM32单片机的一些特性。
% M/ H0 X, o$ ^9 `
' Z, _& f8 D8 L
5 M5 B4 ^% c) y" G
STM32 ADC:
# G& c+ l$ m+ y: j* s( j% H0 Q5 z
3 R' K* j. Q3 i0 m: e

5 M! E1 r- c6 Z( i3 TSTM32 12位ADC是逐次逼近型的模数转换器。它有多达19个多路复用通道,允许它测量来自16个外部源、2个内部源和VBAT通道的信号。通道的A/D转换可以在单次、连续、扫描或间断模式下进行。ADC的结果存储在左对齐或右对齐的16位数据寄存器中。模拟看门狗功能允许应用程序检测输入电压是否超过用户定义的、更高或更低的阈值。主要功能,具体操作,怎么编程这些细节,有大量的资料就不罗嗦了,主要来看看电气特性。0 {6 I: C6 D, p' V% @! D
. ]" F9 r7 y% o% ]: a- S9 ^% f' b
+ E: C: p! O  }! O5 J
电气特性
& D- `( [% T0 g0 _ 微信图片_20200527175947.png . W2 r/ ]  f; D% G, w
  • ADC 可支持采样频率受供电电压影响,供电电压高,可支持采样频率范围更高
  • 可支持输入电压范围须在参考电压范围内
  • 外部输入阻阻抗最大为
  • 开关切换阻抗 最大为
  • 内部采样保持电容 为4pF
      e; q1 c9 q1 G8 p9 O& ?5 Z# u, |
微信图片_20200527175950.png
; b2 C: q: a8 V% C6 v# r4 A) D# n. \

6 Z7 J; @# x+ S+ l上面的公式用于确定误差小于1/4 LSB时允许的最大外阻抗。N = 12(12位分辨率),k是在ADC_SMPR1寄存器中定义的采样周期数。$ a$ y* y0 p/ ^3 E3 Y) k" D( ^
ADC精度vs.负注入电流:应该避免在任何模拟输入引脚上注入负电流,因为这会显著降低在另一个模拟输入上执行转换的精度。建议在模拟引脚上增加一个肖特基二极管(引脚接地),这可能会注入负电流。
微信图片_20200527175954.png
Page 136 图例(上图中标识解释):
  • 见表68
  • 实际转移曲线的示例。
  • 理想转移曲线
  • 终点相关线
  • ET =未调整总误差:实际和理想传递曲线之间的最大偏差。EO =偏移误差:第一个实际过渡与第一个理想过渡之间的偏差。EG =增益误差:最后一个理想过渡与最后一个实际过渡之间的偏差。ED =微分线性误差:实际步长与理想步长之间的最大偏差。EL =积分线性误差:任何实际过渡和终点相关线之间的最大偏差。
    ; I& M* g, R- _7 w
微信图片_20200527175957.png
寄生电容表示PCB的电容(取决于焊接和PCB布局质量)加上焊盘电容(大约5 pF)。寄生电容值高会降低转换精度。为了解决这个问题,应该减少fADC。3 A5 r# a: n! V- q

& K- Z' y. R/ d- k1 x

" ?. E% N/ J6 I! Y* I! M& b: ?  h
回到坑里
; [9 h9 Y9 q+ |将盆友的电路等效绘制一下,忽略ADC采样通道内部ESD保护二极管,以及等效电流源,如下图:
$ i' }7 Z+ G. p; Z% u 微信图片_20200527180000.png 4 B3 M( T6 ]% I2 Z; ~# N# S

3 Z/ v; r: {$ @, ^7 `4 _

7 @: y- e2 l0 F( u2 w0 N  U: E好了,这图一画出来,问题的原因就显而易见了,SAR ADC是将采样电容上的电压通过逐次逼近原理转换为数字量的,按上述图,由于R2为兆级电阻,那么等效加载在采样电容上的电压就不能简单的看成是R1/R2的分压了,此时ADC的输入阻抗在百50K欧级别,简化定性看一下,忽略分布电容影响,计算方便将输入阻抗看成50K直流电阻(实际深入动态分析的话则不可忽略,假定电池电压为5V),具体计算就不做了。为什么电阻选这么大呢?我想估计是为了将电池电压监控取样回路的电流降低,以节省电量。% U7 k2 I/ L/ o; B, S2 y4 d

% m( d: H6 k+ }. H
" `9 P4 [7 @% Z: n2 R
跳出坑里
* t* ?2 v8 T- {# Y3 q' y+ I
6 Q( H/ ^3 y. z
) o$ `! ]  ^- h; j
怎么办呢?我觉得这样应该可以:7 r* ~; j, V8 e& [: [
微信图片_20200527180004.png ) ~, P6 x- s+ q. b" M" {
+ {5 ]0 R# j' M* @

0 l+ L( Y6 H' O. g7 p  u找一个低功耗的运放做一个阻抗变换就可以兼顾两者需求,当然如果更完善一点,还可以考虑串入一个RC低通滤波环节,可以有效降低噪声。
1 d* r9 o8 F+ Y; h9 y% V: o9 n
5 G- ^1 Y  z6 ]9 I/ X# m! v

/ {  l% I* a& C" v, f/ ]3 k+ D1 P总结一下
* Q5 }% b6 q0 [  _4 l. E4 \6 Q) J
* f% E1 [' i" ?: w7 O

0 M- ~& n3 E* u1 Z# P. D6 c
在单片机、DSP信号处理系统中,我们免不了要对物理信号进行采样,需要运用到模数转换器件,模数转换器万万千,那么要用好ADC器件,或者使用单片机、DSP内置ADC,了解这些技术指标以及其描述的真实含义,是非常必要的。
+ i/ t0 F- |2 E( y- K" r
熟悉各类ADC的意义,因为如前文所说,嵌入式设备免不了需要采集物理世界的模拟信号。信号各具特点,有的频率高,有的噪声多,有的需要精度高但速度可能不要很快等等。这里整理几种常见ADC(当然还有其他种类比如电荷平衡原理ADC、分时ADC、FM ADC、时间拉伸ADC、增量编码ADC、Wilkinson ADC等等)的原理及特点,了解各类ADC的基本特点,有助于进行器件选型、系统设计。' H0 y5 }$ d, _9 t/ x
对于单片机ADC的使用,个人总结了这几点:
  • 将输入短路,可测量热噪声。实际应用时,将输入端短路,采集一定数量的样本,由于热噪声符合高斯分布,可计算出其期望、方差,接入真实信号可以利用统计规律进行相应的噪声滤波处理。
  • 量化噪声,可以通过输入一定幅度及频率的正弦波,进行度量系统的量化噪声。
  • 设计ADC采样电路时,需要注意阅读芯片手册的电气特性参数,这个对于设计一个稳定的模数采集系统至关重要。
    ( d) t# o- a9 m: K- @& m
% ^) l2 r1 x+ o3 r
收藏 2 评论2 发布时间:2020-5-27 18:06

举报

2个回答
李康1202 回答时间:2020-5-28 08:43:03
签到
李康1202 回答时间:2020-5-28 08:43:20
谢谢分享

所属标签

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