BetaFlight模块设计之三:芯片温度&参考电压和电池监测模块分析

基于BetaFlight开源代码框架简介的框架设计,逐步分析内部模块功能设计。

1. 芯片温度&参考电压监测任务(ADCINTERNAL)

描述:主要监控参考电压以及芯片温度。

 ├──> 初始化
 │   ├──> [v]硬件初始化adcInit/pgResetAll-pgResetFn_adcConfig
 │   └──> [v]业务初始化adcInternalInit
 ├──> 任务
 │   ├──> [x]实时任务
 │   ├──> [x]事件任务
 │   └──> [v]时间任务[TASK_ADC_INTERNAL] = DEFINE_TASK("ADCINTERNAL", NULL, NULL, adcInternalProcess, TASK_PERIOD_HZ(1), TASK_PRIORITY_LOWEST),
 ├──> 驱动
 │   ├──> [v]查询HAL_ADCEx_InjectedStart/HAL_ADCEx_InjectedPollForConversion
 │   └──> [x]中断
 └──> 接口
     ├──> uint16_t getVrefMv(void)
     └──> int16_t getCoreTemperatureCelsius(void)

主要函数分析:

adcInternalProcess
 ├──> adcInternalIsBusy //检查采样情况
 ├──> vrefintSample = adcInternalReadVrefint(); //获取参考电压adc数据
 ├──> tempsensorSample = adcInternalReadTempsensor(); //获取芯片温度adc数据
 ├──> adcVrefintValue = updateMovingAverageUint16(&adcVrefintAverageState, vrefintSample); //时间平滑处理
 ├──> adcTempsensorValue = updateMovingAverageUint16(&adcTempsensorAverageState, tempsensorSample); //时间平滑处理
 ├──> vrefMv = adcInternalCompensateVref(adcVrefintValue); //参考电压补偿
 ├──> coreTemperature = adcInternalComputeTemperature(adcTempsensorValue, vrefMv); //核心温度计算
 └──> adcInternalStartConversion //触发采样

注意:这两个参数在命令行status获取如下信息。

Entering CLI Mode, type 'exit' to return, or 'help'
# 
# Building AutoComplete Cache ... Done!
# 
# status
MCU F745 Clock=216MHz, Vref=3.29V, Core temp=41degC
Stack size: 2048, Stack address: 0x20010000
Config size: 3986, Max available config: 32768
Gyros detected: gyro 1
GYRO=ICM20689, ACC=ICM20689, BARO=BMP280
OSD: NONE
System Uptime: 31 seconds, Current Time: 2022-05-22T04:19:38.001+00:00
CPU:1%, cycle time: 125, GYRO rate: 8000, RX rate: 33, System rate: 9
Voltage: 1 * 0.01V (0S battery - NOT PRESENT)
I2C Errors: 2
SD card: Manufacturer 0x2, 1902592kB, 06/2011, v0.7, 'SA02G'
Filesystem: Ready
Arming disable flags: RXLOSS CLI MSP

2. 电池监测模块

