首页/文章/ 详情

无源元件之的电容详解

2小时前浏览2


一、电容的作用


     

作为无源元件之一的电容,其作用不外乎以下几种:应用于电源电路,实现旁路、去藕、滤波和储能的作用,下面分类详述之。


     

1)旁路

旁路电容是为本地器件提供能量的储能器件,它能使稳压器的输出均匀化,降低负载需求。就像小型可充电电池一样,旁路电容能够被充电,并向器件进行放电。


     

为尽量减少阻抗,旁路电容要尽量靠近负载器件的供电电源管脚和地管脚。这能够很好地防止输入值过大而导致的地电位抬高和噪声。地弹是地连接处在通过大电流毛刺时的电压降。


     

2)去藕

去藕,又称解藕。从电路来说,总是可以区分为驱动的源和被驱动的负载。


     

如果负载电容比较大,驱动电路要把电容充电、放电,才能完成信号的跳变,在上升沿比较陡峭的时候,电流比较大,这样驱动的电流就会吸收很大的电源电流,由于电路中的电感,电阻(特别是芯片管脚上的电感,会产生反弹),这种电流相对于正常情况来说实际上就是一种噪声,会影响前级的正常工作,这就是所谓的“耦合”。


     

去藕电容就是起到一个“电池”的作用,满足驱动电路电流的变化,避免相互间的耦合干扰。将旁路电容和去藕电容结合起来将更容易理解。


     

旁路电容实际也是去藕合的,只是旁路电容一般是指高频旁路,也就是给高频的开关噪声提高一条低阻抗泄防途径。


     

高频旁路电容一般比较小,根据谐振频率一般取 0.1μF、0.01μF 等;而去耦合电容的容量一般较大,可能是 10μF 或者更大,依据电路中分布参数、以及驱动电流的变化大小来确定。


     

旁路是把输入信号中的干扰作为滤除对象,而去耦是把输出信号的干扰作为滤除对象,防止干扰信号返回电源。这应该是他们的本质区别。



     

3)滤波

从理论上(即假设电容为纯电容)说,电容越大,阻抗越小,通过的频率也越高。但实际上超过 1μF 的电容大多为电解电容,有很大的电感成份,所以频 率高后反而阻抗会增大。


     

有时会看到有一个电容量较大电解电容并联了一个小电容,这时大电容通低频,小电容通高频。电容的作用就是通高阻低,通高频阻低频。电容越大低频越容易通过,电容越大高频越容易通过。


     

具体用在滤波中,大电容(1000μF)滤低频,小电容(20pF)滤高频。


     

曾有网友形象地将滤波电容比作“水塘”。由于电容的两端电压不会突变,由此可知,信号频率越高则衰减越大,可很形象的说电容像个水塘,不会因几滴水的加入或蒸发而引起水量的变化。


     

它把电压的变动转化为电流的变化,频率越高,峰值电流就越大,从而缓冲了电压。滤波就是充电,放电的过程。


     

4)储能

储能型电容器通过整流器收集电荷,并将存储的能量通过变换器引线传送至电源的输出端。电压额定值为 40~450VDC、电容值在 220~150 000μF 之间的铝电解电容器是较为常用的。


     

根不同的电源要求,器件有时会采用串联、并联或其组合的形式,对于功率级超过 10KW 的电源,通常采用体积较大的罐形螺旋端子电容器。


     

应用于信号电路,主要完成耦合、振荡/同步及时间常数的作用:


     

1)耦合

举个例子来讲,晶体管放大器发射极有一个自给偏压电阻,它同时又使信号 产生压降反馈到输入端形成了输入输出信号耦合,这个电阻就是产生了耦合的元件。

如果在这个电阻两端并联一个电容,由于适当容量的电容器对交流信号较小的阻抗,这样就减小了电阻产生的耦合效应,故称此电容为去耦电容。


     

2)振荡/同步

包括 RC、LC 振荡器及晶体的负载电容都属于这一范畴。


     

3)时间常数

这就是常见的 R、C 串联构成的积分电路。当输入信号电压加在输入端时,电容(C)上的电压逐渐上升。


     

而其充电电流则随着电压的上升而减小。电流通过电阻(R)、电容(C)的特性通过下面的公式描述:

i = (V / R)e- (t / CR)



二、电容的选择


     

通常,应该如何为我们的电路选择一颗合适的电容呢?应基于以下几点考虑:


     

1)静电容量

2)额定耐压

3)容值误差

4)直流偏压下的电容变化量

5)噪声等级

6)电容的类型

7)电容的规格


     

那么,是否有捷径可寻呢?其实,电容作为器件的外围元件,几乎每个器件的 Datasheet 或者 Solutions,都比较明确地指明了外围元件的选择参数,也就是说,据此可以获得基本的器件选择要求,然后再进一步完善细化之。


     

其实选用电容时不仅仅是只看容量和封装,具体要看产品所使用环境,特殊的电路必须用特殊的电容。


     

下面是 chip capacitor 根据电介质的介电常数分类,介电常数直接影响电路的稳定性。


     

NP0 or CH (K < 150):

电气性能最稳定,基本上不随温度﹑电压与时间的改变而改变,适用于对稳定性要求高的高频电路。鉴于 K 值较小,所以在 0402、0603、0805 封装下很难有大容量的电容。


     

如 0603 一般最大的 10nF 以下。


     

X7R or YB (2000 < K < 4000):

电气性能较稳定,在温度、电压与时间改变时性能的变化并不显著(∆C < ±10%)。


     

适用于隔直、偶合、旁路与对容量稳定性要求不太高的全频鉴电路。


     

Y5V or YF(K > 15000):

容量稳定性较 X7R 差(∆C < +20% ~ -8 0%),容量损耗对温度、电压等测试条件较敏感,但由于其 K 值较大,所以适用于一些容值要求较高的场合。


     
     

     

三、电容的分类


     

电容的分类方式及种类很多,基于电容的材料特性,其可分为以下几大类:

1)铝电解电容

电容容量范围为 0.1μF ~ 22000μF,高脉动电流、长寿命、大容量的不二之选,广泛应用于电源滤波、解藕等场合。


     

2)薄膜电容

