第二讲:飞控硬件平台认知——主控芯片选型与传感器布局
各位同学好,我是老张。今天咱们聊聊飞控硬件平台的核心部件。说白了,就是飞控的大脑和感官系统。
我做了十几年飞控系统,见过不少新手一上来就追最新的芯片、最贵的传感器。结果呢?飞起来抖得像筛子,或者干脆炸机。嗯,这里头有门道。
2.1 主控芯片选型:STM32H7 vs F7
主控芯片是飞控的大脑。我个人习惯用STM32系列,生态成熟、资料多。目前主流飞控主要用两个系列:F7和H7。
| 对比项 | STM32F7系列 | STM32H7系列 |
|---|---|---|
| 主频 | 216MHz | 480MHz(双核) |
| 浮点运算 | 单精度FPU | 双精度FPU |
| RAM | 512KB | 1MB+ |
| 典型型号 | STM32F765 | STM32H743 |
| 功耗 | 较低 | 较高(需散热) |
| 适用场景 | 常规飞控 | 高阶算法、AI飞控 |
我的建议:
- 做无副翼系统,F7完全够用。我早期用F405做过,也能跑。
- 如果你要跑EKF(扩展卡尔曼滤波)或者视觉SLAM,上H7更稳妥。
- H7的双核架构,一个核跑控制,一个核跑通信,互不干扰。
2.2 传感器接口与布局
飞控的传感器就像人的感官。IMU是内耳(感知姿态),GPS是眼睛(定位),磁力计是鼻子(定向),气压计是皮肤(感知高度)。
2.4.1 IMU(惯性测量单元)
IMU包含加速度计和陀螺仪。我常用的型号是ICM-20602和BMI088。
- 接口:SPI(推荐)或I2C。SPI速度更快,延迟更低。
- 布局:必须放在飞控板的几何中心。为什么?你想想看,如果IMU偏了,角速度测量会引入额外的向心加速度误差。
- 减震:用泡沫胶或硅胶垫隔离高频振动。我见过有人直接用双面胶粘,结果悬停时姿态震荡±5度。
2.4.2 GPS(全球定位系统)
GPS模块我用的是Ublox M8N或M9N。接口是UART,波特率通常设115200或230400。
- 天线:有源天线,增益至少25dB。天线要朝上,不能被碳纤维板遮挡。
- 布局:尽量远离电机和电调。GPS信号很弱,电磁干扰会直接导致定位漂移。
- 双天线:如果做RTK(实时动态定位),需要两个天线,间距至少30cm。
我记得有一次调试,GPS死活搜不到星。折腾了半天,发现是天线下面有一根电源线在走。把线挪开,秒搜星。嗯,细节决定成败。
2.4.3 磁力计(电子罗盘)
磁力计用来测量地磁场方向,辅助航向。常用型号有HMC5883L、IST8310。
- 接口:I2C,地址通常为0x1E或0x0C。
- 布局:必须远离大电流线路和铁磁物质。电机、电调、电源线都会产生磁场干扰。
- 校准:每次上电后做椭圆拟合校准。我习惯在飞控初始化时自动触发校准流程。
2.4.4 气压计
气压计用来测量高度。常用型号是MS5611和BMP280。
- 接口:I2C或SPI。MS5611的SPI速度可以到20MHz。
- 布局:必须开孔,让气压计接触外界大气。但孔要防尘、防雨。
- 温度补偿:气压计对温度敏感。我建议在气压计旁边放一个温度传感器,做实时补偿。
说白了,气压计就是个精密的气压表。你想想看,海拔每升高1米,气压下降约12Pa。MS5611的分辨率是0.012Pa,理论上能分辨1毫米的高度变化。但实际受气流影响,能稳定到10厘米就不错了。
2.3 PWM/SBUS输出通道
飞控控制舵机和电调,靠的是PWM信号。遥控器接收机传回信号,靠的是SBUS。
2.3.1 PWM输出
PWM信号频率通常为50Hz(周期20ms),脉宽1ms到2ms对应-45度到+45度。
- 定时器:STM32的TIM1、TIM8、TIM2等都可以输出PWM。
- 通道数:无副翼系统至少需要4个PWM通道(副翼、升降、油门、尾舵)。我习惯预留8个通道,方便扩展。
- 分辨率:建议用16位定时器,分辨率可达0.5us。12位定时器只有2us分辨率,舵机响应会粗糙。
// STM32H7 PWM初始化示例(TIM1,通道1)
TIM_HandleTypeDef htim1;
htim1.Instance = TIM1;
htim1.Init.Prescaler = 0; // 不分频
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 20000 - 1; // 20ms周期
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&htim1);
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 1500; // 中位值,1.5ms
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
2.3.2 SBUS接收
SBUS是Futaba的串行总线协议,用UART接收,波特率100000,8位数据,偶校验,2位停止位。
- 硬件:需要UART的RX引脚,外加一个反相器(SBUS信号是反相的)。
- 协议:每帧25字节,包含16个通道数据,每通道11位分辨率。
- 中断:用UART空闲中断接收,或者DMA+空闲中断。我推荐DMA方式,不占用CPU。
2.4 知识体系总览
下面这张图是我画的飞控硬件架构图,你看一眼就能明白各个模块怎么连的:
这张图里,主控芯片是核心,所有传感器通过SPI、UART、I2C总线连接。PWM和SBUS是飞控与外界交互的通道。电源管理模块给所有芯片供电。
嗯,硬件平台认知就讲到这里。记住一句话:硬件是骨架,软件是血肉。骨架歪了,再好的算法也飞不稳。下一讲咱们开始搭软件框架,把传感器数据读进来。
公众号:蓝海资料掘金营,微信deep3321