2. CAN通信模块硬件接口:MCU内部CAN控制器、外部收发器与终端电阻配置
做座舱系统CAN通信,硬件接口这块儿是基础中的基础。我见过不少同事,软件写得飞起,结果板子一上电,CAN总线就是不通。查来查去,往往是硬件接口上出了岔子。今天咱们就把MCU内部的CAN控制器、外部的收发器,还有那个看似简单却总被忽略的终端电阻,一次性说透。
2.1 MCU内部的CAN控制器
说白了,CAN控制器就是MCU内部的一个外设模块。它的活儿是把你要发的数据,按照CAN协议打包成帧,或者把收到的帧解析成数据。座舱系统里常用的MCU,比如NXP的i.MX8系列、TI的TDA4系列,内部都集成了CAN控制器。
我个人习惯,拿到一款新MCU,第一件事就是去看它的CAN控制器支持哪些模式。一般有三种:
- 正常模式:收发数据,日常工作状态。
- 只听模式:只收不发,用于总线诊断。我在调试总线冲突时经常用这个模式抓波形。
- 环回模式:自发自收,用于自测。写驱动时,先用这个模式验证软件栈对不对。
2.2 外部收发器:TJA1040与TCAN1042
CAN控制器出来的是逻辑电平信号,比如3.3V或1.8V。但CAN总线上的信号是差分信号,需要收发器来做电平转换和驱动。座舱系统里,TJA1040和TCAN1042是两款非常主流的收发器。
它们俩有什么区别?我整理了一个表格,你一看就明白:
| 特性 | TJA1040 | TCAN1042 |
|---|---|---|
| 工作电压 | 5V | 5V |
| 待机电流 | 约 10 μA | 约 1 μA |
| CAN FD 支持 | 不支持 | 支持 |
| 总线故障保护 | 基本 | 增强(±58V) |
| 工作温度范围 | -40°C ~ 125°C | -40°C ~ 150°C |
| 典型应用 | 传统CAN 2.0 | CAN FD / 高速CAN |
嗯,这里要注意。如果你的座舱系统需要支持CAN FD(比如传输大容量的诊断数据或OTA升级包),那TJA1040就不行了,必须上TCAN1042。我去年做一个项目,客户要求通过CAN FD刷写座舱固件,结果发现老设计用的是TJA1040,只能跑到1Mbps。后来全换成了TCAN1042,速率直接干到5Mbps,刷写时间缩短了80%。
2.2.1 收发器的关键引脚
不管用哪款,收发器都有几个关键引脚你得搞清楚:
- TXD / RXD:连接MCU的CAN控制器。TXD发数据,RXD收数据。
- CANH / CANL:连接CAN总线。差分信号就是靠这两根线。
- STB / EN:待机或使能引脚。座舱系统里,为了省电,经常在休眠时把收发器拉低进入待机模式。
- VIO:有些收发器有这个引脚,用于设置I/O口的电平。比如TCAN1042的VIO接3.3V,那TXD/RXD就是3.3V逻辑,直接连MCU,不用加电平转换。
2.3 终端电阻配置
终端电阻,说白了就是在CAN总线两端各放一个120Ω的电阻。它的作用是匹配总线阻抗,防止信号反射。没有它,高速通信时波形会振铃,数据就容易出错。
座舱系统里,终端电阻的配置有几种常见做法:
- 板载固定电阻:直接在PCB上焊两个120Ω电阻。简单可靠,但灵活性差。
- 可配置电阻:用0Ω电阻或跳线帽来选择是否接入。调试时很方便。
- 分立式终端:用两个60Ω电阻串联,中间抽头接一个电容到地。这种设计能改善EMC性能。
我个人习惯,在座舱系统的开发板上,用可配置电阻。因为调试阶段,你可能需要把座舱系统作为总线上的中间节点,这时候终端电阻就不能接。量产时再根据网络拓扑决定是固定焊上还是保留配置。
2.4 硬件接口整体架构
为了让你更直观地理解,我画了一张架构图。它展示了从MCU到CAN总线的完整信号路径。
2.5 硬件设计检查清单
最后,我总结了一份硬件设计检查清单。每次画完原理图,我都会对着它过一遍,能省掉不少调试的麻烦。
- 电源去耦:收发器VCC引脚附近必须加100nF电容,最好再加一个10μF电解电容。
- 共模扼流圈:在CANH/CANL线上串一个共模扼流圈,能有效抑制共模干扰。座舱里电磁环境复杂,这个钱不能省。
- ESD保护:CAN总线接口处加TVS管,防止静电打坏收发器。我见过一个案例,没加TVS,结果工人装配时手一碰,收发器就挂了。
- 终端电阻位置:电阻要尽量靠近收发器的CANH/CANL引脚,走线要短。
- 地线处理:收发器的GND和MCU的GND要大面积连接,不要通过细线连接。
嗯,硬件接口这部分就讲到这里。记住,CAN通信的可靠性,一半靠软件,一半靠硬件。硬件接口设计得扎实,后面调试才能顺风顺水。