2. DroneCAN协议基础

DroneCAN 是建立在经典 CAN 2.0B 总线之上的高层协议,它并不重新发明物理层,而是直接复用 CAN 的差分信号、位定时、仲裁与错误检测机制。理解 DroneCAN 的抓包与诊断,必须先把“电信号如何变成一帧数据”这条链路打通。本节从物理层到数据链路层逐层拆解,帮助你在示波器、CAN 分析仪和 DroneCAN 工具之间建立统一的认知模型。

一、物理层:差分信号与显性/隐性电平

CAN 总线使用一对差分线 CAN_H 与 CAN_L 传输信号,逻辑值由两线电压差决定,而不是单线对地电压。这样做的核心目的是抗共模干扰:电机、电调、电源线产生的电磁噪声往往同时耦合到两根线上,差分接收器只关心两者之差,共模噪声被大幅抵消。

  • 隐性位(逻辑 1):CAN_H ≈ CAN_L ≈ 2.5V,差分电压接近 0V,总线处于空闲或“释放”状态。
  • 显性位(逻辑 0):CAN_H 被拉高至约 3.5V,CAN_L 被拉低至约 1.5V,差分电压约 2V,总线被“驱动”为低电平。
  • 线与特性:只要有一个节点发送显性位,总线就呈现显性;只有所有节点都发送隐性位,总线才呈现隐性。这是 CAN 仲裁机制的电学基础。
在示波器上观察时,建议使用差分探头或两通道相减。若只看 CAN_H 对地波形,容易把共模漂移误判为通信故障。

二、数据链路层:帧格式与仲裁

DroneCAN 使用扩展帧(29 位标识符),因为 DroneCAN 的节点 ID、消息类型、服务类型等信息需要编码进标识符。一帧扩展 CAN 数据帧的主要字段如下:

字段长度作用
SOF1 位帧起始,显性位,用于硬同步
标识符 A/B11 + 18 位29 位扩展 ID,含优先级与 DroneCAN 路由信息
RTR / IDE / SRR3 位远程帧、扩展帧标志
DLC4 位数据长度,0~8 字节
数据场0~64 位DroneCAN 载荷,通常为紧凑二进制结构
CRC 场15 位 + 1 位循环冗余校验与界定符
ACK 场2 位接收节点拉低 ACK 槽表示正确接收
EOF7 位帧结束,隐性位序列

仲裁发生在标识符逐位发送的过程中:节点每发一位就回读总线,若自己发隐性却读到显性,说明有更高优先级节点在竞争,立即退出并转为接收。DroneCAN 正是利用这一点,让高优先级消息(如节点状态、关键控制)获得更低的标识符数值,从而优先占用总线。

三、位定时:采样点与同步

CAN 是异步串行总线,没有独立时钟线,所有节点必须通过位定时参数约定同一位的“时间长度”和“采样位置”。一个位时间被划分为若干时间份额 Tq,通常包括同步段、传播段、相位缓冲段 1 和相位缓冲段 2。

位时间 = SyncSeg + PropSeg + PhaseSeg1 + PhaseSeg2
采样点 = (SyncSeg + PropSeg + PhaseSeg1) / 位时间 × 100%

典型配置(500 kbps,时钟 48 MHz):
  Prescaler = 6
  Tq = 6 / 48 MHz = 125 ns
  位时间 = 16 Tq = 2 μs  → 500 kbps
  SyncSeg = 1 Tq
  PropSeg  = 5 Tq
  PhaseSeg1 = 4 Tq
  PhaseSeg2 = 6 Tq
  采样点 = (1+5+4)/16 = 62.5%

采样点一般推荐在 75%~87.5% 之间,但 DroneCAN 常见设备多采用 62.5%~75%。若采样点偏差过大,短距离调试可能正常,一旦线缆加长或节点增多,就会出现随机错误帧甚至总线关闭。抓包时若看到大量位填充错误或 CRC 错误,应优先核对各节点位定时是否一致。

四、终端电阻与总线拓扑

CAN 总线两端必须各接一个 120Ω 终端电阻,并联后等效 60Ω,用于吸收信号反射、加快总线从显性回到隐性的速度。DroneCAN 总线通常采用线性拓扑,节点通过短支线接入主干,支线长度应尽量短。

  • 电阻测量:断电后测量 CAN_H 与 CAN_L 之间电阻,正常应接近 60Ω;若为 120Ω,说明只有一端有电阻;若接近 0Ω 或无穷大,说明短路或断路。
  • 拓扑禁忌:星形、环形或长支线会引入阻抗不连续,导致反射和边沿振铃,表现为偶发错误帧。
  • 共地问题:差分信号虽抗共模干扰,但节点间地电位差过大仍可能超出收发器共模范围,建议总线随行地线或使用隔离收发器。
不要在总线中间随意增加 120Ω 电阻。多个终端电阻并联会使等效阻抗低于 60Ω,导致信号幅度下降、驱动能力不足,反而更容易出错。

五、案例:抓包中定位物理层故障

某四旋翼在悬停时 DroneCAN 节点偶发掉线。使用 CAN 分析仪抓包,发现错误帧集中在电机加速阶段,且错误类型以位填充错误和 ACK 错误为主。进一步用示波器观察差分波形,发现显性边沿存在明显振铃,且总线末端未安装终端电阻。补装 120Ω 电阻并缩短支线后,错误帧消失。这个案例说明:DroneCAN 的高层协议再完善,也无法弥补物理层的阻抗失配。

六、常见误区与复盘清单

  1. 只看 CAN_H 单线波形就判断通信正常,忽略差分电压和共模范围。
  2. 认为 120Ω 电阻“可有可无”,在短线上临时省略,导致批量装机后故障率上升。
  3. 各节点位定时不一致,尤其是不同厂商的电调、飞控和云台混用时。
  4. 把 DroneCAN 的节点 ID 与 CAN 标识符混为一谈,忽略扩展帧中的路由编码。
  5. 抓包工具波特率设置错误,却误判为总线无数据。
DroneCAN 物理层与数据链路层关键结构 物理层:差分信号与终端电阻 飞控节点 CAN 收发器 电调节点 CAN 收发器 云台节点 CAN 收发器 CAN_H / CAN_L 差分对 CAN_H / CAN_L 差分对 120Ω 120Ω 两端各 120Ω,并联等效 60Ω 数据链路层:扩展帧格式与位定时 SOF ID A/B RTR/IDE DLC 数据场 0~8 字节 CRC ACK EOF 位定时与采样点 Sync PropSeg PhaseSeg1 PhaseSeg2 采样点 ≈ 62.5%~75% 仲裁:显性覆盖隐性 节点1 ID:0x0A → 优先级高 节点2 ID:0x1F → 优先级低 低位显性者赢得总线,继续发送 物理层决定信号能否可靠传输,数据链路层决定帧如何被仲裁、校验与确认

把上述结构串起来看:差分信号提供抗干扰的电气基础,终端电阻保证信号完整性,位定时保证采样一致,扩展帧格式承载 DroneCAN 的路由信息,仲裁机制保证高优先级消息优先。抓包分析时,任何一层异常都会在日志中表现为错误帧、丢帧或节点离线。掌握这张分层图,就能在诊断时快速判断问题出在“线”上还是“帧”上。