描述:主要监测电池相关电压,电流以及尤其需要考虑的告警问题。

 ├──> 初始化
 │   ├──> [v]硬件初始化adcInit/pgResetAll-pgResetFn_adcConfig
 │   └──> [v]业务初始化batteryInit/validateAndFixConfig
 ├──> 任务
 │   ├──> [x]实时任务
 │   ├──> [x]事件任务
 │   └──> [v]时间任务
 │          [TASK_BATTERY_ALERTS] = DEFINE_TASK("BATTERY_ALERTS", NULL, NULL, taskBatteryAlerts, TASK_PERIOD_HZ(5), TASK_PRIORITY_MEDIUM)[TASK_BATTERY_VOLTAGE] = DEFINE_TASK("BATTERY_VOLTAGE", NULL, NULL, batteryUpdateVoltage, TASK_PERIOD_HZ(SLOW_VOLTAGE_TASK_FREQ_HZ), TASK_PRIORITY_MEDIUM)[TASK_BATTERY_CURRENT] = DEFINE_TASK("BATTERY_CURRENT", NULL, NULL, batteryUpdateCurrentMeter, TASK_PERIOD_HZ(50), TASK_PRIORITY_MEDIUM),
 ├──> 驱动
 │   ├──> [x]查询
 │   └──> [v]中断 DMA_CIRCULAR 
 └──> 接口
     ├──> uint16_t getBatteryVoltage(void)
	 ├──> uint8_t getBatteryCellCount(void)
	 ├──> batteryState_e getBatteryState(void)
	 ├──> const char * getBatteryStateString(void)
	 ├──> batteryState_e getVoltageState(void);
	 ├──> batteryState_e getConsumptionState(void);
	 ├──> uint8_t calculateBatteryPercentageRemaining(void);
	 ├──> bool isBatteryVoltageConfigured(void);
	 ├──> uint16_t getLegacyBatteryVoltage(void);
	 ├──> uint16_t getBatteryVoltageLatest(void);
	 ├──> uint16_t getBatteryAverageCellVoltage(void);
	 ├──> uint16_t getBatterySagCellVoltage(void);
	 ├──> bool isAmperageConfigured(void);
	 ├──> int32_t getAmperage(void);
	 ├──> int32_t getAmperageLatest(void);
	 └──> int32_t getMAhDrawn(void);

2.1 电压监测任务

batteryUpdateVoltage //ADC_BATTERY
 ├──> <VOLTAGE_METER_ESC>
 │   └──> <featureIsEnabled(FEATURE_ESC_SENSOR)>
 │       ├──> voltageMeterESCRefresh
 │       └──> voltageMeterESCReadCombined
 ├──> <VOLTAGE_METER_ADC>
 │   ├──> voltageMeterADCRefresh
 │   └──> voltageMeterADCRead
 └──> <VOLTAGE_METER_NONE>
     └──> voltageMeterReset

2.2 电流监测任务

batteryUpdateCurrentMeter //ADC_CURRENT
 ├──> <batteryCellCount == 0>
 │   └──> currentMeterReset
 ├──> <CURRENT_METER_ADC>
 │   ├──> currentMeterADCRefresh
 │   └──> currentMeterADCRead
 ├──> <CURRENT_METER_VIRTUAL> <USE_VIRTUAL_CURRENT_METER>
 │   ├──> currentMeterVirtualRefresh
 │   └──> currentMeterVirtualRead
 ├──> <CURRENT_METER_ESC> <USE_ESC_SENSOR> <featureIsEnabled(FEATURE_ESC_SENSOR)>
 │   ├──> currentMeterESCRefresh
 │   └──> currentMeterESCReadCombined
 ├──> <CURRENT_METER_MSP> <USE_MSP_CURRENT_METER>
 │   ├──> currentMeterMSPRefresh
 │   └──> currentMeterMSPRead
 └──> <CURRENT_METER_NONE>
     └──> currentMeterReset

2.3 电池告警任务

taskBatteryAlerts
 ├──> <!ARMING_FLAG(ARMED)> //飞行时,主电丢失场景
 │   └──> batteryUpdatePresence
 ├──> batteryUpdateStates
 │   ├──> batteryUpdateVoltageState
 │   ├──> batteryUpdateConsumptionState
 │   ├──> batteryUpdateLVC
 │   └──> batteryState = MAX(voltageState, consumptionState);
 └──> batteryUpdateAlarms
     └──> <batteryConfig()->useVBatAlerts>
         └──> updateBatteryBeeperAlert

3. 延伸阅读

