一、CAN总线基础知识
1.显性
表征CAN总线通信中逻辑0状态。对应逻辑0的下降沿,差分信号的上升沿(差分后电压2V)。
逻辑0差分信号上升沿(显性位驱动)
-
主动驱动:
当节点发送显性位(逻辑0) 时,收发器内部的MOSFET管导通,形成电流路径:-
CAN_H
→ 通过内部MOSFET上拉到电源(产生高电压) -
CAN_L
→ 通过内部MOSFET下拉到地(产生低电压)
结论:差分信号上升沿(逻辑0)由收发器主动驱动,速度由器件性能决定。
-
逻辑0差分信号上升沿过缓原因
下降沿由收发器主动驱动,其斜率取决于驱动电流能力。过缓的主要因素包括:
下降时间(
:总线寄生电感,
:收发器驱动电流)
原因 | 物理机制 | 典型案例 |
---|---|---|
1. 收发器驱动能力不足 | 驱动电流小 → 无法快速翻转总线电平 | 选型错误(如用5V收发器驱动24V系统) |
2. 总线电压跌落 | 电源电压不稳 → 显性位压差(CAN_H-CAN_L)不足 | 电源纹波过大;地线阻抗过高 |
3. 终端电阻过小 | 电阻值小 → 驱动电流需求增大 → 超出收发器负载能力 | 误并联多个终端电阻(如3个120Ω → 等效40Ω) |
4. 线路电感过大 | 导线寄生电感(L)阻碍电流突变 → 延缓下降沿 | 使用非双绞线;长距离未按阻抗设计布线 |
2.隐形
表征CAN总线通信中逻辑1状态,高阻抗状态,可以被显性改写。对应逻辑1的上升沿,差分信号的下降沿(差分后电压0V)。
逻辑1差分信号下降沿(隐性位释放)
-
被动释放:
当节点发送隐性位(逻辑1) 时,收发器内部的MOSFET管关闭,停止驱动总线。
此时总线状态由终端电阻(通常为120Ω)和总线电容决定:-
终端电阻将
CAN_H
和CAN_L
拉向中间电压(≈2.5V),使差分电压归零。 -
总线电容通过电阻缓慢充电,形成上升沿。
结论:差分信号下降沿(逻辑1)不是主动驱动,而是靠终端电阻被动拉回。
-
逻辑1差分信号下降沿过缓原因
下降沿依赖终端电阻被动拉回,其斜率由RC时间常数(τ = R·C)决定。过缓的主要因素包括:
原因 | 物理机制 | 典型案例 |
---|---|---|
1. 终端电阻过大 | 电阻值R增大 → 充电时间常数τ增大 → 电压上升变慢 | 误用150Ω替代120Ω电阻;单端缺失终端电阻(等效R→∞) |
2. 总线电容过大 | 电容C增大 → τ增大 → 上升沿拖尾 | 总线过长(>40m未降速);分支过多;使用非屏蔽双绞线 |
3. 收发器驱动能力弱 | 隐性位释放时,内部MOSFET关闭速度慢,残留电荷延缓电压恢复 | 老旧或低品质收发器(如某些5V供电型号) |
4. 总线负载过重 | 多节点并联增加对地电容 → C增大 | 单总线挂载节点超32个(ISO11898建议上限) |


3.总线拓扑结构
在微小卫星中,航天器内部采用CAN总线将多台计算机连接起来,形成星载网络。航天器CAN总线采用双冗余总线拓扑结构,或四总线拓扑结构,包括A/B两条CAN总线,或A/B/C/D四条CAN总线(姿轨控系统单机挂在C/D总线上)。

