树莓派PICO使用INA226测量电流和总线电压(3)

news2024/11/15 11:59:03

        上一篇文章我们讲了如何测试电流,但是INA226有一个非常典型的问题,那就是误差比较大,因为采样电阻非常小,我的开发板用的是100mΩ的采样电阻,在设定中我也用的是这个采样电阻值,但事实上,测试得到的偏差会超过10%,因为采样电阻本身有误差,焊接的工艺,焊锡膏的成分也有带来误差,甚至PCB上的布局和连线也会导致误差!所以,在实际场景中,想要达到比较精确的值,这个采样电阻,绝对不适合采用过小的电阻,比如10mΩ左右的电阻,因为积累误差甚至会超过电阻本身的的值。

        对这个问题,我的思考是只能通过某些特定的办法进行补偿,比如通过对采样电阻值的修正,达到更精确的测量目的。修正的原理也很简单,我们已知总线电压(Vbus,INA226测量总线电压非常方便),找一个非常精确的电阻(RL)作为负载,比如1000欧姆。然后设定采样电阻(Rs)的值就等于其标称值,这样我们能得到一个精准的参考电流值;然后我们再通过INA226测量电流值,得到一个测量电流值,这样,我们就可以通过下面的办法来计算实际的采样电阻偏差是多少:

        令测量电流是 Is,Vx = Is * ( RL + Rs ),得到一个误差总线电压值;用 Vx - Vbus,得到误差电压ΔV,用ΔV / Vbus,就得到了误差值 r,而采样电阻修正值 Rf = Rs * r,给采样电阻加上这个值之后,重新设定校准寄存器,就可以得到比较精确的电流了。但是这个只是基于对采样电阻值的假设,所以,实际电流和采样电流值之间还是存在一定的误差,只是这个误差比较小而已。

        


double INA226Compensation(double load_resisitor, double shunt_resistor)
{
    uint16_t current = 0, voltage = 0;

    i2c_write_blocking(i2c_default, 0x40, & current_register, sizeof(current_register), true );
    i2c_read_blocking (i2c_default, 0x40, (uint8_t *) & current, sizeof(current), false );

    current = current >> 8 | current << 8;
    double i2 = current * current_lsb;

    i2c_write_blocking(i2c_default, 0x40, & bus_voltage_register, sizeof(bus_voltage_register), true );
    i2c_read_blocking (i2c_default, 0x40, (uint8_t *) & voltage, sizeof(voltage), false );

    voltage = voltage >> 8 | voltage << 8;
    double bus = voltage * 0.00125;

    double i1 = bus / ( load_resisitor + shunt_resistor );
    double vx = i2 *  ( load_resisitor + shunt_resistor );

    double ratio = ( vx - bus ) / bus;
    double r = ratio * shunt_resistor;
    
    Serial.printf( "%f, %f, %fV, %f, %f\n", i1, i2, bus, ratio, r );
    return r;
}

        代码里面有测量电流和总线电压的计算,总线电压非常容易计算,获取到总线电压寄存器的值之后,乘以0.00125就是电压值,这个值非常的精确。

        在调用这个函数之前,需要等待约1秒钟,因为第一次设定校准寄存器之后,需要一定的时间,才能得到采样的电流和总线电压值。

    double rs = 0.1;
    double ie = 0.512;
    uint16_t cal = INA226Calibration( rs, ie );

    uint8_t data_2[3]; 
    data_2[0] = calibration_register;
    data_2[1] = cal >> 8;
    data_2[2] = cal & 0x00ff;

    i2c_write_blocking(i2c_default, 0x40, data_2, sizeof(data_2), false );

    delay( 1000 );

    // fix
    double rf = INA226Compensation(1011, rs);


    cal = INA226Calibration( rs + rf, ie );

    data_2[0] = calibration_register;
    data_2[1] = cal >> 8;
    data_2[2] = cal & 0x00ff;

    i2c_write_blocking(i2c_default, 0x40, data_2, sizeof(data_2), false );

        这个偏差值可以保存下来,在发布版启动的时候,直接使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1925395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件内容查阅

