BetaFlight开源代码之电流校准

发布时间:2024年01月06日

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} 2n?1大致实验法则:1个因素 2 1 ? 1 = 1 2^{1-1}=1 21?1=1次实验;2个因素 2 2 ? 1 = 2 2^{2-1}=2 22?1=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

在这里插入图片描述在这里插入图片描述

  • 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

在这里插入图片描述在这里插入图片描述在这里插入图片描述

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,若0M50 R s h u n t R_{shunt} Rshunt?,意味着15mV/0.5m = 100

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.

在这里插入图片描述

2.3.3 Layout参考

【3】INA1x9 High-Side Measurement Current Shunt Monitor
在这里插入图片描述

2.3.4 INA169芯片

在这里插入图片描述

在这里插入图片描述

2.3.5 INA169 Near-Zero Vsense

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

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

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

在这里插入图片描述

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=(millivolts?10000/scale+offset)/10
  • betaflight电流计地面站界面

在这里插入图片描述
大部分情况下是,大家都是用的默认值,也不太操作校准,因为校准需要用硬件测试电流。

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

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=(millivolts?10000/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=GSCurrent?scale(200)/1000=GSCurrent?5
  5. 通过工具Linear regression calculator进行拟合;
  6. 计算出scale, offset值,并填入betaflight地面站配置参数栏位

4.1 实测&转换数据

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

在这里插入图片描述

4.2 线性拟合-小电流

在这里插入图片描述

4.3 线性拟合-大电流

在这里插入图片描述

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

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

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

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深入传感设计:传感模块设计框架

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