2. CAN总线基础

CAN(Controller Area Network)总线自1986年由Bosch公司为汽车电子系统设计以来,凭借其高可靠性、实时性和强抗干扰能力,已成为工业自动化、医疗设备、轨道交通和机器人领域的骨干通信网络。要真正掌握CANopen应用层协议,必须先透彻理解CAN总线底层的运行机制。本章将从协议分层结构、四种帧类型、位定时与同步机制、仲裁与错误处理四个维度展开,帮助您建立完整的CAN底层知识框架。

CAN总线核心机制总览 协议分层结构 • 物理层:信号电平、位时序 • 数据链路层:LLC + MAC • 应用层:CANopen/DeviceNet • 传输层:仅CANopen使用 • 对象字典:OD索引管理 • 网络管理:NMT状态机 • 服务:SDO/PDO/心跳/同步 四种帧类型 ① 数据帧:携带用户数据 ② 远程帧:请求数据 ③ 错误帧:错误通知 ④ 过载帧:延迟后续帧 标准帧:11位ID + 0~8字节 扩展帧:29位ID + 0~8字节 帧间隔:3个隐性位 仲裁与错误处理 • 仲裁:CSMA/CA + 位优先级 • 显性位(0) > 隐性位(1) • 错误检测:CRC/ACK/位填充 • 错误状态:主动/被动/离线 • 错误计数:TEC/REC阈值 • 恢复:128次总线空闲 • 故障约束:快速隔离 位定时与同步机制 同步段(SYNC_SEG):1 TQ,边沿检测 传播段(PROP_SEG):1~8 TQ,补偿物理延迟 相位缓冲段1(PS1):1~8 TQ,重同步 相位缓冲段2(PS2):1~8 TQ,重同步 采样点:PS1与PS2交界处 同步方式:硬同步(帧起始) 重同步:SJW=1~4 TQ 位时间 = 1/波特率 关键设计要点 ✓ 位定时参数直接影响最大总线长度和通信速率 ✓ 仲裁机制保证高优先级报文实时性,低优先级报文公平性 ✓ 错误处理机制确保单点故障不会导致总线瘫痪 ✓ 帧类型选择影响总线利用率和实时性(数据帧 vs 远程帧)

2.1 CAN协议分层结构:从物理信号到应用对象的映射

CAN协议参考ISO/OSI模型进行了简化,仅包含物理层、数据链路层和应用层,但在实际工程中,我们通常将CANopen视为应用层协议,而CAN控制器硬件实现了物理层和数据链路层。理解分层结构有助于定位通信故障:当总线无响应时,需要逐层排查——物理层检查接线和终端电阻,数据链路层检查波特率和帧格式,应用层检查对象字典和PDO映射。

核心原理:三层架构与职责划分

物理层定义了信号如何在线缆上传输,包括差分电压电平(显性位约2V,隐性位约0V)、位时序参数、总线拓扑(直线型、星型需谨慎)以及终端电阻(120Ω,两端各一个)。数据链路层分为逻辑链路控制子层(LLC)和介质访问控制子层(MAC),LLC负责报文滤波、恢复管理和过载通知,MAC负责帧编码、仲裁、错误检测和应答。应用层在CANopen中通过对象字典(OD)统一管理所有通信对象,包括PDO(过程数据)、SDO(服务数据)、NMT(网络管理)和心跳报文。

分层功能典型实现故障排查要点
物理层信号电平、位时序、总线拓扑CAN收发器(TJA1050)、线缆、终端电阻用示波器检查CAN_H/CAN_L差分波形
数据链路层帧封装、仲裁、错误检测CAN控制器(SJA1000、MCP2515)检查波特率、采样点、错误计数器
应用层对象字典、PDO/SDO、NMTCANopen协议栈(如CANopenNode)检查OD索引、PDO映射参数
经验提醒:在工业现场,80%的CAN通信故障源于物理层问题——接线错误、终端电阻缺失或接触不良。排查时应优先使用示波器观察总线波形,而非直接分析协议数据。

判断方法:分层定位故障

当CANopen网络出现通信异常时,建议按以下步骤逐层排查:首先用万用表测量CAN_H与CAN_L之间的直流电阻,正常应为60Ω(两个120Ω终端电阻并联);然后使用示波器观察空闲状态下的总线电平,应为2.5V左右;接着发送测试帧检查波形是否完整,有无振铃或台阶;最后使用CAN分析仪抓取报文,检查ID、数据和CRC是否正确。

