2. CANFD物理层:收发器选型、位时序与采样点配置、总线终端电阻设计
各位同学,咱们今天聊CANFD的物理层。很多人觉得物理层嘛,不就是个收发器加两根线,有啥好讲的?其实不然。我做了这么多年底盘域控,发现车上七八成的通信故障,根子都出在物理层。你CANFD协议栈写得再漂亮,采样点没配好,终端电阻没算对,上了车就是一堆乱码。
好,咱们一个一个来拆。
2.1 CANFD收发器选型:不只是看速率
收发器是CANFD的“嘴巴”和“耳朵”。它把控制器输出的差分信号怼到总线上,也把总线上的差分信号还原回来。选型时,大家第一反应是看速率——能不能支持5Mbps甚至8Mbps?
嗯,这当然重要。但我在项目里踩过更大的坑,是共模电压范围和环路延迟。
关键选型参数清单
- 数据速率:至少支持5Mbps,最好标称8Mbps以上
- 环路延迟(Loop Delay):典型值应小于200ns,直接影响位时序裕量
- 共模电压范围:-12V ~ +12V,适应车载12V/24V系统瞬态冲击
- EMC性能:共模扼流圈集成度、辐射发射等级
- 待机/休眠模式:支持本地唤醒和远程唤醒,满足低功耗要求
- 工作温度:-40°C ~ +125°C,底盘域控靠近执行器,温度不低
我个人习惯,先看环路延迟。为什么?因为CANFD的位时间比经典CAN短得多。5Mbps下,一个位只有200ns。如果收发器环路延迟就占了100ns,那你留给采样点的窗口就非常窄了。我遇到过一款标称8Mbps的收发器,实测环路延迟接近250ns,5Mbps下采样点根本稳不住。
另外,共模电压范围在底盘域特别重要。底盘上有电机、电磁阀,地电位波动很厉害。我曾经在一个项目中,因为收发器共模范围只有-7V~+12V,结果在电机急加速时总线直接锁死。后来换成-12V~+12V的型号,问题消失。
| 参数 | 经典CAN收发器 | CANFD收发器 | 说明 |
|---|---|---|---|
| 最大速率 | 1Mbps | 5~8Mbps | 速率提升5~8倍 |
| 环路延迟 | ~300ns | <200ns | 高速下必须更短 |
| 共模范围 | -2V~+7V | -12V~+12V | 适应恶劣车载环境 |
| 待机电流 | ~50μA | ~10μA | 低功耗要求更严 |
我的选型建议:优先选TI的TCAN1042系列或NXP的TJA1463系列。这两家在环路延迟和EMC上做得比较扎实。别为了省几毛钱选杂牌,底盘域控出一次故障,够你喝一壶的。
2.2 位时序与采样点配置:CANFD的“心跳”
位时序,说白了就是决定控制器在什么时候采样总线上的电平。CANFD的位时间被分成四段:同步段(SS)、传播段(PTS)、相位缓冲段1(PBS1)、相位缓冲段2(PBS2)。采样点落在PBS1和PBS2之间。
为什么采样点这么重要?因为总线上有传输延迟、有振荡器误差。采样点配得太靠前,你采到的可能是上一个位;配得太靠后,可能已经进入下一个位。我见过一个团队,采样点设在50%,结果总线长度超过2米就开始丢帧。后来改到80%,同样线长稳如老狗。
采样点配置黄金法则
- 高速CANFD(2Mbps以上):采样点推荐 75%~85%
- 低速CANFD(1Mbps以下):采样点推荐 70%~80%
- 数据段(Data Phase):采样点应比仲裁段(Arbitration Phase)略高2%~5%
- 振荡器容差:采样点越靠近中间,对晶振误差的容忍度越高
具体怎么算?我一般用这个公式:
位时间 = SS + PTS + PBS1 + PBS2
采样点位置 = (SS + PTS + PBS1) / 位时间 × 100%
举个例子:
假设位时间 = 200ns(5Mbps)
SS = 1个时间量子(tq)
PTS = 3 tq
PBS1 = 8 tq
PBS2 = 8 tq
总tq数 = 1+3+8+8 = 20
采样点 = (1+3+8)/20 = 60% ← 这个太低了,需要调整
调整后:
PTS = 2 tq
PBS1 = 10 tq
PBS2 = 7 tq
总tq数 = 1+2+10+7 = 20
采样点 = (1+2+10)/20 = 65% ← 还是偏低,继续调
最终:
PTS = 1 tq
PBS1 = 12 tq
PBS2 = 6 tq
采样点 = (1+1+12)/20 = 70% ← 可以接受
注意:不同MCU的CANFD控制器,时间量子的最小单位可能不同。有些是系统时钟的1/2,有些是1/4。配置前一定要看芯片手册的CAN时钟树,别想当然。
我习惯在项目初期,先用示波器抓一下CANFD总线上的实际波形,配合CAN分析仪看采样点位置。你想想看,理论算得再准,PCB走线寄生参数一加进来,实际波形肯定有偏差。调采样点的时候,我一般留2~3个tq的余量,别卡在临界值上。
2.3 总线终端电阻设计:别小看那120Ω
终端电阻,每个做CAN的人都知道是120Ω。但为什么是120Ω?怎么放?放几个?很多人其实没深想过。
CAN总线是差分传输线,特性阻抗大约在120Ω左右。终端电阻的作用,就是吸收信号到达线末端的能量,防止反射。反射信号叠加到原始信号上,轻则导致位错误,重则让收发器误判电平。
我见过最离谱的案例,是一个供应商把终端电阻放在了ECU内部,但总线拓扑是星型结构。结果反射信号在分支节点来回弹,5Mbps下通信完全不可用。后来改成总线型拓扑,终端电阻放在物理最远端,问题解决。
终端电阻设计要点
- 标准配置:总线两端各放一个120Ω电阻,并联后等效60Ω
- 分体式终端:有些收发器内部集成分裂终端(60Ω+60Ω+电容到地),可提升EMC
- 可切换终端:在冗余总线或动态拓扑中,使用MOSFET开关控制终端电阻接入
- 功率选型:至少1/4W,推荐1/2W,防止短路时烧毁
这里有个细节——终端电阻的精度。我建议用1%精度的电阻,别用5%的。为什么?因为电阻偏差会导致阻抗不匹配,反射系数增大。在5Mbps下,哪怕10%的偏差,反射信号幅度都可能超过收发器的迟滞窗口。
另外,终端电阻的位置一定要靠近收发器的CANH/CANL引脚。我见过有人把电阻放在连接器旁边,中间隔了5cm走线。这5cm走线在高频下就是一段天线,反而引入额外的寄生参数。
我的设计习惯:在原理图上,终端电阻紧挨收发器放置;在PCB布局上,电阻和收发器之间的走线不超过5mm。如果总线需要分支,分支长度控制在30cm以内,且分支上不要放终端电阻。
好,咱们用一张图把整个CANFD物理层的核心逻辑串起来:
这张图把咱们今天讲的三块内容串起来了。收发器选型决定了物理层的“体质”,位时序配置决定了通信的“节奏”,终端电阻决定了信号的“干净程度”。三者相互影响,任何一个短板都会拉低整个系统的可靠性。
最后说一句,物理层的东西,别光看datasheet。我每次做新项目,都会先搭一个最小系统板,把收发器、终端电阻、MCU焊在一起,用示波器实测波形。纸上得来终觉浅,绝知此事要躬行。嗯,今天就到这儿。