cat concatenate files and print on the standard output Linux中一个最简单的且最常用的命令是cat命令。其功能是在终端设备上显示文件内容。 cat命令-n选项用于显示行号。 tac concatenate and print files in reverse tac命令的功能是用于反向显示文件内容&#xff0c;即…

【Qt 基础】绘图

画笔 QPen pen; pen.setWidth(3); // 线条宽度 pen.setColor(Qt::red);// 画笔颜色 pen.setStyle(Qt::DashLine);// 线条样式 pen.setCapStyle(Qt::RoundCap);// 线端样式 pen.setJoinStyle(Qt::BevelJoin);// 连接样式 painter.setPen(pen);线条 线端 连接 画刷 QBrush bru…

css设置弹性flex后,如果设置100vh高度不撑满的原因

问题 父元素设置height为100%&#xff0c;有两个子元素&#xff0c;第一个设置height:100vh&#xff0c;第二个设置flex:1&#xff0c;此时第一个高度无法撑满盒子 原因解决方式 当父元素设置display为flex,第一个div设置高度64px,剩一个div设置高度为flex&#xff1a;1,这时…

数据处理-Matplotlib 绘图展示

文章目录 1. Matplotlib 简介2. 安装3. Matplotlib Pyplot4. 绘制图表1. 折线图2. 散点图3. 柱状图4. 饼图5. 直方图 5. 中文显示 1. Matplotlib 简介 Matplotlib 是 Python 的绘图库&#xff0c;它能让使用者很轻松地将数据图形化&#xff0c;并且提供多样化的输出格式。 Ma…

Qt项目中添加自定义文件夹,进行整理归类

Qt项目中添加文件夹进行归类 1、在windows的工程目录下创建一个文件夹&#xff0c;如widgets 2、将.h 、.cpp、.ui文件拷贝到windows该文件夹widgets 3、在qt工程中&#xff0c;根目录右键&#xff0c;选择添加现有文件&#xff0c;批量选择 .h 、.cpp、.ui文件之后&#xf…

初识影刀:EXCEL根据部门筛选低值易耗品

第一次知道这个办公自动化的软件还是在招聘网站上&#xff0c;了解之后发现对于办公中重复性的工作还是挺有帮助的&#xff0c;特别是那些操作非EXCEL的重复性工作&#xff0c;当然用在EXCEL上更加方便&#xff0c;有些操作比写VBA便捷。 下面就是一个了解基本操作后&#xff…

开发总结 - H5/web C端评论区开发逻辑

1. 背景 平时做的系统都是偏公司业务的系统&#xff0c;这次开发了一个用户评论的功能&#xff0c;同时开发了web版和H5版本的&#xff0c;因为没有做过这种C端的常用的功能&#xff0c;所以记录一下此次的开发&#xff0c;从参考友商设计到独立思考业务之间的区别再到实际开发…

everything搜索不到任何文件-设置

版本&#xff1a; V1.4.1.1024 (x64) 问题&#xff1a;搜索不到任何文件 click:[工具]->[选项]->下图所示 将本地磁盘都选中包含

2024 辽宁省大学数学建模竞赛B 题 钢铁产品质量优化完整思路 代码 结果分享(仅供学习)

冷轧带钢是钢铁企业的高附加值产品,其产品质量稳定性对于钢铁企业的经济效益具有非常重要的影响。在实际生产中&#xff0c;冷连轧之后的带钢需要经过连续退火处理来消除因冷轧产生的内应力并提高其机械性能。连续退火的工艺流程如图1 所示&#xff0c;一般包括加热、保温、缓冷…

Datawhale AI 夏令营 Task1

记录第一次参加Kaggle上的比赛&#xff0c;通过一站式的教程&#xff0c;没有一点阻碍的跑通了baseline 夏令营方向的选择 我选择的夏令营是关于CV方向的&#xff0c;因为本身对于cv方向比较感兴趣&#xff0c;而且这次夏令营的方式我很喜欢&#xff0c;通过比赛来促进学习&a…

