介绍
本页面介绍了Betaflight固件中的传感器系统。传感器系统负责收集和处理来自各种硬件传感器的数据,从而向飞行控制器提供有关其姿态、运动、位置和电源状态的信息。传感器数据是飞行稳定、导航功能和状态报告的基础。
Betaflight的传感器系统包括:
- 陀螺仪系统——测量角速度(旋转速率)
- 加速度计系统- 测量线性加速度
- 磁力计(罗盘)系统- 提供航向信息
- 气压计系统——测量大气压力以估算海拔高度
- GPS系统——提供位置、速度和海拔信息
- 电池监控系统- 跟踪电压和电流
有关传感器在飞行控制算法中的使用详情,请参阅飞行控制系统。
传感器系统架构

Betaflight中的每个传感器子系统都遵循一个共同的模式:
- 初始化- 在启动期间调用,用于配置传感器硬件
- 更新- 定期调用以从传感器读取新数据
- 处理——数据过滤、校准和处理
- 集成——飞行控制系统如何使用处理后的数据
传感器数据流管道

传感器初始化
Betaflight 使用级联初始化系统来初始化传感器:

初始化过程中的关键函数:
sensorsPreInit()- 执行初步设置,例如引脚配置sensorsAutodetect()- 检测并初始化可用传感器- 各个传感器初始化函数(例如
gyroInit(),,accInit()等等)
检测到的传感器信息存储在一个全局数组中detectedSensors[],固件会引用该数组来检查传感器是否可用。
陀螺仪系统
陀螺仪是 Betaflight 中最关键的传感器,它提供角速度测量,这对飞行稳定至关重要。
陀螺仪处理流程

陀螺仪主要部件
-
数据结构:
gyro_t gyro- 主陀螺仪数据结构gyroSensor_t gyroSensor1- 主陀螺仪传感器gyroSensor_t gyroSensor2- 辅助陀螺仪传感器(当使用多个陀螺仪时)
-
主要功能:
gyroInit()- 初始化陀螺仪gyroUpdate()- 读取传感器的原始数据gyroFiltering()- 对原始陀螺仪数据应用过滤器gyroStartCalibration()- 启动陀螺仪校准过程
-
特色功能:
- 溢出检测- 检测可能导致问题的极端旋转速度
- 偏航旋转恢复- 检测并恢复极端偏航旋转
- 动态滤波- 根据飞行条件调整滤波参数
-
配置参数(单位
gyroConfig_t:):- 滤波器类型和频率
- 溢出检测设置
- 校准设置
- 硬件选择
加速度计系统
加速度计测量线性加速度,用于姿态估计(与陀螺仪数据一起)。
加速度计处理流程

加速度计主要组件
-
数据结构:
acc_t acc- 主加速度计数据结构
-
主要功能:
accInit()- 初始化加速度计accUpdate()- 读取并处理加速度计数据accStartCalibration()- 开始加速度计校准
-
特色功能:
- 飞行中校准
- 加加速度计算(加速度变化率)
-
配置参数(单位
accelerometerConfig_t:):- 筛选设置
- 硬件选择
- 校准值
磁力计(罗盘)系统
磁力计测量地球磁场,以提供航向信息。
磁力计处理

磁力计主要部件
-
数据结构:
mag_t mag- 主磁力计数据结构magDev_t magDev- 磁力计设备接口
-
主要功能:
compassInit()- 初始化磁力计compassUpdate()- 更新磁力计读数compassStartCalibration()- 开始指南针校准
-
特色功能:
- 自动偏差估计
- 支持多种类型的磁力计
- 硬铁和软铁补偿
GPS系统
GPS系统提供位置、速度和高度信息,用于导航功能。
GPS系统架构

GPS 关键组件
-
数据结构:
gpsData_t gpsData- GPS 状态和配置gpsSolutionData_t gpsSol- 已处理的 GPS 定位数据
-
主要功能:
gpsInit()- 初始化 GPS 系统gpsUpdate()- 更新 GPS 读数gpsNewFrame()- 处理传入的 GPS 数据帧
-
特色功能:
- 支持 U-blox GPS 配置
- 支持多种协议(NMEA、UBX)
- 家庭位置跟踪
- 计算到家的距离和方向
-
GPS 服务提供商:
GPS_NMEA- 标准NMEA协议GPS_UBLOXU-blox专有协议GPS_MSP- MSP协议(用于外部GPS)GPS_VIRTUAL- 虚拟 GPS(用于模拟器)
电池监控系统
电池监测系统跟踪电池电压和电流,以评估电池状态。
电池监控架构

