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

上传人:b****1 文档编号:14339372 上传时间:2023-06-22 格式:DOCX 页数:38 大小:77.71KB
下载 相关 举报
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第1页
第1页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第2页
第2页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第3页
第3页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第4页
第4页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第5页
第5页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第6页
第6页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第7页
第7页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第8页
第8页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第9页
第9页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第10页
第10页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第11页
第11页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第12页
第12页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第13页
第13页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第14页
第14页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第15页
第15页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第16页
第16页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第17页
第17页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第18页
第18页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第19页
第19页 / 共38页
LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

LTC2943具温度电压和电流测量功能的多节电池电量测量芯片解析

LTC2943-具温度、电压和电流测量功能的多节电池电量测量芯片

特点

∙可测量累积的电池充电和放电电量

∙3.6V至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"Linduino.h"

#include"LT_I2C.h"

#include"UserInterface.h"

#include"QuikEval_EEPROM.h"

#include"LTC2943.h"

#include

//FunctionDeclaration

voidprint_title();//Printthetitleblock

voidprint_prompt();//PrintthePrompt

voidstore_alert_settings();//StorethealertsettingstotheEEPROM

int8_trestore_alert_settings();//ReadthealertsettingsfromEEPROM

#defineAUTOMATIC_MODE_DISPLAY_DELAY1000//!

#defineSCAN_MODE_DISPLAY_DELAY10000//!

constfloatresistor=.100;//!

//Errorstring

constcharack_error[]="Error:

NoAcknowledge.CheckI2CAddress.";//!

//Globalvariables

staticint8_tdemo_board_connected;//!

staticuint8_talert_code=0;//!

//!

InitializeLinduino

voidsetup()

{

chardemo_name[]="DC1812";//!

DemoBoardNamestoredinQuikEvalEEPROM

quikeval_I2C_init();//!

ConfiguretheEEPROMI2Cportfor100kHz

quikeval_I2C_connect();//!

ConnectstomainI2Cport

Serial.begin(115200);//!

InitializetheserialporttothePC

print_title();

demo_board_connected=discover_demo_board(demo_name);

if(demo_board_connected)

{

print_prompt();

}

else

{

demo_board_connected=true;

Serial.println("DidnotreadIDString,attemptingtoproceedanyway...\nPleaseensureI2ClinesofLinduinoareconnectedtotheLTCdevice");

}

}

//!

RepeatsLinduinoloop

voidloop()

{

int8_tack=0;//!

I2Cacknowledgeindicator

staticuint8_tuser_command;//!

Theuserinputcommand

staticuint8_tmAh_or_Coulombs=0;

staticuint8_tcelcius_or_kelvin=0;

staticuint16_tprescalar_mode=LTC2943_PRESCALAR_M_4096;

staticuint16_tprescalarValue=4096;

staticuint16_talcc_mode=LTC2943_ALERT_MODE;

if(demo_board_connected)//!

Donothingifthedemoboardisnotconnected

{

if(Serial.available())//!

Donothingifserialisnotavailable

{

user_command=read_int();//!

Readuserinputcommand

if(user_command!

='m')

Serial.println(user_command);

Serial.println();

ack=0;

switch(user_command)//!

Printstheappropriatesubmenu

{

case1:

ack|=menu_1_automatic_mode(mAh_or_Coulombs,celcius_or_kelvin,prescalar_mode,prescalarValue,alcc_mode);//!

AutomaticMode

break;

case2:

ack|=menu_2_scan_mode(mAh_or_Coulombs,celcius_or_kelvin,prescalar_mode,prescalarValue,alcc_mode);//!

ScanMode

break;

case3:

ack|=menu_3_manual_mode(mAh_or_Coulombs,celcius_or_kelvin,prescalar_mode,prescalarValue,alcc_mode);//!

ManualMode

break;

case4:

ack|=menu_4_sleep_mode(mAh_or_Coulombs,prescalar_mode,prescalarValue,alcc_mode);//!

SleepMode

break;

case5:

ack|=menu_5_shutdown_mode();//!

ShutdownMode

break;

case6:

ack|=menu_6_settings(&mAh_or_Coulombs,&celcius_or_kelvin,&prescalar_mode,&prescalarValue,&alcc_mode);//!

SettingsMode

break;

}

if(ack!

=0)//!

Ifackisnotrecievedprintanerror.

Serial.println(ack_error);

Serial.print(F("*************************"));

print_prompt();

}

}

}

//FunctionDefinitions

//!

Printthetitleblock

voidprint_title()

{

Serial.println(F("\n*****************************************************************"));

Serial.print(F("*DC1812ADemonstrationProgram*\n"));

Serial.print(F("**\n"));

Serial.print(F("*ThisprogramcommunicateswiththeLTC2943MulticellCoulomb*\n"));

Serial.print(F("*CounterfoundontheDC1812Ademoboard.*\n"));

Serial.print(F("*Setthebaudrateto115200andselectthenewlineterminator.*\n"));

Serial.print(F("**\n"));

Serial.print(F("*****************************************************************\n"));

}

//!

PrintthePrompt

voidprint_prompt()

