二、飞控系统架构:飞控计算机、传感器、执行机构的典型架构

好,咱们进入正题。飞控系统架构,说白了就是一套「感知-决策-执行」的闭环。你想想看,无人机在天上飞,它得知道自己姿态怎么样、位置在哪,然后大脑算一算该怎么动,最后让舵机、电机去执行。这个链条缺一不可。

我个人习惯把飞控系统拆成三大块:传感器(感知)、飞控计算机(决策)、执行机构(动作)。今天咱们就挨个聊透。

2.1 飞控计算机:大脑的核心

飞控计算机,也叫飞控板,是整套系统的中枢。它负责读取传感器数据,运行控制算法,然后输出PWM信号给执行机构。

我在项目中遇到过不少新手,上来就选最贵的STM32H7,结果发现根本用不上。其实对于大多数四旋翼,STM32F4系列就绰绰有余了。为什么?因为飞控算法对实时性要求高,但对算力要求没那么夸张。

核心指标:

  • 主频:100MHz以上(F4系列足够)
  • RAM:至少128KB(用于存放状态数据和任务栈)
  • 外设:至少3路SPI(接IMU、气压计)、2路UART(接GPS、数传)
  • 定时器:至少4路(用于PWM输出和捕获)

嗯,这里要注意:飞控计算机的选型,实时性比算力更重要。你算得再快,如果任务调度乱套,飞机照样炸。我建议用FreeRTOS这类轻量级RTOS,把传感器读取、姿态解算、控制输出分别放在不同优先级的任务里。

2.2 传感器:飞控的眼睛和耳朵

传感器这块,我把它分成三类:姿态传感器(IMU)、位置传感器(GPS)、高度传感器(气压计)。

2.2.1 IMU(惯性测量单元)

IMU是飞控最核心的传感器。它包含三轴加速度计和三轴陀螺仪。加速度计测重力方向,陀螺仪测角速度。两者融合,才能得到稳定的姿态角。

我曾经踩过一个坑:用了一款便宜的MPU6050,结果在震动环境下数据直接炸了。后来换成ICM-20602,带内置滤波,效果好了很多。所以我的建议是:别在IMU上省钱

我的经验:

IMU数据一定要做低通滤波。我一般用二阶巴特沃斯,截止频率设在30Hz左右。太高了会引入噪声,太低了会滞后。你可以在代码里这样写:

// 二阶低通滤波示例
float filter_imu(float input, float prev_output, float prev_input) {
    float b0 = 0.2066;
    float b1 = 0.4133;
    float b2 = 0.2066;
    float a1 = -0.3695;
    float a2 = 0.1958;
    return b0*input + b1*prev_input + b2*prev_input - a1*prev_output - a2*prev_output;
}

2.2.2 GPS(全球定位系统)

GPS提供位置和速度信息。但说实话,GPS在飞控里只能做辅助定位。为什么?因为它的更新频率太低了,一般只有5-10Hz,而且精度受卫星数量影响很大。

我记得有一次在楼群密集的地方试飞,GPS直接丢了信号,飞机差点飘走。所以我现在做项目,一定会加光流传感器或者视觉定位作为室内/低空的补充。

传感器 更新频率 精度 适用场景
GPS(单点) 5-10 Hz 2-5米 室外、开阔环境
GPS(RTK) 10-20 Hz 厘米级 高精度测绘、农业
光流 50-100 Hz 分米级 室内、低空悬停

2.2.3 气压计

气压计用来测高度。原理很简单:气压随高度变化。但实际用起来,问题不少。风、温度、甚至飞机自身的下洗气流都会影响读数。

我建议用MS5611或者BMP280。MS5611精度更高,但贵一点。BMP280便宜,但噪声大。如果你做的是消费级产品,BMP280够用;如果是工业级,还是上MS5611吧。

避坑指南:

我曾经在气压计上吃过亏。当时把气压计直接贴在飞控板上,结果板子发热导致气压计温度漂移,高度数据一直往上飘。后来我把它单独放在一个海绵垫上,远离热源,问题才解决。所以记住:气压计一定要做温度补偿,并且远离发热元件

2.3 执行机构:舵机和电机

执行机构是飞控系统的「手脚」。飞控算好了控制量,最后得靠它们来实现。

2.3.1 舵机(用于固定翼/直升机)

舵机控制的是角度。飞控输出PWM信号,舵机根据脉宽转动对应角度。常见的舵机有模拟舵机和数字舵机。数字舵机响应更快,但功耗也大。

我一般用PWM频率50Hz,脉宽范围1000-2000us。这个标准几乎所有的航模舵机都支持。但要注意:不同舵机的死区不一样,有的2us就动,有的要5us。所以做控制的时候,最好加一个死区补偿。

// 舵机PWM输出示例
void servo_set_angle(float angle) {
    // angle: -90° 到 90°
    float pulse_width = 1500 + (angle / 90.0) * 500;  // 1000-2000us
    TIM_SetCompare1(TIM2, (uint16_t)(pulse_width / 20.0 * 1000));
}

2.3.2 电机(用于多旋翼)

多旋翼用的是无刷直流电机(BLDC),通过电子调速器(ESC)控制。ESC接收PWM信号,然后驱动电机旋转。

这里有个关键点:电机的响应速度比舵机慢得多。舵机可以在10ms内完成动作,但电机从0到满速可能需要100ms以上。所以飞控算法里,电机通道的PID参数要调得保守一些,不然容易震荡。

我记得第一次调四旋翼PID,把电机响应设得太快,结果飞机在地上疯狂抖动,差点把桨叶甩飞。后来我把D项调小,才稳住。

执行机构选型建议:

  • 固定翼:舵机选金属齿轮的,耐用;电机选低KV值的,配大桨效率高
  • 多旋翼:电机选高KV值的,响应快;ESC选带BLHeli固件的,可调参数多
  • 直升机:舵机一定要选高速数字舵机,锁尾舵机尤其关键

2.4 典型架构总结

好了,咱们把三大块串起来。一个典型的飞控系统架构是这样的:

  1. 传感器层:IMU(姿态)、GPS(位置)、气压计(高度)
  2. 飞控计算机层:读取传感器数据 → 姿态解算(互补滤波/卡尔曼) → 控制算法(PID) → 输出PWM
  3. 执行机构层:舵机(角度控制)或电机(转速控制)

你想想看,这个架构其实很清晰。但实际做硬件在环仿真的时候,你会发现:传感器噪声、执行机构延迟、通信延时,这三个因素才是决定飞控性能的关键。仿真模型里如果忽略了这些,那仿真结果就是纸上谈兵。

我个人习惯在仿真里加入高斯白噪声模拟传感器误差,再加一个一阶滞后环节模拟执行机构响应。这样仿真出来的结果,才跟实际试飞接近。

一个小技巧:

做硬件在环仿真时,先把传感器和执行机构的模型单独标定一遍。比如给舵机一个阶跃信号,记录它的响应曲线,然后拟合出一阶或二阶模型参数。这样你的仿真模型就准了。

嗯,关于飞控系统架构,今天就聊这么多。下一章咱们会深入讲传感器数据融合,到时候会手把手带你写一个互补滤波器的代码。到时候见。