第二章:CAN FD物理层特性
各位同学,今天我们来聊聊CAN FD的物理层。说实话,很多工程师做CAN FD开发时,总把精力放在协议层,觉得物理层嘛,不就是那几根线?我刚开始也这么想,直到有一次在项目现场,总线莫名其妙丢帧,查了三天才发现是终端电阻匹配出了问题。从那以后,我对物理层再也不敢马虎了。
2.1 CAN FD的位时序与采样点
先说说位时序。CAN FD和传统CAN一样,一个位时间被分成四个段:同步段、传播段、相位缓冲段1、相位缓冲段2。但CAN FD有个关键区别——它在数据段用了更快的比特率,所以位时序的配置更讲究。
我个人习惯把位时间想象成一把尺子。每个段占多少Tq(时间量子),直接决定了采样点的位置。采样点,说白了就是接收器读取总线电平的那个瞬间。这个点选得好不好,直接影响通信的可靠性。
采样点计算公式:
采样点位置 = (同步段 + 传播段 + 相位缓冲段1) / 总Tq数 × 100%
举个例子。假设我们配置了20个Tq,同步段1个Tq,传播段3个Tq,相位缓冲段1是6个Tq,相位缓冲段2是10个Tq。那么采样点就在(1+3+6)/20 = 50%的位置。嗯,这个位置偏早了,不太理想。
我在项目中遇到过一个问题:某款MCU的CAN FD控制器默认配置,采样点设在55%左右。在实验室跑得好好的,一到现场,线缆长了点,就开始出错了。后来我把采样点调到75%附近,问题就解决了。为什么会这样?因为线缆长了,信号传播延迟变大,采样点靠后一些,能更好地避开信号跳变沿。
经验值参考:
- CAN FD仲裁段(低速段):采样点建议在70%-80%之间
- CAN FD数据段(高速段):采样点建议在75%-85%之间
- 我个人偏好:仲裁段75%,数据段80%
2.2 CAN FD的同步机制
同步机制,说白了就是让总线上所有节点对齐时钟。CAN FD用了两种同步方式:硬同步和重同步。
硬同步发生在总线从空闲状态跳变到帧起始时。每个节点检测到这个下降沿,就会把自己的位时序计数器清零,重新开始计时。这就像大家听到发令枪一起起跑。
重同步则是在帧传输过程中,通过检测边沿来微调。CAN FD的同步段宽度可以配置为1到4个Tq。如果边沿落在同步段内,说明时钟偏差不大;如果落在同步段外,就需要调整相位缓冲段的长度。
我记得有一次调试,发现某个节点总是同步失败。查了半天,原来是它的晶振精度不够。CAN FD数据段跑5Mbps时,对时钟精度要求很高。标准CAN允许1%的误差,但CAN FD数据段通常要求0.5%以内。你想想看,5Mbps下,一个位时间才200ns,晶振稍微偏一点,累积几个位就偏出去了。
避坑指南:
我曾经在一个项目中,用了便宜的陶瓷谐振器代替晶振。仲裁段跑500kbps没问题,但数据段一上2Mbps就开始丢帧。后来换成有源晶振,问题才解决。所以,CAN FD设计时,晶振选型千万别省。
2.3 CAN FD的终端电阻与总线拓扑
终端电阻,这是物理层最基础也最容易出错的地方。CAN总线两端各需要一只120Ω的电阻,作用是匹配阻抗,防止信号反射。
但CAN FD对终端电阻的要求更严格。为什么?因为数据段速率高了,信号上升沿更陡,反射问题更敏感。我见过有人图省事,只在总线一端接了120Ω,另一端没接。低速CAN可能还能工作,但CAN FD高速模式下,波形直接变形,通信根本不可靠。
终端电阻配置要点:
- 标准做法:总线两端各一只120Ω电阻
- 分体式终端:用两个60Ω电阻串联,中间通过电容接地,可以改善EMC
- 可调终端:有些收发器内置了可编程终端电阻,方便调试
再说总线拓扑。CAN FD对拓扑结构很敏感。理想情况是直线型总线,所有节点通过短支线连接。支线长度建议不超过0.3米。如果支线太长,信号反射会严重影响通信质量。
我在一个项目中遇到过奇葩情况:客户把CAN总线布成了星型拓扑,所有节点通过一个集线器连接。低速CAN勉强能用,但CAN FD一上高速就全乱套了。后来我建议他们改成直线型拓扑,问题才解决。
拓扑设计建议:
- 总线长度:CAN FD数据段5Mbps时,建议不超过40米
- 节点数量:建议不超过30个,节点越多,总线负载越重
- 支线长度:每根支线不超过0.3米,总支线长度不超过总线长度的10%
2.4 CAN FD的信号质量与眼图分析
眼图,这是判断信号质量最直观的工具。把示波器设置为余辉模式,触发在帧起始,采集大量数据,就能看到眼图。眼图张开得越大,信号质量越好。
CAN FD的眼图分析,我主要看三个指标:
- 眼高:信号幅度的裕量。CAN FD的差分电压标准是1.5V到3.0V。眼高低于1V,说明信号衰减严重。
- 眼宽:采样点的时序裕量。眼宽越宽,说明时序容错性越好。
- 抖动:信号边沿的随机变化。抖动太大,会导致采样点误判。
我记得有一次,客户反映他们的CAN FD通信偶尔出错。我带着示波器去现场,一看眼图就发现问题了:眼图的上眼皮有毛刺,下眼皮也有毛刺,整个眼睛看起来像没睡醒。后来查出是电源纹波太大,影响了收发器的输出。加了滤波电容后,眼图立刻变得清晰了。
眼图合格标准(我个人经验):
| 参数 | 合格值 | 优秀值 |
|---|---|---|
| 眼高 | >1.0V | >1.5V |
| 眼宽 | >60%位时间 | >70%位时间 |
| 抖动 | <10%位时间 | <5%位时间 |
做眼图分析时,我建议用差分探头,直接测量CAN_H和CAN_L之间的差分信号。单端测量容易引入共模噪声,看到的眼图不准。另外,示波器的带宽至少要500MHz,采样率至少2.5GS/s,才能准确捕捉CAN FD高速信号的细节。
避坑指南:
我曾经用100MHz带宽的示波器去测5Mbps的CAN FD信号,结果眼图看起来模模糊糊,还以为信号有问题。后来换了高带宽示波器,才发现信号其实很干净。所以,测量工具的选择也很重要。
好了,这一章的内容就到这里。物理层是CAN FD通信的基础,基础打不好,上层协议再完善也没用。下一章我们聊聊CAN FD的帧结构,到时候我会分享一些我在解析报文时踩过的坑。