Loading

【STM32-INA219微电流检测】

概述

本篇采用INA219实时监测4mA内的电流值,电流精确到uA。

设计

1.原理

INA219检测电流的原理是计算电流经过采样电阻两端的压差,进行计算得到,整个过程由芯片自动计算,因此只需要确定好采样电阻、设置好寄存器即可获取到电流值。

image

根据芯片手册,经过分流电阻\(N\)(采样电阻)后,能够采集到的最低有效电压\(LSB\)为10uV。

最小电流参数 \(I_{LSB} = Current\_LSB\) 非常重要,有两种计算方法:

1. 电流公式(1)

\(LSB = 10\mu V\)
\(R = N\Omega\) (采样电阻阻值)

INA219 计算公式
最小电流(分辨率) \(I_{LSB} = \frac{LSB}{R} = \frac{10\mu V}{N\Omega} (\mu A)\)
最大电流 \(I_{MAX} = I_{LSB} \times 2^{12}(\mu A)\)
最大电流(x8倍) \(I_{8} = I_{MAX} \times 8\)

INA219为12位分辨率,即 \(2^{12}=4096\)
由于芯片内置放大器,可将电流值由1倍增益放大2、4、8倍,最大可测电流为\(I_{8}\)

2. 电流公式(2)

首先,找到需要检测的最大电流所对应的电阻两端最大电压。如果需要8倍增益,则查表得,PGA=/8 代表最大电流(x8倍),其对应320mV。

\(R_{VMAX} = 320mV\) (查表得)
\(R = N\Omega\) (采样电阻阻值)

image

INA219 计算公式
最大电流 \(I_{MAX} = \frac{R_{VMAX} (mV)}{R(\Omega)}(mA)\)
最小电流(分辨率) \(I_{LSB} = \frac{I_{MAX}}{2^{15}}(mA)\)

2.计算采样电阻阻值

检测4mA内电流,需要精度越高越好,分辨率最好在uA级别。
这里使用电流公式(1)计算:

\(R = 5\Omega\) :

最小分辨率 \(I_{LSB} = \frac{10\mu V}{5\Omega} = 2\mu A\)
最大检测电流 \(I_{MAX} = 2\mu A \times 4096 = 8.192mA\)
8倍增益后最大检测电流 \(I_{8} = 8.192mA \times 8 = 65.536mA\)

\(R = 10\Omega\) :
最小分辨率 \(I_{LSB} = \frac{10\mu V}{10\Omega} = 1\mu A\)
最大检测电流 \(I_{MAX} = 1\mu A \times 4096 = 4.096mA\)
2倍增益后最大检测电流 \(I_{2} = 4.096mA \times 2 = 8.192mA\)
8倍增益后最大检测电流 \(I_{8} = 4.096mA \times 8 = 32.768mA\)

选用 \(10\Omega\) 精度更高,但需要注意若超过4mA会超过量程(可能烧坏芯片),可配置寄存器设置为2倍或更高。
【此处我选择了5Ω,增益为1倍】

原理图

image

注:采样电阻更换为计算得到的阻值
image
根据手册,采样率大于1MHz时会出现高频噪声,可以在输入引脚串联低电阻和电容,形成滤波器过滤杂波
image
A1 A0下拉,查表得前7位:1000000,第0位读写位0或1,IIC地址为0x80、0x81

寄存器配置

INA219按要求正常工作的话,需要将校准值、模式配置写入寄存器;获取电压、电流等参数,也需要读取寄存器。

寄存器 地址 功能
模式配置寄存器(读/写) 0x00 设置量程、分辨率、工作模式等
分流电阻电压寄存器(只读) 0x01 存储分流电阻上的压降测量值
总线电压寄存器(只读) 0x02 存储总线电压测量值
功率寄存器(只读) 0x03 存储计算出的功率值
电流寄存器(只读) 0x04 存储计算出的电流值
基准(校准)寄存器(读/写) 0x05 设置校准值,用于电流 / 功率计算

1.基准(校准)寄存器 0x05

功能: 通过设置校准值,定义电流测量的分辨率(LSB),间接决定电流和功率的测量范围与精度。
格式: 16 位寄存器,无固定位定义,值需通过公式计算。
image

  • 校准参数 \(Cal\) 由公式(1)得出,其中 \(Current\_LSB\) 由公式(2)得出

  • \(Current\_LSB\) 为最小分辨率,即 \(I_{LSB}\)在这个公式中其单位要转成 \(A\)

  • \(R_{SHUNT}\) 为采样电阻 \(R = N\Omega\)

  • \(trunc()\) 为取整函数

我们使用 \(5\Omega\) 采样电阻时,可通过以上公式计算出校准参数:

\(R_{SHUNT} = 5\Omega\)

\(Current\_LSB\) $ = $ \(I_{LSB} = 2\mu A\) $ = 0.000002 A $

\(Cal = trunc(\frac{0.04096}{Current\_LSB \times R_{SHUNT}})\)

\(Cal = trunc(\frac{0.04096}{0.000002 \times 5}) = 4096\)

4096 = 0x1000

INA219_WriteReg(0x05, 0x1000); // 写入校准值

2.模式配置寄存器 0x00

功能: 配置芯片的电压量程、增益、ADC 分辨率、工作模式等核心参数,复位后需重新配置。
格式: 16 位寄存器,位定义如下(从高位到低位):

