ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx
- 文档编号:26020764
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:19
- 大小:17.38KB
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx
《ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx》由会员分享,可在线阅读,更多相关《ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx(19页珍藏版)》请在冰豆网上搜索。
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片
特点
可测量累积的电池充电和放电电量
至20V工作范围可适合多种电池应用
14位ADC负责测量电池电压、电流和温度
1%电压、电流和充电准确度
±50mV检测电压范围
高压侧检测
适合任何电池化学组成和容量的通用测量
I2C/SMBus接口
可配置警报输出/充电完成输入
静态电流小于120μA
小外形8引脚3mmx3mmDFN封装
典型应用
描述
LTC®2943 可测量便携式产品应用中的电池充电状态、电池电压、电池电流及其自身温度。
其具有宽输入电压范围,因而可与高达 20V 的多节电池配合使用。
一个精准的库仑计量器负责对流经位于电池正端子和负载或充电器之间的一个检测电阻器电流进行积分运算。
电池电压、电流和温度利用一个内部 14位无延迟增量累加 (NoLatencyΔΣTM)ADC 来测量。
测量结果被存储于可通过内置 I2C/SMBus 接口进行存取的内部寄存器中。
LTC2943 具有针对所有 4 种测量物理量的可编程高门限和低门限。
如果超过了某个编程门限,则该器件将采用 SMBus 警报协议或通过在内部状态寄存器中设定一个标记来传送警报信号。
LTC2943 仅需采用单个低阻值检测电阻器以设定测量电流范围。
应用
电动工具
电动自行车
便携式医疗设备
视频摄像机
程序:
#include<>
#include<>
#include""
#include""
#include""
#include""
#include""
#include<>
00;CheckI2CAddress.";Sharedbetweenloop()andrestore_alert_settings()
.\nPleaseensureI2ClinesofLinduinoareconnectedtotheLTCdevice");
}
}
(ack_error);
(F("*************************"));
print_prompt();
}
}
}
*\n"));
(F("*Setthebaudrateto115200andselectthenewlineterminator.*\n"));
(F("**\n"));
(F("*****************************************************************\n"));
}
int8_tmenu_1_automatic_mode(int8_tmAh_or_Coulombs,int8_tcelcius_or_kelvin,uint16_tprescalar_mode,uint16_tprescalarValue,uint16_talcc_mode)
0=acknowledge,1=noacknowledge.
{
int8_tLTC2943_mode;
int8_tack=0;
LTC2943_mode=LTC2943_AUTOMATIC_MODE|prescalar_mode|alcc_mode;
();
ack|=LTC2943_write(LTC2943_I2C_ADDRESS,LTC2943_CONTROL_REG,LTC2943_mode);("Coulombs:
");
(charge,4);
(F("C\n"));
}
else
{
charge=LTC2943_code_to_mAh(charge_code,resistor,prescalarValue);("mAh:
");
(charge,4);
(F("mAh\n"));
}
current=LTC2943_code_to_current(current_code,resistor);IfanAlerthasbeenset,printoutappropriatemessageintheSerialPrompt.
(F("m-MainMenu\n\n"));
();
delay(AUTOMATIC_MODE_DISPLAY_DELAY);read_int();0=acknowledge,1=noacknowledge
{
int8_tLTC2943_mode;
int8_tack=0;
LTC2943_mode=LTC2943_SCAN_MODE|prescalar_mode|alcc_mode;
();
ack|=LTC2943_write(LTC2943_I2C_ADDRESS,LTC2943_CONTROL_REG,LTC2943_mode);("Coulombs:
");
(charge,4);
(F("C\n"));
}
else
{
charge=LTC2943_code_to_mAh(charge_code,resistor,prescalarValue);("mAh:
");
(charge,4);
(F("mAh\n"));
}
current=LTC2943_code_to_current(current_code,resistor);(F("Temperature"));
(temperature,4);
(F("K\n"));
}
else
{
temperature=LTC2943_code_to_celcius_temperature(temperature_code);(F("Temperature"));
(temperature,4);
(F("C\n"));
}
checkAlerts(status_code);IfanAlerthasbeenset,printoutappropriatemessageintheSerialPrompt
(F("m-MainMenu\n\n"));
();
delay(SCAN_MODE_DISPLAY_DELAY);
}
while()==false||(ack));
read_int();0=acknowledge,1=noacknowledge
{
int8_tLTC2943_mode;
int8_tack=0;
LTC2943_mode=LTC2943_MANUAL_MODE|prescalar_mode|alcc_mode;
();
ack|=LTC2943_write(LTC2943_I2C_ADDRESS,LTC2943_CONTROL_REG,LTC2943_mode);Whensetto1itindicatesthatstaledataisbeingreadfromthevoltage,currentandtemperatureregisters.
do
{
(F("*************************\n\n"));
uint8_tstatus_code;
uint16_tcharge_code,current_code,voltage_code,temperature_code;
ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_ACCUM_CHARGE_MSB_REG,&charge_code);("Coulombs:
");
(charge,4);
(F("C\n"));
}
else
{
charge=LTC2943_code_to_mAh(charge_code,resistor,prescalarValue);("mAh:
");
(charge,4);
(F("mAh\n"));
}
current=LTC2943_code_to_current(current_code,resistor);else("");
(F("Voltage"));
(voltage,4);
(F("V"));
if(staleData)(F("*****StaleData******\n"));else("");
if(celcius_or_kelvin){
temperature=LTC2943_code_to_kelvin_temperature(temperature_code);(F("Temperature"));
(temperature,4);
(F("K"));
}
else
{
temperature=LTC2943_code_to_celcius_temperature(temperature_code);(F("Temperature"));
(temperature,4);
(F("C"));
}
if(staleData)(F("*****StaleData******\n"));
else("");
checkAlerts(status_code);IfanAlerthasbeenset,printoutappropriatemessageintheSerialPrompt
(F("m-MainMenu\n\n"));
staleData=1;
();
delay(AUTOMATIC_MODE_DISPLAY_DELAY);
}
while()==false||(ack));
read_int();0=acknowledge,1=noacknowledge
{
int8_tLTC2943_mode;
int8_tack=0;
LTC2943_mode=LTC2943_SLEEP_MODE|prescalar_mode|alcc_mode;
();
ack|=LTC2943_write(LTC2943_I2C_ADDRESS,LTC2943_CONTROL_REG,LTC2943_mode);("Coulombs:
");
(charge,4);
(F("C\n"));
}
else
{
charge=LTC2943_code_to_mAh(charge_code,resistor,prescalarValue);("mAh:
");
(charge,4);
(F("mAh\n"));
}
(F("Current"));
(F("ADCSleep...\n"));
(F("Voltage"));
(F("ADCSleep...\n"));
(F("Temperature"));
(F("ADCSleep...\n"));
(F("m-MainMenu\n\n"));
checkAlerts(status_code);
();
delay(AUTOMATIC_MODE_DISPLAY_DELAY);
}
while()==false||(ack));
read_int();0=acknowledge,1=noacknowledge
{
int8_tack=0;
ack|=LTC2943_write(LTC2943_I2C_ADDRESS,LTC2943_CONTROL_REG,LTC2943_SHUTDOWN_MODE);0=acknowledge,1=noacknowledge
{
int8_tack=0;
int8_tuser_command;
do
{
(F("*************************\n\n"));
(F("1-SetAlertThresholds\n"));
(F("2-SetPrescalarValue\n"));
(F("3-SetAL#/CC#PinState\n"));
(F("4-SetUnits\n"));
(F("m-MainMenu\n\n"));
(F("Enteracommand:
"));
user_command=read_int();
if(user_command=='m')
("m");
else
(user_command);
();
switch(user_command)
{
case1:
ack|=menu_6_settings_menu_1_set_alert_thresholds();0=acknowledge,1=noacknowledge
{
int8_tack=0;
int8_tuser_command;
do
{
(F("*************************\n\n"));
(F("1-SetChargeThresholds\n"));
(F("2-SetVoltageThresholds\n"));
(F("3-SetCurrentThresholds\n"));
(F("4-SetTemperatureThresholds\n"));
(F("m-MainMenu\n\n"));
(F("Enteracommand:
"));
user_command=read_int();
if(user_command=='m')
("m");
else
(user_command);
();
switch(user_command)
{
case1:
ack|=menu_6_alert_menu_1_set_charge_thresholds();TheACRchargelsbsizechangeswithrespecttotheprescalarandsenseresistorvalue.Duetothisvariability,forthepurposeofthisdemoentervaluesinhexadecimal.
break;
case2:
ack|=menu_6_alert_menu_2_set_voltage_thresholds();EnterValuesinVolts
break;
case3:
ack|=menu_6_alert_menu_3_set_current_thresholds();EnterValuesinAmperes.
break;
case4:
ack|=menu_6_alert_menu_4_set_temperature_thresholds();EnterValuesinCelcius.
break;
default:
if(user_command!
='m')
("IncorrectOption");
break;
}
}
while(!
((user_command=='m')||(ack)));
return(ack);
}
0=acknowledge,1=noacknowledge
{
int8_tack=0;
(F("EnterRAWMaxChargeThreshold:
"));
uint16_tmax_charge_threshold;
max_charge_threshold=read_int();0=acknowledge,1=noacknowledge
{
int8_tack=0;
(F("EnterMaxVoltageThreshold:
"));
floatmax_voltage_threshold;
max_voltage_threshold=read_float();
ack|=LTC2943_write_16_bits(LTC2943_I2C_ADDRESS,LTC2943_VOLTAGE_THRESH_HIGH_MSB_REG,max_voltage_threshold_code);
ack|=LTC2943_write_16_bits(LTC2943_I2C_ADDRESS,LTC2943_VOLTAGE_THRESH_LOW_MSB_REG,min_voltage_threshold_code);0=acknowledge,1=noacknowledge
{
int8_tack=0;
(F("EnterMaxCurrentThreshold:
"));
floatmax_current_threshold;
max_current_threshold=read_float();
ack|=LTC2943_write_16_bits(LTC2943_I2C_ADDRESS,LTC2943_CURRENT_THRESH_HIGH_MSB_REG,max_current_threshold_code);
ack|=LTC2943_write_16_bits(LTC2943_I2C_ADDRESS,LTC2943_CURRENT_THRESH_LOW_MSB_REG,min_current_threshold_code);0=acknowledge,1=noacknowledge
{
int8_tack=0;
(F("EnterMaxTemperatureThresholdinCelcius:
"));
floatmax_temperature_threshold;
max_temperature_threshold=read_float();
ack|=LTC2943_write_16_bits(LTC2943_I2C_ADDRESS,LTC2943_TEMPERATURE_THRESH_HIGH_REG,max_temperature_threshold_code);
ack|=LTC2943_write_16_bits(LTC2943_I2C_ADDRESS,LTC2943_TEMPERATURE_THRESH_LOW_REG,min_temperature_threshold_code);0=acknowledge,1=noacknowledge
{
int8_tack=0;
int8_tuser_command;
do
{
(F("*************************\n\n"));
(F("1-SetPrescalarM=1\n"));
(F("2-SetPrescalarM=4\n"));
(F("3-SetPrescalarM=16\n"));
(F("4-SetPrescalarM=64\n"));
(F("5-SetPrescalarM=256\n"));
(F("6-SetPrescalarM=1024\n"));
(F("7-SetPrescalarM=4096\n"));
(F("m-MainMenu\n\n"));
(F("Enteracommand:
"));
user_command=read_int();
if(user_command=='m')
("m");
else
(user_command);
();
switch(user_command)
{
case1:
*prescalar_mode=LTC2943_PRESCALAR_M_1;0=acknowledge,1=noacknowledge
{
int8_tack=0;
int8_tuser_command;
do
{
(F("*************************\n\n"));
(F("1-EnableAlertMode\n"));
(F("2-EnableChargeCompleteMode\n"));
(F("3-DisableAL#/CC#Pin\n"));
(F("m-MainMenu\n\n"));
(F("Enteracommand:
"));
user_command=read_int();
if(user_command=='m')
("m");
else
(user_command);
();
switch(user_command)
{
case1:
*alcc_mode=LTC2943_ALERT_MODE;(F("\nAL#/CC#PinDisabled\n"));
break;
default:
if(user_command!
='m')
("IncorrectOption");
break;
}
}
while(!
((user_command=='m')||(ack)));
return(ack);
}
0=acknowledge,1=noacknowledge
{
int8_tack=0;
int8_tuser_command;
do
{
(F("*************************\n\n"));
(F("1-SetChargeUnitstomAh\n"));
(F("2-SetChargeUnitstoCoulombs\n"));
(F("3-SetTemperatureUnitstoCelcius\n"));
(F("4-SetTemperatureUnitstoKelvin\n"));
(F("m-MainMenu\n\n"));
(F("Enteracommand:
"));
user_command=read_int();
if(user_command=='m')
("m");
else
(user_command);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ltc2943 温度 电压 电流 测量 功能 节电 电量 芯片