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

        上一篇文章里,我们讲了如何设置配置寄存器(0x01),在测量电流之前,还需要设置校准寄存器(0x05),校准寄存器非常关键,如果不设置这个寄存器,INA226是不会工作的。

        在设置寄存器之前,有一个概念必须了解:LSB,即最低有效位(least significant bit)。这个值非常的关键,因为它就是ADC能提供的分辨率,在手册里,提供了如何计算校准值的方法,其中最关键的就是计算LSB。

        在计算校准值之前,我们必须知道IN+和IN-之间的电阻大小,在这儿我建议根据电流极限,尽可能使用较大的采样电阻。因为PCB的铜箔也有电阻,虽然值并不大,但也能达到毫欧级别。所以,在设计线路的时候,尽可能将采样电阻贴紧INA226,减少线路带来的误差。

        

        依照手册给出的公式,我们必须人为的指定一个最大的测量电流,然后用这个值除以 32768,即2的15次方,得到的值,就是电流的最低有效位。比如,在这个方案里面,我选择的电流最大测量范围是0.512A,不用奇怪我为啥用一个带三位小数的值,因为 512 是2的9次方。

        根据公式 2,current_lsb = 0.512 / 32768 = 0.000015625;大概15.625 uA。

        然后根据公式 1 计算校准值,因为已知分流器是0.1Ω,计算如下:

        cal = 0.00512 / ( 0.000015625 * 0.1 ) = 3276.8;取整之后,得到 3276,这个就是校准值。

        当然,也可以根据实际情况,将 current_lsb 做略微的调整,比如

        从 0.000015625 调整到 0.000016(16 是 2的4次方),然后计算

        cal = 0.00512 / ( 0.000016 * 0.1 ) = 3200;这样就不存在取整的问题。

        得到 cal 之后,将 current_lsb 和 cal 单独保存下来,后面的计算还需要这两个值。

        计算 cal 的代码如下:


uint8_t config_register         = 0x00;
uint8_t shunt_register          = 0x01;
uint8_t bus_voltage_register    = 0x02;
uint8_t current_register        = 0x04;
uint8_t calibration_register    = 0x05;double current_lsb = 0.0;
double calibration = 0.0;uint16_t INA226Calibration(double shunt_resistor, double max_expected_current)
{current_lsb = max_expected_current / 32768;calibration = 0.00512 / current_lsb;calibration = calibration / shunt_resistor;return (uint16_t)( calibration );
} 

接下来,就是设置校准寄存器:

        

void setup() 
{// put your setup code here, to run once:Serial.begin( 115200 );i2c_init( i2c_default, 100*1000 );gpio_set_function(I2C_SDA, GPIO_FUNC_I2C);gpio_set_function(I2C_SCL, GPIO_FUNC_I2C);gpio_pull_up(I2C_SDA);gpio_pull_up(I2C_SCL);bi_decl(bi_2pins_with_func(I2C_SDA, I2C_SCL,GPIO_FUNC_I2C));uint16_t config = INA226Config( IAT_4, ICT_588US, ICT_8244US, IOM_CONTINUOUS_SHUNT_AND_BUS_VOLTAGE );uint8_t data_1[3];data_1[0] = config_register;data_1[1] = config >> 8;data_1[2] = config & 0x00ff;    i2c_write_blocking(i2c_default, 0x40, data_1, sizeof(data_1), false );uint16_t cal = INA226Calibration( 0.1, 0.512 );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 );
}

        这两个寄存器设置完成之后,INA226就开始工作了。此时,已经可以通过代码读取INA226的测量数据了。 代码如下:

    for( ;; ){uint16_t readed = 0;i2c_write_blocking(i2c_default, 0x40, & current_register, sizeof(current_register), true );i2c_read_blocking (i2c_default, 0x40, (uint8_t *) & readed, sizeof(readed), false );readed = readed >> 8 | readed << 8;Serial.printf( "%X, %d, %f, %fA\n", cal, config, calibration, readed * current_lsb );}

         读取出来的值,需要做大小端交换,然后将这个值乘以 current_lsb,就能得到电流读数。在我的例子中,电压3.3V,电阻调整在1.6k附近,读出来的数据范围和计算数据范围吻合。

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

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

相关文章

搜索引擎中的相关性模型

一、什么是相关性模型&#xff1f; 相关性模型主要关注的是query和doc的相关性。例如给定query&#xff0c;和1000个doc&#xff0c;找到哪个doc是好query最相关的。 二、为什么需要相关性模型&#xff1f; 熟悉es的应该都熟悉BM25相关性算法。它是一个很简单的相关性算法。我…

SpringBoot+Vue(2)excel后台管理页面

一、需求 SpringBootVue写excel后台管理页面&#xff08;二级页面打开展示每一个excel表&#xff0c;数据库存储字段为“下载、删除、文件详情、是否共享、共享详情”&#xff09; 二、解答 后端(Spring Boot) 1. 项目设置 使用Spring Initializr创建一个新的Spring Boot项目…

深度学习5 神经网络

生物神经网络是指人的大脑&#xff0c;这是人工神经网络的技术原型。根据生物神经网络的原理&#xff0c;人们用计算机复现了简化的神经网络。当然&#xff0c;人工神经网络是机器学习的一大分支。 1.基本组成 1.1神 经 元 神经元是神经网络的基本组成。激活函数又称作激励函…

计算机的错误计算(三十)

摘要 回复网友就计算机的错误计算&#xff08;二十八&#xff09;提出的 3个疑问&#xff1a;为什么 exp(4.567) 有 2位错误数字&#xff1f;不应该是1位么&#xff1f;Excel 的输出中有错误数字&#xff0c;如何证明&#xff1f; 正确结果由 ISReal 软件 提供&#xff1f; 就…