【1】BetaFlight开源代码之电压校准
【2】BetaFlight开源代码之电流校准

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Betaflight 10.8.0是一款开源的多轴飞行控制软件。它专为无人机设计,具有强大的飞行控制能力和丰富的功能。如果您想下载Betaflight 10.8.0,您可以通过以下步骤获得它。 首先,您可以在Betaflight官方网站上获得最新版本的下载链接。访问官方网站后,找到下载页面并点击进入。在下载页面上,您将看到各种不同的版本可供选择。您需要找到10.8.0版本,并点击下载链接。 下载完成后,您可以将文件保存到您的计算机上的任意位置。请确保选择一个方便访问的位置,以便稍后安装软件。 然后,解压下载的文件。您可以使用常见的解压软件,例如WinRAR或7-Zip。右键点击文件并选择“解压缩到当前文件夹”或类似选项。解压完成后,您将在目标文件夹中看到Betaflight 10.8.0的文件和文件夹。 最后,您可以通过连接无人机到计算机上,使用飞行控制器如F4或F7,然后通过Betaflight Configurator来加载Betaflight 10.8.0。您只需打开Betaflight Configurator并选择正确的端口,然后将固件升级为Betaflight 10.8.0即可。 总之,下载Betaflight 10.8.0只需几个简单的步骤。请记住,使用Betaflight控制软件可能需要一定的技术知识和理解。在操作过程中,务必仔细阅读官方文档和教程,以确保您正确且安全地使用Betaflight 10.8.0。 ### 回答2: Betaflight是一款十分受欢迎的开源飞控固件,用于控制无人机的飞行和飞控功能。Betaflight 10.8.0是Betaflight团队开发的最新版本。 要下载Betaflight 10.8.0,首先需要访问Betaflight官方网站。在网站上,你可以找到下载页面。你可以在导航栏中找到“固件下载”或类似的选项。点击进入下载页面。 在下载页面,你会看到不同版本的Betaflight固件列在一起。现在你需要找到Betaflight 10.8.0的下载链接。可能有一些列如“最新稳定版”、“测试版”、“老版本”等的选项,你需要选择适合你的选择。找到Betaflight 10.8.0的选项并点击。 点击后,将会有一个提示框显示文件将要保存在电脑中的位置。选择一个你想保存固件文件的位置,并点击“保存”按钮。 下载过程可能需要一些时间,具体取决于你的网络连接和文件大小。一旦下载完成,你就可以在你选择的位置找到下载好的Betaflight 10.8.0固件文件。 下载好Betaflight 10.8.0后,你可以将固件文件烧录到你的飞控硬件中。具体的烧录步骤因不同的飞控硬件而异,你可以在Betaflight官方网站上找到详细的步骤和教程。 总之,要下载Betaflight 10.8.0,可以通过访问Betaflight官方网站,在下载页面中找到Betaflight 10.8.0的下载链接,然后保存到你的电脑中。下载完成后,可以将固件烧录到你的飞控硬件中,并开始享受最新版本的Betaflight带来的功能和飞行体验。 ### 回答3: Betaflight 10.8.0是一款开源的飞控固件,适用于无人机的飞行控制。要下载Betaflight 10.8.0版本,可以按照以下步骤进行操作: 第一步,打开Betaflight官方网站,网址为"https://betaflight.com/"。在网站首页的顶部导航栏中,可以找到一个名为"Downloads"的选项,点击进入。 第二步,进入Downloads页面后,会看到各个版本的Betaflight固件列表。向下滚动页面,直到找到Betaflight 10.8.0版本。点击版本号旁边的下载按钮。 第三步,选择适用于你的机型的固件下载链接。根据你的无人机型号和硬件配置,选择对应的下载链接,比如选择适用于F3飞控的固件。 第四步,点击下载链接后,会开始下载Betaflight 10.8.0的固件文件。下载完成后,将文件保存到你的计算机本地或指定的文件夹中。 第五步,将下载的Betaflight 10.8.0固件文件导入到你的飞控设备中。具体方法可以参考Betaflight官方网站提供的相关教程或使用说明。 总结,要下载Betaflight 10.8.0固件,首先前往Betaflight官方网站的Downloads页面,找到对应版本的固件文件,下载并导入到你的飞控设备中,然后按照相关教程进行设置和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值