案例拆解:某自动化产线CANopen网络间歇性通信中断

某汽车零部件产线使用CANopen连接12个伺服驱动器,通信速率为500kbps,总线长度约40米。故障表现为产线运行数小时后,部分驱动器偶发通信超时。初步检查发现总线两端均安装了120Ω终端电阻,但使用示波器观察波形时发现显性位幅值仅1.8V(正常应接近2V),且下降沿存在明显振铃。进一步检查发现,总线中段有一段约5米的线缆与动力电缆平行走线,且未使用屏蔽双绞线。整改措施:将通信线缆更换为屏蔽双绞线,屏蔽层单端接地,并调整走线路径远离动力电缆。整改后波形幅值恢复至2.1V,振铃消失,通信故障彻底解决。此案例说明物理层设计对CAN通信可靠性的决定性影响。

风险提示:不要忽视总线长度与波特率的匹配关系。500kbps时最大总线长度约100米,若超过此长度需降低波特率或增加中继器。此外,星型拓扑必须使用集线器,否则反射会导致通信失败。

2.2 帧类型详解:数据帧、远程帧、错误帧与过载帧

CAN总线定义了四种帧类型,每种帧都有特定的用途和格式。数据帧用于传输用户数据,远程帧用于请求数据,错误帧用于报告总线错误,过载帧用于延迟后续帧。理解帧结构是进行协议分析和故障诊断的基础。

核心原理:帧结构与字段含义

数据帧由帧起始(SOF,1个显性位)、仲裁场(11位标准ID或29位扩展ID + RTR位)、控制场(IDE、DLC)、数据场(0~8字节)、CRC场(15位CRC + 界定符)、ACK场(应答位 + 界定符)和帧结束(EOF,7个隐性位)组成。远程帧与数据帧的区别在于RTR位为隐性,且无数据场。错误帧由6个显性位组成,用于通知总线错误。过载帧由6个显性位组成,用于延迟后续帧。

帧类型帧起始仲裁场控制场数据场CRCACKEOF
数据帧1位显性ID + RTR(0)IDE + DLC0~8字节15位1位7位隐性
远程帧1位显性ID + RTR(1)IDE + DLC无15位1位7位隐性
错误帧6位显性-----8位隐性
过载帧6位显性-----8位隐性

操作流程:使用CAN分析仪抓取并解析帧

使用PCAN或CANalyzer等工具抓取总线报文时,应关注以下关键字段:ID决定优先级,DLC决定数据长度,Data为实际载荷。对于远程帧,RTR位为1且无数据场。当总线出现错误帧时,分析仪会显示错误类型(位错误、填充错误、CRC错误等)。建议设置触发条件捕获错误帧前后的报文,以便定位故障源。

实战场景:在CANopen网络中,PDO通常使用数据帧传输过程数据,SDO使用数据帧进行对象字典读写。远程帧在CANopen中较少使用,因为PDO的同步传输模式已能满足大部分实时性需求。若收到远程帧,节点应返回对应ID的数据帧。

常见误区:远程帧与数据帧的优先级混淆

初学者常误以为远程帧优先级高于数据帧。实际上,仲裁时ID相同的情况下,数据帧的RTR位为显性(0),远程帧的RTR位为隐性(1),因此数据帧优先级更高。这意味着如果总线上同时存在相同ID的数据帧和远程帧,数据帧将赢得仲裁。在CANopen设计中,应避免使用远程帧请求数据,因为其效率低于PDO的循环或同步传输。

2.3 位定时与同步机制:采样点与波特率配置

位定时是CAN总线可靠通信的核心,它决定了采样点的位置和重同步能力。错误的位定时配置会导致通信不稳定,尤其在总线长度较长或节点数较多时。

核心原理:位时间结构与采样点

一个位时间由4个段组成:同步段(SYNC_SEG,固定1 TQ)、传播段(PROP_SEG,1~8 TQ)、相位缓冲段1(PS1,1~8 TQ)和相位缓冲段2(PS2,1~8 TQ)。采样点位于PS1与PS2的交界处,通常建议设置在75%~85%的位时间位置。同步段用于检测边沿,传播段用于补偿总线传播延迟和节点内部延迟,相位缓冲段用于重同步。

