_SKU_DFR0563__Gravity__3.7V_Li_Battery_Fuel_Gauge_3.7V锂电池电量计 - jimaobian/DFRobotWikiCn GitHub Wiki

Gravity:I2C 3.7V锂电池电量计

简介

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

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

特性

  • Maxim专利算法,准确测量锂电池当前电压和剩余电量
  • 无需充放电学习过程,无积累误差,即插即用
  • 兼容3.3V/5V控制器
  • 可编程低电量报警中断
  • 电池反接保护,误接不烧电路

技术规格

  • 输入电压(VCC):3.3V~6V
  • 电池输入电压(BAT IN):2.5V~4.5V
  • 电池类型(BAT IN):3.7V单节锂聚合物/锂离子电池(充满电压4.2V)
  • 工作电流:50 uA
  • 通信接口:Gravity I2C (逻辑电平0-3.3V)
  • 产品尺寸:30.0mm*22.0mm

应用场景

  • 太阳能气象站、路灯
  • 锂电池充电器
  • 智能小车、机器人

接口说明

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

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

引脚说明

Arduino使用教程

准备

  • 硬件
    • Arduino UNO控制板(或类似控制板) x 1
    • Gravity:3.7V锂电池电量计 x 1
    • Gravity 4P传感器连接线(或若干杜邦线) x 1

连线图

DFR0563_connection_diagram_Arduino.png

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

  • 将模块与Arduino按照连线图相连,电池既可连在接线柱上也可连在PH2.0 2P横卧母座上,两个插座内部直接并联。I2C地址为固定的0x36,无需修改。
  • 安装DFRobot MAX17043库。如何安装库?
  • 打开Arduino IDE,将下面的代码上传到Arduino UNO。
  • 打开Arduino IDE的串口监控视器,把波特率调至115200,即可观察到模块通过串口打印电池电压、剩余电量百分比和中断报警提示信息。
/*
 * 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](http://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
  }
}

结果

  • Arduino每隔2s向串口打印电池的当前电压voltage、剩余电量百分比percentage和中断报警提示信息。
  • 电池低电量中断报警ALR使用说明:
    • 低电量中断报警阈值默认为32%,即电池剩余电量低于32%时在ALR产生一个下跳变中断,该阈值BAT_PERCENTAGE可设置为1-32之间的任意整数(分别对应1%-32%),并通过函数setInterrupt()进行设定。
    • 当电池初始剩余电量高于BAT_PERCENTAGE时,ALR管脚为高电平,若通过一段时间放电,低于BAT_PERCENTAGE的瞬间触发相应的中断报警,ALR管脚被拉至低电平,程序串口打印“Low power alert interrupt!”,并通过clearInterrupt()清中断报警,使ALR又立刻被拉至高电平。
    • 当电池初始剩余电量低于BAT_PERCENTAGE时,程序一开始就会产生低电量中断报警。
    • 电池剩余电量(由于充电)高于BAT_PERCENTAGE后,再次(由于放电)低于BAT_PERCENTAGE才会触发另一次中断。若中断触发后不调用clearInterrupt()清中断,无论电池电量如何变化,ALR管脚会一直保持低电平。

| 注意:

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

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

DFR0563_Arduino_result.png

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

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

树莓派教程

准备

  • 硬件
    • 树莓派3代B型(或类似)主控板 x 1
    • Gravity:3.7V锂电池电量计 x 1
    • Gravity 4pin传感器连接线(或若干杜邦线) x 1

接线图

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

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

  • 将模块与树莓派按照连线图相连,电池既可连在接线柱上也可连在PH2.0 2P横卧母座上,两个插座内部直接并联。I2C地址为固定的0x36,无需修改。
  • 在终端中,依次键入如下指令并回车,运行样例代码:

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

结果

  • 程序每隔2s测量并打印一次电池当前电压、剩余电量。
  • 电池低电量中断报警ALR使用说明:
    • 低电量中断报警阈值默认为32%,即电池剩余电量低于32%时在ALR产生一个下跳变中断,用户可打开样例代码readAndInt.py,通过修改函数setInterrupt()的参数,将中断报警阈值设置为1-32之间的任意整数(分别对应1%-32%)。
    • 当电池初始剩余电量高于中断报警阈值时,ALR管脚为高电平,若通过一段时间放电,低于中断报警阈值的瞬间触发相应的中断报警,ALR管脚被拉至低电平,程序串口打印“Low power alert interrupt!”,并通过clearInterrupt()清中断报警,使ALR又立刻被拉至高电平。
    • 当电池初始剩余电量低于中断报警阈值时,程序一开始就会产生低电量中断报警。
    • 电池剩余电量(由于充电)高于中断报警阈值后,再次(由于放电)低于中断报警阈值才会触发另一次中断。若中断触发后不调用clearInterrupt(),无论电池电量如何变化,ALR管脚会一直保持低电平。

| 注意:

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

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

  • DFR0563_RP3_result.png

应用实例

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

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

  • DFR0563_APP1.png

常见问题

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

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

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

更多

DFshopping_car1.png Link DFRobot商城购买链接