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 调试日志(最低优先级)
三、错误检测:五重防线保障数据完整性
CAN协议内置五种错误检测机制,飞控中任何一帧数据出错都会被标记并触发重传:
- 位错误:发送节点回读电平与发送不一致(仲裁场除外)。
- 填充错误:连续5个相同电平后必须插入1个相反电平,否则报错。
- CRC错误:接收节点计算的CRC与帧内CRC不符。
- 格式错误:固定格式字段出现非法电平。
- 应答错误:发送节点在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 | 数据长度 | 周期 | 优先级 |
|---|---|---|---|---|
| 电机紧急停转 | 0x080 | 2字节 | 事件触发 | 最高 |
| 姿态控制指令 | 0x100 | 8字节 | 5 ms | 高 |
| IMU原始数据 | 0x120 | 8字节 | 2 ms | 高 |
| 电机转速反馈 | 0x180 | 4字节 | 10 ms | 中 |
| 电池电压/电流 | 0x200 | 4字节 | 50 ms | 低 |
| 调试日志 | 0x300 | 8字节 | 100 ms | 最低 |
六、案例与复盘:一次CAN总线过载导致的失控
某四旋翼飞控在飞行中突然出现电机转速抖动,随后一侧电机停转。事后分析CAN日志发现:调试日志帧以1 ms周期发送,占用总线带宽约40%,导致姿态控制帧延迟从5 ms恶化到18 ms。同时,某电调因连续位错误进入错误被动状态,最终总线关闭。
复盘结论:
- 调试日志必须限速,建议周期≥100 ms,或仅在解锁前发送。
- 安全关键帧ID必须低于0x100,确保仲裁优先。
- 每个电调应使能总线关闭自动恢复,或由飞控定期发送恢复帧。
- 总线负载率建议控制在30%以下,留出冗余带宽应对突发重传。
掌握CAN帧格式、仲裁、错误检测、位定时与拓扑,是飞控CAN设备冗余设计的基础。只有先理解单条总线的行为边界,才能进一步设计双CAN冗余、通道切换与故障隔离策略。