BetaFlight深入传感设计:传感模块设计框架

Posted lida2003

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BetaFlight深入传感设计:传感模块设计框架相关的知识,希望对你有一定的参考价值。

BetaFlight深入传感设计:传感模块设计框架

之前我们从任务(task)角度出发,整理了一份【BetaFlight开源代码框架简介】是来分析BeteFlight模块。

这里我们将从传感器的视角,来理解如何将物理世界与软件控制逻辑紧密的结合起来。

注:这里我们把任务看做是一种机制或者类似OS的功能,其主要任务是将分类的业务逻辑串联起来。

1. BetaFlight传感器简介

BetaFlight主要是航模的飞控软件,因此对于传感器种类支持主要用于飞行控制。至于自动导航及障碍规避等复杂问题,需要通过其他伴飞电脑接入更多的传感器来协调处理。

目前,固件支持几大类传感器:

  1. IMU: gyrometer, acclerometer
  2. Barometer
  3. Magnetometer
  4. GPS
  5. LIDAR
  6. ESC

2. BetaFlight传感器嵌入式软件设计

嵌入式软件设计一般针对特定应用场景或者应用系统来定制开发,与Linux等大型软件系统(OS)的硬件驱动设计还是有很大差别的。

通常嵌入式软件设计与硬件相关的模块可以分几个步骤:

  1. HwPreInit: 硬件准备或者总线配置,比如:SPI设备片选IO设置
  2. HwInit(Init/ReInit): 硬件初始化、状态逻辑,比如:工作状态,寄存器配置
  3. HwIo(Read/Write): 通过硬件总线(I2C, SPI, UART, OneWire等)对硬件进行读写操作
  4. HwDataAnalysis: 数据分析(涉及物理特性,有效数据分析,决策等)
  5. HwPreStop: 停止硬件工作前的一些软硬件预处理,比如:硬件中的缓存清空
  6. HwStop: 停止硬件,比如:使能停止硬件芯片供电

那BetaFlight只是一个航模飞控系统,所以该嵌入式软件设计重点考虑: HwPreInit / HwInit / HwIo,而HwPreStop / HwStop在航模直接电池拔电的物理操作下,通常无法完成。

3. HwPreInit/HwInit阶段

通常的C代码入口是main,比如:Linux应用程序之Helloworld入门。这里BetaFlight嵌入式软件的入口亦是如此。

通过分析,我们可以看到【HwPreInit】【HwInit】分别标记了不同的阶段。

main
 ├──> init
 │   └──> configureSPIAndQuadSPI
 │       └──> sensorsPreInit
 │           ├──> 【HwPreInit】gyroPreInit
 │           ├──> 【HwPreInit】compassPreInit
 │           └──> 【HwPreInit】baroPreInit
 ├──> 【HwPreInit】adcInit
 ├──> sensorsAutodetect
 │   ├──> 【HwInit】gyroInit
 │   ├──> 【HwInit】accInit
 │   ├──> 【HwInit】compassInit
 │   ├──> 【HwInit】baroDetect
 │   ├──> 【HwInit】rangefinderInit
 │   └──> 【HwInit】adcInternalInit
 └──> 【HwInit】escSensorInit

4. HwIo阶段

HwIo阶段实际上就是我们前面任务视角的BetaFlight模块设计中进行轮询IO,详见下面链接:

  1. BetaFlight模块设计之三:芯片温度&参考电压和电池监测模块分析
  2. BetaFlight模块设计之四:ESC传感任务分析
  3. BetaFlight模块设计之八:GPS任务分析
  4. BetaFlight模块设计之九:气压计任务分析
  5. BetaFlight模块设计之十:磁力计任务分析
  6. BetaFlight模块设计之十一:Gyro&Acc任务分析
  7. BetaFlight模块设计之十四:高度计算任务分析
  8. BetaFlight模块设计之二十二:地面测距任务分析

注:这些都仅仅是从任务视角,分析了硬件数据采集的入口,尚未真正从传感物理特性以及数据有效性的角度进行深度分析。

5. HwDataAnalysis阶段

HwDataAnalysis阶段是传感控制领域的重要内容,这里我们将深入物理世界,通过传感器数据来深入分析传感模块设计,从而加深对飞控系统设计的理解。

//不同传感器的模块设计后续将逐步给出文章进行介绍

请大家耐心,并提供宝贵建议和意见,以便我们进一步改善和完善,谢谢!!!

6. 参考资料

【1】BetaFlight开源代码框架简介
【2】BetaFlight模块设计之三:芯片温度&参考电压和电池监测模块分析
【3】BetaFlight模块设计之四:ESC传感任务分析
【4】BetaFlight模块设计之八:GPS任务分析
【5】BetaFlight模块设计之九:气压计任务分析
【6】BetaFlight模块设计之十:磁力计任务分析
【7】BetaFlight模块设计之十一:Gyro&Acc任务分析
【8】BetaFlight模块设计之十四:高度计算任务分析
【9】BetaFlight模块设计之二十二:地面测距任务分析
【10】BetaFlight, Supported-Sensors

以上是关于BetaFlight深入传感设计:传感模块设计框架的主要内容,如果未能解决你的问题,请参考以下文章

BetaFlight深入传感设计之二:Mag传感模块

BetaFlight深入传感设计之二:Mag传感模块

BetaFlight深入传感设计之四:GPS传感模块

BetaFlight深入传感设计之三:IMU传感模块

BetaFlight深入传感设计之三:IMU传感模块

BetaFlight深入传感设计之一:Baro传感模块