2. CAN通信模块硬件接口:MCU内部CAN控制器、外部收发器与终端电阻配置

做座舱系统CAN通信,硬件接口这块儿是基础中的基础。我见过不少同事,软件写得飞起,结果板子一上电,CAN总线就是不通。查来查去,往往是硬件接口上出了岔子。今天咱们就把MCU内部的CAN控制器、外部的收发器,还有那个看似简单却总被忽略的终端电阻,一次性说透。

2.1 MCU内部的CAN控制器

说白了,CAN控制器就是MCU内部的一个外设模块。它的活儿是把你要发的数据,按照CAN协议打包成帧,或者把收到的帧解析成数据。座舱系统里常用的MCU,比如NXP的i.MX8系列、TI的TDA4系列,内部都集成了CAN控制器。

我个人习惯,拿到一款新MCU,第一件事就是去看它的CAN控制器支持哪些模式。一般有三种:

  • 正常模式:收发数据,日常工作状态。
  • 只听模式:只收不发,用于总线诊断。我在调试总线冲突时经常用这个模式抓波形。
  • 环回模式:自发自收,用于自测。写驱动时,先用这个模式验证软件栈对不对。
我的经验: 调试初期,先用环回模式把MCU内部的CAN控制器调通。这一步能排除掉外部收发器和线路的问题。我曾经花了两天查一个偶发性的发送失败,最后发现是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,不用加电平转换。
避坑指南: 我曾经遇到过一个问题:板子休眠后,CAN总线上的电压异常,导致其他节点唤醒。查了半天,发现是STB引脚没拉低,收发器还在正常工作,总线一直处于活跃状态。所以,休眠逻辑一定要处理好。

2.3 终端电阻配置

终端电阻,说白了就是在CAN总线两端各放一个120Ω的电阻。它的作用是匹配总线阻抗,防止信号反射。没有它,高速通信时波形会振铃,数据就容易出错。

座舱系统里,终端电阻的配置有几种常见做法:

  1. 板载固定电阻:直接在PCB上焊两个120Ω电阻。简单可靠,但灵活性差。
  2. 可配置电阻:用0Ω电阻或跳线帽来选择是否接入。调试时很方便。
  3. 分立式终端:用两个60Ω电阻串联,中间抽头接一个电容到地。这种设计能改善EMC性能。

我个人习惯,在座舱系统的开发板上,用可配置电阻。因为调试阶段,你可能需要把座舱系统作为总线上的中间节点,这时候终端电阻就不能接。量产时再根据网络拓扑决定是固定焊上还是保留配置。

关键点: CAN总线两端各需一个120Ω电阻。如果座舱系统是总线的一端,必须接;如果是中间节点,不能接。接错了,总线信号质量会急剧下降。

2.4 硬件接口整体架构

为了让你更直观地理解,我画了一张架构图。它展示了从MCU到CAN总线的完整信号路径。

CAN通信模块硬件接口架构图 CAN通信模块硬件接口架构 MCU CAN控制器 (FlexCAN) 收发器 TJA1040 / TCAN1042 终端电阻 120Ω × 2 TXD / RXD CANH / CANL CAN 总线 说明:MCU内部CAN控制器输出逻辑信号,经收发器转换为差分信号, 再通过终端电阻匹配阻抗后接入CAN总线。座舱系统通常作为总线的一个节点。

2.5 硬件设计检查清单

最后,我总结了一份硬件设计检查清单。每次画完原理图,我都会对着它过一遍,能省掉不少调试的麻烦。

  • 电源去耦:收发器VCC引脚附近必须加100nF电容,最好再加一个10μF电解电容。
  • 共模扼流圈:在CANH/CANL线上串一个共模扼流圈,能有效抑制共模干扰。座舱里电磁环境复杂,这个钱不能省。
  • ESD保护:CAN总线接口处加TVS管,防止静电打坏收发器。我见过一个案例,没加TVS,结果工人装配时手一碰,收发器就挂了。
  • 终端电阻位置:电阻要尽量靠近收发器的CANH/CANL引脚,走线要短。
  • 地线处理:收发器的GND和MCU的GND要大面积连接,不要通过细线连接。
一个小技巧: 调试时,可以用示波器量CANH和CANL之间的波形。正常通信时,显性电平(差分电压约2V)和隐性电平(差分电压0V)应该清晰分明。如果波形圆润或者振铃严重,先检查终端电阻和共模扼流圈。

嗯,硬件接口这部分就讲到这里。记住,CAN通信的可靠性,一半靠软件,一半靠硬件。硬件接口设计得扎实,后面调试才能顺风顺水。