一、飞控参数基础:参数是什么、存在哪里、怎么命名

飞控参数,说白了就是飞控板的「配置文件」。你想想看,一套飞控硬件装在不同机架上——四轴、六轴、固定翼、VTOL——凭什么都能飞?靠的就是参数。每个参数告诉飞控:你的飞机多重、电机是什么型号、PID 该给多大、遥控器通道怎么映射。

我刚开始接触飞控时,总觉得参数就是个数字,改改就行。后来炸了一次机才明白——参数是飞控的灵魂,改错了真会摔。

1.1 什么是飞控参数

飞控参数,本质上是一个键值对(Key-Value Pair)。每个参数有一个唯一的 ID(键),对应一个数值(值)。飞控固件启动时,从存储介质里读出这些键值对,加载到内存中,然后根据它们来决策。

核心概念:参数 = 飞控的行为规则。改变参数,就是改变飞控的「性格」。

举个例子:

  • MOT_PWM_MIN = 1000 → 电机最低油门信号是 1000μs
  • ATC_ANG_RLL_P = 4.5 → 横滚角度控制的比例增益是 4.5
  • BATT_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 参数存储的完整流程

一张图看懂参数从修改到保存的全过程:

飞控参数存储流程 用户修改参数 内存中更新值 触发保存命令 写入 Flash/EEPROM 注意 修改参数后必须执行 保存命令,否则断电 后参数会丢失 写入策略 Flash 模拟 EEPROM 会 做磨损均衡,不是每次 都写同一个位置

1.5 参数管理的几个实用建议

  1. 改参数前先备份——用 param save 或导出文件。我见过有人调了一下午 PID,不小心点了「恢复默认」,全没了。
  2. 一次只改一个参数——改完测试,确认没问题再改下一个。同时改多个参数,出问题你都不知道是哪个引起的。
  3. 记录参数变更日志——哪怕只是写在笔记本上。我习惯在代码仓库里维护一个 params/changelog.md,每次改参数都记一笔。
  4. 注意参数的单位和范围——有些参数是百分比(0~100),有些是物理值(米/秒),搞混了会出大事。

小技巧:ArduPilot 里可以用 param show * 列出所有参数,param diff 对比当前参数和默认值的差异。这两个命令我几乎天天用。

1.6 本章小结

飞控参数就是飞控的配置文件,存在 EEPROM 或 Flash 里。命名要规范,用前缀分组法。改参数要谨慎,保存要确认。这些基础搞清楚了,后面讲参数部署、批量修改、版本管理时才不会懵。

嗯,这一章就到这里。记住一句话:参数无小事,改前先备份。