电容容量范围为 0.1pF ~ 10μF,具有较小公差、较高容量稳定性及极低的压电效应,因此是 X、Y 安全电容、EMI/EMC 的首选。


     

3)钽电容

电容容量范围为 2.2μF ~ 560μF,低等效串联电阻(ESR)、低等效串联电感(ESL)。脉动吸收、瞬态响应及噪声抑制都优于铝电解电容,是高稳定电源的理想选择。


     

4)陶瓷电容

电容容量范围为 0.5pF ~ 100μF,独特的材料和薄膜技术的结晶,迎合了当今“更轻、更薄、更节能“的设计理念。


     

5)超级电容

电容容量范围为 0.022F ~ 70F,极高的容值,因此又称做“金电容”或者“法拉电容”。


     

主要特点是:超高容值、良好的充/放电特性,适合于电能存储和电源备份。缺点是耐压较低,工作温度范围较窄。


四、多层陶瓷电容


     

对于电容而言,小型化和高容量是永恒不变的发展趋势。其中,要数多层陶瓷电容(MLCC)的发展最快。


     

多层陶瓷电容在便携产品中广泛应用极为广泛,但近年来数字产品的技术进步对其提出了新要求。


     

例如,手机要求更高的传输速率和更高的性能;基带处理 器要求高速度、低电压;LCD 模块要求低厚度(0.5mm)、大容量电容。


     

而汽车环境的苛刻性对多层陶瓷电容更有特殊的要求:首先是耐高温,放置于其中的多层陶瓷电容必须能满足 150℃ 的工作温度;其次是在电池电路上需要短路失 效保护设计。


     

也就是说,小型化、高速度和高性能、耐高温条件、高可靠性已成为陶瓷电容的关键特性。


     

陶瓷电容的容量随直流偏置电压的变化而变化。直流偏置电压降低了介电常数,因此需要从材料方面,降低介电常数对电压的依赖,优化直流偏置电压特性。


     

应用中较为常见的是 X7R(X5R)类多层陶瓷电容, 它的容量主要集中在1000pF以上,该类电容器主要性能指标是等效串联电阻(ESR),在高波纹电流的电源去耦、滤波及低频信号耦合电路的低功耗表现比较突出。


     

另一类多层陶瓷电容是C0G类,它的容量多在 1000pF 以下,该类电容器主要性能指标是损耗角正切值 tgδ(DF)。


     

传统的贵金属电极(NME)的 C0G 产品 DF 值范围是(2.0 ~ 8.0)× 10-4,而技术创新型贱金属电极(BME)的C0G产品DF值范围为 (1.0 ~ 2.5)×10-4,约是前者的31 ~ 50%。


     

该类产品在载有T/R模块电路的GSM、CDMA、蓝牙、GPS系统中低功耗特性较为显著。较多用于各种高频电路,如振荡/同步器、定时器电路等。


五、钽电容替代电解电容的误区


     

通常的看法是钽电容性能比铝电容好,因为钽电容的介质为阳极氧化后生成的五氧化二钽,它的介电能力(通常用 ε 表示)比铝电容的三氧化二铝介质要高。


     

因此在同样容量的情况下,钽电容的体积能比铝电容做得更小。(电解电容的电容量取决于介质的介电能力和体积,在容量一定的情况下,介电能力越高,体积就可以做得越小,反之,体积就需要做得越大)再加上钽的性质比较稳定,所以通常认为钽电容性能比铝电容好。


     

但这种凭阳极判断电容性能的方法已经过时了,目前决定电解电容性能的关键并不在于阳极,而在于电解质,也就是阴极。


     

因为不同的阴极和不同的阳极可以组合成不同种类的电解电容,其性能也大不相同。采用同一种阳极的电容由于电解质的不同,性能可以差距很大,总之阳极对于电容性能的影响远远小于阴极。


     

还有一种看法是认为钽电容比铝电容性能好,主要是由于钽加上二氧化锰阴极助威后才有明显好于铝电解液电容的表现。如果把铝电解液电容的阴极更换为二氧化锰, 那么它的性能其实也能提升不少。


     

可以肯定,ESR 是衡量一个电容特性的主要参数之一。但是,选择电容,应避免 ESR 越低越好,品质越高越好等误区。衡量一个产品,一定要全方位、多角度的去考虑,切不可把电容的作用有意无意的夸大。


     

普通电解电容的结构是阳极和阴极和电解质,阳极是钝化铝,阴极是纯铝,所以关键是在阳极和电解质。阳极的好坏关系着耐压电介系数等问题。


     

一般来说,钽电解电容的 ESR 要比同等容量同等耐压的铝电解电容小很多,高频性能更好。如果那个电容是用在滤波器电路(比如中心为 50Hz 的带通滤波器)的话,要注意容量变化后对滤波器性能的影响。

     

     

六、旁路电容的应用问题


     

嵌入式设计中,要求 MCU 从耗电量很大的处理密集型工作模式进入耗电量很少的空闲/休眠模式。这些转换很容易引起线路损耗的急剧增加,增加的速率很高,达到 20A/ms 甚至更快。


     

通常采用旁路电容来解决稳压器无法适应系统中高速器件引起的负载变化,以确保电源输出的稳定性及良好的瞬态响应。


     

旁路电容是为本地器件提供能量的储能器件,它能使稳压器的输出均匀化,降低负载需求。就像小型可充电电池一样,旁路电容能够被充电,并向器件进行放电。


     

为尽量减少阻抗,旁路电容要尽量靠近负载器件的供电电源管脚和地管脚。这能够很好地防止输入值过大而导致的地电位抬高和噪声。地弹是地连接处在通过大电流毛刺时的电压降。


     

应该明白,大容量和小容量的旁路电容都可能是必需的,有的甚至是多个陶瓷电容和钽电容。这样的组合能够解决上述负载电流或许为阶梯变化所带来的问题,而且还能提供足够的去耦以抑制电压和电流毛刺。


     

在负载变化非常剧烈的情况下,则需要三个或更多不同容量的电容,以保证在稳压器稳压前提供足够的电流。快速的瞬态过程由高频小容量电容来抑制,中速的瞬态过程由低频大容量来抑制,剩下则交给稳压器完成了。


     

