BetaFlight开源代码之电流校准

BetaFlight开源代码之电流校准

  • 1. 源由
  • 2. 分析
    • 2.1 常规逻辑
    • 2.2 数据流
    • 2.3 采样电路
      • 2.3.1 采样实现
      • 2.3.2 采样原理
      • 2.3.3 Layout参考
      • 2.3.4 INA169芯片
      • 2.3.5 INA169 Near-Zero Vsense
  • 3. 原理
  • 4. 示例
    • 4.1 实测&转换数据
    • 4.2 线性拟合-小电流
    • 4.3 线性拟合-大电流
    • 4.4 大电流/小电流数据分析
    • 4.5 自动化计算表格
  • 5. 其他问题
  • 6. 参考资料

1. 源由

前些时间遇到两个情况:

  1. Ardupilot飞控如何设置BATT_AMP_PERVLT?
  2. 遇到一些飞控板子出现电流数据不准确的问题?

当然数据不准确一定是问题,但是导致问题的原因不同,解决方法就会不同。

因此,要解决不准确的现象,必须找到导致该现象的原因:可能是单一个因素,也可能是多种因素。

这里就有个最为简单的工程技术逻辑:如何分析root cause?

这也是工程技术人员必须具备的能力,而往往多因素工程技术分析能力是研发入门的难点,不是说技术上难,而是在思维上难。类似点、线、面(二维)、立体(三维)、时空(四维)中,定位一个点的问题。

好了,不在多说,很多或者说大部分能力是可以通过后天学习、锻炼的,当然确实有一些“第六感”很难说清楚,有人会说“天生”的。尽管我不太认同,但是确实特长往往有这种天赋异禀的神来之笔。

2. 分析

2.1 常规逻辑

先做一个常规逻辑/常用概念,老外比较喜欢说"common sense”,因为没有这个概念的人,沟通工程技术问题是很难的,因为没有"common sense"。

这个常规工程处理逻辑是这样的:

  1. 什么场景下,导致了不准? // 澄清并明确环境因素,操作步骤等周边信息;记录不准确现象的量化测试一手数据
  2. 电流数据是经过哪些途径被展现出来的? //传感采样入口–>芯片–>原始数据处理–>公式校准–>应用展示
  3. 结合#1/#2两点,基于知识、经验,分析出可能出现问题的因素和出现问题的途径
  4. 根据 2 n − 1 2^{n-1} 2n1大致实验法则:1个因素 2 1 − 1 = 1 2^{1-1}=1 211=1次实验;2个因素 2 2 − 1 = 2 2^{2-1}=2 221=2次实验,依次类推进行对比实验
  5. 根据#4的实验结果,基于知识、经验得出结论;若尚无法接近rootcause则循环#3
  6. 若多次重复#5仍然无法获得理想效果,则需要循环#1

2.2 数据流

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

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

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

因此,各种情况都有可能发生,那么问题来了,您遇到的最有可能得是什么呢?依赖于#1提供的“环境因素,操作步骤,以及不准确现象的量化测试一手数据”。

如果,您的客户说:“我也不清楚。”
那么,恭喜您,第一步就是复现客户现象,并整理“环境因素,操作步骤,以及不准确现象的量化测试一手数据”。

2.3 采样电路

2.3.1 采样实现

【1】Current Sensing with Low-Voltage Precision Op-Amps

  • Low-Side Current Sensing Implementation

BetaFlight开源代码之电流校准_第1张图片BetaFlight开源代码之电流校准_第2张图片

  • High-Side Current Sensing Implementation

A low-side, current-sensing resistor in a fast-charge
control circuit generates a small voltage drop between the
low side of the battery pack and ground. This drop is not
a problem in most cases; however, some applications,
particularly mobile communications circuits, are
intolerant of any potential difference between the low
side of the battery pack and ground. Using a few
additional components in the circuit, high-side current
sensing solves this problem and allows the charging
source, application circuit, and battery pack to share a
common ground.

注:High-Side Current Sensing

BetaFlight开源代码之电流校准_第3张图片BetaFlight开源代码之电流校准_第4张图片BetaFlight开源代码之电流校准_第5张图片

2.3.2 采样原理

航模上面没有这么讲究,通常就是采用Low-Side Current Sensing Implementation,因此在低电流的时候就不太准。

【2】High-Voltage, High-Side Floating Current Sensing Circuit Using Current Output, Current Sense Amplifier

主要误差来源于 R s h u n t R_{shunt} Rshunt精度,以及 R s h u n t R_{shunt} Rshunt上的 V s e n s e V_{sense} Vsense电压,对于INA138来说,需要尽量接近15mV。

