BetaFlight开源代码之电压校准
- 1. 源由
 - 2. 分析数据流
 - 3. 采样电路
 - 3. 原理
 - 4. 示例
 - 5. 实测&转换数据
 - 6. 参考资料
 
1. 源由
既然复杂的BetaFlight开源代码之电流校准都过了一遍,电压相对来说是比较简单的,一起过一下
2. 分析数据流
电源==路径1==》采样电路==路径2==》ADC==路径3==》MCU==路径4==》地面站/OSD
上述任何一个位置和路径都可能发生问题,导致电压不准。
- 电源问题,比如:测试电压源不准(设备异常)
 - 路径1问题
 - 采样电路问题,比如:采样芯片周边器件阻抗精度衰减
 - 路径2问题,比如:信号干扰
 - ADC/路径3/MCU问题,比如:代码异常
 - 路径4问题,比如:协议格式不匹配
 - 地面站/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. 示例
测试注意事项:
- 建议测试2点以上数据:3S(12.6)、4S(16.8)等等
 - 设置
scale=110,divider=10,multiplier=1测试多点电压数据:地面站电压数据(GSVlotage),万用表电压数据(MeterVoltage); - 当
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)) - 通过工具Linear regression calculator进行拟合;
 - 计算出
scale,divider值,并填入betaflight地面站配置参数栏位 
5. 实测&转换数据
这里就懒惰了点,数据量比较少,所以感觉不出拟合的效果,感兴趣的朋友可以多做几个数据点。

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


