// 以500kbps为例,假设系统时钟16MHz,预分频4,则TQ = 4/16MHz = 250ns
// 位时间 = 1/500kbps = 2000ns = 8 TQ
// 推荐配置:SYNC=1, PROP=2, PS1=3, PS2=2, SJW=1
// 采样点 = (1+2+3)/8 = 75%

判断方法:采样点对通信质量的影响

采样点过早会导致对信号畸变的容忍度降低,过晚会增加误采样风险。在总线长度较长时,传播延迟增大,应适当增加PROP_SEG。在节点时钟精度较差时,应增大SJW以增强重同步能力。建议使用CAN分析仪的波特率扫描功能,测试不同配置下的误码率。

经验值参考:对于125kbps及以下速率,采样点可设为80%~87.5%;对于250kbps及以上速率,建议设为75%~80%。SJW通常设为1 TQ,若节点使用陶瓷晶振(精度±0.5%),可设为2 TQ。

案例拆解:多节点CANopen网络波特率配置优化

某AGV小车使用CANopen连接8个节点,包括驱动器和传感器,通信速率为250kbps,总线长度约30米。初始配置使用默认位定时参数(采样点68.75%),运行中出现偶发通信超时。使用CAN分析仪统计错误帧发现,错误集中在驱动器启动瞬间。分析原因:驱动器启动时电流突变导致总线电压波动,而采样点过早导致对信号畸变敏感。优化方案:将位定时调整为SYNC=1, PROP=2, PS1=4, PS2=1(采样点77.8%),同时将SJW从1 TQ增加到2 TQ。调整后错误帧消失,通信稳定。此案例说明位定时参数需要根据实际工况调整,不能盲目使用默认值。

风险提示:修改位定时参数后,必须使用CAN分析仪验证所有节点的采样点一致性。不同节点采样点差异过大时,即使波特率相同,也可能出现通信不稳定。

2.4 仲裁与错误处理机制:优先级与故障隔离

CAN总线采用非破坏性仲裁机制,通过ID的位优先级决定报文发送顺序。错误处理机制则确保任何节点的故障不会导致总线瘫痪。

核心原理:CSMA/CA与错误计数

CAN采用载波监听多路访问/冲突避免(CSMA/CA)机制。节点发送数据前先监听总线,若总线空闲则开始发送。发送过程中,节点逐位比较发送电平与总线电平,若发现发送隐性位但总线上为显性位,则失去仲裁,转为接收模式。ID越小优先级越高。错误处理通过发送错误计数(TEC)和接收错误计数(REC)实现,计数超过阈值时节点状态从主动错误变为被动错误,再变为总线关闭。

错误状态TEC/REC阈值行为特征恢复条件
主动错误TEC<128且REC<128可发送主动错误帧(6位显性)-
被动错误TEC>127或REC>127只能发送被动错误帧(6位隐性)TEC和REC均<128
总线关闭TEC>255不参与总线通信检测到128次总线空闲

操作流程:错误分析与恢复

当总线出现大量错误帧时,应首先使用CAN分析仪统计错误类型和错误计数。位错误通常由硬件故障或干扰引起,填充错误可能由波特率不匹配导致,CRC错误可能由数据损坏引起。对于总线关闭的节点,需要检查其TEC是否持续增长,并排查该节点的硬件和软件配置。

实战场景:在某CANopen网络中,一个节点因软件bug导致持续发送错误帧,最终进入总线关闭状态。由于该节点不再参与通信,其他节点恢复正常工作。这体现了CAN错误处理机制的故障隔离能力。但需注意,若故障节点反复进入总线关闭并恢复,会导致总线周期性瘫痪。

常见误区:仲裁优先级与实时性的关系

初学者常认为ID越小越好,但实际设计中需综合考虑。高优先级报文(如紧急停止)应分配小ID,但过多高优先级报文会占用总线带宽,导致低优先级报文饥饿。在CANopen中,PDO的COB-ID通常按功能分配,如PDO1发送使用0x180+NodeID,紧急报文使用0x080+NodeID。建议根据报文的实时性要求分级分配ID,并预留扩展空间。

总结复盘:掌握CAN总线基础是学习CANopen的前提。建议读者通过实际抓包分析加深理解,重点关注:①物理层波形质量;②帧结构中各字段的含义;③位定时参数对通信质量的影响;④错误处理机制对系统可靠性的保障。下一章将深入CANopen对象字典与PDO映射机制。