2. CAN总线基础

在飞控系统中,CAN总线承担着飞控计算机、IMU、GPS、电调、舵机、电源管理模块之间的实时数据交换任务。理解CAN协议的基础机制,是后续设计设备冗余与容错策略的前提。本节从帧格式、仲裁、错误检测、位定时、总线拓扑五个维度展开,并落到飞控典型应用场景。

一、CAN协议帧格式:数据帧是飞控通信的主力

CAN 2.0B定义了四种帧类型:数据帧、远程帧、错误帧、过载帧。飞控系统中绝大多数通信使用扩展数据帧(29位标识符),因为需要区分多个设备、多个数据流。一个标准数据帧由以下字段构成:

  • 帧起始(SOF):1位显性电平,用于硬同步。
  • 仲裁场:11位或29位标识符 + RTR位,决定优先级。
  • 控制场:IDE、r0、DLC(数据长度码,0~8字节)。
  • 数据场:0~8字节有效载荷,飞控中常用于传输姿态、角速度、电机转速等。
  • CRC场:15位CRC + 1位界定符,用于错误检测。
  • 应答场(ACK):发送节点发隐性,接收节点拉显性表示正确接收。
  • 帧结束(EOF):7位隐性电平。

飞控中常见的CAN帧数据长度通常为8字节,例如电机控制指令帧包含:电机编号、目标转速、使能标志、校验字节。若使用CAN FD,数据场可扩展至64字节,适合传输IMU原始数据或日志。

二、仲裁机制:非破坏性逐位仲裁

CAN总线采用载波监听多路访问/冲突检测(CSMA/CD)与逐位仲裁相结合。当多个节点同时发送时,显性位(逻辑0)会覆盖隐性位(逻辑1)。每个节点在发送每一位的同时回读总线电平,一旦发现回读电平与发送电平不一致,立即退出仲裁,转为接收状态。仲裁失败的节点不会丢失数据,会在下一帧继续尝试。

仲裁的关键在于标识符数值越小,优先级越高。飞控中通常将安全关键帧(如电机停转指令、故障告警)分配低数值ID,将普通遥测帧分配高数值ID。例如:

0x080  电机紧急停转(最高优先级)
0x100  姿态控制指令
0x180  电机转速反馈
0x200  电池电压/电流
0x300  调试日志(最低优先级)
仲裁只发生在仲裁场和ACK场之前,一旦进入数据场,所有节点都已确定主从关系,不会再有冲突。

三、错误检测:五重防线保障数据完整性

CAN协议内置五种错误检测机制,飞控中任何一帧数据出错都会被标记并触发重传:

  1. 位错误:发送节点回读电平与发送不一致(仲裁场除外)。
  2. 填充错误:连续5个相同电平后必须插入1个相反电平,否则报错。
  3. CRC错误:接收节点计算的CRC与帧内CRC不符。
  4. 格式错误:固定格式字段出现非法电平。
  5. 应答错误:发送节点在ACK槽未检测到显性电平。

每个节点维护发送错误计数器(TEC)和接收错误计数器(REC)。当TEC或REC超过阈值时,节点会经历错误主动→错误被动→总线关闭三种状态。飞控中若某电调进入总线关闭,必须通过软件复位或硬件断电恢复,否则该电调将彻底失联。

四、位定时与同步:保证采样点一致

CAN总线没有独立时钟线,所有节点依靠位定时逻辑对位流进行同步。一个位时间被划分为四个段:

  • 同步段(Sync_Seg):1个时间份额,用于硬同步。
  • 传播段(Prop_Seg):补偿总线物理延迟。
  • 相位缓冲段1(Phase_Seg1):可被重同步延长。
  • 相位缓冲段2(Phase_Seg2):可被重同步缩短。

采样点位于Phase_Seg1结束处。飞控中常用位速率500 kbps或1 Mbps,采样点建议设置在75%~87.5%之间。若采样点设置不当,长线缆或高负载下容易出现位错误。以下为典型配置:

位速率:500 kbps
晶振:8 MHz
BRP = 1
TSEG1 = 13
TSEG2 = 2
采样点 = (1 + 13) / (1 + 13 + 2) = 87.5%

五、总线拓扑与飞控应用场景

CAN总线采用线性总线拓扑,两端各接一个120Ω终端电阻,节点通过短支线挂接。飞控中常见拓扑为:飞控计算机作为主节点,IMU、GPS、电调、电源模块作为从节点,全部并联在CAN_H和CAN_L之间。

下表对比飞控中典型CAN设备与帧类型、优先级、周期的关系:

设备典型帧ID数据长度周期优先级
电机紧急停转0x0802字节事件触发最高
姿态控制指令0x1008字节5 ms高
IMU原始数据0x1208字节2 ms高
电机转速反馈0x1804字节10 ms中
电池电压/电流0x2004字节50 ms低
调试日志0x3008字节100 ms最低
飞控中若将调试日志ID设为0x000,会阻塞所有安全关键帧,导致电机停转指令延迟。ID分配必须遵循“安全优先、日志最后”原则。

六、案例与复盘:一次CAN总线过载导致的失控

某四旋翼飞控在飞行中突然出现电机转速抖动,随后一侧电机停转。事后分析CAN日志发现:调试日志帧以1 ms周期发送,占用总线带宽约40%,导致姿态控制帧延迟从5 ms恶化到18 ms。同时,某电调因连续位错误进入错误被动状态,最终总线关闭。

复盘结论:

  • 调试日志必须限速,建议周期≥100 ms,或仅在解锁前发送。
  • 安全关键帧ID必须低于0x100,确保仲裁优先。
  • 每个电调应使能总线关闭自动恢复,或由飞控定期发送恢复帧。
  • 总线负载率建议控制在30%以下,留出冗余带宽应对突发重传。
CAN总线帧格式与飞控拓扑示意 数据帧字段结构 SOF 仲裁场 29位ID 控制场 数据场 0~8B CRC 15位 ACK EOF 逐位仲裁:ID越小优先级越高 节点A ID=0x100 节点B ID=0x080 0 0 节点A退出仲裁 节点B继续发送 飞控CAN总线线性拓扑 CAN_H CAN_L 120Ω 120Ω 飞控计算机 IMU GPS 电调1 电调2 电源模块 错误状态迁移:错误主动 → 错误被动 → 总线关闭(需复位恢复)

掌握CAN帧格式、仲裁、错误检测、位定时与拓扑,是飞控CAN设备冗余设计的基础。只有先理解单条总线的行为边界,才能进一步设计双CAN冗余、通道切换与故障隔离策略。