气压计
气压计通过测量空气压力确定高度。它非常灵敏,甚至呼出的一口气都会影响读数,并且对温度也非常敏感。因此通常内置高精度温度传感器用于补偿。
Betaflight 使用气压计数据辅助确定飞行器相对于起飞点的高度,并辅助 GPS Rescue 中的高度控制。
大多数情况下,Betaflight 应能自动检测气压计。
气压计用于测量相对高度变化远比测量绝对高度更有价值。英飞凌 DPS368 等现代气压计芯片能检测极小的高度变化(小于 10 cm),具有良好的噪声抑制,并以 40 Hz 更新数值。
DPS310 比旧款 BMP280 好得多,DPS368 又更进一步。DPS310 与 BMP280 的克隆芯片被广泛使用,但其可靠性或温度补偿通常不如原厂芯片。
Betaflight 在上电后不久将气压计数据归零,因此气压计高度相对于上电点计算。解锁时,零值可能再次校正为零。
暴露在湍流气流中的气压计,例如桨洗流中,会返回噪声很大的高度值。通常建议在气压计上覆盖柔软泡棉以减轻该问题。
电机启动而四轴飞行器仍在地面时,螺旋桨和地面间的正压可能被气压计解释为负高度。起飞后该现象会消失。
请勿在气压计芯片上涂覆三防漆!
三防漆可能覆盖用于测量气压的通气孔,造成错误的高度读数,并使读数随温度变化产生大量漂移。
确认气压计工作正常
首先确认已在 Configurator 的 Configuration 页面启用 Barometer。
顶部的 Barometer 图标应随之亮起。这表示固件包含 Baro 支持及合适的驱动程序。
多数气压计经 USB 供电,但部分需要 LiPo 供电。若图标未亮起,请拆下螺旋桨,然后尝试在 LiPo 接口接入电池或等效电源,观察结果。
若 Barometer 图标亮起,进入 Sensors 标签页并在顶部选择 Barometer,应能看到气压计高度读数。将四轴飞行器或飞控上下移动约 1 m,读数也应变化约 1 m。出现少量噪声和延迟属于正常现象。
高级检查
Baro Debug 模式返回:
| Debug | 数据 |
|---|---|
| 0 | 状态(初始化期间) |
| 1 | 绝对压力,单位 hPa |
| 2 | 气压计报告的温度,单位 deg C * 100 |
| 3 | 仅由 Baro 得出的高度估计,单位 cm |
这些值可记录到日志中,或显示在 Configurator Sensors 标签页的图表内。请检查温度读数是否准确;2145 表示 21.45 deg C。若误差很大,芯片可能是 DPS310 克隆品,温度补偿可能较差。
气压计与 GPS 的高度估算
气压计和 GPS 模块都会提供高度数据。
气压计比 GPS 模块响应更快,但也可能更嘈杂。另一方面,除非 GPS 具有良好的 hDOP 指示,GPS 高度估算在一次飞行中可能波动数米。DPS368 等现代气压计芯片通常比多数 GPS 模块更快、更准确。
altitude_source 的 DEFAULT 方法会“混合”两个来源;若只存在一个来源,则使用可用来源。用户也可强制使用 BARO_ONLY 或 GPS_ONLY,以决定哪个来源能在 GPS Rescue 中提供更佳的高度控制。
若在平坦场地以 10 m 返航高度启动 GPS Rescue,且返航过程保持目视观察,便能直观看到高度控制稳定性和下降平顺性。请分别测试仅 Baro、仅 GPS;若两者单独都正常,再测试 DEFAULT 方法。通常 DEFAULT 效果最好。
当 altitude_source = DEFAULT 时,用户可调整 Baro 和 GPS 对最终高度读数的相对影响。
有 GPS 模块时,Betaflight 会取得 GPS 的水平精度衰减因子(hDOP),用以估计 GPS 高度估算精度。系统根据 hDOP 分配内部 gpsTrust 值。默认值为 0.3,即 Baro 可用时 GPS 仅占高度读数的 30%;但当 dDOP 表明 GPS 读数准确时,gpsTrust 最高可达 0.9。
两个读数差异较大时,CLI 设置 altitude_prefer_baro 会进一步修改 gpsTrust。默认 altitude_prefer_baro = 100 时,两个传感器相差小于 1 m,GPS 信任度不受影响;相差 2 m 时降为一半;相差 5 m 时降至正常的 1/5。设为 50 时,必须相差 4 m 才会使 GPS 信任度减半。设为零时,读数差异不会影响 GPS 信任度估算。
因此,若同时具备 GPS 与 Baro,并将 altitude_source 设为 DEFAULT,两者的相对权重取决于 GPS 对自身高度测量精度的 hDOP 估计、两读数的差异大小以及用户的 altitude_prefer_baro 设置。altitude_prefer_baro 设为默认 100 时,除非差异较小且 GPS hDOP 表明 GPS 准确,否则 Baro 读数将占主导地位。较低的 altitude_prefer_baro 值会提高 GPS 的相对影响。
简而言之,若拥有性能良好的 Baro,尤其是正品英飞凌 DPS310、DPS368,或可能是 BMP280,建议接受默认 altitude_prefer_baro 值 100,并使用 DEFAULT 混合方法。
使用 Altitude Debug 详细评估 GPS 与 Baro 读数:
| Debug | 数据 |
|---|---|
| 0 | gpsTrust 值 |
| 1 | baroAltitude,单位 cm |
| 2 | gpsAltitude,单位 cm,解锁时归零 |
| 3 | Vario |
气压计固件支持
在 Betaflight 4.5 及更高版本中,板卡 Config 文件会自动加入基础 BARO 代码、该板制造商使用的 Baro 芯片驱动、接口类型、接口引脚等。
这就是大多数情况下 Baro 能够“开箱即用”的原因。
若板卡 Config 文件不含 Baro 支持,而你希望外接气压计,在 Betaflight 4.5 中必须手动将 BARO 代码和所需驱动加入固件构建。
以 DPS310 气压计为例,在 Betaflight 地面站“固件烧写工具”的“自定义定义”区域输入 BARO BARO_DPS310。BARO 启用基础气压计代码,BARO_DPS310 加入 DPS_310 驱动代码。对 BMP280,应使用 BARO BARO_BMP280。
4.4 及更早版本的全部固件构建均包含所有 Baro 代码和所有驱动。
气压计总线连接
气压计几乎都通过 I2C 接口连接,尽管部分使用 SPI。板卡 Config 文件应定义 Baro 的接口 / 总线细节及其所用引脚。
飞控可能有一个或两个 I2C 总线(或“设备”)。Config 文件会自动为 Baro 设置 baro_i2c_device。
未定义 baro_i2c_device 的板卡,该值为 0。若手动将外接 Baro 接到 I2C 接口,用户必须手动将 baro_i2c_device 设为总线 1 或 2,具体取决于 Baro 实际连接的总线。
气压计硬件支持
如上所述,在 Betaflight 4.5 或更高版本中,板载气压计芯片所需的驱动由 Config 文件定义。其他或不同气压计芯片的驱动,必须按前述方法在 Betaflight 地面站“固件烧写工具”的“自定义定义”中手动加入。
每个气压计芯片都有默认 I2C“地址”。部分气压计支持备用地址,这有时会干扰自动检测。
默认情况下,Betaflight 的 baro_i2c_address 为 0;Betaflight 会在支持气压计的默认地址上搜索,并连接到找到的 Baro。注意,4.5 及更高版本只支持已构建进固件的 Baro 驱动。
| 气压计 | 默认 I2C 地址 | 说明 |
|---|---|---|
| BMP085 | 119 | 与 BMP180 地址相同 |
| MS5611 | 119 | 不常见 |
| BMP280 | 118 | 备用地址为 119,即 BMP180 默认地址 |
| QMP6988 | 112 | 不常见 |
| DPS310 | 118 | 备用地址为 119(规格书建议作为默认值) |
| SPL06 | 118 | BMP280 克隆品;备用地址为 119,因此可表现得像 BMP180 |
| BMP388 | 118 | 与 BMP280 和 SPL06 地址相同 |
| 2SMPB_02B | 112 | 不常见 |
| LPS22DF | 93 | 不常见 |
若 baro_i2c_address 设为自定义值,Betaflight 仅搜索在该指定 I2C 地址响应的气压计。
baro_hardware CLI 命令默认是 AUTO,即 Betaflight 尝试自动识别正确的 Baro 芯片。尽管许多芯片共享同一 I2C 地址,但同一个 I2C 地址上一次只能存在一个 Baro。
某些情况下,必须强制 Betaflight 仅使用某一芯片的驱动,例如已确定所用芯片。示例:set baro_hardware = DPS310 会强制 Betaflight 使用 DPS310 驱动(显然在 4.5 中必须已将该驱动构建进固件)。
Betaflight GitHub 列出了全部受支持的气压计及其驱动代码,其中包括搜索使用的 I2C 地址等信息。
注意,几乎所有气压计芯片都有相同的 I2C 地址。若不是 118,最常见的备用选项是 119(但较少见)。
未识别气压计
若使用默认 baro_i2c_address = 0 设置或自动气压计检测时,无法识别受支持 Baro,可能的问题和解决方法如下:
| 问题 | 解决方法 |
|---|---|
| 未在“配置”选项卡启用 Baro | 检查 Baro 开关是否为“开启” |
| Baro 芯片仅由 LiPo 供电 | 在 LiPo 输入端供电测试 |
baro_i2c_device 或总线值不正确 | 应为 1 或 2,且必须与气压计芯片焊接的实际总线 / 引脚相符 |
| 固件未包含该气压计的驱动代码 | 可在 Betaflight 地面站“固件烧写工具”的“自定义定义”中加入额外驱动 |
| 气压计芯片地址已自定义 | 从上表中尝试手动配置 baro_i2c_address |
| 同一 I2C 地址存在多个气压计硬件驱动且检测错误 | 若已确定板上气压计型号,将 baro_hardware 设为该型号 |
| 气压计芯片损坏或接线错误 | 检查接线或更换芯片 |
CLI 命令汇总
- 气压计相关 CLI 变量:
| 变量 | 范围 | 说明 |
|---|---|---|
baro_bustype | NONE、I2C、SPI | 指定所选气压计设备连接的总线类型。 |
baro_i2c_device | 0 ~ 对应 MCU 类型的最大 I2C 总线序号(从 1 开始,与 target.h 中 I2Cx 表达式的 x 相同) | 当 baro_bustype 为 I2C 时,指定设备连接的 I2C 总线序号。0 表示“无”。 |
baro_i2c_address | 0 ~ 119(0x77) | 以 7 位表示法指定设备 I2C 地址。0 是指定“驱动默认地址”的特殊值。1 ~ 7 无效,行为不可预测。 |
baro_spi_device | 0 ~ 对应 MCU 类型的最大 SPI 总线序号(从 1 开始,与 target.h 中 SPIx 表达式的 x 相同) | 当 baro_bustype 为 SPI 时,指定设备连接的 SPI 总线序号。0 表示“无”。 |
baro_hardware | NONE、AUTO、BMP280、MS5611、BMP085 | NONE = 禁用气压计支持。AUTO = 固件按预定义规则确定设备。BMP280、MS5611、BMP085 = 显式指定所用设备。 |
- 若设备通过 SPI 连接,可使用
resourceCLI 命令指定 CS(Chip Select)引脚:
| 资源名称 | 说明 |
|---|---|
BARO_CS | 指定 CS(Chip Select)引脚以启用 SPI 连接的气压计设备。 |
旧版文档
有关约 3.2 时开展的初始 Baro 代码开发,请参阅旧版文档 /docs/wiki/guides/archive/barometer-configuration。