BetaFlight开源代码之电压校准

发布时间:2024年01月07日

1. 源由

既然复杂的BetaFlight开源代码之电流校准都过了一遍,电压相对来说是比较简单的,一起过一下

2. 分析数据流

电源==路径1==》采样电路==路径2==》ADC==路径3==》MCU==路径4==》地面站/OSD

上述任何一个位置和路径都可能发生问题,导致电压不准。

  1. 电源问题,比如:测试电压源不准(设备异常)
  2. 路径1问题
  3. 采样电路问题,比如:采样芯片周边器件阻抗精度衰减
  4. 路径2问题,比如:信号干扰
  5. ADC/路径3/MCU问题,比如:代码异常
  6. 路径4问题,比如:协议格式不匹配
  7. 地面站/OSD问题:比如:代码异常

3. 采样电路

VBAT_ADC直接接MCU引脚进行ADC转换形成12bit ADC数据,供后续算法处理。
在这里插入图片描述

3. 原理

  • inav/betaflight/ardupilot在电压传感器方面的校准方法大致是相同的,采用的是线性拟合: y = a x + b y = ax + b y=ax+b
  • betaflight内部公式: Y = ( ( s r c ? s c a l e ? g e t V r e f M v ( ) / 10 + ( 0 x F F F ? 5 ) ) / ( 0 x F F F ? d i v i d e r ) ) / m u l t i p l i e r Y = ((src *scale * getVrefMv() / 10 + (0xFFF * 5)) / (0xFFF * divider)) / multiplier Y=((src?scale?getVrefMv()/10+(0xFFF?5))/(0xFFF?divider))/multiplier
    注:STM32在计算时,运用了一些整形变换,使得上述运算不用到浮点指令,减少MCU的工作量。
  • betaflight电压计地面站界面
    在这里插入图片描述
    基于上面的电路,大家确实不需要调整太多,只要硬件厂商采用上述10:1的分压电路进行设计。如果您希望自己校准,也未尝不可,校准需要用硬件测试电压。

4. 示例

测试注意事项:

  1. 建议测试2点以上数据:3S(12.6)、4S(16.8)等等
  2. 设置scale=110divider=10multiplier=1 测试多点电压数据:地面站电压数据(GSVlotage),万用表电压数据(MeterVoltage);
  3. multiplier=1时,计算就比较简单。
    A = s c a l e / ( 10 ? m u l t i p l i e r ? ( 4095 + d i v i d e r ) ) A=scale/(10*multiplier*(4095+divider)) A=scale/(10?multiplier?(4095+divider))
    B = ( 4095 ? 5 ) / ( m u l t i p l i e r ? ( 4095 + d i v i d e r ) ) B=(4095*5)/(multiplier*(4095+divider)) B=(4095?5)/(multiplier?(4095+divider))
  4. 通过工具Linear regression calculator进行拟合;
  5. 计算出scale, divider值,并填入betaflight地面站配置参数栏位

5. 实测&转换数据

这里就懒惰了点,数据量比较少,所以感觉不出拟合的效果,感兴趣的朋友可以多做几个数据点。

在这里插入图片描述

6. 参考资料

【1】BetaFlight开源代码框架简介
【2】BetaFlight深入传感设计:传感模块设计框架
【3】BetaFlight开源代码之电流校准
【4】BetaFlight模块设计之三:芯片温度&参考电压和电池监测模块分析

文章来源:https://blog.csdn.net/lida2003/article/details/135436183
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。