数字功率计

简介

Gravity:I2C数字功率计是一款可测量26V 8A以内各类电子模块、用电设备的电压、电流和功率,最大相对误差不超过±0.2%的高分辨、高精度、大量程测量模块(使用前需进行一次简单的手动校准)。可用于太阳能系统、电池库仑计、电机、主控板或电子模块的功耗测量、电池续航评估与实时电源参数在线监控。 模块采用TI INA219零温漂电流/功率监控芯片和2W大功率低温漂10mΩ合金采样电阻,电压和电流分辨率分别可达4mV与1mA,在满量程测量条件下,电压与电流的最大测量相对误差不超过±0.2%,并提供4个可通过拨码开关配置的I2C地址。模块可对双向高侧电流(流经电源或电池正极的电流)进行准确测量,这在太阳能或库仑计应用,电池既需要充电,也需要放电的场合尤为有用,用户可通过电流的正负读数了解电池的充放电状态,也可以了解电池的冲放电的实时电压、电流与功率。在电机应用场景,可通过实时监控电机电流是否由于堵转或负载过大导致电流过大,从而及时采取保护措施。此外,也可以使用该模块测量各类电子模块或整个项目的实时功耗,从而评估电池的续航时间。

特性

应用场景

技术规格

接口说明

SEN0291_overview.png

标号 名称 功能描述
1 VCC 电源正极(3.3~5.5V)
2 GND 电源负极
3 SCL I2C时钟线
4 SDA I2C数据线
5 ADDR I2C地址选择拨码开关
6 3P TERMINAL 电压与电流测量接线柱3P

Arduino使用教程

准备

连线图

SEN0291_connection_Arduino(CH).png

校准

样例代码

/*!
   file getVoltageCurrentPower.ino
   SEN0291 Gravity: I2C Digital Wattmeter
   The module is connected in series between the power supply and the load to read the voltage, current and power
   The module has four I2C, these addresses are:
   INA219_I2C_ADDRESS1  0x40   A0 = 0  A1 = 0
   INA219_I2C_ADDRESS2  0x41   A0 = 1  A1 = 0
   INA219_I2C_ADDRESS3  0x44   A0 = 0  A1 = 1
   INA219_I2C_ADDRESS4  0x45   A0 = 1  A1 = 1

   Copyright    [DFRobot](https://www.dfrobot.com), 2016
   Copyright    GNU Lesser General Public License
   version  V0.1
   date  2019-2-27
*/

#include <Wire.h>
#include "DFRobot_INA219.h"

DFRobot_INA219_IIC     ina219(&Wire, INA219_I2C_ADDRESS4);

// Revise the following two paramters according to actula reading of the INA219 and the multimeter
// for linearly calibration
float ina219Reading_mA = 1000;
float extMeterReading_mA = 1000;

void setup(void)
{
    Serial.begin(115200);
    while(!Serial);

    Serial.println();
    while(ina219.begin() != true) {
        Serial.println("INA219 begin faild");
        delay(2000);
    }
    ina219.linearCalibrate(ina219Reading_mA, extMeterReading_mA);
    Serial.println();
}

void loop(void)
{
    Serial.print("BusVoltage:   ");
    Serial.print(ina219.getBusVoltage_V(), 2);
    Serial.println("V");
    Serial.print("ShuntVoltage: ");
    Serial.print(ina219.getShuntVoltage_mV(), 3);
    Serial.println("mV");
    Serial.print("Current:      ");
    Serial.print(ina219.getCurrent_mA(), 1);
    Serial.println("mA");
    Serial.print("Power:        ");
    Serial.print(ina219.getPower_mW(), 1);
    Serial.println("mW");
    Serial.println("");
    delay(1000);
}

结果

Mind+ 上传模式编程

  1. 下载及安装软件。下载地址:https://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装
  2. 切换到“上传模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程
  3. “扩展”中选择“主控板”中的“Arduino Uno”。 "扩展"“传感器”中搜索选择“功率计”。详细教程:Mind+基础wiki教程-加载扩展库流程
  4. 进行编程,程序如下图:
  5. 菜单“连接设备”,“上传到设备”
  6. 程序上传完毕后,打开串口即可看到数据输出。详细教程:Mind+基础wiki教程-串口打印

Mind+ Python模式编程(行空板)

Mind+Python模式为完整Python编程,因此需要能运行完整Python的主控板,此处以行空板为例说明

连接图

操作步骤

1、下载及安装官网最新软件。下载地址:https://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装

2、切换到“Python模式”。“扩展”中选择“官方库”中的“行空板”和“pinpong库”中的”pinpong初始化“和“I2C数字功率计。切换模式和加载库的详细操作链接

3、进行编程

4、连接行空板,程序点击运行后,可在终端查看数据。行空板官方文档-行空板快速上手教程 (unihiker.com)

代码编程

以pinpong库为例,行空板官方文档-行空板快速上手教程 (unihiker.com)

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.libs.dfrobot_ina219 import INA219
from pinpong.board import Board


