站内搜索
发作品签到
专业版

INA226模块

工程标签

889
0
0
0

简介

INA226模块

简介:INA226模块

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2025-06-18 22:12:50更新时间:2025-06-19 09:24:57

描述

INA226工作电压是2.7V到5.5V。

使用I2C进行通信,可以检测电流和电压还有功率。

最高是可以检测到36V的电压。

理论上,INA226的电压寄存器满量程是可以读到40.96V的,但是它的引脚受不了那么大电压,因此我们的量程还是要控制在36V之内。

采集的电流我在手册里没有看到上限,也可能是写了,但是我英语不太好没看到。

采集的原理就是上一个采样电阻,然后INA226读取在这个采样电阻的电压,通过I=U/R的公式得到电流。

采样的电压范围是正负81.92mV,那么如果你用的采样电阻是10mΩ的,采集的电流范围就是正负8.192A。

但是要注意的是你的采样电阻的功率够不够,以及过大电流的话板子能不能吃得消。

然后存放电流的寄存器是16位的。

扣掉一个符号位,剩15位,因此分辨率就等于81.92mV/采样电阻阻值/2^15

还是以采样电阻为10mΩ为例,那么采集到的电流的最小单位就是0.00025A,

因此后续从电流寄存器读出的值需要乘上0.00025A这个数才是读取到的电流值。

但是有可能有误差,不一定是0.00025A这个数,因为采样电阻的阻值比较小,所以电路板上走线的寄生电阻也是有可能产生影响的。

最好的办法就是实际上测一下电流到底是多少,然后把实际的电流值除上电流寄存器的值得到一个系数,用这个系数去代替我们用公式计算的最小单位。

具体如何配置以及如何读取数值,我们还得看寄存器。

现在先看看它的引脚。

A0和A1可以用来设置INA226的从机地址,一般来说没什么特殊要求的话就都接地就行。

SDA和SCL不用多说,就是I2C通信用的。

还有一个Alert报警的引脚,感觉没啥用,要用的话就跟SDA、SCL一样开漏挂起来,后面再讲它。

VS和GND电源引脚。

IN+和IN-接上采样电阻来采集电流数据,这边是有分正反方向的。

VBUS可以直接接到IN-上来读取总线电压。

接下来看看寄存器。

一共十个寄存器,后面两个可以不用管,是查ID的,可以验证自己的I2C是否正确。

配置主要看第一个00h的寄存器。

从高位看起,第一个bit15是复位位,置1后全部寄存器都恢复默认,包括自己,会变回0。

Bit12~bit14都没有意义,但是bit14默认是1,所以我看网上很多人的代码里都把这位置1了,其实是都可以的。

Bit9~bit11用来设置采样平均值的样本数的,一般来说取个16或者64就行,太少太多都不好。

默认是样本数为1,这样也就谈不上什么平均值了,因此这是我们需要修改的地方。

Bit6~bit8用来设置总线电压的采样时间。

默认是1.1ms,这个值是还可以的,我觉得不用怎么改。

但是要注意的是采样时间乘上样本数得到的时间不能大于我们跟INA226索要数据的时间。

比如说我采样的样本数是1024,采样时间是1.1ms,然后我每隔半秒就跟它要个数据,这样采集的数据会有重复的风险。

Bit3~bit5用来设置采样电阻的电压采样时间,可以当成是电流的采样时间。

默认也是1.1ms,可以不用改,但是还是要根据具体需求去具体分析。

最后bit0~bit2就是设置工作模式的。

具体都是什么含义直接看表格就行,自己翻译一下。

我们就用默认的采样电阻的电压和总线电压的连续采集模式就行,这样可以获取到电压电流等数据。

下一个寄存器,采样电阻身上的电压。

把读到的数乘上2.5uV就行,但是没什么用,我们可以不读,我们直接读取电流寄存器的值就行。

下个寄存器总线电压寄存器,也就是VBUS引脚上的电压。 

要把读到的值乘上1.25mV,并且要注意的是这个值只能为正数。

不过电流的值可以为负数,可以区分电流方向。

下一个寄存器就是电流寄存器了。

现在需要先暂时不看寄存器了,看看俩公式。

我们先看下面的,Current_LSB = Max.../2^15,其中Max...是我们预期要检测的最大电流。

这边要注意区分一下这个预期的最大电流和实际上能检测的最大电流。

文章开头有简单提一下,实际能检测的最大电流是81.92mV / 采样电阻的阻值

假设我用的是10mΩ,那么实际能检测的最大电流就是8.192A。

但是可能我的项目中只需要检测到最大7A的电流,那么我带入到公式里的Max...就是7A。

也就是说我的预期检测的最大电流只要比实际能检测到的最大电流小就可以了,我们心里有底预期最大电流是多少之后,就可以不用管实际能检测的电流是多少了,之后也都用不到了。

那么还是以这个例子,经过计算,我的Curren_LSB就是等于7A / 2^15 ≈ 0.0002136。

拿到这个Current_LSB之后就可以带入计算CAL的值了,这是一个补偿值,具体我们不用管,代入公式计算即可。

其中Rshunt就是我们采样电阻的阻值,

计算可得CAL = 0.00512 / (0.0002136A * 0.01Ω) = 2397。

两个数都拿到之后我来告诉大家怎么使用这俩参数。

首先是从电流寄存器(04h)读出的值乘上Current_LSB就是采样得到的电流值了。

然后是下一个寄存器,校准寄存器。

我们把我们算出来的CAL给它就可以了。

因此简单概括一下,我们要使用INA226的话,首先配置00h这个寄存器,再经过计算得到CAL和Current_LSB,把CAL写进05h,再用Current_LSB乘上04h(即电流寄存器)的数据就可以得到电流的大小了电压的话直接读出02h(即总线电压寄存器)的值再乘上1.25mV就行,功率P = UI,因此怎么得到功率就不用我多说了吧。

最后俩寄存器就是跟报警Alert引脚有关,因为用的不多,所以简单讲讲。

16个bit,扣掉bit5~bit9,还剩11个bit,分别代表十一个功能,如果需要哪个功能就把哪个bit置1。

Bit15:采样电阻上的电压高于设置值警报。

Bit14:采样电阻上的电压低于设置值警报。

Bit13:总线电压高于设置值警报。

Bit12:总线电压低于设置值警报。

Bit11:通过总线电压算出的功率高于设置值的时候警报。

Bit10;可以进行下一轮转换的时候警报。

Bit4我没看很明白,英语不太好。

Bit3:转换就绪后警报。

Bit2:运算错误时警报。

Bit1:设置警报的极性。

Bit0:是否开启锁存器,即警报启动后,是否要读取了这个寄存器才解除警报。

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
暂无数据
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航