一、CAN总线概述:从起源到飞控实战

1.1 CAN总线是怎么来的?

说起CAN总线,得回到上世纪80年代。那时候汽车越来越智能,各种电子控制器(ECU)多起来了。每个ECU之间要通信,线束多得吓人。我记得有个老工程师跟我吐槽过,一辆豪华车的线束拆出来能绕停车场一圈。

1983年,德国Bosch公司开始搞一个叫CAN(Controller Area Network)的东西。说白了,就是想让各个控制器共用两根线来聊天。1986年正式发布,1993年成为国际标准ISO 11898。嗯,这个标准到现在还在用。

为什么会火?因为CAN总线有几个天生的优点:

  • 多主通信:谁都能发消息,不用等主机点头
  • 实时性好:优先级高的消息,抢线能力就是强
  • 可靠性高:错误检测机制很完善,误码率极低
  • 抗干扰强:差分信号传输,在电机、电调旁边也不怕

核心要点:CAN总线最初是为汽车设计的,但它后来在工业控制、医疗设备、无人机等领域都大放异彩。原因很简单——它太适合恶劣环境下的可靠通信了。

1.2 CAN在无人机飞控中的价值

做无人机的人都知道,飞控系统最怕什么?怕干扰、怕延迟、怕丢数据。我刚开始做飞控时,用的是UART连接各个模块。结果呢?飞着飞着,GPS数据丢了,差点炸机。

后来换成CAN总线,情况完全不一样了。为什么?

  • 抗干扰能力强:CAN是差分信号,共模抑制比高。电机转动产生的电磁干扰,对CAN影响很小
  • 实时性有保障:CAN的消息优先级机制,让关键数据(比如遥控指令)总能优先传输
  • 节点扩展方便:想加个传感器?直接挂到CAN总线上就行,不用改硬件
  • 错误处理完善:CAN有CRC校验、帧检查、位填充等多种错误检测机制

个人经验:我在做一款六旋翼无人机时,飞控和四个ESC(电子调速器)之间用了CAN总线。原来用PWM信号时,线缆又粗又多,还容易受干扰。换成CAN后,就两根线,通信稳定多了。嗯,那次项目提前了两周交付。

在飞控系统中,CAN总线主要连接这些设备:

  • 主控芯片(STM32、NXP等)
  • IMU惯性测量单元
  • GPS/北斗模块
  • ESC电子调速器
  • 光流传感器
  • 激光雷达/超声波

1.3 CAN vs UART、I2C、SPI:谁更适合飞控?

很多新手会问:为什么不用UART?I2C不也挺好吗?SPI速度不是更快吗?

咱们来做个对比,你就明白了。

特性 CAN UART I2C SPI
通信方式 多主、广播 点对点 主从 主从
线缆数量 2根(CAN_H、CAN_L) 2根(TX、RX) 2根(SCL、SDA) 4根(SCK、MOSI、MISO、CS)
最大节点数 110+ 2 127 取决于CS引脚
通信距离 最长1km(低速) 约15m 约1m 约1m
抗干扰能力 强(差分信号) 弱(单端信号) 弱(单端信号) 弱(单端信号)
错误检测 完善(CRC+多种机制) 简单(奇偶校验) 简单(ACK/NACK)
实时性 高(优先级仲裁)
典型速率 1Mbps(40m内) 最高10Mbps 最高3.4Mbps 最高50Mbps

避坑指南:我曾经在一个项目中,用I2C连接飞控和GPS模块。结果飞行时电机一启动,I2C通信就频繁出错。后来查了半天,发现是I2C的抗干扰能力太差。换成CAN后,问题彻底解决。所以,在无人机这种强干扰环境下,别图省事用I2C。

你想想看,在飞控系统中:

  • UART:只能点对点,想连多个设备就得用多个UART口。飞控芯片的UART口有限,不够用
  • I2C:虽然能挂多个设备,但抗干扰差,距离短。在电机旁边用I2C,数据丢包是常事
  • SPI:速度快,但需要4根线,而且每个设备要单独的片选线。设备一多,线缆就乱
  • CAN:两根线搞定所有设备,抗干扰强,距离远,实时性好。说白了,它就是为这种场景设计的

1.4 CAN总线的知识体系

下面这张图,是我自己整理的CAN总线知识体系。你看一遍,就能对后面要学的内容有个整体印象。

CAN总线知识体系 物理层 差分信号、位时序 数据链路层 帧结构、仲裁、错误 应用层协议 CANopen、J1939 飞控系统CAN应用 传感器数据采集 | 电机控制指令 | 状态监控 | 固件升级 硬件设计要点 收发器选型 | 终端电阻 | 隔离设计 软件编程要点 初始化配置 | 报文收发 | 错误处理 调试工具 | 性能优化 | 故障排查

这张图把CAN总线的知识分成了四个层次。从底层的物理层,到飞控应用,再到硬件软件设计,最后是调试优化。咱们这门课,就是按照这个体系一步步往下讲的。

总结一下:CAN总线在飞控系统中的地位,就像脊椎在人体的作用——它把各个部件连接起来,让它们协同工作。选对通信协议,项目就成功了一半。我个人做了这么多年飞控,CAN总线一直是我的首选。


公众号:蓝海资料掘金营,微信deep3321