简介
在很多项目中我们都会用到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
应用场景
- 太阳能气象站、路灯
- 锂电池充电器
- 智能小车、机器人
接口说明
标号 | 名称 | 功能描述 |
---|---|---|
+ | 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
- 软件
- Arduino IDE (1.0.x或1.8.x), 点击下载Arduino IDE
- DFRobot MAX17043库,点击下载MAX17043库
连线图
读取锂电池电压、剩余电量与设定低电量中断报警
- 将模块与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](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
}
}
结果
- 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%。此时,需要复位主控(重新运行程序),读数才能恢复正常。
Mind+(基于Scratch3.0)图形化编程
1、下载及安装软件。下载地址:https://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
接线图
安装驱动
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,读数才能恢复正常。
应用实例
搭建一个太阳能电源管理系统
如下图,将Gravity:3.7V锂电池电量计用于Sunflower:5V太阳能电源管理模块,即可搭建一个太阳电源管理系统。在白天,可利用电池电量计实时监控太阳能电池板对锂电池的充电情况,到了晚上,可了解系统的耗电情况。用户可自行编写代码将锂电池电压与剩余电量数据记录或打印出来,评估并分析太阳能板及锂电池在一整天,甚至几个月里面充放电的"收支状况",从而决定太阳能板额定功率和锂电池容量是否够大,能否完全支持整个系统白天或黑夜的用电量。此外,利用电量计的低电量中断报警功能和5V太阳能电源管理模块的可控5V输出,可在电池电量低于指定阈值时,利用ALR引脚向主控板发出中断信号,触发主控板控制I/O管脚关闭太阳能电源管理模块上的5V输出,从而关闭部分外接模块的供电,节约耗电。
常见问题
Q1.剩余电量检测的基本原理是什么?
- A. 模块使用Maxim的MAX17043专用3.7V锂电池电量检测芯片,采用ModelGauge专利算法,基本原理的介绍可参考Maxim官网。
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。