To minimize error, make the shunt voltage as large as the design will allow. For the INA138 device, keep V s e n s e V_{sense} Vsense >> 15 mV.
The relative error due to input offset increases as shunt voltage decreases, so use a current sense amplifier with low offset voltage. A precision resistor for R s h u n t R_{shunt} Rshunt is necessary because R s h u n t R_{shunt} Rshunt is a major source of error.

BetaFlight开源代码之电流校准_第6张图片

2.3.3 Layout参考

【3】INA1x9 High-Side Measurement Current Shunt Monitor
BetaFlight开源代码之电流校准_第7张图片

2.3.4 INA169芯片

BetaFlight开源代码之电流校准_第8张图片

BetaFlight开源代码之电流校准_第9张图片

2.3.5 INA169 Near-Zero Vsense

【4】Using Current Sense Amplifiers at Near-Zero Vsense

1A以下电流,精度指数级降级,惨不忍睹。还好是航模,应该目前这种设计方案也无所谓。

注:如果要做无人机,这块内容需要进一步考虑。

BetaFlight开源代码之电流校准_第10张图片

3. 原理

  • inav/betaflight/ardupilot在电流传感器方面的校准方法大致是相同的,采用的是线性拟合: y = a x + b y = ax + b y=ax+b
  • betaflight内部公式: Y = ( m i l l i v o l t s ∗ 10000 / s c a l e + o f f s e t ) / 10 Y = (millivolts * 10000 / scale + offset) / 10 Y=(millivolts10000/scale+offset)/10
  • betaflight电流计地面站界面

BetaFlight开源代码之电流校准_第11张图片
大部分情况下是,大家都是用的默认值,也不太操作校准,因为校准需要用硬件测试电流。

如果您确实对电流不准的问题非常在意,希望通过校准来确保显示的数据正确,那么需要准备万用表,串接到电源上,进行测试。

4. 示例

测试注意事项:

  1. 注意桨叶安全(不要割到手);如果要大电流校准,可以考虑桨叶反装方式(推油门,飞机紧急的贴着桌子),防止起飞,防止电机空转烧机;
  2. 建议测试5点数据:20%-40%-60%-80%-100%油门;
  3. 设置scale=200offset=0,测试5点电流数据:地面站电流数据(GSCurrent),万用表电流数据(MeterCurrent), Y = ( m i l l i v o l t s ∗ 10000 / s c a l e ) / 10 Y = (millivolts * 10000 / scale) / 10 Y=(millivolts10000/scale)/10
  4. 换算 Y = M e t e r C u r r e n t Y = MeterCurrent Y=MeterCurrent, X = m i l l i v o l t s = G S C u r r e n t ∗ s c a l e ( 200 ) / 1000 = G S C u r r e n t ∗ 5 X = millivolts = GSCurrent * scale(200) / 1000 = GSCurrent * 5 X=millivolts=GSCurrentscale(200)/1000=GSCurrent5
  5. 通过工具Linear regression calculator进行拟合;
  6. 计算出scale, offset值,并填入betaflight地面站配置参数栏位

4.1 实测&转换数据

注:这里测试了5点,但是第一点值很小,后面我们再来说明原因。

BetaFlight开源代码之电流校准_第12张图片

4.2 线性拟合-小电流

BetaFlight开源代码之电流校准_第13张图片

4.3 线性拟合-大电流

BetaFlight开源代码之电流校准_第14张图片

4.4 大电流/小电流数据分析

因为之前在2.3.5章节提到了关于 INA169 Near-Zero Vsense的误差指数级递增的问题。因此在1A以下,Low-Side Current Sensing Implementation的采样原始数据不可靠,无法用于分析。

因此,大电流校准比较靠谱。

4.5 自动化计算表格

整理了一份自动化计算的表格,准确的说应该是半自动化吧。

  • BetaFlight Current Calibration Guide

5. 其他问题

当然,不排除硬件上的各种问题。但是前提是要进行校准,相信硬件厂商,既然卖出来就是经过检测的,应该都是没有问题的。

如果真的存在问题,大概率这些地方发生了问题:(这里只是简单做了整理,欢迎大家批注,评论,谢谢!)

  1. V O S V_{OS} VOS 采样电路的干扰,会导致原始数据异常;
  2. V O V_O VO信号在传输过程收到干扰,也会影响MCU的ADC数据采集

列举一些硬件异常的问题:

  1. 2019/5/9 AIKONF4 Wrong current readings when using DSHOT #8233
  2. 2020/1/3 Kakute F7 HDV, Tekko32 F3 Combo current sensor reading very inaccurate #9330
  3. 2021/11/1 GEPRC F722 35A AIO ADC current sensor value has too much jitter #11089
  4. 2021/1/5 Kakute F7 mini & Tekko32 F3 45A Mini - Strange current sensor reading #10449

6. 参考资料

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

你可能感兴趣的:(xFlight,开源,betaflight)