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 仲裁机制的电学基础。
二、数据链路层:帧格式与仲裁
DroneCAN 使用扩展帧(29 位标识符),因为 DroneCAN 的节点 ID、消息类型、服务类型等信息需要编码进标识符。一帧扩展 CAN 数据帧的主要字段如下:
| 字段 | 长度 | 作用 |
|---|---|---|
| SOF | 1 位 | 帧起始,显性位,用于硬同步 |
| 标识符 A/B | 11 + 18 位 | 29 位扩展 ID,含优先级与 DroneCAN 路由信息 |
| RTR / IDE / SRR | 3 位 | 远程帧、扩展帧标志 |
| DLC | 4 位 | 数据长度,0~8 字节 |
| 数据场 | 0~64 位 | DroneCAN 载荷,通常为紧凑二进制结构 |
| CRC 场 | 15 位 + 1 位 | 循环冗余校验与界定符 |
| ACK 场 | 2 位 | 接收节点拉低 ACK 槽表示正确接收 |
| EOF | 7 位 | 帧结束,隐性位序列 |
仲裁发生在标识符逐位发送的过程中:节点每发一位就回读总线,若自己发隐性却读到显性,说明有更高优先级节点在竞争,立即退出并转为接收。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Ω 或无穷大,说明短路或断路。
- 拓扑禁忌:星形、环形或长支线会引入阻抗不连续,导致反射和边沿振铃,表现为偶发错误帧。
- 共地问题:差分信号虽抗共模干扰,但节点间地电位差过大仍可能超出收发器共模范围,建议总线随行地线或使用隔离收发器。
五、案例:抓包中定位物理层故障
某四旋翼在悬停时 DroneCAN 节点偶发掉线。使用 CAN 分析仪抓包,发现错误帧集中在电机加速阶段,且错误类型以位填充错误和 ACK 错误为主。进一步用示波器观察差分波形,发现显性边沿存在明显振铃,且总线末端未安装终端电阻。补装 120Ω 电阻并缩短支线后,错误帧消失。这个案例说明:DroneCAN 的高层协议再完善,也无法弥补物理层的阻抗失配。
六、常见误区与复盘清单
- 只看 CAN_H 单线波形就判断通信正常,忽略差分电压和共模范围。
- 认为 120Ω 电阻“可有可无”,在短线上临时省略,导致批量装机后故障率上升。
- 各节点位定时不一致,尤其是不同厂商的电调、飞控和云台混用时。
- 把 DroneCAN 的节点 ID 与 CAN 标识符混为一谈,忽略扩展帧中的路由编码。
- 抓包工具波特率设置错误,却误判为总线无数据。
把上述结构串起来看:差分信号提供抗干扰的电气基础,终端电阻保证信号完整性,位定时保证采样一致,扩展帧格式承载 DroneCAN 的路由信息,仲裁机制保证高优先级消息优先。抓包分析时,任何一层异常都会在日志中表现为错误帧、丢帧或节点离线。掌握这张分层图,就能在诊断时快速判断问题出在“线”上还是“帧”上。