{

Serial.print(F("\n1-AutomaticMode\n"));

Serial.print(F("2-ScanMode\n"));

Serial.print(F("3-ManualMode\n"));

Serial.print(F("4-SleepMode\n"));

Serial.print(F("5-ShutdownMode\n"));

Serial.print(F("6-Settings\n"));

Serial.print(F("Enteracommand:

"));

}

//!

AutomaticMode.

int8_tmenu_1_automatic_mode(int8_tmAh_or_Coulombs,int8_tcelcius_or_kelvin,uint16_tprescalar_mode,uint16_tprescalarValue,uint16_talcc_mode)

//!

@returnReturnsthestateoftheacknowledgebitaftertheI2Caddresswrite.0=acknowledge,1=noacknowledge.

{

int8_tLTC2943_mode;

int8_tack=0;

LTC2943_mode=LTC2943_AUTOMATIC_MODE|prescalar_mode|alcc_mode;//!

SetthecontrolregisteroftheLTC2943toautomaticmodeaswellassetprescalarandAL#/CC#pinvalues.

Serial.println();

ack|=LTC2943_write(LTC2943_I2C_ADDRESS,LTC2943_CONTROL_REG,LTC2943_mode);//!

WritesthesetmodetotheLTC2943controlregister

do

{

Serial.print(F("*************************\n\n"));

uint8_tstatus_code,hightemp_code,lowtemp_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);//!

ReadMSBandLSBAccumulatedChargeRegistersfor16bitchargecode

ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_VOLTAGE_MSB_REG,&voltage_code);//!

ReadMSBandLSBVoltageRegistersfor16bitvoltagecode

ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_CURRENT_MSB_REG,¤t_code);//!

ReadMSBandLSBCurrentRegistersfor16bitcurrentcode

ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_TEMPERATURE_MSB_REG,&temperature_code);//!

ReadMSBandLSBTemperatureRegistersfor16bittemperaturecode

ack|=LTC2943_read(LTC2943_I2C_ADDRESS,LTC2943_STATUS_REG,&status_code);//!

ReadStatusRegisterfor8bitstatuscode

floatcharge,current,voltage,temperature;

if(mAh_or_Coulombs)

{

charge=LTC2943_code_to_coulombs(charge_code,resistor,prescalarValue);//!

ConvertchargecodetoCoulombsifCoulombunitsaredesired.

Serial.print("Coulombs:

");

Serial.print(charge,4);

Serial.print(F("C\n"));

}

else

{

charge=LTC2943_code_to_mAh(charge_code,resistor,prescalarValue);//!

ConvertchargecodetomAhifmAhunitsaredesired.

Serial.print("mAh:

");

Serial.print(charge,4);

Serial.print(F("mAh\n"));

}

current=LTC2943_code_to_current(current_code,resistor);//!

ConvertcurrentcodetoAmperes

voltage=LTC2943_code_to_voltage(voltage_code);//!

ConvertvoltagecodetoVolts

Serial.print(F("Current"));

Serial.print(current,4);

Serial.print(F("A\n"));

Serial.print(F("Voltage"));

Serial.print(voltage,4);

Serial.print(F("V\n"));

if(celcius_or_kelvin){

temperature=LTC2943_code_to_kelvin_temperature(temperature_code);//!

Converttemperaturecodetokelvin

Serial.print(F("Temperature"));

Serial.print(temperature,4);

Serial.print(F("K\n"));

}

else

{

temperature=LTC2943_code_to_celcius_temperature(temperature_code);//!

Converttemperaturecodetocelcius

Serial.print(F("Temperature"));

Serial.print(temperature,4);

Serial.print(F("C\n"));

}

checkAlerts(status_code);//!

CheckstatuscodeforAlerts.IfanAlerthasbeenset,printoutappropriatemessageintheSerialPrompt.

Serial.print(F("m-MainMenu\n\n"));

Serial.flush();

delay(AUTOMATIC_MODE_DISPLAY_DELAY);//!

Delayfor1sbeforenextpolling

}

while(Serial.available()==false||(ack));//!

ifSerialisnotavailableandanNACKhasnotbeenrecieved,keeppollingtheregisters.

read_int();//clearstheSerial.available

return(ack);

}

//!

ScanMode

int8_tmenu_2_scan_mode(int8_tmAh_or_Coulombs,int8_tcelcius_or_kelvin,uint16_tprescalar_mode,uint16_tprescalarValue,uint16_talcc_mode)

//!

@returnReturnsthestateoftheacknowledgebitaftertheI2Caddresswrite.0=acknowledge,1=noacknowledge

{

int8_tLTC2943_mode;

int8_tack=0;

LTC2943_mode=LTC2943_SCAN_MODE|prescalar_mode|alcc_mode;//!

SetthecontrolmodeoftheLTC2943toscanmodeaswellassetprescalarandAL#/CC#pinvalues.

Serial.println();

ack|=LTC2943_write(LTC2943_I2C_ADDRESS,LTC2943_CONTROL_REG,LTC2943_mode);//!

WritesthesetmodetotheLTC2943controlregister

do

{

Serial.print(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);//!

ReadMSBandLSBAccumulatedChargeRegistersfor16bitchargecode

ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_VOLTAGE_MSB_REG,&voltage_code);//!

ReadMSBandLSBVoltageRegistersfor16bitvoltagecode

ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_CURRENT_MSB_REG,¤t_code);//!

ReadMSBandLSBCurrentRegistersfor16bitcurrentcode

ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_TEMPERATURE_MSB_REG,&temperature_code);//!

ReadMSBandLSBTemperatureRegistersfor16bittemperaturecode

ack|=LTC2943_read(LTC2943_I2C_ADDRESS,LTC2943_STATUS_REG,&status_code);//!

ReadStatusRegistersfor8bitstat

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

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

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