使用INA219电量监测芯片的一点经验
先分享下INA219的手册
手册如上,INA219 是TI推出的具有I2C 接口的零漂移双向电流/功率监测计,
INA219内部结构图如上,芯片同是支持差分分压电流检测跟总线电压检测,
芯片外部引脚A0、A1引脚,支持支持16路地址设置,同时可挂载16路设备,
INA219操作其实很简单,内部共有六个寄存器,其中需要用户设置的只有两个
Configuration Register 配置寄存器(地址= 00h)[reset = 399Fh
Shunt Voltage Register 分流电压寄存器(地址= 01h)
Bus Voltage Register 总线电压寄存器(地址= 02h)
Power Register 功率寄存器(地址= 03h)
Current Register 当前寄存器(地址= 04h)
Calibration Register 校准寄存器(地址= 05h)
8.6.2.1 Configuration Register,配置寄存器(地址= 00h)
RST:重置位,将此位设置为“1”会产生与上电复位相同的系统复位。 将所有寄存器重置为默认值; 这一点自我清除。
BRNG:总线电压范围,0 = 16V FSR,1 = 32V FSR(默认值)
PG:PGA(仅限分流电压),设置PGA增益和范围。 请注意,PGA默认为÷8(320mV范围)。 表4显示了各种产品增益设置的增益和范围。
BADC:BADC总线ADC分辨率/平均,这些位调整总线ADC分辨率(9位,10位,11位或12位)或设置总线电压寄存器的平均结果时使用的采样数(02H)。
SADC:SADC分流ADC分辨率/平均,这些位调整分流ADC分辨率(9位,10位,11位或12位)或设置分流电压寄存器的平均结果时使用的采样数(01H)。
BADC(总线)和SADC(分流)ADC分辨率/平均和转换时间设置如表5所示。
MODE:操作模式,选择连续,触发或断电操作模式。 这些位默认为连续分流和总线
8.6.3.1 Shunt Voltage Register,分流电压寄存器(地址= 01h)
分流电压寄存器存储当前的分流电压读数VSHUNT。 分流电压寄存器位根据配置寄存器(00h)中选择的PGA设置进行移位。 当存在多个符号位时,它们将是相同的值。
负数以2的补码格式表示,通过补充绝对值二进制数并加1来得到负数的2的补码。
通过设置MSB = 1来扩展符号,表示负数。将符号扩展到任何其他符号位以形成16位字。
示例:对于值VSHUNT = -320 mV:
1.取绝对值(包括精度到0.01 mV)→320.00
2.将此数字翻译为整数十进制数→32000
3.将其转换为二进制→111 1101 0000 0000
4.补充二进制结果:000 0010 1111 1111
5.在Complement中添加1以创建Two's Complement格式化结果→000 0011 0000 0000
6.扩展符号并创建16位字:1000 0011 0000 0000 = 8300h(记住根据PGA设置,根据需要将符号扩展到所有符号位。)
8.6.3.2 Bus Voltage Register,总线电压寄存器(地址= 02h)
总线电压寄存器存储最新的总线电压读数VBUS。
满量程范围= 32 V(十进制= 8000,十六进制= 1F40),LSB = 4 mV。
满量程范围= 16 V(十进制= 4000,十六进制= 0FA0),LSB = 4 mV。
CNVR:转换就绪,虽然可以随时读取上次转换的数据,但INA219转换就绪位(CNVR)指示数据输出寄存器中何时有转换数据。
所有转换,平均和乘法完成后,CNVR位置1。 CNVR将在以下条件下清除:
1.)将新模式写入配置寄存器的工作模式位(掉电或禁用除外)
2.)读取功率寄存器
OVF:数学溢出标志,当功率或电流计算超出范围时,数学溢出标志(OVF)置位。 它表明当前和电力数据可能毫无意义。
8.6.3.3 Power Register,功率寄存器(地址= 03h)
满量程范围和LSB由校准寄存器设置。 请参见编程校准寄存器。
功率寄存器通过将电流值乘以总线值来记录功率,单位为瓦特
8.6.3.4 Current Register,当前寄存器(地址= 04h)
满量程范围和LSB取决于校准寄存器中输入的值。
有关详细信息,请参阅编程校准寄存器。 负值以2的补码格式存储。
通过将分流电压寄存器中的值乘以校准寄存器中的值,根据公式4计算电流寄存器的值:
8.6.4.1 Calibration Register,校准寄存器(地址= 05h)
电流和功率校准由校准寄存器的FS15至FS1位设置。 请注意,在计算中不使用位FS0。
该寄存器设置与分流器上的满量程压降相对应的电流。 满量程范围和电流和功率测量的LSB取决于在该寄存器中输入的值。
请参见编程校准寄存器。 该寄存器适用于整个系统校准。 请注意,0 POR值都是默认值。
FS0是一个空位,始终为0.无法向FS0写入1。 CALIBRATION是存储在FS15:FS1中的值
接下来我们重点说一下各个寄存器等配置问题,
INA219共有六个寄存器,其中只有Configuration跟Calibration需要用户自己配置
具体的寄存器为上面已经做了详解,
Configuration配置寄存器
配置寄存器主要配置芯片测量的量程、精度及工作模式,复位值0x399F
PG位用于配置差分模式下,芯片测量差分分压电压的量程,说白了就是把IN+与IN-两引脚间的电压再等分多少分之一
BADC与SADC位同样适用上面的参数,用于设置ADC的采样精度及采样周期,
其中绿框内表示设置不同的精度只采样一次,采样周期不同,
红框表示使用12bit精度,采集多少次取平均值,采样周期不同
MODE位用于设置芯片的工作模式,
一般用最后一项,默认差分电压与总线电压都连续采样
Calibration校准寄存器
校准寄存器的设置,要针对芯片外部使用的采样电阻的阻值,
通知设置校准寄存器,方便芯片直接计算测量值,
用户就可以直接从其余四个寄存器中直接读出测量的数据了
本帖最后由 通宵敲代码 于 2019-8-6 21:03 编辑
关于校准寄存器的计算,手册中给出了公式,如下所示
此处需要结合配置寄存器中我们设置的BRNG位,即总线电压范围是16V还是32V,
下面我们以32V为例,说一下计算过程,参考如下程序
使用的电路如下
第一步
我们先根据测量需要,设定我们的电压测量范围0-32V,以及使用的采样电阻阻值0.05欧姆
并假定IN+与IN-引脚间的最大差分电压为±320mV
第二步
根据N+与IN-引脚间的最大差分电压±320mV,计算出电路中可测量的的最大电流为6.4A计算出
第三步
根据外部电路中可能流过的最大电流,配合Shunt Voltage Register查分分压寄存器的设置,
计算出使用15bit精度时的测量分度196uA,与使用12bit精度时的测量分度1562uA,
这两个数值即我们可以测量的线路中电流是可以达到的最小分度值范围
第四步
从第三步计算的范围中,选取一个比较方便计算,且符合测量要求的数值,即Current_LSB值
一般取比15bit精度时的分度196uA稍大一点的整数,必须我们此处使用的0.0002A(200uA);
此数值也可使用手册中给出的公式2计算得到
第五步
根据手册中给的计算公式1,我们使用即Current_LSB值及我们的外部采样电阻值,
可以计算出Calibration校准寄存器需要设置的数值,即程序中的ina219_calValue = 4096;
第六步
由我们计算得到的Current_LSB,使用手册中给出的公式5,
我们可以计算的到Power功率寄存器的最小分度值为4mW
此数值与工具寄存器的值相乘及时我们电路中的功率了
第七步
此处主要用于说明几个主要测量值的范围
第八步
根据我们程序中设计的最大电流值及最大电压,计算出可以测量的最大功率值
并给出了此配置下的最小电流分度, ina219_current_LSB_uA = 200; // Current LSB = 200uA per bit
及最小功率分度, ina219_power_LSB_mW = 4; // Power LSB = 4mW per bit = 20 * Current LSB
第九步
根据我们上面的计算,设置我们的Configuration配置寄存器及Calibration校准寄存器
代码太帅气了 我们一直用的这款 工业级的板子上好像都用的这个系列型号 zhangmangui 发表于 2019-8-17 17:16
代码太帅气了 我们一直用的这款
公司的工控板也在用,
双向电流检测,
直接能读到总线电压跟功率
还是相当不错的 感谢感谢~ 通宵敲代码 发表于 2019-8-19 16:17
公司的工控板也在用,
双向电流检测,
直接能读到总线电压跟功率
兄弟现在混得怎么样做的什么行业 通宵敲代码 发表于 2019-8-19 16:17
公司的工控板也在用,
双向电流检测,
直接能读到总线电压跟功率
还有重要的是混到媳妇了么 本帖最后由 zanjun 于 2019-8-27 16:55 编辑
楼主好,大家好,我现在也在使用ina219,我使用触发方式采样,我发现总线电压误差较大,电流和shunt电压基本没问题,
比如我设定1.6mA左右的电流,采样电阻0.4欧姆,shunt电压读数0.66mv,电流读数1.65mA,总线电压读数是0(原始数据0002),实测有8.5mV,
再比如设定50mA时,shunt电压20mv,电流50.1mA,也差不多,总线电压读数248mV,实测255mV。不知你们有没有遇到过。
zhangmangui 发表于 2019-8-21 22:16
兄弟现在混得怎么样做的什么行业
最近做道路桥梁检测设备,
也就那样吧,有活干有饭吃
{:lol:}{:lol:}{:lol:}{:lol:} zanjun 发表于 2019-8-27 16:37
楼主好,大家好,我现在也在使用ina219,我使用触发方式采样,我发现总线电压误差较大,电流和shunt电压基 ...
没遇到过你这个问题,我这边电压测量还是比较准确的,
有两个地方建议你检查一下,
一是接地问题,总线电压测得是IN-的对地电压,接地要一致才行;
再就是精度问题,INA219只有16V跟32V两个电压档位,
你测毫伏有点低了,测个高点的电压试试。 zhangmangui 发表于 2019-8-21 22:17
还有重要的是混到媳妇了么
{:sweat:}还木有 通宵敲代码 发表于 2019-8-28 11:31
没遇到过你这个问题,我这边电压测量还是比较准确的,
有两个地方建议你检查一下,
一是接地问题,总线电 ...
谢谢回复,我这是个压控恒流源,电流是可变的,所以总线电压也是变化的,我又测试了一遍,总线电压误差还是挺大的,大约有10mV,可shunt电压和电流,还是不错的。我主要关心电流值,先这样了。再一次谢谢 通宵敲代码 发表于 2019-8-28 11:32
还木有
加油 兄弟这么优秀 zhangmangui 发表于 2019-8-28 20:56
加油 兄弟这么优秀
26V是测量电路电压吗?INA219只有16V跟32V两个电压档位的32是指什么? 您好 我看见您对ina219芯片有比较深的理解如果我要测量多个电池我不太明白如何配置多个芯片连接到iic总线上的地址iic要区别多个芯片怎么区别呀我对于这方面不太懂 谢谢 wwwwxxxx 发表于 2020-6-2 22:21
您好 我看见您对ina219芯片有比较深的理解如果我要测量多个电池我不太明白如何配置多个芯片连接到iic总 ...
看手册这一段介绍,把A0、A1引脚对接到不用的引脚上就行了。
页:
[1]
2