Board().begin()
ina1 = INA219(i2c_addr=0x45)
ina1.begin()

while True:
    print("电压:")
    print(ina1.get_bus_voltage_mv())
    print("电流:")
    print(ina1.get_current_ma())
    print("功率:")
    print(ina1.get_power_mw())

树莓派教程

准备

接线图

SEN0291_connection_RP3.png

安装驱动

  1. 启动树莓派的I2C接口。如已开启,可跳过该步骤。 打开终端(Terminal),键入如下指令,并回车:
    pi@raspberrypi:~ $ sudo raspi-config
    然后用上下键选择“ 5 Interfacing Options ”, 按回车进入,选择 “ P5 I2C ”, 按回车确认“ YES ”即可。重启树莓派主控板。

  2. 安装Python依赖库与git,树莓派需要联网。如已安装,可跳过该步骤。 在终端中,依次键入如下指令,并回车:
    pi@raspberrypi:~ $ sudo apt-get update
    pi@raspberrypi:~ $ sudo apt-get install build-essential python-dev python-smbus git

  3. 下载驱动库。在终端中,依次键入如下指令,并回车:
    pi@raspberrypi:~ $ git clone https://github.com/DFRobot/DFRobot_INA219.git

运行样例代码

结果

SEN0291_RP3_result.png

应用实例

测量电子模块功耗 不少电子模块并没有明确标明模块的工作电流,可如下图(以Gravity: 模拟pH计V2为例)将Gravity:I2C数字功率计串入模块的供电端侧VCC来检测模块的功耗,相对于使用万用表测串联电流和并联电压方式测功耗更简单直观。
SEN0291_App1(CH).png 监测太阳能系统中太阳能板、电池与输出的功耗情况 在如下图所示的一个典型太阳能系统中(以太阳能电源管理模块(12V铅酸电池版)为例),可利用四个Gravity:I2C数字功率计分别实时监测太阳能板、电池与两个输出端OUT1和OUT2的电压、电流和功率。每个功率计通过拨码开关配置为一个不同的I2C地址并联在同一块主控板上,主控板负载记录与统计各节点的电能数据。

对于太阳板,除了实时的电压、电流和功率以外,我们比较关心其在一段时间里面累计产生的电能,这个时间可能是一天,也可能是长达数周甚至数个月之久,这个时间的统计可以通过在主控上增加RTC模块实现。累计产生电能可以通过功率对时间的积分得到,例如,每1s将当前的P功率值(W)累加,得到相应的E能量值(J),然后将E/3600转换为另一个(电)能量单位Wh瓦时,或者将E/(3.6×10^6)得到kWh千瓦时(即我们俗称的多少“度”电)。

对于电池,功率计的应用在这里类似于一个库仑计,通过测量充放电电流来估计电池当前电量。注意到图中功率计IN+直接与电池正极相连,IN-与电源管理板BAT IN电池正输入端相连。当电流读数为正时,电流从IN+流向IN-,表明电池正在放电;当电流读数为负时,电流从IN-流向IN+,表明电池正在充电。因此可通过电流的正负值来判断电池的充放电状态。此外,我们比较关心电池的剩余电量(Ah),与记录太阳能板累计产生电能 的方法类似,将电流对时间进行积分,得到电池的剩余电量(Ah)。但由于铅酸电池在正常使用过程中不会完全放干里面的电能,因此可利用电源管理模块和一个功率不低于65W的笔记本电源适配器(额定输出电压19V或20V)通过太阳能端口SOLAR IN将电池充满电,然后在其中一个OUT输出口将电池放电直到输出截止,使用位于电池端的功率计记录累计放电量(Ah),该值即为铅酸电池实际可用的容量。当然电池容量还与放电电流大小、使用温度、已循环充放电使用的次数等多个因素有关,但是使用这种方法得出的容量比直接取电池标称容量要准确得多,可使用该值作为剩余电量(Ah)的统计基准。

对于输出端OUT,除了实时的电压、电流和功率以外,累计消耗电能也是值得关注的另一电源统计量,其计算方法与太阳能板的累计产生电能类似。 值得注意的是,太阳能板累计产生电能通常比另外三者累计消耗电能之和(假定电池一直在充电,即三者的电能均来源于太阳能板)要大。排除模块的测量误差,两者的差值主要来源于各类线路与转化损耗,如:电源管理板的线路损耗,稳压芯片的转换损耗,模块采样电阻的损耗,还有导线与接线柱的线路损耗等,用户可根据实际应用场景,在电能统计与管理时将这些损耗考虑进去。
SEN0291_App2(CH).png 注:由于大多数太阳能管理模块的电池保护都是将GND与BAT-断开。如果您按照上图所示连接BAT-与GND以监测电池电量的话,会导致BAT-无法断开GND,而使太阳能管理模块的电池保护电路失效。

常见问题

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png DFRobot商城购买链接