3. CAN物理层特性(差分信号、位时序、终端电阻)

聊到CAN总线,很多人上来就扒报文格式、ID过滤,却忽略了最底层的物理层。我最初啃芯片手册时也跳过这部分,结果调试时波形乱七八糟,找了好几天原因。后来才明白——物理层是地基,地基不稳,上层解析全是扯淡。

这一节咱们就把差分信号、位时序、终端电阻这三个硬骨头啃透。不求背参数,重在理解为什么这么设计,以及实际中怎么用。

3.1 差分信号:为什么CAN要“与众不同”?

CAN用两根线传输:CAN_H和CAN_L。它不靠对地电压,而是靠两根线之间的电压差来表达高低电平。

信号状态CAN_H电压CAN_L电压差分电压(Vdiff)
显性(Dominant)约3.5V约1.5V约2.0V
隐性(Recessive)约2.5V约2.5V约0V

我个人的理解:差分信号本质是把“信号参考地”从单端变成了“线对线”。好处很明显——抗共模干扰。比如电机启动瞬间地电位跳变,单端信号直接完蛋,但CAN两根线同时被干扰,差分电压不变。我在一个工厂自动化项目里,控制器和驱动器之间接地回路很长,单端485根本跑不了,换成CAN就好了。

小技巧:布线时CAN_H和CAN_L一定要绞在一起(双绞线),绞距越密抗干扰越好。我习惯用19-30mm绞距的专用CAN线,便宜不要省。

3.2 位时序:CAN通信的时间骨架

CAN的位时序比UART复杂得多。它把一个位时间分成四个段:同步段(SS)、传播段(PTS)、相位缓冲段1(PBS1)、相位缓冲段2(PBS2)。

为什么分这么细? 因为CAN是多主总线,节点没有统一时钟,全靠同步和重同步来调整采样点。说白了,就是大家对着同一条总线上的跳变沿不断“对表”。

段名称作用典型时间份额(Tq)
同步段(SS)检测上升沿/下降沿1 Tq
传播段(PTS)补偿物理延迟(线缆+收发器)1~8 Tq
相位缓冲段1(PBS1)采样点前调整1~8 Tq
相位缓冲段2(PBS2)采样点后调整1~8 Tq

这里有个坑:采样点位置很关键。CAN标准推荐采样点在87.5%位时间附近。我曾经接手过一个项目,采样点设在50%,总线长度200米,跑250kbps,结果时不时出现ACK错误。后来把采样点调到80%,问题就消失了。你可以想想看,采样点靠前,容易采到信号还没稳定时的错误电平。

避坑指南:我曾经遇到过一整车CAN节点,所有节点波特率配置一模一样,但总线就是丢帧。后来用示波器抓波形才发现,不同厂家的晶振精度不同,累积误差导致采样点偏差。建议:1)统一用有源晶振,精度±0.1%以内;2)如果混用芯片,把SJW(同步跳转宽度)设为2或3 Tq,增加容错。

位时序的配置代码(以STM32为例):

// 假设时钟36MHz,目标波特率500kbps,预设Tq=125ns
// 位时间 = 1 / 500k = 2000ns = 16 Tq
CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;       // 同步跳转宽度2Tq
CAN_InitStructure.CAN_BS1 = CAN_BS1_13tq;      // PBS1 = 13 Tq
CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;       // PBS2 = 2 Tq
// 采样点 = (1+13)/(1+13+2) = 14/16 = 87.5%

3.3 终端电阻:防止信号反射的“消音器”

CAN总线两端各需要一只120Ω电阻。为什么?因为信号在线缆上传输,遇到阻抗突变就会反射,反射波叠加原信号会造出奇怪的过冲和振铃。

120Ω怎么来的? CAN总线用的双绞线特性阻抗大约就是120Ω。终端电阻等于特性阻抗时,吸收反射能量,信号平滑。

  • 必须接两个: 一个在总线最左端,一个在最右端。中间节点不接。
  • 少了会怎样? 反射加重,能通讯但误码率上升,总线长度缩短。
  • 多了会怎样? 两个以上终端电阻并联,等效电阻小于60Ω,显性电平降低,通讯困难。

我记得有一次: 帮朋友调试一个测试台架,总线上挂5个节点,通讯时好时坏。我拿万用表一量CAN_H和CAN_L之间的电阻——40Ω。一问才知道,他每个节点板子上都焊了个120Ω跳线,等于5个电阻并联。拆掉3个,只保留两端两个,通讯立刻稳了。

快速检查法: 断电状态下,用万用表测量CAN_H和CAN_L之间的电阻。正常值应为60Ω(两个120Ω并联结果)。如果读到120Ω或40Ω,说明终端电阻配置有问题。

3.4 物理层整体框架

下面这张图把三大要素串起来,你看一遍就能记住各部分的角色:

CAN物理层三大要素结构图 CAN_H CAN_L 120Ω 120Ω 节点A 节点B 节点C 差分信号:Vdiff = VH - VL 抗共模干扰,可长距离传输 位时序:SS+PTS+PBS1+PBS2 采样点位置决定通信稳定性

从图上能看到:两端120Ω电阻把总线“端接”起来,中间节点通过CAN收发器挂到差分线上。位时序则是每个节点内部的采样策略,保证所有节点在正确的时间点读取差分电压。

所以你看,物理层并不只是“两根线加电阻”那么简单。差分信号给了你抗干扰能力,位时序给了你同步基础,终端电阻给了你信号完整性。三个缺一不可。

这一节先到这儿。后面咱们开始真正解码CAN报文,到时候你会发现——理解了物理层,看ID和DLC才不是空中楼阁。