BetaFlight代码解析(7)— 传感器系统

BetaFlight传感器系统解析

介绍

本页面介绍了Betaflight固件中的传感器系统。传感器系统负责收集和处理来自各种硬件传感器的数据,从而向飞行控制器提供有关其姿态、运动、位置和电源状态的信息。传感器数据是飞行稳定、导航功能和状态报告的基础。

Betaflight的传感器系统包括:

  1. 陀螺仪系统——测量角速度(旋转速率)
  2. 加速度计系统- 测量线性加速度
  3. 磁力计(罗盘)系统- 提供航向信息
  4. 气压计系统——测量大气压力以估算海拔高度
  5. GPS系统——提供位置、速度和海拔信息
  6. 电池监控系统- 跟踪电压和电流

有关传感器在飞行控制算法中的使用详情,请参阅飞行控制系统

传感器系统架构

Betaflight中的每个传感器子系统都遵循一个共同的模式:

  1. 初始化- 在启动期间调用,用于配置传感器硬件
  2. 更新- 定期调用以从传感器读取新数据
  3. 处理——数据过滤、校准和处理
  4. 集成——飞行控制系统如何使用处理后的数据

传感器数据流管道

传感器初始化

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

初始化过程中的关键函数:

  • sensorsPreInit()- 执行初步设置,例如引脚配置
  • sensorsAutodetect()- 检测并初始化可用传感器
  • 各个传感器初始化函数(例如gyroInit(),,accInit()等等)

检测到的传感器信息存储在一个全局数组中detectedSensors[],固件会引用该数组来检查传感器是否可用。

陀螺仪系统

陀螺仪是 Betaflight 中最关键的传感器,它提供角速度测量,这对飞行稳定至关重要。

陀螺仪处理流程

陀螺仪主要部件

  1. 数据结构

    • gyro_t gyro- 主陀螺仪数据结构
    • gyroSensor_t gyroSensor1- 主陀螺仪传感器
    • gyroSensor_t gyroSensor2- 辅助陀螺仪传感器(当使用多个陀螺仪时)
  2. 主要功能

    • gyroInit()- 初始化陀螺仪
    • gyroUpdate()- 读取传感器的原始数据
    • gyroFiltering()- 对原始陀螺仪数据应用过滤器
    • gyroStartCalibration()- 启动陀螺仪校准过程
  3. 特色功能

    • 溢出检测- 检测可能导致问题的极端旋转速度
    • 偏航旋转恢复- 检测并恢复极端偏航旋转
    • 动态滤波- 根据飞行条件调整滤波参数
  4. 配置参数(单位gyroConfig_t:):

    • 滤波器类型和频率
    • 溢出检测设置
    • 校准设置
    • 硬件选择

加速度计系统

加速度计测量线性加速度,用于姿态估计(与陀螺仪数据一起)。

加速度计处理流程

加速度计主要组件

  1. 数据结构

    • acc_t acc- 主加速度计数据结构
  2. 主要功能

    • accInit()- 初始化加速度计
    • accUpdate()- 读取并处理加速度计数据
    • accStartCalibration()- 开始加速度计校准
  3. 特色功能

    • 飞行中校准
    • 加加速度计算(加速度变化率)
  4. 配置参数(单位accelerometerConfig_t:):

    • 筛选设置
    • 硬件选择
    • 校准值

磁力计(罗盘)系统

磁力计测量地球磁场,以提供航向信息。

磁力计处理

磁力计主要部件

  1. 数据结构

    • mag_t mag- 主磁力计数据结构
    • magDev_t magDev- 磁力计设备接口
  2. 主要功能

    • compassInit()- 初始化磁力计
    • compassUpdate()- 更新磁力计读数
    • compassStartCalibration()- 开始指南针校准
  3. 特色功能

    • 自动偏差估计
    • 支持多种类型的磁力计
    • 硬铁和软铁补偿

GPS系统

GPS系统提供位置、速度和高度信息,用于导航功能。

GPS系统架构

GPS 关键组件

  1. 数据结构

    • gpsData_t gpsData- GPS 状态和配置
    • gpsSolutionData_t gpsSol- 已处理的 GPS 定位数据
  2. 主要功能

    • gpsInit()- 初始化 GPS 系统
    • gpsUpdate()- 更新 GPS 读数
    • gpsNewFrame()- 处理传入的 GPS 数据帧
  3. 特色功能

    • 支持 U-blox GPS 配置
    • 支持多种协议(NMEA、UBX)
    • 家庭位置跟踪
    • 计算到家的距离和方向
  4. GPS 服务提供商

    • GPS_NMEA- 标准NMEA协议
    • GPS_UBLOXU-blox专有协议
    • GPS_MSP- MSP协议(用于外部GPS)
    • GPS_VIRTUAL- 虚拟 GPS(用于模拟器)

电池监控系统

电池监测系统跟踪电池电压和电流,以评估电池状态。

电池监控架构

关键电池监控组件

  1. 数据结构

    • voltageMeter_t voltageMeter- 电压表数据
    • currentMeter_t currentMeter- 当前仪表数据
  2. 主要功能

    • batteryInit()- 初始化电池监控系统
    • batteryUpdateVoltage()- 更新电压读数
    • batteryUpdateCurrentMeter()- 更新当前读数
    • batteryUpdateStates()- 根据电压和功耗更新电池状态
    • batteryUpdateLVC()- 更新低电压截止值
  3. 电池状态

    • BATTERY_OK- 正常操作
    • BATTERY_WARNING- 电量不足
    • BATTERY_CRITICAL- 电池电量过低
    • BATTERY_NOT_PRESENT电池未连接
  4. 特征

    • 细胞计数自动检测
    • 毫安时消耗跟踪
    • 低电压警告和紧急警报
    • 低电压切断功能

过滤基础设施

Betaflight 提供了一个可供多个传感器系统使用的通用滤波基础设施。

筛选类型

每种过滤器类型都有三种主要操作:

  1. 初始化- 使用初始参数设置过滤器(例如,pt1FilterInit()
  2. 参数更新- 更新过滤器参数(例如,pt1FilterUpdateCutoff()
  3. 应用程序- 将筛选器应用于新数据(例如,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 时间,这对于飞行稳定性至关重要。

传感器校准

大多数传感器都需要校准,以消除制造差异和安装偏差:

  1. 陀螺仪校准- 在启动时执行,以确定零点偏移量

    • gyroStartCalibration()- 启动校准过程
    • 零值是通过对飞机静止时多次读数取平均值计算得出的。
  2. 加速度计校准- 确定每个轴的偏移量

    • accStartCalibration()- 启动校准过程
    • 校准过程中飞机需要保持水平。
    • 飞行中也可进行校准,以便在飞行过程中进行微调。
  3. 磁力计校准- 补偿硬铁/软铁的影响

    • compassStartCalibration()- 启动校准过程
    • 需要将飞机旋转到各个方向
    • 利用偏差估计来提高飞行过程中的精度

结论

Betaflight 中的传感器系统提供飞行控制所需的关键输入。每个传感器系统都遵循一致的初始化、数据采集、处理和集成到飞行控制系统中的流程。精密的滤波架构有助于降低噪声,同时保持响应速度,这对于稳定的飞行性能至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值