还应记住一点,稳压器也要求电容尽量靠近电压输出端。


七、电容的等效串联电阻 ESR


     

普遍的观点是:一个等效串联电阻(ESR)很小的相对较大容量的外部电容能很好地吸收快速转换时的峰值(纹波)电流。


     

但是,有时这样的选择容易引起稳压器(特别是线性稳压器 LDO)的不稳定,所以必须合理选择小容量和大容量电容的容值。永远记住,稳压器就是一个放大器,放大器可能出现的各种情况 它都会出现。


     

由于 DC/DC 转换器的响应速度相对较慢,输出去耦电容在负载阶跃的初始阶段起主导的作用,因此需要额外大容量的电容来减缓相对于 DC/DC 转换器的快速转换,同时用高频电容减缓相对于大电容的快速变换。


     

通常,大容量电容的等效串联电阻应该选择为合适的值,以便使输出电压的峰值和毛刺在器件的 Dasheet 规定之内。


     

高频转换中,小容量电容在 0.01μF 到 0.1μF 量级就能很好满足要求。表贴陶瓷电容或者多层陶瓷电容(MLCC)具有更小的 ESR。


     

另外,在这些容值下,它们的体积和 BOM 成本都比较合理。如果局部低频去耦不充分,则从低频向高频转换时将引起输入电压降低。电压下降过程可能持续数毫秒,时间长短主要取决于稳压器调节增益和提供较大负载电流的时间。


     

用 ESR 大的电容并联比用 ESR 恰好那么低的单个电容当然更具成本效益。然而,这需要你在 PCB 面积、器件数目与成本之间寻求折衷。


八、电解电容的电参数


     

这里的电解电容器主要指铝电解电容器,其基本的电参数包括下列五点:


     

1)电容值

电解电容器的容值,取决于在交流电压下工作时所呈现的阻抗。因此容值,也就是交流电容值,随着工作频率、电压以及测量方法的变化而变化。


     

在标准 JISC 5102 规定:铝电解电容的电容量的测量条件是在频率为 120Hz,最大交流电压为 0.5Vrms,DC bias 电压为 1.5 ~ 2.0V 的条件下进行。可以断言,铝电解电容器的容量随频率的增加而减小。


     

2)损耗角正切值 Tan δ

在电容器的等效电路中,串联等效电阻 ESR 同容抗 1/ωC 之比称之为 Tan δ, 这里的 ESR 是在 120Hz 下计算获得的值。


     

显然,Tan δ 随着测量频率的增加而变大,随测量温度的下降而增大。


     

3)阻抗 Z

在特定的频率下,阻碍交流电流通过的电阻即为所谓的阻抗(Z)。它与电容等效电路中的电容值、电感值密切相关,且与 ESR 也有关系。


     

Z = √ [ESR2 + (XL - XC)2 ]

式中,XC = 1 / ωC = 1 / 2πfC

XL = ωL = 2πfL


     

电容的容抗(XC)在低频率范围内随着频率的增加逐步减小,频率继续增加达到中频范围时电抗(XL)降至 ESR 的值。


     

当频率达到高频范围时感抗(XL)变为主导,所以阻抗是随着频率的增加而增加。


     

4)漏电流

电容器的介质对直流电流具有很大的阻碍作用。然而,由于铝氧化膜介质上浸有电解液,在施加电压时,重新形成的以及修复氧化膜的时候会产生一种很小的称之为漏电流的电流。通常,漏电流会随着温度和电压的升高而增大。


     

5)纹波电流和纹波电压

在一些资料中将此二者称做“涟波电流”和“涟波电压”,其实就是 ripple current,ripple voltage。含义即为电容器所能耐受纹波电流/电压值。它们和 ESR 之间的关系密切,可以用下面的式子表示:


     

Urms = Irms × R

式中,Vrms 表示纹波电压

Irms 表示纹波电流

R 表示电容的 ESR


     

由上可见,当纹波电流增大的时候,即使在 ESR 保持不变的情况下,涟波电压也会成倍提高。换言之,当纹波电压增大时,纹波电流也随之增大,这也是要求电容具备更低 ESR 值的原因。


     

叠加入纹波电流后,由于电容内部的等效串连电阻(ESR)引起发热,从而影响到电容器的使用寿命。一般的,纹波电流与频率成正比,因此低频时纹波电流也比较低。


     

九、电容器参数的基本公式


     

1)容量(法拉)

英制:C = ( 0.224 × K · A) / TD

公制:C = ( 0.0884 × K · A) / TD


     

2)电容器中存储的能量

1/2CV2


     

3)电容器的线性充电量

  I = C (dV/dt)
  Z = √ [ RS2 + (XC – XL)2 ]
  XC= 1/(2πfC)
  D.F. = tan δ (损耗角)
  = ESR / XC
  = (2πfC)(ESR)
  Q = cotan δ = 1/ DF
  ESR = (DF) XC = DF/ 2πfC
  Power Loss = (2πfCV2 ) (DF)
  PF = sin δ (loss angle) – cos Ф (相位角)
  rms = 0.707 × Vp
  KVA = 2πfCV2 × 10-3
  T.C. = [ (Ct – C25) / C25 (Tt – 25) ] × 106
  CD = [ (C1 – C2) / C1 ] × 100
  L0 / Lt = (Vt / V0)X (Tt / T0)Y
  n 个电容串联:1/CT = 1/C1 + 1/C2 + …. + 1/Cn
  两个电容串联:CT = C1 · C2 / (C1 + C2)
  CT = C1 + C2 + …. + Cn
  A.R. = % ∆C / decade of time


  K = 介电常数;
  A = 面积;
  TD = 绝缘层厚度;
  V = 电压;
  RS = 串联电阻;
  f = 频率;
  L = 电感感性系数;
  δ = 损耗角;
  Ф = 相位角;
  L0 = 使用寿命;
  Lt = 试验寿命;
  Vt = 测试电压;
  V0 = 工作电压;
  Tt = 测试温度;
  T0 = 工作温度;
  X , Y = 电压与温度的效应指数。


     

4)电容的总阻抗(欧姆)

 Z = √ [ RS2 + (XC – XL)2 ]


     

