BetaFlight开源代码之电压校准

news/2024/7/10 19:44:30 标签: 开源

BetaFlight开源代码之电压校准

  • 1. 源由
  • 2. 分析数据流
  • 3. 采样电路
  • 3. 原理
  • 4. 示例
  • 5. 实测&转换数据
  • 6. 参考资料

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模块设计之三:芯片温度&参考电压和电池监测模块分析


http://www.niftyadmin.cn/n/5308732.html

相关文章

深度学习中训练自己的模型的时候该如何设置学习率呢?

深度学习中训练自己的模型的时候该如何设置学习率呢? 前言公式讲解 前言 我们在看完论文之后,想要自己动手在自己家的数据集上试一试模型的效果。但是训练中有太多的超参数需要设置,而且我们的算力资源不一定会和论文作者恰好一样&#xff0…

图神经网络|5.消息传递的计算方法 6.多层GNN的作用

5.消息传递的计算方法 边的存放方式 注意,在实际的边的实现方式中,并不是以邻接矩阵来进行实现的,这是因为在图的更新中,用邻接矩阵进行更新所占用的时间开销相对大,二是因为领接矩阵占用的空间大(N方&am…

编程笔记 html5cssjs 021 JavaScript

编程笔记 html5&css&js 021 JavaScript 一、<script>&#xff1a;脚本元素二、属性三、基本用法四、操作小结 网页的以一重要的角色JavaScript开始登场。它能使 HTML 页面更具动态性和交互性。 一、<script>&#xff1a;脚本元素 HTML <script> 元素…

前端 js/浏览器/node /js 引擎的事件循环机制,宏任务、微任务

首先我们知道js是单线程的&#xff0c;所以有了事件循环机制来处理异步任务&#xff0c; 我们一般说的事件循环机制指 js 引擎的事件循环机制&#xff0c;js是一个编程语言&#xff0c;哪来的事件循环&#xff0c;前端常见的 js 引擎有浏览器和node。 所以在面试中问道【你知…

【WPF.NET开发】为控件中的焦点设置样式

本文内容 焦点视觉样式的用途默认焦点视觉样式行为何时使用焦点视觉样式如何创建焦点视觉样式使用焦点视觉样式的替代方法 Windows Presentation Foundation (WPF) 提供两种用于在控件接收键盘焦点时更改其视觉外观的并行机制。 第一种机制是对应用于控件的样式或模板中的属性…

【占用网络】VoxFormer 基于视觉的3D语义场景方案 CVPR 2023

前言 本文分享“占用网络”方案中&#xff0c;来自CVPR2023的VoxFormer&#xff0c;它基于视觉实现3D语义场景补全。 使用Deformable Attention从图像数据中&#xff0c;预测三维空间中的体素占用情况和类别信息。 VoxFromer是一个两阶段的框架&#xff1a; 第一个阶段&…

Activity启动流程

早就想写这个笔记用于记录这段知识&#xff0c;但是碍于太过庞大所以始终没有进行这段知识的整理 很多博客喜欢画一个时序图展示所有的流程&#xff0c;但是过于庞大&#xff0c;看起来有点吃力&#xff0c;这里我们画多个时序图来展示这个流程 1.app请求AMS启动Activity 在前…

C++11 14 17线程

线程类封装 #include<thread> #include<iostream> #include<string>using namespace std::chrono_literals; class MyThread { public:void Main() {std::cout << "MyThread Main" << name << ":" << age;} pr…