4.电特性参数
4.1显隐性参数
CAN节点的隐性状态和显性状态电特性参数如下表。
隐形状态电特性参数
参数名称 | 符号 | 参数要求 | 条件 | ||
最小值 | 标称值 | 最大值 | |||
总线输出电压 | VCAN-H | 2.0V | 2.5V | 3.0V | 无负载 |
VCAN-L | 2.0V | 2.5V | 3.0V | 无负载 | |
总线差分输出电压 | Vdiff-out | -500mV | 0mV | 50mV | 无负载 |
显性状态电特性参数
参数名称 | 符号 | 参数要求 | 条件 | ||
最小值 | 标称值 | 最大值 | |||
总线输出电压 | VCAN-H | 2.75V | 3.5V | 4.5V | 负载RL/2 |
VCAN-L | 0.5V | 1.5V | 2.25V | 负载RL/2 | |
总线差分输出电压 | Vdiff-out | 1.5V | 2V | 3.0V | 负载RL/2 |
RL为终端电阻 |
4.2终端电阻
CAN总线终端电阻的作用有两个:
1、提高抗干扰能力,确保总线快速进入隐性状态;
2、提高信号质量。
4.2.1提高抗干扰能力
CAN总线有“显性”和“隐性”两种状态,“显性”代表“0”,“隐性”代表“1”,由CAN收发器决定。下图是一个CAN收发器的典型内部结构图,CANH、CANL连接总线。
总线显性时,收发器内部Q1、Q2导通,CANH、CANL之间产生压差;隐性时,Q1、Q2截止,CANH、CANL处于无源状态,压差为0。
总线若无负载,隐性时差分电阻阻值很大,外部的干扰只需要极小的能量即可令总线进入显性(一般的收发器显性门限最小电压仅500mV)。为提升总线隐性时的抗干扰能力,可以增加一个差分负载电阻,且阻值尽可能小,以杜绝大部分噪声能量的影响。然而,为了避免需要过大的电流总线才能进入显性,阻值也不能过小。
确保快速进入隐性状态
在显性状态期间,总线的寄生电容会被充电,而在恢复到隐性状态时,这些电容需要放电。如果CANH、CANL之间没有放置任何阻性负载,电容只能通过收发器内部的差分电阻放电。我们在收发器的CANH、CANL之间加入一个220PF的电容进行模拟试验,位速率为500kbit/s,波形如下图。
从上看出,显性恢复到隐性的时间长达1.44μS,在采样点较高的情况下勉强能够通信,若通信速率更高,或寄生电容更大,则很难保证通信正常。
为了让总线寄生电容快速放电(放电时间t=RC,串联电阻越大放电时间越长),确保总线快速进入隐性状态,需要在CANH、CANL之间放置一个负载电阻。增加一个60Ω的电阻后,波形如下图。从图中看出,显性恢复到隐性的时间缩减到128nS,与显性建立时间相当。
4.2.2提高信号质量
信号在较高的转换速率情况下,信号边沿能量遇到阻抗不匹配时,会产生信号反射;传输线缆横截面的几何结构发生变化,线缆的特征阻抗会随之变化,也会造成反射。
在总线线缆的末端,阻抗急剧变化导致信号边沿能量反射,总线信号上会产生振铃,若振铃幅度过大,就会影响通信质量。在线缆末端增加一个与线缆特征阻抗一致的终端电阻,可以将这部分能量吸收,避免振铃的产生。
我们进行了一个模拟试验,位速率为1Mbit/s,收发器CANH、CANL接一根10m左右的双绞线,收发器端接120Ω电阻保证隐性转换时间,末端不加负载。末端信号波形如下图,信号上升沿出现了振铃。
若双绞线末端增加一个120Ω的电阻,末端信号波形明显改善,振铃消失,如下图。
5.抗干扰措施
每个通信节点针对CAN总线通信采取以下抗干扰措施:
1)分别独立设置A、B总装线的接收数据区、接收指针及其他总线状态量,避免两条总线之间相互干扰的可能;
2)CAN总线接收缓冲区采取防溢出措施,避免总线异常时,对软件造成灾难性影响;
3)通信节点应具备过滤不相关数据的能力;
6.CAN总线SOF帧起始
在 CAN 总线的数据帧和远程帧中,帧起始(SOF)是数据帧的第一个位。它是一个显性位(逻辑 0),用于标志一个数据帧或远程帧的开始。这个起始位的出现,就像是给总线上的所有节点发送了一个信号,告诉它们有一个新的数据帧或远程帧即将到来,让各个节点做好接收和处理的准备。
帧起始在通信中用于:同步接收节点时钟、识别帧的开始、触发接收流程启动。
1)同步接收节点时钟
CAN 总线是一种异步通信方式,不同节点的时钟可能会存在一定的偏差。当接收节点检测到帧起始(SOF)的显性位时,它会利用这个信号来同步自己的内部时钟,使其与发送节点的时钟达到一定程度的同步。这有助于接收节点准确地接收后续的数据位,因为在后续的数据接收过程中,接收节点需要按照正确的时间间隔来采样数据位,以确保正确解析数据帧。
7.CAN总线仲裁
7.1 仲裁域介绍
1)CAN总线仲裁域标准帧和扩展帧中ID前11位均表示ID值(ID28-ID18);
2)标准帧中RTR(远程传输请求)位和SRR(替代远程请求)位对应,扩展帧SRR固定为“隐性”(逻辑1);标准帧中RTR位为“显性”(逻辑0)时,表示这是一个数据帧,为“隐性”(逻辑1)时,表示这是一个远程帧。从位置上看SRR其主要目的是在扩展帧的格式中为了与标准帧的 RTR 位在位置上相对应,保持帧格式结构的一致性。在仲裁过程中,SRR 位的隐性特性会影响扩展帧与标准帧之间的仲裁优先级。由于 SRR 位为隐性,在标准帧和扩展帧同时竞争总线时,标准帧在这一位的比较上(RTR 位为显性)会具有更高的优先级,从而在一定程度上优先占用总线。这也和 CAN 总线系统整体优先处理数据帧的设计理念相符合,保证了实际数据能够更高效地在总线上传输。由此可知优先级排序:标准帧数据帧(RTR显、SRR隐)>标准帧远程帧&扩展帧(RTR隐、SRR隐)
3)扩展帧中IDE(扩展标识符)位,对于标准帧,IDE 位为 “显性”(逻辑 0);对于扩展帧,IDE 位为 “隐性”(逻辑 1)。这样,在 CAN 总线上,当节点接收到一个数据帧时,可以通过查看 IDE 位快速判断该帧是标准帧还是扩展帧。当标准帧和扩展帧同时竞争总线时,标准帧因为 IDE 位为显性(逻辑 0)而在这一位的比较上具有更高的优先级。由此可知优先级:标准帧数据帧(RTR显、SRR隐)>标准帧远程帧(RTR隐、SRR隐、IDE显)>扩展帧(RTR隐、SRR隐、IDE隐)
4)扩展帧中ID-EX表示扩展帧ID值(ID17-ID0);
5)扩展中RTR位含义同标准帧中RTR位。
7.2 CAN总线仲裁方法
1)参与CAN总线仲裁的器件仅为要发送报文的CAN控制器,其他控制器不参与仲裁;且仅有能发送报文器件可以参与仲裁,仅侦听器件无仲裁功能;
2)CAN收发器会实时监测总线是否空闲(空闲时总线电平为隐性),并将总线空闲信息发送至CAN控制器(改变控制器中寄存器状态值),只有当总线为空闲时CAN控制器方可发送报文;
3)CAN 总线采用非破坏性的基于消息优先级的仲裁机制。在多个节点同时试图发送数据时,通过比较仲裁域中的标识符来确定优先级。标识符的值越小,优先级越高。
仲裁过程是逐位进行的,当多个节点同时发送数据时,会进行 “线与” 操作。从标识符的最高位开始,依次比较每个节点发送的位。当一个节点发送显性位,另一个节点发送隐性位时,总线上呈现显性位,发送隐性位的节点会检测到这个差异(CAN 控制器芯片中,有一个专门的状态寄存器来记录仲裁状态。当出现上述情况时,该寄存器的相应位会被置位,通知节点的微控制器或者相关的软件程序,表明有更高优先级的节点在发送数据,本节点的CAN控制器自动执行停止发送自己的数据帧),从而知道有更高优先级的节点在发送数据,它会立刻停止发送自己的数据帧,等待总线空闲后再尝试发送。
7.3 CAN总线仲裁机制和位翻转区别
当在仲裁过程中出现不符合自己发送数据位的情况时,节点首先会按照仲裁规则来判断是否是因为有更高优先级的节点在发送,而不是简单地认为是位翻转错误,因为这是按照协议正常进行的过程。只有在通过仲裁后,数据帧完整发送过程中出现不符合 CRC 等错误检测规则的数据位变化时,才会判断为位翻转等错误情况。这样就保证了在仲裁阶段,节点能够正确区分是由于优先级问题还是真正的错误导致的数据位变化。
7.4位填充的实现过程
发送端: 发送节点的 CAN 控制器中有一个计数器,用于统计连续出现相同电平的位数。当这个计数器达到 5 时,CAN 控制器会在即将发送的位流中插入一个相反极性的填充位。同时,计数器清零,重新开始计数。 例如,要发送的数据序列原本是 “000001”,在发送过程中,当发送完 5 个 “0”(显性电平)后,发送器会插入一个 “1”(隐性电平),实际发送的序列变为 “0000011”。
接收端: 接收节点同样有一个计数器,用于统计连续相同电平的位数。在接收数据时,当计数器达到 5,接收节点会期望下一个位是填充位(与前面 5 个位极性相反)。 如果下一个位符合填充位的规则,接收节点会接收这个填充位,但在将数据交给上层应用程序时,会把这个填充位去掉,恢复原始的数据序列。如果下一个位不符合填充位规则,接收节点就会判定为填充错误,产生错误帧。
8. CRC校验域
8.1 CRC校验
CRC 校验是从仲裁域的最高位开始,到数据域的最后一位。
8.2 CRC界定符
1)CRC 界定符在 CAN 总线协议中被规定为一个隐性位(逻辑 1);
2)接收节点在接收数据帧的过程中,会对接收的数据进行实时的 CRC 计算。当接收到 CRC 界定符时,接收节点会将此时计算得到的 CRC 结果与接收到的 CRC 序列进行比较。如果比较结果一致,且接收到了正确的 CRC 界定符,接收节点就认为 CRC 校验成功结束,数据在传输过程中没有发生错误。如果比较结果不一致,接收节点会根据协议规定采取相应的措施,如标记数据帧错误或请求发送节点重新发送数据帧;
3)接收节点内部通常会有一个计数机制或者状态机来跟踪接收数据帧的进度。状态机处于 “接收 CRC 序列” 状态时,它会对接收的数据进行 CRC 计算相关的操作,当接收节点已经接收到了与 CRC 位数(由协议规定的位数)相同长度的数据后,就会预期下一个位是 CRC 界定符。只有当完成了 CRC 序列的接收并且计算,并且接收到的位符合 CRC 界定符的定义(隐性位)时,状态机才会从 “接收 CRC 序列” 状态转换到 “等待 ACK 位” 状态。这种状态机的严格状态转换机制可以帮助接收节点准确地区分 CRC 序列中的隐性位和真正的 CRC 界定符。
9.ACK应答域
9.1 ACK应答
9.2 应答界定符
10.帧结束和总线空闲
帧结束(EOF)依然是由发送节点发送的,帧结束(EOF)由 7 个连续的隐性位(逻辑 1)组成,发送节点发送帧结束的目的是为了将总线状态恢复到空闲状态,以便为下一次的数据传输或者其他节点的数据发送做好准备。
虽然协议规定了 7 个连续的隐性电平用于表示帧结束和空闲状态,但在实际应用中,为了更可靠地判断总线是否真正空闲,节点可能会在检测到 7 个隐性电平后,再持续观察一小段时间。这是因为在某些特殊情况下,例如信号干扰或者节点故障,可能会出现类似隐性电平的伪信号。
另外,即使检测到 7 个连续的隐性电平后,也需要确保没有新的帧起始(SOF)即将出现。因为如果紧接着有新的帧起始信号,说明总线即将开始新的数据传输,并非处于空闲状态。所以在实际判断时,节点可能会结合对后续电平的短期预测以及对当前 7 个隐性电平的检测来综合判断总线是否处于空闲状态。
11.错误帧
接收节点通过自身CAN 控制器内部专门的错误检测机制来检测CAN总线错误。
11.1 错误帧格式
错误帧由错误标志和错误界定符组成。错误标志分为主动错误标志(6 个连续显性位)和被动错误标志(6 个连续隐性位)。发送错误标志后,紧接着发送错误界定符。错误界定符是 8 个连续的隐性位,用于表示错误帧的结束。
11.2 错误重传机制
利用 ACK 位反馈异常进行判断:正常情况下,发送节点会在 ACK 位阶段监测总线,如果接收到显性电平(逻辑 0),就知道至少有一个接收节点正确接收了数据帧。如果发送节点没有收到正确的 ACK 位反馈(即 ACK 位仍然为隐性电平),并且检测到错误帧(通过错误标志),就会意识到数据传输出现错误,从而可以重新发送数据帧。
二、故障模式
1.CAN_H对GND短路
1)用万用表测量CAN_H和GND之间的阻值为0Ω,电压为0V;
2)用万用表测量CAN_L和GND之间的阻值为RL/2(RL为终端电阻),电压为0V;
3)用万用表啊测量CAN_H和CAN_L之间的阻值为RL/2(RL为终端电阻),电压为0V;
4)用示波器测不到CAN_H对GND的波形,用示波器测不到CAN_L对GND的波形。

通过上图可以知道,当CAN_H对GND短路时,CAN芯片并不会损坏,排除故障后,CAN芯片仍然可以继续工作。
2.通信故障
1)如果A/B总线停止接收(中断关闭或节点处于总线关闭状态),对应A/B总线的CAN总线控制器复位(例如A总线连续停止接收16s,对A总线复位,B总线连续停止接收16s,对B总线复位);
2)如果连续几个正常周期(例如时间是正常通信周期的2倍~8倍)在A、B总线均未接收到符合通信协议的正确数据,对两条总线的CAN总线控制器复位。
3.总线电压过低
1. 首先明确反射系数的含义
反射系数,当
时,说明反射波与入射波是反相的。
2. 考虑反射波和入射波叠加对接收端电压的影响
设入射电压波为,反射电压波为
,在接收端的总电压
。
已知,当
时,
与
反相。
假设入射电压,反射系数
,则反射电压
,在接收端的总电压
,这表明接收端电压值会降低。
因为CAN总线匹配电阻是120Ω,双端并联后阻值变为60Ω,此时若多并联一个120电阻则线路阻抗降为40Ω。此时反射系数不为0,而是。若正常情况下差分电压为2V,则经过负反射后电压值降为1.6V。