一、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总线的知识分成了四个层次。从底层的物理层,到飞控应用,再到硬件软件设计,最后是调试优化。咱们这门课,就是按照这个体系一步步往下讲的。
总结一下:CAN总线在飞控系统中的地位,就像脊椎在人体的作用——它把各个部件连接起来,让它们协同工作。选对通信协议,项目就成功了一半。我个人做了这么多年飞控,CAN总线一直是我的首选。
公众号:蓝海资料掘金营,微信deep3321