位序号 位名称 功能描述
15 RESET 复位控制:1 = 芯片复位(所有寄存器恢复默认值),0 = 正常工作(写 1 后自动清零)
14-13 BRNG 总线电压量程选择:
00=16V(最大测量 16V,分辨率 4mV/LSB)
01=32V(最大测量 32V,分辨率 8mV/LSB)
(注:实际总线电压需≤36V 绝对最大值)
12-11 PGA 分流电压增益(PGA)选择(决定分流电压量程):
00=±40mV(增益 ×1)
01=±80mV(增益 ×2)
10=±160mV(增益 ×4)
11=±320mV(增益 ×8)
10-7 BADC 总线电压 ADC 分辨率 / 采样时间:
0000=9 位分辨率(单次采样,无滤波,84μs)
0001=10 位分辨率(单次采样,无滤波,148μs)
0010=11 位分辨率(单次采样,无滤波,276μs)
0011=12 位分辨率(单次采样,无滤波,532μs)
0100=12 位分辨率(2 次采样平均,弱滤波,1.06ms)
0101=12 位分辨率(4 次采样平均,中弱滤波,2.13ms)
0110=12 位分辨率(8 次采样平均,中滤波,4.26ms)
0111=12 位分辨率(16 次采样平均,中强滤波,8.51ms)
1000=12 位分辨率(32 次采样平均,强滤波,17.02ms)
1001=12 位分辨率(64 次采样平均,超强滤波,34.05ms)
1010=12 位分辨率(128 次采样平均,最强滤波,68.10ms)
6-3 SADC 分流电压 ADC 分辨率 / 采样时间:
【同上】 BADC(位 10-7),用于设置分流电压的 ADC 参数
2-0 MODE 工作模式选择(决定测量对象和频率):
000 = 断电模式(省电)
001 = 分流电压单次测量
010 = 总线电压单次测量
011 = 分流 + 总线电压单次测量
100 = 仅分流电压连续测量
101 = 仅总线电压连续测量
110 = 保留
111 = 分流 + 总线电压连续测量
RESET BRNG PGA BADC SADC MODE
0 01 00 0000 1010 111

0010 0000 0101 0111 = 0x2057

// 写入带滤波功能的配置值
INA219_WriteReg(0x00, 0x2057);

3.只读寄存器 0x01-0x04

这些寄存器存储测量结果,无需配置,但需理解其数据格式以正确转换为物理量。

1. 分流电压寄存器(0x01)

  • 格式:16 位有符号补码,分辨率 10μV/LSB(固定)。
  • 转换公式: $ V_{\text{SHUNT}} = \text{寄存器值} \times 10\mu\text{V} $
  • 示例:若寄存器值为 0x0080(十进制 128),则 $ V_{\text{SHUNT}} = 128 \times 10\mu\text{V} = 1.28\text{mV} $

2. 总线电压寄存器(0x02)

  • 格式:16 位,高 13 位有效(低 3 位为状态位,需忽略)。
  • 分辨率
    • 当 BRNG=00(16V 量程):4mV/LSB;
    • 当 BRNG=01(32V 量程):8mV/LSB。
  • 转换公式: $ V_{\text{BUS}} = (\text{寄存器值} >> 3) \times \text{分辨率} $
  • 示例:16V 量程下,寄存器值为 0x1000(二进制 0001 0000 0000 0000),则 $ V_{\text{BUS}} = (0x1000 >> 3) \times 4\text{mV} = 0x200 \times 4\text{mV} = 512 \times 4\text{mV} = 2.048\text{V} $

3. 电流寄存器(0x04)

  • 格式:16 位有符号补码,单位为 Current_LSB(由校准寄存器决定)。
  • 转换公式:$ I = \text{寄存器值} \times \text{Current_LSB} $
  • 示例:若 Current_LSB=1mA/LSB,寄存器值为 0x0064(十进制 100),则 $ I = 100 \times 1\text{mA} = 100\text{mA} $。

4. 功率寄存器(0x03)

  • 格式:16 位有符号补码,单位为 Power_LSB(固定为 20×Current_LSB)。
  • 转换公式:$ P = \text{寄存器值} \times \text{Power_LSB} $
  • 示例:若 Power_LSB=20mA(对应 Current_LSB=1mA),寄存器值为 0x000A(十进制 10),则 $ P = 10 \times 20\text{mA} = 200\text{mW} $

五、配置流程总结

  1. 复位芯片:向配置寄存器写入 0x8000,确保寄存器初始化为默认值。
  2. 配置工作参数:设置配置寄存器(量程、增益、ADC 分辨率、工作模式)。
  3. 写入校准值:根据采样电阻和目标分辨率计算校准值,写入校准寄存器。
  4. 读取测量值:从 0x01-0x04 寄存器读取数据,按公式转换为物理量。

关键注意事项

  • 校准值直接决定测量精度,需根据实际采样电阻精确计算。
  • 分流电压量程(PGA 设置)需与采样电阻、最大电流匹配,避免超量程(建议实际最大压降 < 量程的 90%)。
  • 高分辨率(如 12 位 + 多次平均)可提高精度,但会增加测量时间;快速测量需牺牲分辨率。

通过以上配置,INA219 可实现高精度的电流、电压、功率监测,适用于电池管理、电源监控等场景。

posted @ 2025-06-20 17:12  CIOZ  阅读(298)  评论(0)    收藏  举报