5)容性电抗(欧姆)

 XC= 1/(2πfC)


     

6)相位角 Ф

理想电容器:超前当前电压 90º

理想电感器:滞后当前电压 90º

理想电阻器:与当前电压的相位相同


     

7)耗散系数 (%)
  D.F. = tan δ (损耗角)
  = ESR / XC
  = (2πfC)(ESR)


     

8)品质因素
  Q = cotan δ = 1/ DF


     

9)等效串联电阻 ESR(欧姆)
  ESR = (DF) XC = DF/ 2πfC


     

10)功率消耗
  Power Loss = (2πfCV2 ) (DF)


     

11)功率因数
  PF = sin δ (loss angle) – cos Ф (相位角)


     

12)均方根
  rms = 0.707 × Vp


     

13)千伏安 KVA (千瓦)
  KVA = 2πfCV2 × 10-3


     

14)电容器的温度系数
  T.C. = [ (Ct – C25) / C25 (Tt – 25) ] × 106


     

15)容量损耗(%)
  CD = [ (C1 – C2) / C1 ] × 100


     

16)陶瓷电容的可靠性
  L0 / Lt = (Vt / V0)X (Tt / T0)Y


     

17)串联时的容值
  n 个电容串联:1/CT = 1/C1 + 1/C2 + …. + 1/Cn
  两个电容串联:CT = C1 · C2 / (C1 + C2)


     

18)并联时的容值
  CT = C1 + C2 + …. + Cn


     

19)重复次数(Againg Rate)
  A.R. = % ∆C / decade of time


     

上述公式中的符号说明如下:

  K = 介电常数;

  A = 面积;
  TD = 绝缘层厚度;
  V = 电压;
  RS = 串联电阻;
  f = 频率;
  L = 电感感性系数;
  δ = 损耗角;
  Ф = 相位角;
  L0 = 使用寿命;
  Lt = 试验寿命;
  Vt = 测试电压;
  V0 = 工作电压;
  Tt = 测试温度;
  T0 = 工作温度;
  X , Y = 电压与温度的效应指数。


     

     

十、电源输入端的 X,Y 安全电容


     

在交流电源输入端,一般需要增加三个电容来抑制 EMI 传导干扰。


     

交流电源的输入一般可分为三根线:火线(L)/零线(N)/地线(G)。在火线和地线之间及在零线和地线之间并接的电容,一般称之为 Y 电容。


     

这两个 Y 电容连接的位置比较关键,必须需要符合相关安全标准,以防引起电子设备漏电或机壳带电,容易危及人身安全及生命,所以它们都属于安全电容,要求电容值不能偏大,而耐压必须较高。


     

一般地,工作在亚热带的机器,要求对地漏电电流不能超过 0.7mA;工作在温带机器,要求对地漏电电流不能超过 0.35mA。因此, Y 电容的总容量一般都不能超过 4700pF。


     

特别提示:Y 电容为安全电容,必须取得安全检测机构的认证。Y 电容的耐压一般都标有安全认证标志和 AC250V 或 AC275V 字样,但其真正的直流耐压高达 5000V 以上。因此,Y 电容不能随意使用标称耐压 AC250V,或 DC400V 之类的普通电容来代用。


     

在火线和零线抑制之间并联的电容,一般称之为 X 电容。由于这个电容连接的位置也比较关键,同样需要符合安全标准。


     

因此,X 电容同样也属于安全电容之一。X 电容的容值允许比 Y 电容大,但必须在 X 电容的两端并联一个安全电阻,用于防止电源线拔插时,由于该电容的充放电过程而致电源线插头长时间带电。


     

安全标准规定,当正在工作之中的机器电源线被拔掉时,在两秒钟内,电源线插头两端带电的电压(或对地电位)必须小于原来额定工作电压的 30%。


     

同理,X 电容也是安全电容,必须取得安全检测机构的认证。X 电容的耐压一般都标有安全认证标志和 AC250V 或 AC275V 字样,但其真正的直流耐压高达 2000V 以上,使用的时候不要随意使用标称耐压 AC250V,或 DC400V 之类的普通电容来代用。


     

X 电容一般都选用纹波电流比较大的聚脂薄膜类电容,这种电容体积一般都很大,但其允许瞬间充放电的电流也很大,而其内阻相应较小。


     

普通电容纹波电流的指标都很低,动态内阻较高。用普通电容代替 X 电容,除了耐压条件不能 满足以外,一般纹波电流指标也是难以满足要求的。


     

实际上,仅仅依赖于 Y 电容和 X 电容来完全滤除掉传导干扰信号是不太可能的。因为干扰信号的频谱非常宽,基本覆盖了几十 KHz 到几百 MHz,甚至上千 MHz 的频率范围。


     

通常,对低端干扰信号的滤除需要很大容量的滤波电容,但受到安全条件的限制,Y 电容和 X 电容的容量都不能用大;对高端干扰信号的滤除,大容量电容的滤波性能又极差,特别是聚脂薄膜电容的高频性能一般都比较差。


     

因为它是用卷绕工艺生产的,并且聚脂薄膜介质高频响应特性与陶瓷或云母相比相差很远,一般聚脂薄膜介质都具有吸附效应,它会降低电容器的工作频率,聚脂薄膜电容工作频率范围大约都在 1MHz 左右,超过 1MHz 其阻抗将显著增加。


     

因此,为抑制电子设备产生的传导干扰,除了选用 Y 电容和 X 电容之外,还要同时选用多个类型的电感滤波器,组合起来一起滤除干扰。


     

电感滤波器多属于低通滤波器,但电感滤波器也有很多规格类型,例如有:差模、共模,以及高频、低频等。每种电感主要都是针对某一小段频率的干扰信号滤除而起作用,对其它频率的干扰信号的滤除效果不大。


     

通常,电感量很大的电感,其线圈匝数较多,那么电感的分布电容也很大。高频干扰信号将通过分布电容旁路掉。而且,导磁率很高的磁芯,其工作频率则较低。


     

目前,大量使用的电感滤波器磁芯的工作频率大多数都在 75MHz 以下。对于工作频率要求比较高的场合,必须选用高频环形磁芯,高频环形磁芯导磁率一般都不高,但漏感特别小,比如,非晶合金磁芯,坡莫合金等。


