内容介绍
内容介绍
项目介绍
本设计实现了一个小型UPS,采用3.7V锂电池电源输入,具有锂电池充电管理,电池电量输出监测,5v 2A及3.3v 150ma输出功能。
项目硬件介绍
硬件 | 功能 | 公司 |
ADP150AUJZ-3.3 | LDO | ADI |
MCP73831T | 锂电池充电芯片 | MICROCHIP |
MAX17048G | 电量计 | MAX |
LTC3402 | 2A升压芯片 | ADI |
ADP150AUJZ-3.3
ADP150AUJZ-3.3是ADI的一颗超低噪声CMOS线性稳压器,可以提供150mA的电流输出能力,非常适合为外接传感器供电。
MCP73831T
MCP73831T是一款高度先进的线性电荷管理控制器,适用于空间有限的应用。MCP73831T不仅体积小,且所需的外部组件数量少。对于通过USB端口充电的应用,MCP73831T遵守管理USB电源总线的所有规范。MCP73831T采用恒定电流/恒定电压充电算法以及可选的预充和充电终止功能。恒定电流值由一个外部电阻设置。在大功率或高环境条件下,MCP73831T-2ATI/OT会根据芯片温度限制充电电流。这种热调节可优化充电周期时间,同时保持器件的可靠性。
MAX17048G
MAX17048G是一颗小尺寸、微功耗的电流电压计,适合用于手持机便携产品的锂离子电池组,且无需检流电阻。
LTC3402
LTC3402是ADI的同步升压型DC/DC转换器,同步整流效率可以达到97%,固定工作频率3MHz,具有宽输入范围:0.5V 至 5V 和非常低的静态电流:38µA ,输出电压调整范围:2.6V 至 5.5V。
功能演示:
总结:
本次项目是参考了adafruit的powerboost项目,能够实现对树莓派的ups供电,我在此基础上加了功率计,可以更好地做到电源的监控,项目的改进点在于充电芯片,虽然官方datasheet中说了是带有温度管理的,但实际使用中依然会感觉到温度非常高,未来会针对此进行优化。
电量检测代码:
#include <Wire.h> // Needed for I2C
#include <SparkFun_MAX1704x_Fuel_Gauge_Arduino_Library.h> // Click here to get the library: http://librarymanager/All#SparkFun_MAX1704x_Fuel_Gauge_Arduino_Library
SFE_MAX1704X lipo; // Defaults to the MAX17043
//SFE_MAX1704X lipo(MAX1704X_MAX17043); // Create a MAX17043
//SFE_MAX1704X lipo(MAX1704X_MAX17044); // Create a MAX17044
//SFE_MAX1704X lipo(MAX1704X_MAX17048); // Create a MAX17048
//SFE_MAX1704X lipo(MAX1704X_MAX17049); // Create a MAX17049
double voltage = 0; // Variable to keep track of LiPo voltage
double soc = 0; // Variable to keep track of LiPo state-of-charge (SOC)
bool alert; // Variable to keep track of whether alert has been triggered
void setup()
{
Serial.begin(115200); // Start serial, to output debug data
while (!Serial)
; //Wait for user to open terminal
Serial.println(F("MAX17043 Example"));
Wire.begin();
lipo.enableDebugging(); // Uncomment this line to enable helpful debug messages on Serial
// Set up the MAX17043 LiPo fuel gauge:
if (lipo.begin() == false) // Connect to the MAX17043 using the default wire port
{
Serial.println(F("MAX17043 not detected. Please check wiring. Freezing."));
while (1)
;
}
// Quick start restarts the MAX17043 in hopes of getting a more accurate
// guess for the SOC.
lipo.quickStart();
// We can set an interrupt to alert when the battery SoC gets too low.
// We can alert at anywhere between 1% - 32%:
lipo.setThreshold(20); // Set alert threshold to 20%.
}
void loop()
{
// lipo.getVoltage() returns a voltage value (e.g. 3.93)
voltage = lipo.getVoltage();
// lipo.getSOC() returns the estimated state of charge (e.g. 79%)
soc = lipo.getSOC();
// lipo.getAlert() returns a 0 or 1 (0=alert not triggered)
alert = lipo.getAlert();
// Print the variables:
Serial.print("Voltage: ");
Serial.print(voltage); // Print the battery voltage
Serial.println(" V");
Serial.print("Percentage: ");
Serial.print(soc); // Print the battery state of charge
Serial.println(" %");
Serial.print("Alert: ");
Serial.println(alert);
Serial.println();
delay(500);
}
软硬件
电路图
附件下载
Example1_Simple.ino
团队介绍
个人开发者
团队成员
xushiju
评论
0 / 100
查看更多