4、CAN收发器与节点组成:收发器(如TJA1050)、控制器(如SJA1000)、微控制器接口、节点硬件架构
CAN总线作为一个多主、分布式、实时性强的串行通信协议,其物理层与数据链路层的实现依赖于节点硬件中两大核心芯片的协同工作:CAN控制器与CAN收发器。控制器负责协议逻辑(帧封装、仲裁、错误检测),而收发器则负责将控制器的逻辑电平转换为总线上的差分信号,并提供总线驱动与电气保护。理解这两者的分工、接口方式以及完整的节点硬件架构,是进行CAN网络设计、调试与故障排查的基础。本章将围绕收发器(以TJA1050为例)、控制器(以SJA1000为例)、微控制器(MCU)接口以及整体节点架构展开深入解析。
4.1 CAN收发器:物理层与协议层的桥梁
4.1.1 核心原理:为什么需要收发器?
CAN控制器(无论是独立芯片还是MCU内部集成)输出的TXD和RXD信号均为标准的TTL/CMOS逻辑电平(0~3.3V或0~5V)。这种单端逻辑电平无法在长距离、强电磁干扰的工业或车载环境中可靠传输。CAN收发器的核心任务是将控制器送来的逻辑电平转换为总线上的差分电压信号:当TXD为显性(逻辑0)时,收发器驱动CANH和CANL之间产生约2V的差分电压(CANH≈3.5V,CANL≈1.5V);当TXD为隐性(逻辑1)时,差分电压趋近于0V(CANH≈CANL≈2.5V)。这种差分传输方式具有极强的共模抑制能力,能够有效抵抗外界电磁干扰。
4.1.2 TJA1050关键特性与外围电路
TJA1050是NXP(原Philips)推出的经典高速CAN收发器,最高支持1Mbps波特率,兼容ISO 11898-2标准。其关键引脚包括:TXD(发送数据输入)、RXD(接收数据输出)、VCC(电源)、GND(地)、CANH/CANL(总线差分对)、Rs(斜率控制)。在实际应用中,TJA1050的外围电路设计需注意以下几点:
- 终端电阻:在总线两端各接入一个120Ω电阻,用于匹配传输线阻抗,防止信号反射。若节点作为中间节点,不应接入终端电阻。
- Rs引脚:通过一个10kΩ~100kΩ电阻接地可控制上升/下降斜率,降低电磁辐射;直接接地则进入高速模式,适合1Mbps通信。
- 电源去耦:在VCC引脚附近放置100nF陶瓷电容和4.7µF电解电容,滤除高频噪声和低频纹波。
- 总线保护:在CANH和CANL对地之间可加入TVS管(如PESD1CAN),防止静电放电和浪涌损坏收发器。
4.1.3 收发器选型对比
| 型号 | 最高速率 | 工作电压 | 待机模式 | 典型应用 |
|---|---|---|---|---|
| TJA1050 | 1 Mbps | 5V | 无 | 工业控制、车载 |
| TJA1042 | 1 Mbps | 5V | 有(待机电流<15µA) | 低功耗节点 |
| MCP2551 | 1 Mbps | 5V | 无 | 通用CAN节点 |
| SN65HVD230 | 1 Mbps | 3.3V | 有 | 3.3V MCU系统 |
4.2 CAN控制器:协议引擎与数据链路层
4.2.1 核心原理:控制器在做什么?
CAN控制器是CAN协议的核心执行者,它负责完成数据链路层和部分物理层的协议处理。以独立控制器SJA1000为例,其内部集成了:发送缓冲区(TXB)、接收缓冲区(RXB)、验收滤波器(Acceptance Filter)、位时序逻辑(Bit Timing Logic)以及错误管理逻辑(Error Management Logic)。当MCU需要发送数据时,只需将数据写入SJA1000的发送缓冲区并触发发送命令,控制器便会自动完成帧封装(添加SOF、仲裁场、CRC、ACK等)、位填充、CRC计算以及总线仲裁。接收时,控制器自动检测总线上的帧起始,进行位同步、去填充、CRC校验,并通过验收滤波器判断是否接收该帧,若匹配则存入接收缓冲区并产生中断通知MCU。
4.2.2 SJA1000与MCU的接口方式
SJA1000支持两种接口模式:Intel模式和Motorola模式,通过引脚配置选择。其与MCU的连接通常采用并行总线方式:
// 以8051单片机为例的SJA1000接口连接
P0.0~P0.7 → AD0~AD7 (地址/数据复用)
P2.7 → CS (片选)
P3.6 → WR (写信号)
P3.7 → RD (读信号)
P3.5 → ALE (地址锁存使能)
P3.2 → INT (中断请求,低有效)
MCU通过向SJA1000的寄存器写入控制字来配置波特率、工作模式(BasicCAN或PeliCAN)、验收滤波等参数。PeliCAN模式是扩展模式,支持2.0B协议(29位标识符),而BasicCAN仅支持2.0A(11位标识符)。
4.2.3 控制器与收发器的连接
控制器与收发器之间的连接非常直接:控制器的TXD引脚连接收发器的TXD引脚,控制器的RXD引脚连接收发器的RXD引脚。需要注意的是,部分控制器(如SJA1000)的TXD输出为推挽结构,而收发器的TXD输入内部有上拉电阻,两者电平需匹配。若控制器为3.3V供电而收发器为5V供电,则需在TXD线上串联分压电阻或使用电平转换芯片。
4.3 微控制器接口与节点硬件架构
4.3.1 三种典型节点架构
根据应用场景和成本要求,CAN节点硬件架构可分为以下三种形式:
- 独立控制器方案:MCU + SJA1000 + TJA1050。适用于MCU内部无CAN控制器或需要更高性能的场景,灵活性高但占用MCU引脚多。
- 集成控制器方案:带CAN控制器的MCU(如STM32F103、LPC1768)+ 外部收发器。这是目前最主流的方案,MCU内部集成了CAN协议引擎,只需外接收发器即可。
- 全集成方案:MCU内部同时集成控制器和收发器(如某些车规级芯片),外围电路最简,但灵活性受限。
4.3.2 节点硬件设计要点
一个完整的CAN节点硬件架构包含以下功能模块:
- 电源模块:为MCU、控制器、收发器提供稳定的工作电压。注意收发器的VCC通常为5V,而MCU可能为3.3V,需做好电平隔离或转换。
- 时钟模块:控制器需要独立的晶振(SJA1000通常使用16MHz),MCU的时钟频率需满足波特率误差要求(一般不超过±0.5%)。
- 复位与监控:使用复位芯片(如MAX809)确保上电时序正确,防止控制器在电压不稳时误操作。
- 隔离设计:在强干扰环境中,可在控制器与收发器之间加入数字隔离器(如ADuM1201),实现电气隔离,保护MCU侧电路。
4.3.3 案例拆解:基于STM32F103的CAN节点设计
背景与约束:某工业设备需要接入CAN总线,MCU选用STM32F103RCT6(内部集成bxCAN控制器),收发器选用TJA1050,要求波特率500kbps,节点数量20个,总线长度约50米。
初始现象:在实验室测试时,单节点自发自收正常,但接入第二个节点后,总线出现大量错误帧,通信中断。
分析过程:使用示波器测量CANH和CANL波形,发现显性电平幅值仅1.2V(正常应为2V),且波形上升沿缓慢。进一步检查发现,两个节点均错误地接入了120Ω终端电阻,导致总线等效阻抗变为60Ω,收发器驱动能力不足。
解决步骤:
- 移除中间节点的终端电阻,仅在总线两端保留120Ω电阻。
- 检查TJA1050的Rs引脚,确认其通过10kΩ电阻接地,处于高速模式。
- 重新测量波形,显性电平恢复至2V,通信恢复正常。
复盘经验:终端电阻的接入位置是CAN网络设计中最常见的错误之一。设计时应在原理图中明确标注终端电阻的安装位置,并在装配时使用跳线或拨码开关控制。
4.4 常见误区与设计复盘
4.4.1 常见误区清单
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 所有节点都接120Ω终端电阻 | 总线阻抗失配,信号反射,通信失败 | 仅总线两端各接一个120Ω电阻 |
| 收发器电源与MCU电源不共地 | 共模电压超限,收发器损坏 | 确保所有节点共地,或使用隔离收发器 |
| 忽略Rs引脚斜率控制 | 电磁辐射超标,信号质量差 | 根据波特率选择合适的Rs电阻值 |
| 控制器与收发器电平不匹配 | 逻辑电平无法识别,通信异常 | 使用电平转换电路或选择同电压等级的芯片 |
4.4.2 设计复盘清单
在完成CAN节点硬件设计后,建议按照以下清单进行自查:
- 确认终端电阻位置和数量是否正确(仅两端)。
- 使用示波器测量TXD/RXD引脚的逻辑电平是否满足收发器输入要求。
- 检查CANH和CANL对地电压是否在正常范围内(隐性约2.5V,显性差分约2V)。
- 验证波特率误差:使用CAN分析仪发送标准帧,检查实际波特率与配置值的偏差。
- 进行ESD测试:在总线端口施加±4kV接触放电,确认收发器未损坏。