LTC具温度电压和电流测量功能的多节电池电量测量芯片Word文件下载.docx
《LTC具温度电压和电流测量功能的多节电池电量测量芯片Word文件下载.docx》由会员分享,可在线阅读,更多相关《LTC具温度电压和电流测量功能的多节电池电量测量芯片Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。
∙静态电流小于120μA
∙小外形8引脚3mmx3mmDFN封装
典型应用
描述
LTC®
2943
可测量便携式产品应用中的电池充电状态、电池电压、电池电流及其自身温度。
其具有宽输入电压范围,因而可与高达
20V
的多节电池配合使用。
一个精准的库仑计量器负责对流经位于电池正端子和负载或充电器之间的一个检测电阻器电流进行积分运算。
电池电压、电流和温度利用一个内部
14位无延迟增量累加
(NoLatencyΔΣTM)ADC
来测量。
测量结果被存储于可通过内置
I2C/SMBus
接口进行存取的内部寄存器中。
LTC2943
具有针对所有
4
种测量物理量的可编程高门限和低门限。
如果超过了某个编程门限,则该器件将采用
SMBus
警报协议或通过在内部状态寄存器中设定一个标记来传送警报信号。
仅需采用单个低阻值检测电阻器以设定测量电流范围。
应用
∙电动工具
∙电动自行车
∙便携式医疗设备
∙视频摄像机
程序:
#include<
Arduino.h>
stdint.h>
#include"
Linduino.h"
LT_I2C.h"
UserInterface.h"
QuikEval_EEPROM.h"
LTC2943.h"
Wire.h>
//FunctionDeclaration
voidprint_title();
//Printthetitleblock
voidprint_prompt();
//PrintthePrompt
voidstore_alert_settings();
//StorethealertsettingstotheEEPROM
int8_trestore_alert_settings();
//ReadthealertsettingsfromEEPROM
#defineAUTOMATIC_MODE_DISPLAY_DELAY1000//!
<
Thedelaybetweenreadingsinautomaticmode
#defineSCAN_MODE_DISPLAY_DELAY10000//!
Thedelaybetweenreadingsinscanmode
constfloatresistor=.100;
//!
resistorvalueondemoboard
//Errorstring
constcharack_error[]="
Error:
NoAcknowledge.CheckI2CAddress."
;
Errormessage
//Globalvariables
staticint8_tdemo_board_connected;
Setto1iftheboardisconnected
staticuint8_talert_code=0;
ValuestoredorreadfromALERTregister.Sharedbetweenloop()andrestore_alert_settings()
//!
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
case3:
ack|=menu_3_manual_mode(mAh_or_Coulombs,celcius_or_kelvin,prescalar_mode,prescalarValue,alcc_mode);
ManualMode
case4:
ack|=menu_4_sleep_mode(mAh_or_Coulombs,prescalar_mode,prescalarValue,alcc_mode);
SleepMode
case5:
ack|=menu_5_shutdown_mode();
ShutdownMode
case6:
ack|=menu_6_settings(&
mAh_or_Coulombs,&
celcius_or_kelvin,&
prescalar_mode,&
prescalarValue,&
alcc_mode);
SettingsMode
if(ack!
=0)//!
Ifackisnotrecievedprintanerror.
Serial.println(ack_error);
Serial.print(F("
*************************"
));
//FunctionDefinitions
Printthetitleblock
voidprint_title()
Serial.println(F("
\n*****************************************************************"
*DC1812ADemonstrationProgram*\n"
**\n"
*ThisprogramcommunicateswiththeLTC2943MulticellCoulomb*\n"
*CounterfoundontheDC1812Ademoboard.*\n"
*Setthebaudrateto115200andselectthenewlineterminator.*\n"
*****************************************************************\n"
PrintthePrompt
voidprint_prompt()
\n1-AutomaticMode\n"
2-ScanMode\n"
3-ManualMode\n"
4-SleepMode\n"
Seri