ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx

上传人:b****1 文档编号:13489719 上传时间:2023-06-14 格式:DOCX 页数:19 大小:17.38KB
下载 相关 举报
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第1页
第1页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第2页
第2页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第3页
第3页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第4页
第4页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第5页
第5页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第6页
第6页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第7页
第7页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第8页
第8页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第9页
第9页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第10页
第10页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第11页
第11页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第12页
第12页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第13页
第13页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第14页
第14页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第15页
第15页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第16页
第16页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第17页
第17页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第18页
第18页 / 共19页
ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx

《ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx》由会员分享,可在线阅读,更多相关《ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx(19页珍藏版)》请在冰点文库上搜索。

ltc2943具温度电压和电流测量功能的多节电池电量测量芯片.docx

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模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2