BetaFlight开源代码之电压校准

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=((srcscalegetVrefMv()/10+(0xFFF5))/(0xFFFdivider))/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/(10multiplier(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=(40955)/(multiplier(4095+divider))
  4. 通过工具Linear regression calculator进行拟合;
  5. 计算出scale, divider值,并填入betaflight地面站配置参数栏位

5. 实测&转换数据

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

在这里插入图片描述

6. 参考资料

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

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值