如何在 Android Studio 中导出并在 IntelliJ IDEA 中查看应用的 SQLite 数据库

在 Android 应用开发过程中&#xff0c;调试和查看应用内的数据库内容是常见的需求。本文将介绍如何使用 Android Studio 导出应用的 SQLite 数据库&#xff0c;并在 IntelliJ IDEA 中查看该数据库。 步骤一&#xff1a;在设备上运行您的应用 首先&#xff0c;确保您的应用已…

视频播放器的问题

<template><div class"app-container"><el-form :model"queryParam" ref"queryForm" :inline"true"><el-form-item label"题目ID&#xff1a;"><el-input v-model"queryParam.id" cle…

2-33 基于matlab的用于计算无故障的斜齿轮对啮合时接触线长度随时间的变化

基于matlab的用于计算无故障的斜齿轮对啮合时接触线长度随时间的变化&#xff0c;根据需求设置斜齿轮对的相应参数&#xff0c;得到结果。程序已调通&#xff0c;可直接运行。 2-33 斜齿轮对啮合时接触线长度 齿轮参数 - 小红书 (xiaohongshu.com)

【matlab】大数据基础与应用实例

目录 引言 线性回归模型 基本形式 最小二乘法 多元线性回归 线性回归的假设 模型评估 应用 独热编码 原理 应用场景 优点 缺点 数据收集 数据可视化 数据处理与分析 完整代码 引言 线性回归模型 线性回归模型是一种用于预测连续值输出&#xff08;或称为因变…

【RHCE】综合实验0710综合实验

题目&#xff1a; 主服务器192.168.244.130 防火墙允许服务的放行&#xff1a; selinux放行 [rootlocalhost ~]# ll -Z /nfs/rhce 总用量 4 -rw-r--r--. 1 root root unconfined_u:object_r:default_t:s0 8 7月 10 16:52 index.html -rw-r--r--. 1 nobody nobody system_…

python爬虫网页解析模块及测试案例详解

xpath模块 xpath模块基本使用方法 测试网页 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"/><title>Title</title> </head> <body><ul><li id"l1" class"c1&q…

​前端Vue自定义签到获取积分弹框组件设计与实现

摘要 随着前端技术的不断演进&#xff0c;开发的复杂性日益凸显。传统的整体式开发方式在面临功能迭代和修改时&#xff0c;常常牵一发而动全身&#xff0c;导致开发效率低下和维护成本高昂。组件化开发作为一种解决方案&#xff0c;通过实现模块的独立开发和维护&#xff0c;…

frp内网穿透ssh,tcp经过服务器慢速和p2p模式实现高速吃满上传带宽

ssh_server aliyun_server ssh_client 办公室 云服务器 家 在家里经过云服务器中转&#xff0c;很慢&#xff0c;但是很稳定 使用p2p穿透&#xff0c;速度可以直接拉满 ssh_server cc.ini # 连接服务器配置 [common] server_addr 1…

InjectFix 热更新解决方案

简介 今天来谈一谈&#xff0c;项目种的客户端热更新解决方案。InjectFix是腾讯xlua团队出品的一种用于Unity中C#代码热更新热修复的解决方案。支持Unity全系列&#xff0c;全平台。与xlua的思路类似&#xff0c;InjectFix解决的痛点主要在于Unity中C#代码写的逻辑在发包之后无…

【数智化CIO展】沃太能源CIO陈丽:AI 浪潮下的中国企业数智化转型机遇与挑战...

陈丽 本文由沃太能源CIO陈丽投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级优秀CIO》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 在当今飞速发展的数字时代&#xff0c;中国企业正面临着前所未有的变革机遇和挑战。“中国企业数…

Flowable-流程图标与流程演示

BPMN 2.0是业务流程建模符号2.0的缩写。它由Business Process Management Initiative这个非营利协会创建并不断发展。作为一种标识&#xff0c;BPMN 2.0是使用一些符号来明确业务流程设计流程图的一整套符号规范&#xff0c;它能增进业务建模时的沟通效率。目前BPMN2.0是最新的…

链路追踪系列-01.mac m1 安装zipkin

下载地址&#xff1a;https://hub.docker.com/r/openzipkin/zipkin jelexjelexxudeMacBook-Pro zipkin-server % pwd /Users/jelex/Documents/work/zipkin-server 先启动Es: 可能需要先删除 /Users/jelex/dockerV/es/plugins 目录下的.DS_Store 当端口占用时再次启动&#x…

Chromium CI/CD 之Jenkins实用指南2024-Windows安装篇(一)

1. 引言 在现代软件开发过程中&#xff0c;持续集成和持续部署&#xff08;CI/CD&#xff09;是确保高效、稳定软件交付的关键实践。Jenkins作为一款广泛使用的自动化服务器&#xff0c;通过其强大的插件体系和灵活的配置&#xff0c;支持各种操作系统和开发环境。为了帮助开发…

excel 百分位函数 学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、函数说明PERCENTILE 函数PERCENTILE.inc 函数PERCENTILE.exc 函数QUARTILE.EXC 函数 二、使用步骤总结 前言 excel 百分位函数 Excel提供了几个函数用于…

计算机网络——常见问题汇总

1. introduction 1.1 Explain what a communication protocol is and why its important. A communication protocol is a set of rules and conventions(公约) that govern(统治) how data is transmitted and received between devices(设备), systems, or entities in a ne…

Linux vim的使用(一键安装则好用的插件_forcpp),gcc的常见编译链接操作

vim 在Linux系统上vim是个功能还比较完善的软件。但是没装插件的vim用着还是挺难受的&#xff0c;所以我们直接上一款插件。 我们只需要在Linux上执行这个命令就能安装(bite提供的) curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh …