第2章:飞控系统硬件平台

做飞控这么多年,我始终觉得硬件平台是整架飞机的「骨架」。软件写得再漂亮,硬件选型不对,飞起来也是提心吊胆。今天咱们就聊聊主控芯片、传感器和执行机构这三块核心硬件。

2.1 主控芯片选型:STM32、ARM、DSP

主控芯片是飞控的大脑。我见过不少新手一上来就问「哪个芯片最好?」其实没有最好,只有最合适。咱们得看任务需求。

2.1.1 STM32系列

STM32在飞控圈里用得最多。为什么?性价比高,生态成熟。我个人习惯用STM32F4或F7系列,比如STM32F405、F427。它们有FPU(浮点运算单元),处理姿态解算够用。

核心优势:

  • 主频168MHz~216MHz,够跑实时操作系统
  • 丰富的外设:SPI、I2C、UART、CAN、PWM
  • HAL库和LL库支持,开发效率高
  • 价格亲民,样片好买

我在项目中遇到过一件事:用STM32F103做飞控,结果姿态更新频率上不去,IMU数据读取有延迟。后来换成F405,问题迎刃而解。说白了,算力不够就是不够,别硬撑。

2.1.2 ARM Cortex-A系列

如果你要做视觉导航、SLAM或者高级路径规划,那得上ARM Cortex-A系列,比如树莓派、RK3399。这类芯片跑Linux,能处理图像和复杂算法。

但要注意:实时性不如STM32。我建议用「双核方案」——A系列跑上层任务,M系列跑底层控制。嗯,这也是现在很多工业级飞控的做法。

2.1.3 DSP

DSP在信号处理上有天然优势。比如TI的C2000系列,处理电机控制、数字滤波非常快。但说实话,现在STM32的DSP指令集已经够用了,除非你要做极高精度的传感器融合,否则DSP不是必须的。

芯片类型 典型型号 适用场景 我个人的推荐
STM32 F405、F427、H743 常规飞控、Pixhawk ★★★★★
ARM A系列 树莓派4、RK3399 视觉飞控、AI无人机 ★★★☆☆
DSP TMS320F28379 高精度伺服、工业控制 ★★☆☆☆

我的选型建议:新手先用STM32F405入门,跑通姿态解算和控制逻辑。等需要视觉或AI时,再加一块协处理器。别一上来就搞复杂架构,容易翻车。

2.2 传感器:IMU、GPS、气压计

传感器是飞控的「眼睛」和「耳朵」。数据不准,控制再好也白搭。我见过太多炸机案例,最后查出来是传感器没校准。

2.2.1 IMU(惯性测量单元)

IMU包含加速度计和陀螺仪。现在主流是六轴IMU,比如MPU6000、ICM-20602。有些还带磁力计,变成九轴。

选IMU要注意几点:

  • 量程:加速度计一般±2g~±16g,陀螺仪±250°/s~±2000°/s。多旋翼用±4g和±500°/s就够了。
  • 噪声密度:越低越好。ICM-20602的噪声比MPU6000低不少。
  • 温度稳定性:这个容易被忽略。我曾经在冬天试飞,IMU数据飘得厉害,后来加了温度补偿才解决。

避坑指南:我曾经遇到过IMU安装位置不对,离电机太近,振动直接传到了传感器上。结果姿态解算出来的角度全是毛刺。后来加了减震海绵,数据才干净。记住:IMU一定要远离振动源!

2.2.2 GPS

GPS提供位置和速度信息。室外飞行离不开它。现在主流是u-blox M8N或M9N,支持GPS+北斗双模。

选GPS看这几个指标:

  • 定位精度:民用级2.5米左右,RTK可以到厘米级
  • 更新率:5Hz~10Hz够用,高速飞行需要更高
  • 搜星数量:越多越好,至少10颗以上

