2、CAN FD物理层设计:收发器选型与总线拓扑

好,咱们进入第二章。物理层设计,说白了就是让信号在线上跑得稳、跑得快。我见过不少项目,软件协议栈写得漂漂亮亮,结果一上实车,通信就是断断续续。查到最后,往往是收发器选型不对,或者终端电阻没焊对地方。

这一章,咱们就聊聊收发器怎么选、信号电平怎么定、终端电阻怎么配。嗯,都是实战里绕不开的坑。

2.1 收发器选型:TJA1044 vs TJA1463

收发器是CAN FD物理层的核心。它负责把控制器发来的数字信号,转换成差分信号怼到总线上。反过来也一样。

我个人习惯,先看项目需求再选型。不是越贵越好,是越合适越好。

TJA1044:经典高速CAN收发器

TJA1044是NXP家的老将了。支持CAN FD,最高到5 Mbps。功耗低,待机电流才几微安。适合大多数常规车载节点。

我记得有一次做BCM(车身控制器),用的就是TJA1044。节点多,总线长,但速率要求不高(500 kbps)。TJA1044完全够用,成本还低。

参数 TJA1044 TJA1463
最高速率 5 Mbps 8 Mbps
待机电流 ~5 µA ~10 µA
EMC性能 良好 优秀
唤醒功能 支持 支持(带选择性唤醒)
典型应用 车身、舒适系统 动力、ADAS、高速网关

TJA1463:新一代CAN FD收发器

TJA1463是NXP的新品。支持CAN FD到8 Mbps,而且带选择性唤醒功能。什么意思?就是总线上的节点可以只响应特定ID的报文,其他报文不唤醒。这对降低整车静态功耗很有帮助。

你想想看,现在一辆车几十个ECU,如果每个都动不动就唤醒,电瓶很快就亏了。TJA1463这种选择性唤醒,说白了就是让节点学会「装睡」——只对关键报文有反应。

选型建议:

  • 常规车身节点(门窗、座椅、灯光):TJA1044 性价比高
  • 高速节点(网关、ADAS、动力域):TJA1463 更稳妥
  • 如果对功耗敏感,优先考虑带选择性唤醒的收发器

2.2 信号电平与位时间要求

CAN FD物理层的信号电平,和经典CAN基本一致。但位时间要求更严格。为什么?因为速率高了,时序裕量就小了。

差分信号电平

CAN总线用CAN_H和CAN_L两根线传输差分信号。显性(Dominant)和隐性(Recessive)两种状态。

  • 显性位(逻辑0):CAN_H ≈ 3.5V,CAN_L ≈ 1.5V,差分电压约2V
  • 隐性位(逻辑1):CAN_H ≈ 2.5V,CAN_L ≈ 2.5V,差分电压约0V

这里有个坑。我曾经遇到过,某供应商的收发器在高温下,显性电平掉到了1.8V以下。结果总线上的其他节点就识别不到了。嗯,所以选型时一定要看数据手册里的温度特性曲线。

位时间与采样点

CAN FD的位时间由四段组成:同步段、传播段、相位缓冲段1、相位缓冲段2。采样点一般设在相位缓冲段1的末尾。

我个人习惯,采样点设在75%~85%之间。太靠前,容易采到信号抖动;太靠后,又可能采到下一个位。

实战技巧:

用示波器抓总线波形,看显性位的上升沿和下降沿。如果边沿不陡,说明终端电阻或总线拓扑有问题。我曾经调一个项目,采样点怎么设都不对,最后发现是总线分支线太长,信号反射严重。

2.3 终端电阻与总线拓扑

终端电阻,很多人觉得不就是两个120欧姆电阻嘛。其实没那么简单。

终端电阻的作用

终端电阻用来匹配总线阻抗,消除信号反射。CAN总线特性阻抗大约是120欧姆,所以标准做法是在总线两端各接一个120欧姆电阻。

但注意,是两端。不是每个节点都接。我见过有人每个节点都焊了120欧姆电阻,结果总线等效电阻只有几十欧姆,信号根本拉不动。

警告:

终端电阻必须接在总线物理拓扑的最远端。如果总线是直线型,就在首尾两端。如果是星型,就在每个分支末端。但星型拓扑容易产生反射,不建议在高速CAN FD中使用。

总线拓扑结构

CAN FD推荐的总线拓扑是直线型(总线型)。所有节点通过短分支线连接到主干线上。

  • 主干线长度:取决于速率。1 Mbps时,最长约40米。5 Mbps时,建议不超过10米。
  • 分支线长度:越短越好。1 Mbps时,分支线不超过3米。5 Mbps时,分支线不超过0.3米。

我记得有个项目,ADAS摄像头离主干线有1米远。结果5 Mbps通信时,老是丢帧。后来把摄像头移到主干线旁边,分支线缩短到10厘米,问题就解决了。

终端电阻的功率选择

终端电阻的功率,一般用0.25W或0.5W就够了。但如果总线有短路到电源的情况,电阻可能会发热。我建议用0.5W的电阻,留点余量。

另外,有些收发器内部集成了终端电阻,比如TJA1463。但我不太建议依赖内部电阻。为什么?因为内部电阻的精度和温度特性不如外部独立电阻。而且,万一收发器坏了,终端电阻也跟着没了。

总结一下终端电阻的要点:

  1. 总线两端各接一个120欧姆电阻
  2. 电阻精度选1%或更高
  3. 功率选0.5W,留余量
  4. 尽量用外部独立电阻,不依赖收发器内部
  5. 拓扑优先选直线型,分支线越短越好

2.4 实战中的常见问题

最后,分享几个我踩过的坑。

问题1:总线电平异常

现象:CAN_H和CAN_L电压不对称,显性位差分电压偏低。

原因:某个节点的收发器损坏,或者电源纹波太大。

解决:用示波器逐个节点断开,找到问题节点。同时检查电源滤波电容。

问题2:通信速率上不去

现象:2 Mbps正常,5 Mbps就丢帧。

原因:总线拓扑不合理,分支线太长,或者终端电阻没接对。

解决:缩短分支线,检查终端电阻位置。必要时降低速率。

问题3:节点无法唤醒

现象:总线有报文,但某个节点就是醒不过来。

原因:收发器的唤醒逻辑配置错误,或者选择性唤醒的ID没配对。

解决:检查收发器的唤醒引脚电平,确认唤醒ID配置。

嗯,物理层设计就是这样。看起来简单,但细节决定成败。下一章咱们聊聊CAN FD控制器的配置和位时序计算,那才是真正考验功底的地方。