关键电池监控组件
-
数据结构:
voltageMeter_t voltageMeter- 电压表数据currentMeter_t currentMeter- 当前仪表数据
-
主要功能:
batteryInit()- 初始化电池监控系统batteryUpdateVoltage()- 更新电压读数batteryUpdateCurrentMeter()- 更新当前读数batteryUpdateStates()- 根据电压和功耗更新电池状态batteryUpdateLVC()- 更新低电压截止值
-
电池状态:
BATTERY_OK- 正常操作BATTERY_WARNING- 电量不足BATTERY_CRITICAL- 电池电量过低BATTERY_NOT_PRESENT电池未连接
-
特征:
- 细胞计数自动检测
- 毫安时消耗跟踪
- 低电压警告和紧急警报
- 低电压切断功能
过滤基础设施
Betaflight 提供了一个可供多个传感器系统使用的通用滤波基础设施。
筛选类型

每种过滤器类型都有三种主要操作:
- 初始化- 使用初始参数设置过滤器(例如,
pt1FilterInit()) - 参数更新- 更新过滤器参数(例如,
pt1FilterUpdateCutoff()) - 应用程序- 将筛选器应用于新数据(例如,
pt1FilterApply())
过滤器类型特征
| 筛选类型 | 命令 | 功能 | 用例 |
|---|---|---|---|
| 第一部分 | 第一 | pt1FilterApply() | 简单的低通滤波 |
| 第二部分 | 第二 | pt2FilterApply() | 更陡峭的低通滤波 |
| PT3 | 第三 | pt3FilterApply() | 高阶低通滤波 |
| 二四边形 | 第二 | biquadFilterApply() | 陷波滤波器、低通滤波器、带通滤波器 |
传感器更新速率和优先级
传感器的更新频率根据其重要性和典型硬件性能而有所不同:
| 传感器 | 典型更新率 | 任务优先级 | 主要更新功能 |
|---|---|---|---|
| 陀螺仪 | 8 kHz - 32 kHz | 即时的 | gyroUpdate() |
| 加速度计 | 1千赫兹 | 中等的 | accUpdate() |
| 磁力计 | 40赫兹 - 100赫兹 | 低的 | compassUpdate() |
| 晴雨表 | 40赫兹 - 50赫兹 | 低的 | baroUpdate() |
| 全球定位系统 | 5赫兹 - 10赫兹 | 低的 | gpsUpdate() |
| 电池 | 50赫兹 | 低的 | batteryUpdateVoltage(),batteryUpdateCurrentMeter() |
任务调度器确保优先级较高的任务(如陀螺仪采样)优先获得 CPU 时间,这对于飞行稳定性至关重要。
传感器校准
大多数传感器都需要校准,以消除制造差异和安装偏差:
-
陀螺仪校准- 在启动时执行,以确定零点偏移量
gyroStartCalibration()- 启动校准过程- 零值是通过对飞机静止时多次读数取平均值计算得出的。
-
加速度计校准- 确定每个轴的偏移量
accStartCalibration()- 启动校准过程- 校准过程中飞机需要保持水平。
- 飞行中也可进行校准,以便在飞行过程中进行微调。
-
磁力计校准- 补偿硬铁/软铁的影响
compassStartCalibration()- 启动校准过程- 需要将飞机旋转到各个方向
- 利用偏差估计来提高飞行过程中的精度
结论
Betaflight 中的传感器系统提供飞行控制所需的关键输入。每个传感器系统都遵循一致的初始化、数据采集、处理和集成到飞行控制系统中的流程。精密的滤波架构有助于降低噪声,同时保持响应速度,这对于稳定的飞行性能至关重要。
BetaFlight传感器系统解析
249

被折叠的 条评论
为什么被折叠?



