Gravity:I2C 3.7V锂电池电量计

简介

在很多项目中我们都会用到3.7V锂电池,但是锂电池的剩余电量与电压呈现高度非线性,我们往往只能根据电池电压粗略判断电池是否充满或电量不足。Gravity 3.7V锂电池电量计使用Gravity I2C接口,超低工作电流,通过Maxim专利算法,实时跟踪锂电池的相对充电状态(SOC,State-Of-Charge),无需充放电学习过程,无积累误差,即插即用,准确测量锂电池的当前电压和剩余电量。模块预留低电量报警中断引脚,当电池电量低于指定阈值时,该引脚产生一个下跳脉冲,触发主控的外部中断。

使用该模块可实时了解或记录系统的耗电状态,估算电池的续航时间,或是在太阳能项目中了解电池电量在一日甚至数月的变化状态,准确掌握太阳能系统充放电的“收支状况”,甚至可以做成一个智能电源管理系统。

特性

技术规格

应用场景

接口说明

Gravity 3.7V锂电池电量计 引脚说明

标号 名称 功能描述
+ VCC 电源正极(3.3~5.0V)
- GND 电源负极
C SCL I2C时钟线
D SDA I2C数据线
ALR ALRT* 低电量报警中断(低电平有效)
BAT IN 电池接口 3.7V锂电池连接端口
REV BAT 电池反接指示灯 电池接反时,反接保护电路激活,指示灯点亮。

引脚说明

Arduino使用教程

准备

连线图

读取锂电池电压、剩余电量与设定低电量中断报警

    /*
     * file DFRobot_MAX17043.ino
     *
     * connect gauge I2C interface with your board (please reference board compatibility)
     *
     * Voltage, percentage will be printed via serial.
     * Use API to config alaram and sleep (please reference to the readme in lib)
     *
     * Copyright   [DFRobot](https://www.dfrobot.com), 2016
     * Copyright   GNU Lesser General Public License
     *
     * version  V1.0
     * date  2018-3-26
     */

    #include "DFRobot_MAX17043.h"
    #include "Wire.h"

    #ifdef __AVR__
      #define ALR_PIN       2
    #else
      #define ALR_PIN       D2
    #endif

    #define PRINT_INTERVAL        2000
    #define BAT_PERCENTAGE        32

    DFRobot_MAX17043        gauge;
    uint8_t       intFlag = 0;

    void interruptCallBack()
    {
      intFlag = 1;
    }

    void setup()
    {
      Serial.begin(115200);
      while(!Serial);
      Serial.println();
      Serial.println();
      pinMode(ALR_PIN, INPUT_PULLUP);
      attachInterrupt(digitalPinToInterrupt(ALR_PIN), interruptCallBack, FALLING);  //default alert is 32%

      while(gauge.begin() != 0) {
        Serial.println("gauge begin faild!");
        delay(2000);
      }
      delay(2);
      Serial.println("gauge begin successful!");
      //gauge.setInterrupt(BAT_PERCENTAGE);  //use this to modify alert threshold as 1% - 32% (integer)
    }

    void loop()
    {
      static unsigned long lastMillis = 0;
      if((millis() - lastMillis) > PRINT_INTERVAL) {
        lastMillis = millis();
        Serial.println();

        Serial.print("voltage: ");
        Serial.print(gauge.readVoltage());
        Serial.println(" mV");

        Serial.print("precentage: ");
        Serial.print(gauge.readPercentage());
        Serial.println(" %");
      }

      if(intFlag == 1) {
        intFlag = 0;
        gauge.clearInterrupt();
        Serial.println("Low power alert interrupt!");
        //put your battery low power alert interrupt service routine here
      }
    }

结果

**注意:**

受内部滤波电容的影响,在测量的过程中如果突然拔出电池,显示的电压和剩余电量会缓慢下降到零,但不会立刻变为零。

受芯片固有算法和工作原理的影响,若在程序运行后,再插入电池,剩余电量可能会一直显示为0.00%。此时,需要复位主控(重新运行程序),读数才能恢复正常。

Mind+(基于Scratch3.0)图形化编程

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

树莓派教程

准备

接线图

-

安装驱动

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_MAX17043.git pi@raspberrypi:~ $ cd ~/DFRobot_MAX17043/RaspberryPi/python pi@raspberrypi:~/DFRobot_MAX17043/RaspberryPi/python $ python DFRobot_MAX17043.py

读取锂电池电压、剩余电量与设定低电量中断报警

pi@raspberrypi:~/DFRobot_MAX17043/RaspberryPi/python $ cd readAndInt pi@raspberrypi:~/DFRobot_MAX17043/RaspbeeryPi/python/readAndInt $ python readAndInt.py

结果

**注意:**

受内部滤波电容的影响,在测量的过程中如果突然拔出电池,显示的电压和剩余电量会缓慢下降到零,但不会立刻变为零。

受芯片固有算法和工作原理的影响,若在程序运行后,再插入电池,剩余电量可能会一直显示为0.00%。此时,需要重新运行样例代码readAndInt.py,读数才能恢复正常。

- DFR0563_RP3_result.png

应用实例

搭建一个太阳能电源管理系统

如下图,将Gravity:3.7V锂电池电量计用于Sunflower:5V太阳能电源管理模块,即可搭建一个太阳电源管理系统。在白天,可利用电池电量计实时监控太阳能电池板对锂电池的充电情况,到了晚上,可了解系统的耗电情况。用户可自行编写代码将锂电池电压与剩余电量数据记录或打印出来,评估并分析太阳能板及锂电池在一整天,甚至几个月里面充放电的"收支状况",从而决定太阳能板额定功率和锂电池容量是否够大,能否完全支持整个系统白天或黑夜的用电量。此外,利用电量计的低电量中断报警功能和5V太阳能电源管理模块的可控5V输出,可在电池电量低于指定阈值时,利用ALR引脚向主控板发出中断信号,触发主控板控制I/O管脚关闭太阳能电源管理模块上的5V输出,从而关闭部分外接模块的供电,节约耗电。

-

常见问题

Q1.剩余电量检测的基本原理是什么?

- A. 模块使用Maxim的MAX17043专用3.7V锂电池电量检测芯片,采用ModelGauge专利算法,基本原理的介绍可参考Maxim官网。

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

更多

DFshopping_car1.png Link DFRobot商城购买链接