板级调试小助手(5)基于Python访问千帆大模型

一、前言 千帆大模型是百度提供的可以使用API接口调用GPT模型&#xff0c;使用Python调用其实是很简单的&#xff1a;去千帆大模型申请账号->使用python调用API即可&#xff0c;具体可以参考这位大佬的博客&#xff0c;这里就不赘述了。 【教程】如何用Python调用百度的千帆…

基于Java+SpringMvc+Vue技术的药品进销存仓库管理系统设计与实现系统(源码+LW+部署讲解)

注&#xff1a;每个学校每个老师对论文的格式要求不一样&#xff0c;故本论文只供参考&#xff0c;本论文页数达到60页以上&#xff0c;字数在6000及以上。 基于JavaSpringMvcVue技术的在线学习交流平台设计与实现 目录 第一章 绪论 1.1 研究背景 1.2 研究现状 1.3 研究内容…

数据结构和算法(0-1)----递归

定义​ 递归是一种在程序设计中常用的技术&#xff0c;它允许一个函数调用自身来解决问题。递归通常用于解决那些可以被分解为相似的子问题的问题&#xff0c;这些问题的解决方式具有自相似性。在数据结构和算法中&#xff0c;递归是一种重要的解决问题的方法&#xff0c;尤其是…

项目范围管理-系统架构师(二十九)

1、&#xff08;重点&#xff09;软件设计包括了四个独立又相互联系的活动&#xff0c;高质量的&#xff08;&#xff09;将改善程序结构的模块划分&#xff0c;降低过程复杂度。 A程序设计 B数据设计 C算法设计 D过程设计 解析&#xff1a; 软件设计包含四个&#xff0c;…

Golang | Leetcode Golang题解之第232题用栈实现队列

题目&#xff1a; 题解&#xff1a; type MyQueue struct {inStack, outStack []int }func Constructor() MyQueue {return MyQueue{} }func (q *MyQueue) Push(x int) {q.inStack append(q.inStack, x) }func (q *MyQueue) in2out() {for len(q.inStack) > 0 {q.outStack…

Linux权限相关

目录 Linux中的用户 Linux权限管理 Linux的文件访问者分类 Linux的文件类型和访问权限 文件类型 文件权限 文件权限的修改 文件所有者修改 文件所有者所在组修改 目录权限 粘滞位 文件掩码 在Linux中&#xff0c;权限包括用户的权限和文件的权限 Linux中的用户 在…

Android 儿童绘本/汉语拼音实现

有这样一个项目&#xff0c;开发一个电子绘本&#xff0c;需要在绘本上显示&#xff0c;汉语拼音。 界面布局 <androidx.core.widget.NestedScrollViewandroid:layout_width"match_parent"android:layout_height"match_parent"android:fillViewport&quo…

路径规划 | 飞蛾扑火算法求解二维栅格路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 路径规划 | 飞蛾扑火算法求解二维栅格路径规划&#xff08;Matlab&#xff09;。 飞蛾扑火算法&#xff08;Firefly Algorithm&#xff09;是一种基于自然界萤火虫行为的优化算法&#xff0c;在路径规划问题中也可以应…

C++·多态

1. 多态的概念 多态通俗讲就是多种形态&#xff0c;就是指去完成某个行为&#xff0c;当不同对象去做时会产生不同的结果或状态。 比如买火车票这个行为&#xff0c;同样是买票的行为&#xff0c;普通成年人买到全价票&#xff0c;学生买到半价票&#xff0c;军人优先买票。这个…

Qt MV架构-视图类

一、基本概念 在MV架构中&#xff0c;视图包含了模型中的数据项&#xff0c;并将它们呈现给用户。数据项的表示方法&#xff0c;可能和数据项在存储时用的数据结构完全不同。 这种内容与表现分离之所以能够实现&#xff0c;是因为使用了 QAbstractItemModel提供的一个标准模…