说明:本文来源网络;文中观点仅供分享交流,不代表本公众 号立场,转载请注明出处,如涉及版权等问题,请您告知,我们将及时处理。

来源:电力电子技术与新能源
燃料电池电源电路电磁兼容汽车电力电子MATLAB新能源芯片ECADSimulink理论电机材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-12-18
最近编辑:2小时前
获赞 155粉丝 267文章 2068课程 0
点赞
收藏
作者推荐

来自示波器的升维打击:CAN、CAN-FD 错误帧 Bus-Off 排查 定位

摘要:CAN的BusOff源于错误帧的积累,而错误帧这个东西,是一个接收节点 认为数据有误 故意打断通信,好让发送节点感知到 并重发报文的设计。注意这里边有个“我觉得你有病”的认知陷阱,让CAN的诊断变得近似玄学。本文分享一种用CAN波形的幅度和脉宽信息来精确定位错误帧来源的方法,来自知乎的大灯。我们先从基础的讲起。CAN节点的电路一般如下图所示,MCU内置了CAN控制器用来将MCU的数据封装为CAN帧格式,同时它也负责CAN帧的校验和错误帧的处理。控制器封装好的逻辑报文经TX RX送到CAN收发器,将逻辑信号转变为真正的总线差分波形。 一、CAN物理层也就是CAN收发器干了啥? 一个典型的双节点CAN网络的物理层等效电路如上图,两颗120Ω终端电阻并联呈现总线电阻60Ω。黑框里是A、B两个节点的CAN收发器(Transceiver),它只负责电平转换。当总线静默时,收发器内部的2.5V电源经15KΩ电阻把CAN-H和CAN-L都拉到2.5V,总线这个状态称之为隐性。当节点A想要驱动总线的时候(TX=0),它同时把内部的上下两个MOS管导通,整个网络的电流流向:节点A的5V电源经二极管、24Ω、两颗终端电阻并联、24Ω、二极管回到节点A的地,总线这个状态称之为显性。CAN总线上的电压实际上就是终端电阻的分压。从节点B来看,CAN-H就变成3.5V,CAN-L变成1.5V,拉出了总线 H - L = 2V 的差分电压,大于0.7V的判断阈值,节点B就认为收到了一个显性(RX=0)。大家可以算一下分压值以增强记忆,后边会用到。反直觉知识点①:总线无人驱动时,也就是各个节点都隐性时,CAN标准定义这时的TX/RX逻辑电平为1;总线有节点驱动显性,也就是主动拉开差分电压的时候,对应TX/RX端逻辑电平0,这个1/0的反逻辑类似I2C等OC门的驱动逻辑,努力适应一下。这么做我猜有两个原因:一是对地逻辑的抗扰能力强一些,NPN载流能力强&amp;回流路径短;二是为了数学上的严谨性:1x1x1x1...1x0 = 0,任意节点驱动显性0,那总线就是显性0;所有节点隐性1,总线才是隐性1。但这样的反逻辑带来一个问题是,电路设计时需要尤其注意上下电时序,上电/休眠/唤醒过程中千万不要出现MCU已下电(TX拉低)但CAN收发器还供5V电的情况。如果实在难以避免,可以试试单3.3V的CAN收发器MAX3051,它不需要5V电源,逻辑电和驱动电共用同一路3.3V,肯定不会出现电源时序问题。反直觉知识点②:理论上CAN_L短地,或 CAN_H短路12V,因60Ω终端电阻的存在,隐性时CAN-H与CAN-L之间基本还是重合的,显性时也能正常拉开压差,能维持正常通信,只不过丢包率可能会大一点。大家可以算算总线电压,示波器很容易诊断这个问题。另外,如果你看到CAN的通信电压不是以2.5V为中心对称的,也有可能是多个CAN线交叉错接,比如CAN1_L错接到了CAN2_L上。反直觉知识点③:一个CAN网络里,120Ω终端电阻1~4颗都能工作,少了的话 离终端电阻远的节点 抗扰度会差,多了的话 显性差分电压可能无法触发阈值。反直觉知识点④:除了线路的最远端,任何稍长的CAN分支都可以加1K~4.7K的支线电阻,跑点电流来改善抗扰度。只要分支别太长,大致1Mbps以内的任何总线其终端电阻都是跑电流增强抗扰的,不涉及真正的阻抗或者反射抑制,双绞的要求也不是特别严格。二、CAN链路层也就是CAN控制器干了啥?回顾完物理层,咱来看链路层,CAN帧的标准格式。当发送节的MCU将TX由1变0的时候,CAN收发器将CAN-H拉高&amp;CAN-L拉低,接收节点收到了H-L&gt;0.7V的压差后,接收节点的CAN收发器RX输出由1变0。下图是一个节点接收到CAN波形后解码出的RX逻辑。 一帧报文里边有比较关键的几段:仲裁段、控制段 、 数据段、CRC段、ACK段。仲裁段中的大部分是CAN报文的ID,起名为“仲裁”其实是因为这一段有优先级仲裁的功能:假设A、B两个节点在同一时刻抢发报文,节点A要发二进制ID为001的报文,B要发010。当A、B节点都在发第一位的显性0的时候,总线会同时被两个节点驱动显性,A、B节点回读总线也都是显性,相互之间还意识不到对方的存在。当节点A发到第二位的0,节点B发到第二位的1的时候,总线只有节点A驱动显性0,节点B不驱动 却发现总线被别人驱动了,此时节点B会认为CAN线上有比自己这帧010优先级更高的数据,节点B就会主动停发,让节点A独占总线发完。之后节点B怀揣着这帧数据再次参与总线优先级的仲裁。反直觉知识点①:CAN作为一个对等网络,没有主从关系,报文全部广播,节点本身也没有优先级概念,只有报文ID的优先级。可以这么理解:CAN节点是“由事件驱动的”,比如刹车制动器,它能发高优先级的“刹车被踩下”的报文,也会发低优先级的“刹车油位正常”的报文,这些报文根据ID的大小在总线上自由竞争优先级,而不是刹车制动器这个节点的话语权一定高。这个特性就要求设计人员提前规划好所有报文优先级和周期(即“通信矩阵”)才能保证整个CAN网络如期运转。如果你的CAN网络有大量雷同节点,节点又只有一帧报文,那么ID数大(优先级低)的节点一定会在总线繁忙或干扰重发的时候&quot;插不上话&quot;,可以试试把时间戳融合到ID里边,确保各节点的新数据优先级最高,旧数据自然会被仲裁掉。反直觉知识点②:在A、B节点同时驱动第一个显性0的时候,总线被两个节点同时驱动,电压会显著高于2V。示波器上会看到在仲裁段的头部有明显的电平凸台,后续节点A抢占总线之后电压会回归正常的2V。反直觉知识点③:各个节点的时钟同步是把每个bit做16~20份的数字切片来实现的,这个切的份数不建议太多或太少。详细机制请参阅 ZLG致远电子的这篇:CAN同步机制,你真的了解吗?控制段中有几个控制位,这里拿几个常用的举例。IDE位为扩展ID的指示。如果IDE位为隐性1,就会在后边再续上18位的ID,共11+18=29位长度。比如0x9E就是个11位长度的ID,0x0151就是个29位的ID。R0位是CAN里边的预留位,在CAN-FD里被用作FD帧格式的标志位FDF,这一位为隐性1就会按FD的帧格式解码后续报文。DLC指示了后边的数据段的长度,例如1000表示后续会有8个Byte长度的数据。CAN-FD协议只在数据段会切换成高速率,比如2Mbps/8Mbps,前后其他段的速率保持500kbps不变。反直觉知识点①:CAN与CAN-FD除了数据段波特率的不同,帧格式也有区别,CAN-FD多了一些控制位。比如FDF(也叫EDL)位用来指示是否按FD帧格式解码,BRS位用来指示是否需要切换高波特率,也就是说,一个FD帧可以全程500kbps不切速率的。反直觉知识点②:CAN控制器的标准ISO11898-1里要求接收方不解读R0位的显隐性,所以CAN的控制器无法过滤FD帧。标准CAN网络里边一旦出现FD帧会因为多了BRS、ESI等控制位被认为是格式错误。同样的,因为CAN 2.0时代R0/FDF帧无意义,也有一些设备把发送出去的CAN帧的R0位错误地置了隐性1,这样的设备在CAN网络里一切正常,但若进入CAN-FD网络就会被解读成FD帧,进而因为缺少BRS、ESI等控制位被认为是格式错误。所以,CAN-FD并不是真的向下兼容CAN,因为旧时代的CAN设备并没有判别R0/FDF位的能力,一旦它进入FD网络就会疯狂地打断通信。反直觉知识点③:DLC的长度,在CAN标准里DLC可以是0000~1000之间的二进制值,可以用8421的算法直接计算出数据长度。而在CAN-FD中,1001~1111之间的值则被解读为离散的12,16,20,24,32,48,64byte。CRC段对于从帧头到Data结束之间的数据,CAN协议使用了CRC15这个比较特别的多项式计算校验,有兴趣的可以手算CRC试试。CAN-FD根据数据长度的不同使用了CRC17和CRC21,这里暂不做展开。ACK段是由收到该帧的CAN节点回复的确认(Acknowledge)。注意 发送节点在ACK位一定发的是隐性1,由接收节点回应显性0,双方无缝衔接才在总线上呈现出一个完整的CAN报文。反直觉知识点①:总线上任何节点 只要认为这个帧的结构正确,都会在ACK位回显性0,不管需不需要这一帧的ID和数据。为什么不需要的节点也会回ACK?因为等MCU算完会造成这一位的延迟,搅乱总线时序,不如只保障链路层本身的格式正确,纯芯片数字逻辑实现无延迟。嗯,90年代的总线要求不要太高。反直觉知识点②:发送节点若发现自己这一帧没有ACK回应,它也会认为总线出错,重发16次后进入Passive error状态,有兴趣的自行研究一下,这里不做展开。三、真实CAN波形来看一个两节点案例:若节点A发送0x9E报文到总线,从节点B收到的总线波形和逻辑侧波形如下: 黄线为CAN-H,绿线为CAN-L,蓝线为节点B的逻辑侧RX,紫线为节点B的逻辑侧TX。可以看到,作为接收方的节点B,总线拉差分电压拉出显性的时候,收发器将RX拉0给到MCU。在节点B想要回应ACK的时候,MCU将TX拉0,CAN收发器在总线上拉出了一个歪斜的显性(歪斜是因为测量点的寄生电感影响)。RX在ACK位置的0,是收发器TX=0驱动总线显性之后 回读到的0。再看一个比较真实的车上波形,CAN网络上大于4个节点: 黄色是CAN_H,高电平表示显性0,绿色是我们挂示波器这个节点的逻辑侧TX,低电平表示显性0。箭头A~D是一帧完整的CAN报文,箭头A ~ B这个过程中,我们挂示波器的这个节点和另一个节点正在进行优先级仲裁,根据我们之前讲到的物理层的分压原理,两个节点同时驱动电压会高一截。在箭头C这个bit 该节点想发隐性1但发现总线是显性0,那就说明有另外的节点在发送更高优先级的报文,我们这个节点会主动退出发送,成为接收节点,并在箭头D点校验成功后回应ACK,等待报文结束后这个节点再次参与总线仲裁,成功抢占总线如E点所示。注意波形高度,在箭头A~B之间,差分电压略高于2V,这是正常现象,说明有两个节点同时驱动总线显性,但从逻辑看,因为H-L&gt;0.7V所以都为显性0,纯数字逻辑的CAN控制器在箭头A~B之间还感知不到对方的存在,箭头C点之后才感知得到;而在箭头D点,因为除了发送节点之外的所有节点都在同时驱动ACK,所以总线电压比箭头A~B之间的双节点驱动 电压更高。四、错误帧终于到了错误帧,注意,错误帧不是由哪个节点发出的,而是由某个接收节点认为总线错误,才故意驱动总线打断发送方,在总线上呈现为一个错误帧。也就是说错误帧 一定是由 一个发送节点和至少一个 认为发送方有错的节点 共同形成的。五、位填充位填充规则是CAN协议的灵魂,简单来讲就几个字:逢五补一。当发送节点想要发连续5个bit的显性0的数据,会故意插入一个无意义的隐性1;当出现连续5个bit的隐性1,会故意插入一个无意义的显性0,如下图的紫色bit。如果发送节点漏填了这个0/1,或者这个0/1被 干扰成了1/0,接收节点就会判定为“填充错误”,向总线上输出“主动错误标志”——连续六个显性0,故意破坏这一帧报文,发送节点感知到总线错误之后停止发送这一报文的后续部分。你说巧妙不巧妙?连续6个显性0本身就是破坏“逢五补一”规则的,被拿来当错误标志回给发送节点。 假如原始数据是0x00,二进制0000 0000,发送节点发到0000 0的时候发送节点会先插一个1,再发后续的000,成为0000 01000,共9bit长度,接收节点也会在第5bit的0之后预期一个无效的1,解码时抠掉。假如原始数据是0000 0100,第六位自带1,发送节点发到00000的时候也会先插一个1,再发后续的100,成为0000 01100,共9bit长度。六、回读确认发送节点发送了0或1的时候,会回读确认总线是否和自己的发送相符,比如在仲裁段抢优先级失败就会等下一帧再发;如果发到了数据段,按理说此时总线应该只有自己,发着发着突然发现回读的0/1与自己发的不同,比如受到了干扰,发送节点就会输出“主动错误标志”——连续6bit显性0,来主动抛弃后续报文,同时让接收节点知道我这一帧有误。“ 在这时,接收节点收到第6bit显性0的时候,因违背逢五补一的位填充规则,也会往总线上输出“主动错误标志”,所以会在总线上看到连续12bit的显性0,前6个来自发送节点,后6个来自接收节点。” 正常情况来说,总线上的显性不应该>5bits=10us。那么用示波器设置>11us的脉宽触发模式就很容易定位错误帧的位置,不一定要用解码示波器。七、升维打击CAN网络的幅度和电流可以为我们提供更多维度的信息,此所谓升维打击。我们先来看一个正常帧,我们叫它节点A吧,它内部有终端电阻,蓝线为H-L的差分电压,紫线是我们节点A的CAN-H引脚电流,输出为正,输入为负。 先看蓝色的总线电压波形,从0x83到END之间是一帧正常波形,注意看帧头有多级台阶,帧尾ACK位置也特别高,这是正常的,可以理解 当多个节点同时驱动总线就会导致60Ω终端电阻上的分压高于2V。从这些台阶来看,可以判断出网络上至少有5个节点。为啥?先看报文中部的幅度,这肯定是只有一个节点抢占总线之后的波形,往前有两级台阶,可以认为A、B、C三个节点同时抢占总线出现了第一个高台,然后节点C优先级仲裁失败退出总线,A、B节点继续抢占出现了第二个台阶,之后节点A成功抢占到了总线优先级,发送中间的数据。最后的ACK位比3节点驱动的第一个bit更高,说明至少有4个节点在驱动ACK,再加上节点A,网络上至少有5个节点。再看紫色的电流波形,已知节点A自己有终端电阻,外边有另一颗终端电阻。波形中部的数据区肯定是节点A在驱动总线,差分电压流经外边的终端电阻形成回路,所以我们在节点A的引脚上观察到了输出的正向电流;往前一个电压台阶的位置,电流为0,是A、B两个带终端电阻的节点在驱动总线,所以总线电压拉开了但电流仍是无进无出的;再往前一个台阶,A、B、C三个节点驱动,节点C的电流流入A、B的终端电阻,所以在节点A的引脚上测到了输入的负向电流;然后帧尾的ACK位置,至少有4个节点同时驱动,流入终端电阻A和B的负向电流更大了。八、错误帧实战这是一个两节点网络,一个节点发,另一个节点收,两方都有终端电阻,发送节点用的是TJA1042,接收节点用的是单3.3V收发器MAX3051。在帧头就发生了错误,这种错误帧一般源于时钟偏差或采样点过小。我们将示波器的差分探头和电流探头挂在接收端,下图黄色为H-L的差分电压,蓝色为接收节点的输出电流,RX为收发器将H-L差分电压转换出的逻辑波形,MCU内部的CAN控制器会根据RX的0/1来解读总线。TX为接收节点的发送逻辑,MCU将TX拉低的时候收发器会往总线上驱动显性。 我们已知500kbps的每个bit宽2us,注意上图紫线TX在2 ~ 4箭头之间出现了连续2us * 6=12us的显性0,说明我们挂示波器的这个接收节点在此刻往外输出了一个“主动错误标志”,那一定是接收节点在此之前认为总线出现了错误。我们来往前看,箭头1~2之间总线差分电压和RX逻辑侧都只有10us/2us=5bit的显性0,帧前边都是长隐性1,这能有什么错?一个可能是我们碰到了传说中的过载帧,这个东西本应该很少见了;另一个可能是接收节点把对方来的正确报文认成了错的,这10us被接收节点认成了6bit,错误的采样点+硬同步(帧头对齐)做得稀烂的国产MCU更容易出现这样的帧头报错。不管哪种,我们推演一下看看是否符合我们的理论,在箭头2~3之间发送节点应该是想发送一个隐性,但这时接收节点已经觉得不对开始发“主动错误标志”,将总线拉成了显性。然后发送节点读到这一bit自己想发送隐性但总线是显性,所以。。。仲裁区抢优先级失败退出总线,,,怎么可能,之前有6个连续显性呢,所以发送节点因违反“逢五补一”在箭头3~5也输出“主动错误标志”。所以就成了黄色总线波形的7个bit的“凸”型,中间的凸台的位置总线被两个节点驱动,电压高起一个台阶。再注意一个细节,凸台的左肩膀和右肩膀高度不一样,左肩膀是接收节点MAX3051驱动的电平,它比 右肩膀TJA1042的驱动能力弱一些,总线电平低一点。这个特性可以用来区分总线上的不同设备。蓝色线,是接收节点的输出电流。箭头1~2之间的负向电流为发送节点驱动总线,差分电压流经接收节点内部的终端电阻带来的负电流;箭头2~3之间的正电流是接收节点驱动的主动错误的第一个bit;后边3~4的凸台两个节点都在驱动显性 但对应的电流也是负的,这是因为发送节点的驱动能力强过接收节点,整个网络电流还是由发送节点灌入接收节点;再往后4~5的负电流是发送端驱动接收节点的终端电阻的电流。下图我标出了两个节点的输出bit流,红框是“主动错误标志”。 仍然是这个两节点网络,仍然是这个稀烂的国产MCU,我们来看这个错误帧是怎么个情况: 这一帧的DLC=0x01,也就是只有1byte数据,数据区之后就是CRC区,我们的“主动错误标志”就发生在这个区,观察又没有填充错误,那就是我们挂示波器这个接收节点认为发送节点出现了CRC错误。但我们看到黄线在“主动错误标志”中间出现了凹坑,意味着发送节点还是想继续发隐性,并不认为自己有错,直到发现这一位被“主动错误标志”覆盖为显性才感知到位错误后抛弃后续报文。原因最后定位到:过小的采样点+过大的再同步补偿宽度SJW让时钟误差逐步积累,这颗国产MCU的重同步又做得稀烂,把正常报文错读了一位导致算CRC错误。最后通过调整采样点和SJW宽度减少了这种错误的出现频次,得到正常波形如下: 我们再试着从差分波形来分析一个错误帧: 错误发生在CRC区,我们放大一下,看看各节点都发生了啥: 从每一个台阶往前画12us的方框,得到每个节点输出的“主动错误标志”,分析可知:这是一帧节点B发送的报文,节点A认为它的CRC算错了,节点C凑了个热闹,三者一起形成了这个12bits长的“主动错误标志”。那,节点A为什么会认为CRC有错呢?大概率是因为之前的数据读错了一位。这么好的波形也能读错?是的,我们无法判断节点A所在的位置波形有多差,可能分支上没有终端电阻振铃很大呢?我们只能相信节点A不会乱搞。另外,采样点偏差会导致节点对噪声额外地敏感。九、CAN-FD错误排查来看一个A B C三节点CAN-FD错误帧的案例,节点C发,节点A、B收:黄色是H-L的差分电压,绿色是节点B的逻辑TX。0x0677和0x0176是两个错误帧。FD区波特率设置为2Mbps。 放大0x0176帧的细节: 标尺A B之间时间长度约0.8us,由一个2Mbps FD bit的0.5us + 一个CAN-FD的TDC(300ns)组成。之后出现了6个FD bit(0.5us*6=3000ns)的连续显性位,电平高度与之前相同,之后有连续2usx6=12us的显性。在标尺B线后12us位置出现了一个电压跌落的小小的下降台阶,见下下图。综上三条,认为节点C所在位置干扰过大/分支线路过长,节点C自己回读↓下图↓框出的bit位失败,自己往总线上输出“主动错误标志”(连续6bit=2usx6=12us的显性),其他设备在接收到第6个CAN-FD的bit=0.5usx6=3us的时候就读到了错误(违反FD速率的“逢五补一”规则),也往总线上叠加2us*6=12us的主动错误标志。然后,12us时节点C的主动错误标志先结束,其他节点的主动错误在2usx6+0.5usx6=15us后结束。至此,错误帧形态完成。“ “逢五补一”这条规则是跟随波特率变化的,6个连续的高波特率0或1都会触发填充错误。但填充错误之后输出的“主动错误标志”是500kbps波特率的6bit,固定长度12us。” 再来一个案例:CAN-FD采样点设置出错导致节点B把节点A发送的CAN-FD报文当CAN来解析出错。黄色CAN_H,绿色CAN_L,蓝色L-H反向差分电压,紫线为节点B逻辑RX,青线为节点B逻辑TX。 注意看0x00前后的数据段,这一段是CAN-FD的2Mbps速率,节点B因为采样点设置错误读错了BRS这一波特率转换标志,仍按照标准的500kbps去解析节点A的2Mbps速率的数据,对RX信号2us一个采样我用黄色箭头标出来了,可以看到这恰好是6个连续显性0,违反“逢五补一”的规则,故而接收节点B在箭头2~4之间发“主动错误标志”,打断总线通信,告知发送节点你发错了。箭头2~3之间,发送节点A恰好也要发显性,所以节点A此时还没感觉到不对。箭头3之后,节点A想要拉隐性,电压出现一个坑,却发现总线还是显性,此时节点A判断出现了“位错误”,开始输出“主动错误标志”,想告知接收方放弃我这一帧报文。箭头4的位置节点B释放“主动错误标志”,箭头5的位置节点A释放“主动错误标志”。如果数据比较巧,恰好能满足逢五补一的规则,那这种错误形态会在发送很多数据之后才会出现,但最晚也会被CRC拦截: 补充知识:CAN-FD网络各个节点的采样点必须完全相同,高速率导致对时序敏感很多,这一点与CAN网络容许一个范围显著不同。上边这一帧的BRS位怎么读错的呢?再一次违反直觉:CAN-FD的采样点影响发送节点的驱动波形!用示波器可以轻松量出FD的采样点位置。看下图,CAN-FD报文的控制段中的BRS位(Bit Rate Switch)明显是短于前边的FDF、R0位的,采样点不匹配的话很容易读错。因为-FD的速率翻转是在这一bit的采样点位置发生的。比如采样点80%的2Mbps CAN-FD网络,BRS这一位的宽度为2us80%+0.5us20%=1.7us,而不是2us。接收节点的采样点如果设置大于85%就会错过整个BRS位(2us*85%=1.7us),从而导致如上的BRS位读错的问题。 以上,就是示波器升维破解CAN错误帧/BusOff的经验分享,总结一下:结合已知ID是哪个节点发的先验信息,逐个拔掉非终端节点,示波器观察“主动错误标志”,就能模糊定位错误源头;如果能引出敏感设备的TX,哪个节点认为哪个节点出了什么错就会非常清晰明了;其次,测量CAN的输出电流也能清楚地定位谁在驱动“错误标志”,进而找到故障点;如果上述难以实现,以12us间隔拆分“错误标志”的电压台阶,也能定位大部分错误原因;额外关注单bit宽度的电压台阶,能排除部分节点;来源:知乎-大灯 来源:电力电子技术与新能源

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