BetaFlight深入传感设计:传感模块设计框架
Posted lida2003
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BetaFlight深入传感设计:传感模块设计框架相关的知识,希望对你有一定的参考价值。
BetaFlight深入传感设计:传感模块设计框架
之前我们从任务(task)角度出发,整理了一份【BetaFlight开源代码框架简介】是来分析BeteFlight模块。
这里我们将从传感器的视角,来理解如何将物理世界与软件控制逻辑紧密的结合起来。
注:这里我们把任务看做是一种机制或者类似OS的功能,其主要任务是将分类的业务逻辑串联起来。
1. BetaFlight传感器简介
BetaFlight主要是航模的飞控软件,因此对于传感器种类支持主要用于飞行控制。至于自动导航及障碍规避等复杂问题,需要通过其他伴飞电脑接入更多的传感器来协调处理。
目前,固件支持几大类传感器:
- IMU: gyrometer, acclerometer
- Barometer
- Magnetometer
- GPS
- LIDAR
- ESC
2. BetaFlight传感器嵌入式软件设计
嵌入式软件设计一般针对特定应用场景或者应用系统来定制开发,与Linux等大型软件系统(OS)的硬件驱动设计还是有很大差别的。
通常嵌入式软件设计与硬件相关的模块可以分几个步骤:
- HwPreInit: 硬件准备或者总线配置,比如:SPI设备片选IO设置
- HwInit(Init/ReInit): 硬件初始化、状态逻辑,比如:工作状态,寄存器配置
- HwIo(Read/Write): 通过硬件总线(I2C, SPI, UART, OneWire等)对硬件进行读写操作
- HwDataAnalysis: 数据分析(涉及物理特性,有效数据分析,决策等)
- HwPreStop: 停止硬件工作前的一些软硬件预处理,比如:硬件中的缓存清空
- 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,详见下面链接:
- BetaFlight模块设计之三:芯片温度&参考电压和电池监测模块分析
- BetaFlight模块设计之四:ESC传感任务分析
- BetaFlight模块设计之八:GPS任务分析
- BetaFlight模块设计之九:气压计任务分析
- BetaFlight模块设计之十:磁力计任务分析
- BetaFlight模块设计之十一:Gyro&Acc任务分析
- BetaFlight模块设计之十四:高度计算任务分析
- 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深入传感设计:传感模块设计框架的主要内容,如果未能解决你的问题,请参考以下文章