一、飞控参数基础:参数是什么、存在哪里、怎么命名
飞控参数,说白了就是飞控板的「配置文件」。你想想看,一套飞控硬件装在不同机架上——四轴、六轴、固定翼、VTOL——凭什么都能飞?靠的就是参数。每个参数告诉飞控:你的飞机多重、电机是什么型号、PID 该给多大、遥控器通道怎么映射。
我刚开始接触飞控时,总觉得参数就是个数字,改改就行。后来炸了一次机才明白——参数是飞控的灵魂,改错了真会摔。
1.1 什么是飞控参数
飞控参数,本质上是一个键值对(Key-Value Pair)。每个参数有一个唯一的 ID(键),对应一个数值(值)。飞控固件启动时,从存储介质里读出这些键值对,加载到内存中,然后根据它们来决策。
核心概念:参数 = 飞控的行为规则。改变参数,就是改变飞控的「性格」。
举个例子:
MOT_PWM_MIN= 1000 → 电机最低油门信号是 1000μsATC_ANG_RLL_P= 4.5 → 横滚角度控制的比例增益是 4.5BATT_CAPACITY= 5200 → 电池容量 5200mAh
每个参数都有类型:整型、浮点型、布尔型、枚举型。我见过不少新手把浮点参数写成整数,结果 PID 增益直接翻倍——飞机一解锁就翻。
1.2 参数存在哪里:EEPROM vs Flash
参数不能只待在内存里,断电就丢了。它们需要存在非易失性存储里。飞控上最常见的是两种介质:EEPROM 和 Flash。
| 特性 | EEPROM | Flash(模拟 EEPROM) |
|---|---|---|
| 读写单位 | 字节(Byte) | 页(Page),通常 256B~4KB |
| 擦写寿命 | 约 10 万次 | 约 1 万次(但可磨损均衡) |
| 写入速度 | 慢(ms 级) | 快(μs 级) |
| 典型容量 | 1KB~64KB | 128KB~2MB |
| 常见飞控 | Pixhawk 1(外挂 24C02) | Pixhawk 4、Cube Orange(STM32 内部 Flash) |
嗯,这里要注意:现代飞控大多用 Flash 模拟 EEPROM。为什么?因为 STM32 芯片内部没有独立 EEPROM,只能拿 Flash 的一部分来存参数。但 Flash 擦写寿命短,所以固件会做磨损均衡——每次改参数写到下一个空闲位置,而不是原地覆盖。
我的经验:我曾经调试一架测绘无人机,参数怎么保存都报错。查了两天才发现——Flash 模拟 EEPROM 的存储区域被 Bootloader 占用了。每次保存参数,实际上写到了 Bootloader 区,一重启就恢复出厂值。后来改了链接脚本才解决。
还有一个坑:参数存储的校验。大多数飞控会在参数区末尾存一个 CRC32 校验和。启动时先校验,校验失败就用默认参数。我遇到过有人用串口工具直接改 Flash 内容,结果校验和没更新,飞控每次启动都恢复默认——他还以为是固件 bug。
1.3 参数 ID 与命名规范
参数多了,命名就得有规矩。不然几千个参数,你找都找不到。
主流飞控固件(ArduPilot、PX4)都采用前缀分组法:
- 前缀:表示参数所属模块,如
ATC_(姿态控制)、MOT_(电机)、BATT_(电池) - 中间名:表示具体功能,如
ANG(角度)、RLL(横滚)、P(比例增益) - 后缀:有时带编号,如
_1、_2,表示通道或实例
举个例子:ATC_ANG_RLL_P
| 段 | 含义 |
|---|---|
| ATC | 姿态控制(Attitude Control) |
| ANG | 角度控制(Angle) |
| RLL | 横滚轴(Roll) |
| P | 比例增益(Proportional) |
我个人习惯是:看到参数名,就能猜出它属于哪个模块。如果命名混乱,调试时就是灾难。
避坑指南:我曾经接手过一个项目,前任工程师用 param1、param2 这种名字。结果 500 多个参数,没人知道哪个是哪个。最后我花了一周重新整理命名,全部改成带前缀的规范名。那之后,团队再也没因为参数搞混而出过问题。
另外,参数 ID 在固件里是字符串,但查找时会被哈希成 32 位整数。所以参数名长度有限制——ArduPilot 限制 16 字符,PX4 限制 25 字符。命名时别写太长的名字。
1.4 参数存储的完整流程
一张图看懂参数从修改到保存的全过程:
1.5 参数管理的几个实用建议
- 改参数前先备份——用
param save或导出文件。我见过有人调了一下午 PID,不小心点了「恢复默认」,全没了。 - 一次只改一个参数——改完测试,确认没问题再改下一个。同时改多个参数,出问题你都不知道是哪个引起的。
- 记录参数变更日志——哪怕只是写在笔记本上。我习惯在代码仓库里维护一个
params/changelog.md,每次改参数都记一笔。 - 注意参数的单位和范围——有些参数是百分比(0~100),有些是物理值(米/秒),搞混了会出大事。
小技巧:ArduPilot 里可以用 param show * 列出所有参数,param diff 对比当前参数和默认值的差异。这两个命令我几乎天天用。
1.6 本章小结
飞控参数就是飞控的配置文件,存在 EEPROM 或 Flash 里。命名要规范,用前缀分组法。改参数要谨慎,保存要确认。这些基础搞清楚了,后面讲参数部署、批量修改、版本管理时才不会懵。
嗯,这一章就到这里。记住一句话:参数无小事,改前先备份。