嗯,这里要注意:GPS信号容易被遮挡。我在城市里飞过,高楼之间GPS经常丢星。所以飞控一定要有「无GPS」的应急模式,比如光流或视觉定位。

2.2.3 气压计

气压计用来测高度。常用型号有MS5611、BMP280。MS5611精度高,响应快,我比较推荐。

但气压计有个毛病——受温度影响大。飞机从地面飞到高空,温度变化十几度,气压计读数会漂。解决办法是加温度补偿算法,或者融合超声波/激光测距。

传感器融合小技巧:IMU负责短时间内的姿态变化,GPS和气压计负责长时间的位置修正。用卡尔曼滤波把它们融合起来,才能得到稳定可靠的数据。这个后面章节会详细讲。

2.3 执行机构:舵机与电调

执行机构是飞控的「手脚」。控制指令最终要靠它们来实现。

2.3.1 舵机

舵机用于控制固定翼的舵面、直升机的斜盘。选舵机看扭矩和速度。扭矩不够,舵面打不动;速度太慢,响应跟不上。

我常用的舵机信号是PWM,频率50Hz,脉宽1ms~2ms对应0°~180°。现在也有数字舵机,支持更高频率,响应更快。

// 舵机控制示例(STM32 HAL库)
// 定时器PWM输出,频率50Hz
// 脉宽计算:1ms = 0°,1.5ms = 90°,2ms = 180°
void servo_set_angle(TIM_HandleTypeDef *htim, uint32_t channel, uint16_t angle) {
    // 角度转脉宽:0°->1000us, 180°->2000us
    uint16_t pulse = 1000 + (angle * 1000 / 180);
    __HAL_TIM_SET_COMPARE(htim, channel, pulse);
}

经验之谈:舵机供电一定要和飞控板分开。我曾经图省事,用飞控的5V给舵机供电,结果舵机一动作,飞控就复位。后来加了独立的BEC(电池消除电路),问题解决。

2.3.2 电调

电调控制无刷电机的转速。多旋翼、固定翼都用得上。电调的核心是输出PWM信号,频率通常为50Hz~500Hz。

选电调看电流和协议:

  • 持续电流:要大于电机最大电流的1.5倍,留余量
  • 协议:普通PWM、OneShot、DShot。DShot是数字协议,抗干扰能力强,我推荐用DShot600

电调校准也很重要。不同电调的PWM范围可能不一样,有的1000us~2000us,有的1100us~1900us。不校准的话,电机可能转不起来或者转速不一致。

避坑指南:我曾经遇到过电调和飞控的PWM频率不匹配,导致电机抖动。查了半天才发现电调默认是400Hz,飞控输出的是50Hz。后来统一改成400Hz,问题解决。记住:电调和飞控的PWM频率一定要一致!

2.4 硬件平台整体架构

最后,我画一个典型的飞控硬件架构图(文字版):

+------------------+       +------------------+
|  主控芯片         |       |  传感器组         |
|  STM32F405        |<---->|  IMU (MPU6000)    |
|  168MHz           |       |  气压计 (MS5611)  |
|  512KB Flash      |       |  磁力计 (HMC5883) |
+--------+---------+       +------------------+
         |
         | SPI / I2C / UART
         |
+--------+---------+       +------------------+
|  执行机构         |       |  通信模块         |
|  舵机 (PWM)       |       |  GPS (u-blox M8N) |
|  电调 (DShot)     |       |  数传 (433MHz)    |
|  电机             |       |  接收机 (SBUS)    |
+------------------+       +------------------+

这个架构图是我在多个项目中验证过的。主控通过SPI读取IMU和气压计,通过UART读取GPS,通过PWM或DShot控制舵机和电调。各模块独立工作,互不干扰。

好了,硬件平台就聊到这儿。下一章咱们开始讲软件架构,那才是飞控的灵魂。记住:硬件选型决定了飞控的下限,软件算法决定了上限。两者都重要,缺一不可。


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