1353 lines
51 KiB
Plaintext
1353 lines
51 KiB
Plaintext
#ifndef SH367309_H
|
||
#define SH367309_H
|
||
|
||
#include "stm32f10x.h"
|
||
|
||
/*
|
||
*注意寄存器地址范围 有两种存储方法 1:EEPROM 寄存器 (0x00-0x19)
|
||
2: ARM 寄存器 (0x40-0x72)
|
||
*/
|
||
|
||
/*
|
||
*过充电保护
|
||
*任意电芯电压高于过充电保护电压Vov
|
||
*状态1持续时间超过过充保护延时Tov
|
||
*309
|
||
*关闭充电MOS管
|
||
*BSTATUS1寄存器OV状态位置置1
|
||
*BFLAG1寄存器Ov_FLG标志位置1
|
||
*单片机
|
||
*关闭充电MOS管
|
||
|
||
*同时满足一下条件时,309退出过冲保护状态
|
||
*所有电芯电压均低于过充电恢复电压VovR
|
||
*状态1持续时间超过过冲保护恢复延时Tovr
|
||
*309
|
||
*开启充电MOS管
|
||
*BSTATUS1寄存器OV状态位置0
|
||
*单片机
|
||
*开启充电MOS管
|
||
*/
|
||
///////////////////////////////////////////////////////////
|
||
/*
|
||
*过放电保护
|
||
*任意电芯电压低于过放电保护电压Vuv
|
||
*状态1持续时间超过过放电保护延时Tuv
|
||
*309
|
||
*关闭放电MOS管
|
||
*BSTATUS1寄存器Uv状态位置1
|
||
*BFLAG1寄存器Uv_FLG标志位置1
|
||
*单片机
|
||
*关闭放电MOS管
|
||
|
||
*EUVR=0,同时满足下述条件时,309退出过放电保护状态
|
||
*所有电芯电压均高于过放电恢复电压Vuvr
|
||
*状态1持续时间超过过放电保护恢复延时Tuvr
|
||
|
||
*EUVR=1, 同时满足下述条件时,309退出过放电保护状态
|
||
*所有电芯电压均高于过放电恢复电压Vuvr
|
||
*状态1持续时间超过过放电保护恢复延时Tuvr
|
||
*负载断开(DSGE管教电平低于Vdsgd)
|
||
|
||
*309
|
||
*开启放电MOS管
|
||
*BSTATUS1寄存器中Uv状态位置0
|
||
|
||
*309允许通过UV_OP位设置过放电保护后是否关闭充电MOS管
|
||
*UV_OP=1,过放电保护后,关闭充放电MOS管,此时连接充电器(CHGD管脚电平低于Vchgd1),延时100ms开启充电MOS管
|
||
*UV_OP=0,过放电保护后,关闭放电MOS管
|
||
*/
|
||
/////////////////////////////////////////////////////////////////
|
||
/*
|
||
*放电过流1保护
|
||
*RS2-RS1的电压值大于Vocd1
|
||
*状态1持续时间超过放电过流1保护延时Tocd1
|
||
|
||
*309
|
||
*关闭放电MOS管
|
||
*BSTATUS1寄存器OCD1状态位置1
|
||
*BFLAG1寄存器中OCD_FLG标志位置1
|
||
|
||
*单片机
|
||
*关闭放电MOS管
|
||
|
||
*同时满足下述条件时, SH367309退出放电过流1保护状态:
|
||
*(1) 负载断开 (DSGD管脚电平低于VDSGD)
|
||
*(2) 状态(1)持续时间超过负载释放延时tD1
|
||
*/
|
||
////////////////////////////////////////////////////////////////////
|
||
/*
|
||
*短路保护
|
||
*同时满足下述条件时, SH367309进入短路保护状态:
|
||
*(1) RS2-RS1的电压值大于VDOC3
|
||
*(2)状态(1)持续时间超过放电过流3保护延时tDOC3
|
||
*SH367309处于短路保护状态时,执行下述动作:
|
||
*(1) 关闭放电MOSFET
|
||
*(2) BSTATUS1寄存器中SC状态位置1
|
||
*(3) BFLAG1寄存器中SC_FLG标志位置1
|
||
|
||
*单片机
|
||
*关闭MOS管
|
||
|
||
*同时满足下述条件时, SH367309退出短路保护状态:
|
||
*(1) 负载断开 (DSGD管脚电平低于VDSGD)
|
||
*(2) 状态(1)持续时间超过负载释放延时tD1
|
||
*/
|
||
////////////////////////////////////////////////////////////////////
|
||
/*
|
||
*充电过流保护
|
||
同时满足下述条件时, SH367309进入充电过流保护状态:
|
||
(1) RS2-RS1的电压值小于VCOC
|
||
(2)状态(1)持续时间超过充电过流保护延时tCOC
|
||
SH367309处于充电过流保护状态时,执行下述动作:
|
||
(1) 关闭充电MOSFET
|
||
(2) BSTATUS1寄存器中OCC状态位置1
|
||
(3) BFLAG1寄存器中OCC_FLG标志位置1
|
||
同时满足下述条件时, SH367309退出充电过流保护状态:
|
||
(1) 充电器断开 (CHGD管脚电平高于VCHGD2)
|
||
(2) 状态(1)持续时间超过延时tD2
|
||
*/
|
||
////////////////////////////////////////////////////////////////////
|
||
/*
|
||
*充电高温保护
|
||
同时满足下述条件时, SH367309进入充电高温保护状态:
|
||
(1) 任意温度点温度高于充电高温保护温度TOTC
|
||
(2) 状态(1)持续时间超过温度保护延时tT
|
||
SH367309处于充电高温保护状态时,执行下述动作:
|
||
(1) 关闭充电MOSFET
|
||
(2) BSTATUS2寄存器中OTC状态位置1
|
||
(3) BFLAG2寄存器中OTC_FLG标志位置1
|
||
同时满足下述条件时, SH367309退出充电高温保护状态:
|
||
(1) 所有温度点温度低于充电高温恢复温度TOTCR
|
||
(2) 状态(1)持续时间超过温度保护延时tT
|
||
SH367309退出充电高温保护状态时,执行下述动作:
|
||
(1) 开启充电MOSFET
|
||
(2) BSTATUS2寄存器中OTC状态位清0
|
||
*/
|
||
/////////////////////////////////////////////////////////////////////
|
||
/*
|
||
*充电低温保护
|
||
同时满足下述条件时, SH367309进入充电低温保护状态:
|
||
(1) 任意温度点温度低于充电低温保护温度TUTC
|
||
(2) 状态(1)持续时间超过温度保护延时tT
|
||
SH367309处于充电低温保护状态时,执行下述动作:
|
||
(1) 关闭充电MOSFET
|
||
(2) BSTATUS2寄存器中UTC状态位置1
|
||
(3) BFLAG2寄存器中UTC_FLG标志位置1
|
||
同时满足下述条件时, SH367309退出充电低温保护状态:
|
||
(1) 所有温度点温度高于充电低温恢复温度TUTCR
|
||
(2) 状态(1)持续时间超过温度保护延时tT
|
||
SH367309退出充电低温保护状态时,执行下述动作:
|
||
(1) 开启充电MOSFET
|
||
(2) BSTATUS2寄存器中UTC状态位清0
|
||
*/
|
||
/////////////////////////////////////////////////////////////////////
|
||
/*
|
||
*放电高温保护
|
||
同时满足下述条件时, SH367309进入放电高温保护状态:
|
||
(1) 任意温度点温度高于放电高温保护温度TOTD
|
||
(2) 状态(1)持续时间超过温度保护延时tT
|
||
SH367309处于放电高温保护状态时,执行下述动作:
|
||
(1) 关闭放电MOSFET
|
||
(2) BSTATUS2寄存器中OTD状态位置1
|
||
(3) BFLAG2寄存器中OTD_FLG标志位置1
|
||
同时满足下述条件时, SH367309退出放电高温保护状态:
|
||
(1) 所有温度点温度低于放电高温恢复温度TOTDR
|
||
(2) 状态(1)持续时间超过温度保护延时tT
|
||
SH367309退出放电高温保护状态时,执行下述动作:
|
||
(1) 开启放电MOSFET
|
||
(2) BSTATUS2寄存器中OTD状态位清0
|
||
*/
|
||
/////////////////////////////////////////////////////////////////
|
||
/*
|
||
*放电低温保护
|
||
*同时满足下述条件时, SH367309进入放电低温保护状态:
|
||
(1) 任意温度点温度低于放电低温保护温度TUTD
|
||
(2) 状态(1)持续时间超过温度保护延时tT
|
||
SH367309处于放电低温保护状态时,执行下述动作:
|
||
(1) 关闭放电MOSFET
|
||
(2) BSTATUS2寄存器中UTD状态位置1
|
||
(3) BFLAG2寄存器中UTD_FLG标志位置1
|
||
同时满足下述条件时, SH367309退出放电低温保护状态:
|
||
(1) 所有温度点温度高于放电低温恢复温度TUTDR
|
||
(2) 状态(1)持续时间超过温度保护延时tT
|
||
SH367309退出过放电保护状态时,执行下述动作:
|
||
(1) 开启放电MOSFET
|
||
(2) BSTATUS2寄存器中UTD状态位清0
|
||
*/
|
||
///////////////////////////////////////////////////////////////////////
|
||
/*
|
||
*温度保护阙值计算公式
|
||
(1) 充放电高温保护及保护释放阈值设置公式为:
|
||
阈值(OTC、 OTC、 OTD、 OTDR) = RT1 / (RREF + RT1) * 512;
|
||
(2) 充放电低温保护及保护释放阈值设置公式为:
|
||
阈值(UTC、 UTC、 UTD、 UTDR) = (RT1 / (RREF + RT1) - 0.5) * 512;
|
||
其中RT1为温度保护阈值对应的热敏电阻阻值(单位为kΩ), RREF为内部参考电阻阻值(单位为kΩ)。
|
||
内部参考电阻RREF计算公式为:RREF = 6.8+0.05*TR[6:0]
|
||
*/
|
||
////////////////////////////////////////////////////////////////////////
|
||
/*
|
||
*二次过充保护
|
||
*EEPROM寄存器SCONF2中DIS_PF=0, 同时满足下述条件时, SH367309进入二次过充电保护状态:
|
||
(1) 任意电芯电压高于二次过充电保护电压VP2N
|
||
(2) 状态(1)持续时间超过二次过充电保护延时tP2N
|
||
SH367309处于二次过充电保护状态时, 不允许进入Powerdown状态和SLEEP状态, 执行下述动作:
|
||
(1) 关闭充放电MOSFET
|
||
(2) 关闭VADC和CADC模块(VADC和CADC相关寄存器值保持之前的数据)
|
||
(3) PF管脚输出VSS电平
|
||
(4) BSTATUS1寄存器中PF状态位置1
|
||
(5) BFLAG1寄存器中PF_FLG标志位置1
|
||
(6) ALARM管脚输出低电平脉冲(采集模式)
|
||
满足下述任意条件时, SH367309退出二次过充电保护状态:
|
||
(1) 系统重新上电
|
||
(2) 软件复位
|
||
(3) 进入SHIP模式后再退出SHIP模式
|
||
*/
|
||
|
||
|
||
|
||
|
||
/*
|
||
公式注意:
|
||
根据VADC转换结果可以计算出各电芯电压值、温度检测值以及电流值。
|
||
(1) 电芯电压计算公式,以CELL1为例(单位: mV,其中CELL1为CELL1寄存器值)
|
||
Vcell = CEll1 / 6.4;
|
||
|
||
(2) 温度计算公式,以TEMP1为例(单位: kΩ,其中RT1为外部热敏电阻阻值, RREF为内部参考电阻阻值, TEMP1为TEMP1
|
||
寄存器值,可依据外部热敏电阻阻值RT1与温度之间对应关系获取真实温度值):
|
||
RT1 = TEMP1 / (32768 - TEMP1) * RREF
|
||
|
||
内部参考电阻RREF计算公式为(单位: kΩ,其中TR[6:0]是寄存器TR的低7bit)
|
||
RREF = 6.8+0.05*TR[6:0];
|
||
|
||
3) 电流计算公式(单位: mA,其中CUR为CUR寄存器值, RSENSE为Sense电阻(单位为Ω)):
|
||
Curr = 200 * CUR /(26837 * RSENSE)
|
||
|
||
根据CADC转换结果可以计算出电流值(单位: mA,其中CADCD为CADCD寄存器值, RSENSE为Sense电阻,单位为Ω):
|
||
Curr = 200 * ADC2D /(21470 * RSENSE) 1mV 1mR 1A
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
/********************************************宏定义****************************************************/
|
||
/*SH367309 EEPROM寄存器数据*/
|
||
#define EEPROM_SCONF1 0x00 //系统配置寄存器1 RW
|
||
#define EEPROM_SCONF2 0x01 //系统配置EEPROM寄存器2 RW
|
||
#define EEPROM_OVH_OVL 0x02 //过充电保护延时设置 RW
|
||
#define EEPROM_OVRH_OVRL 0x04 //过放电保护延时设置 RW
|
||
#define EEPROM_UV 0x06 //过放电保护电压设置 RW
|
||
#define EEPROM_UVR 0x07 //过放电恢复电压设置 RW
|
||
#define EEPROM_BALV 0x08 //平衡开启电压设置寄存器 RW
|
||
#define EEPrOM_PREV 0x09 //预充电电压设置寄存器 RW
|
||
#define EEPROM_LOV 0x0a //低电压禁止充电电压设置寄存器 RW
|
||
#define EEPROM_PFV 0x0b //二次过充电保护电压设置寄存器 RW
|
||
#define EEPROM_OCD1V_OCD1T 0x0c //放电过流1设置寄存器 RW
|
||
#define EEPROM_OCD2V_OCD2T 0x0d //放电过流2设置寄存器 RW
|
||
#define EEPROM_SCV_SCT 0x0e //短路保护设置寄存器 RW
|
||
#define EEPROM_OCCV_OCCT 0x0f //充电过流设置寄存器 RW
|
||
#define EEPROM_MOST 0x10 //电流保护自动恢复/二次过充电保护延时设置寄存器 RW
|
||
#define EEPROM_OTC 0x11 //充电高温保护设置寄存器 RW
|
||
#define EEPROM_OTCR 0x12 //充电高温保护释放设置寄存器 RW
|
||
#define EEPROM_UTC 0x13 //充电低温保护设置寄存器 RW
|
||
#define EEPROM_UTCR 0x14 //充电低温保护释放设置寄存器 RW
|
||
#define EEPROM_OTD 0x15 //放电高温保护设置寄存器 RW
|
||
#define EEPROM_OTDR 0x16 //放电高温保护释放设置寄存器 RW
|
||
#define EEPROM_UTD 0x17 //放电低温保护设置寄存器 RW
|
||
#define EEPROM_UTDR 0x18 //放电低温保护释放设置寄存器 RW
|
||
#define EEPROM_TR 0x19 //温度内部参考电阻系数寄存器 R
|
||
|
||
|
||
|
||
/*SH367309 ARM寄存器地址*/
|
||
#define MTP_CONF 0x40 //系统配置寄存器 RW
|
||
#define MTP_BALANCEH 0x41 //平衡寄存器 16_9 RW
|
||
#define MTP_BALANCEL 0x42 //平衡寄存器 8_1 RW
|
||
#define MTP_BSTATUS1 0x43 //系统状态寄存器 1 R
|
||
#define MTP_BSTATUS2 0x44 //系统状态寄存器 2 R
|
||
#define MTP_BSTATUS3 0x45 //系统状态寄存器 3 R
|
||
#define MTP_TEMP1 0x46 //T1温度寄存器 R
|
||
#define MTP_TEMP2 0x48 //T2温度 R
|
||
#define MTP_TEMP3 0x4A //T3温度 R
|
||
#define MTP_CUR 0x4C //电流寄存器 R
|
||
#define MTP_CELL1 0x4E //电芯电压1 R
|
||
#define MTP_CELL2 0x50 //电芯电压2 R
|
||
#define MTP_CELL3 0x52 //电芯电压3 R
|
||
#define MTP_CELL4 0x54 //电芯电压4 R
|
||
#define MTP_CELL5 0x56 //电芯电压5 R
|
||
#define MTP_CELL6 0x58 //电芯电压6 R
|
||
#define MTP_CELL7 0x5A //电芯电压7 R
|
||
#define MTP_CELL8 0x5C //电芯电压8 R
|
||
#define MTP_CELL9 0x5E //电芯电压9 R
|
||
#define MTP_CELL10 0x60 //电芯电压10 R
|
||
#define MTP_CELL11 0x62 //电芯电压11 R
|
||
#define MTP_CELL12 0x64 //电芯电压12 R
|
||
#define MTP_CELL13 0x66 //电芯电压13 R
|
||
#define MTP_CELL14 0x68 //电芯电压14 R
|
||
#define MTP_CELL15 0x6A //电芯电压15 R
|
||
#define MTP_CELL16 0x6C //电芯电压16 R
|
||
#define MTP_ADC2 0x6E //CADC电流寄存器
|
||
#define MTP_BFLAG1 0x70 //系统标志寄存器 1 R
|
||
#define MTP_BFLAG2 0x71 //系统标志寄存器 2 R
|
||
#define MTP_RSTSTAT 0x72 //看门狗寄存器
|
||
|
||
|
||
|
||
/*数据*/
|
||
typedef struct
|
||
{
|
||
/*EEPROM寄存器写数据*/
|
||
struct
|
||
{
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 cn3_cn0 :4; //串数配置单位
|
||
/*
|
||
CN[3:0] = 0101: 5串电芯应用
|
||
CN[3:0] = 0110: 6串电芯应用
|
||
CN[3:0] = 0111: 7串电芯应用
|
||
CN[3:0] = 1000: 8串电芯应用
|
||
CN[3:0] = 1001: 9串电芯应用
|
||
CN[3:0] = 1010: 10串电芯应用
|
||
CN[3:0] = 1011: 11串电芯应用
|
||
CN[3:0] = 1100: 12串电芯应用
|
||
CN[3:0] = 1101: 13串电芯应用
|
||
CN[3:0] = 1110: 14串电芯应用
|
||
CN[3:0] = 1111: 15串电芯应用
|
||
CN[3:0] = qita 16串电芯应用
|
||
*/
|
||
u8 BAL :1; //平衡功能模块使能控制位 0: 平衡开启由SH367309内部逻辑控制 1: 平衡开启由外部MCU控制,平衡时序仍由SH367309内部逻辑控制
|
||
u8 OCPM :1; //充放电过流MOSFET控制位 0:充电过流只关闭充电MOSFET;放电过流只关闭放电MOSFET 1:充放电过流关闭充放电MOSFET
|
||
u8 ENMOS :1; //充电MOSFET恢复控制位 0:禁用充电MOSFET恢复控制位 1:启用充电MOSFET恢复控制位。当过充电/温度保护关闭充电MOSFET后,如果检过流1或者放电状态,则开启充电MOSFET;
|
||
u8 ENPCH :1; //预充电模块控制位 0:禁用预充电功能 1:启用预充电功能
|
||
}bits;
|
||
}Sconf1; //系统配置寄存器1
|
||
////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 EUVR :1; //过放电恢复设置控制位 0: 过放电保护状态释放与负载释放无关 1: 过放电保护状态释放还需负载释放
|
||
u8 OCRA :1; //电流恢复设置控制位 0:不允许电流保护定时恢复 1:允许电流保护定时恢复
|
||
u8 CTLC1_0 :2; //CTL管脚功能设置控制位
|
||
/*
|
||
CTLC[1:0]=00:充放电和预充电MOSFET由内部逻辑控制, CTL管脚输入无效
|
||
CTLC[1:0]=01: 控制充电和预充电MOSFET。 CTL输入VL-CTL电平时强制关闭充电和
|
||
预充电MOSFET; CTL输入VH-CTL电平时充电和预充电MOSFET由内
|
||
部逻辑控制
|
||
CTLC[1:0]=10: 控制放电MOSFET。 CTL输入VL-CTL电平时强制关闭放电MOSFET;
|
||
CTL输入VH-CTL电平时,放电MOSFET由内部逻辑控制
|
||
CTLC[1:0]=11: 控制充放电和预充电MOSFET。 CTL输入VL-CTL电平时强制关闭充放
|
||
电和预充电MOSFET; CTL输入VH-CTL电平时,充放电和预充电
|
||
MOSFET哨部逻辑控制
|
||
*/
|
||
u8 DIS_PF :1; //二次过充电模块使能控制位 0:启用二次过充电保护 1:禁止二次过充电保护
|
||
u8 UV_OP :1; //过放电时MOSFET控制位 0: 过放电只关闭放电MOSFET 1: 过放电关闭充放电MOSFET
|
||
u8 Res :1; //保留
|
||
u8 E0VB :1; //禁止低压电芯充电功能设置控制位 0:关闭“禁止低压电芯充电”功能 1:开启“禁止低压电芯充电”功能
|
||
}bits;
|
||
}Sconf2; //系统配置寄存器2
|
||
////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u16 datas;
|
||
struct
|
||
{
|
||
u16 OV9_0 :10; //过充保护电压 计算方式:寄存器值×5mV
|
||
u16 LDRT1_0 :2; //负载释放延时设置控制位
|
||
/*
|
||
LDRT[1:0] = 00: 负载释放延时 = 100mS
|
||
LDRT[1:0] = 01: 负载释放延时 = 500mS
|
||
LDRT[1:0] = 10: 负载释放延时 = 1000mS
|
||
LDRT[1:0] = 11: 贺头叛邮?= 2000mS
|
||
*/
|
||
u16 OVT3_0 :4; //过充电保护延时设置控制位
|
||
/*
|
||
OVT[3:0] = 0000: 过充电保护延时 = 100mS
|
||
OVT[3:0] = 0001: 过充电保护延时 = 200mS
|
||
OVT[3:0] = 0010: 过充电保护延时 = 300mS
|
||
OVT[3:0] = 0011: 过充电保护延时 = 400mS
|
||
OVT[3:0] = 0100: 过充电保护延时 = 600mS
|
||
OVT[3:0] = 0101: 过充电保护延时 = 800mS
|
||
OVT[3:0] = 0110: 过充电保护延时 = 1S
|
||
OVT[3:0] = 0111: 过充电保护延时 = 2S
|
||
OVT[3:0] = 1000: 过充电保护延时 = 3S
|
||
OVT[3:0] = 1001: 过充电保护延时 = 4S
|
||
OVT[3:0] = 1010: 过充电保护延时 = 6S
|
||
OVT[3:0] = 1011: 过充电保护延时 = 8S
|
||
OVT[3:0] = 1100: 过充电保护延时 = 10S
|
||
OVT[3:0] = 1101: 过充电保护延时 = 20S
|
||
OVT[3:0] = 1110: 过充电保护延时 = 30S
|
||
OVT[3:0] = 1111: 过充电保护延时 = 40S
|
||
*/
|
||
}bits;
|
||
}Ovh_ovl; //过充电保护电压/过充电保护延时/负载释放延时设置寄存器
|
||
//////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u16 datas;
|
||
struct
|
||
{
|
||
u16 OVR9_0 :10; //过充电恢复电压, 计算方式:寄存器值×5mV
|
||
u16 Res :2; //保留
|
||
u16 UVT3_0 :4; //过放电保护延时设置控制位
|
||
/*
|
||
UVT[3:0] = 0000: 过放电保护延时 = 100mS
|
||
UVT[3:0] = 0001: 过放电保护延时 = 200mS
|
||
UVT[3:0] = 0010: 过放电保护延时 = 300mS
|
||
UVT[3:0] = 0011: 过放电保护延时 = 400mS
|
||
UVT[3:0] = 0100: 过放电保护延时 = 600mS
|
||
UVT[3:0] = 0101: 过放电保护延时 = 800mS
|
||
UVT[3:0] = 0110: 过放电保护延时 = 1S
|
||
UVT[3:0] = 0111: 过放电保护延时 = 2S
|
||
UVT[3:0] = 1000: 过放电保护延时 = 3S
|
||
UVT[3:0] = 1001: 过放电保护延时 = 4S
|
||
UVT[3:0] = 1010: 过放电保护延时 = 6S
|
||
UVT[3:0] = 1011: 过放电保护延时 = 8S
|
||
UVT[3:0] = 1100: 过放电保护延时 = 10S
|
||
UVT[3:0] = 1101: 过放电保护延时 = 20S
|
||
UVT[3:0] = 1110: 过放电保护延时 = 30S
|
||
UVT[3:0] = 1111: 过放电保护延时 = 40S
|
||
*/
|
||
}bits;
|
||
}Ovrh_ovrl; //过充电恢复电压/过放电保护延时设置
|
||
/////////////////////////////////////////////////////////////////////
|
||
u8 Uv; //过放电保护电压设置 过放电保护电压, 计算方式:寄存器值×20mV
|
||
|
||
u8 Uvr; //过放电恢复电压设置 过放电恢复电压, 计算方式:寄存器值×20mV 且UV<UVR
|
||
|
||
u8 Balv; //平衡开启电压设置 平衡开启电压, 计算方式:寄存器值×20mV
|
||
|
||
u8 Prev; //预充电电压设置 预充电电压, 计算方式:寄存器值×20mV
|
||
|
||
u8 Lov; //低电压禁止充电电压 低电压禁止充电电压, 计算方式:寄存器值×20mV
|
||
|
||
u8 Pfv; //二次过充电保护电压 二次过充电保护电压, 计算方式:寄存器值×20mV
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 CD1T3_0 :4; //放电过流1保护延时设置
|
||
/*
|
||
OCD1T[3:0] = 0000:放电过流1保护延时 = 50mS
|
||
OCD1T[3:0] = 0001:放电过流1保护延时 = 100mS
|
||
OCD1T[3:0] = 0010:放电过流1保护延时 = 200mS
|
||
OCD1T[3:0] = 0011:放电过流1保护延时 = 400mS
|
||
OCD1T[3:0] = 0100:放电过流1保护延时 = 600mS
|
||
OCD1T[3:0] = 0101:放电过流1保护延时 = 800mS
|
||
OCD1T[3:0] = 0110:放电过流1保护延时 = 1S
|
||
OCD1T[3:0] = 0111:放电过流1保护延时 = 2S
|
||
OCD1T[3:0] = 1000:放电过流1保护延时 = 4S
|
||
OCD1T[3:0] = 1001:放电过流1保护延时 = 6S
|
||
OCD1T[3:0] = 1010:放电过流1保护延时 = 8S
|
||
OCD1T[3:0] = 1011:放电过流1保护延时 = 10S
|
||
OCD1T[3:0] = 1100:放电过流1保护延时 = 15S
|
||
OCD1T[3:0] = 1101:放电过流1保护延时 = 20S
|
||
OCD1T[3:0] = 1110:放电过流1保护延时 = 30S
|
||
OCD1T[3:0] = 1111:放电过流1保护延时 = 40S
|
||
*/
|
||
u8 OCD1V3_0 :4; //放电过流1保护电压
|
||
/*
|
||
OCD1V[3:0] = 0000:放电过流1保护电压 = 20mV
|
||
OCD1V[3:0] = 0001:放电过流1保护电压 = 30mV
|
||
OCD1V[3:0] = 0010:放电过流1保护电压 = 40mV
|
||
OCD1V[3:0] = 0011:放电过流1保护电压 = 50mV
|
||
OCD1V[3:0] = 0100: 放电过流1保护电压 = 60mV
|
||
OCD1V[3:0] = 0101:放电过流1保护电压 = 70mV
|
||
OCD1V[3:0] = 0110:放电过流1保护电压 = 80mV
|
||
OCD1V[3:0] = 0111:放电过流1保护电压 = 90mV
|
||
OCD1V[3:0] = 1000:放电过流1保护电压 = 100mV
|
||
OCD1V[3:0] = 1001:放电过流1保护电压 = 110mV
|
||
OCD1V[3:0] = 1010:放电过流1保护电压 = 120mV
|
||
OCD1V[3:0] = 1011:放电过流1保护电压 = 130mV
|
||
OCD1V[3:0] = 1100:放电过流1保护电压 = 140mV
|
||
OCD1V[3:0] = 1101:放电过流1保护电压 = 160mV
|
||
OCD1V[3:0] = 1110:放电过流1保护电压 = 180mV
|
||
OCD1V[3:0] = 1111悍诺绻<E8AFBA>?保护电压 = 200mV
|
||
*/
|
||
}bits;
|
||
}Ocd1V_ocd1t; //放电过流1设置
|
||
////////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datats;
|
||
struct
|
||
{
|
||
u8 OCD2T3_0 :4; //放电过流2保护延时
|
||
/*
|
||
OCD2T[3:0] = 0000:放电过流2保护延时 = 10mS
|
||
OCD2T[3:0] = 0001:放电过流2保护延时 = 20mS
|
||
OCD2T[3:0] = 0010:放电过流2保护延时 = 40mS
|
||
OCD2T[3:0] = 0011:放电过流2保护延时 = 60mS
|
||
OCD2T[3:0] = 0100:放电过流2保护延时 = 80mS
|
||
OCD2T[3:0] = 0101:放电过流2保护延时 = 100mS
|
||
OCD2T[3:0] = 0110:放电过流2保护延时 = 200mS
|
||
OCD2T[3:0] = 0111:放电过流2保护延时 = 400mS
|
||
OCD2T[3:0] = 1000:放电过流2保护延时 = 600mS
|
||
OCD2T[3:0] = 1001:放电过流2保护延时 = 800mS
|
||
OCD2T[3:0] = 1010:放电过流2保护延时 = 1S
|
||
OCD2T[3:0] = 1011:放电过流2保护延时 = 2S
|
||
OCD2T[3:0] = 1100:放电过流2保护延时 = 4S
|
||
OCD2T[3:0] = 1101:放电过流2保护延时 = 8S
|
||
OCD2T[3:0] = 1110:放电过流2保护延时 = 10S
|
||
OCD2T[3:0] = 1111悍诺绻<E8AFBA>?保护延时 = 20S
|
||
*/
|
||
u8 OCD2V3_0 :4; //放电过流2保护电压设置
|
||
/*
|
||
OCD2V[3:0] = 0000:放电过流2保护电压 = 30mV
|
||
OCD2V[3:0] = 0001:放电过流2保护电压 = 40mV
|
||
OCD2V[3:0] = 0010:放电过流2保护电压 = 50mV
|
||
OCD2V[3:0] = 0011:放电过流2保护电压 = 60mV
|
||
OCD2V[3:0] = 0100:放电过流2保护电压 = 70mV
|
||
OCD2V[3:0] = 0101:放电过流2保护电压 = 80mV
|
||
OCD2V[3:0] = 0110:放电过流2保护电压 = 90mV
|
||
OCD2V[3:0] = 0111:放电过流2保护电压 = 100mV
|
||
OCD2V[3:0] = 1000:放电过流2保护电压 = 120mV
|
||
OCD2V[3:0] = 1001:放电过流2保护电压 = 140mV
|
||
OCD2V[3:0] = 1010:放电过流2保护电压 = 160mV
|
||
OCD2V[3:0] = 1011:放电过流2保护电压 = 180mV
|
||
OCD2V[3:0] = 1100:放电过流2保护电压 = 200mV
|
||
OCD2V[3:0] = 1101:放电过流2保护电压 = 300mV
|
||
OCD2V[3:0] = 1110:放电过流2保护电压 = 400mV
|
||
OCD2V[3:0] = 1111:放电过流2保护电压 = 500mV
|
||
*/
|
||
}bits;
|
||
}Ocd2V_ocd2t; //放电过流2设置
|
||
///////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 SCT3_0 :4; //短路保护延时设置
|
||
/*
|
||
SCT[3:0] = 0000:短路保护延时 = 0uS
|
||
SCT[3:0] = 0001:短路保护延时 = 64uS
|
||
SCT[3:0] = 0010:短路保护延时 = 128uS
|
||
SCT[3:0] = 0011:短路保护延时 = 192uS
|
||
SCT[3:0] = 0100:短路保护延时 = 256uS
|
||
SCT[3:0] = 0101:短路保护延时 = 320uS
|
||
SCT[3:0] = 0110:短路保护延时 = 384uS
|
||
SCT[3:0] = 0111:短路保护延时 = 448uS
|
||
SCT[3:0] = 1000:短路保护延时 = 512uS
|
||
SCT[3:0] = 1001:短路保护延时 = 576uS
|
||
SCT[3:0] = 1010:短路保护延时 = 640uS
|
||
SCT[3:0] = 1011:短路保护延时 = 704uS
|
||
SCT[3:0] = 1100:短路保护延时 = 768uS
|
||
SCT[3:0] = 1101:短路保护延时 = 832uS
|
||
SCT[3:0] = 1110:短路保护延时 = 896uS
|
||
SCT[3:0] = 1111:短路保护延时 = 960uS
|
||
*/
|
||
u8 SCV_3_0 :4; //短路保护保护电压
|
||
/*
|
||
SCV[3:0] = 0000:短路保护电压 = 50mV
|
||
SCV[3:0] = 0001:短路保护电压 = 80mV
|
||
SCV[3:0] = 0010:短路保护电压 = 110mV
|
||
SCV[3:0] = 0011:短路保护电压 = 140mV
|
||
SCV[3:0] = 0100:短路保护电压 = 170mV
|
||
SCV[3:0] = 0101:短路保护电压 = 200mV
|
||
SCV[3:0] = 0110:短路保护电压 = 230mV
|
||
SCV[3:0] = 0111:短路保护电压 = 260mV
|
||
SCV[3:0] = 1000:短路保护电压 = 290mV
|
||
SCV[3:0] = 1001:短路保护电压 = 320mV
|
||
SCV[3:0] = 1010:短路保护电压 = 350mV
|
||
SCV[3:0] = 1011:短路保护电压 = 400mV
|
||
SCV[3:0] = 1100:短路保护电压 = 500mV
|
||
SCV[3:0] = 1101:短路保护电压 = 600mV
|
||
SCV[3:0] = 1110:短路保护电压 = 800mV
|
||
SCV[3:0] = 1111:短路保护电压 = 1000mV
|
||
*/
|
||
}bits;
|
||
}Scv_sct; //短路保护设置
|
||
///////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 OCCT3_0 :4; //充电过流保护延时
|
||
/*
|
||
OCCT[3:0] = 0000:充电过流保护延时 = 10mS
|
||
OCCT[3:0] = 0001:充电过流保护延时 = 20mS
|
||
OCCT[3:0] = 0010:充电过流保护延时 = 40mS
|
||
OCCT[3:0] = 0011:充电过流保护延时 = 60mS
|
||
OCCT[3:0] = 0100:充电过流保护延时 = 80mS
|
||
OCCT[3:0] = 0101:充电过流保护延时 = 100mS
|
||
OCCT[3:0] = 0110:充电过流保护延时 = 200mS
|
||
OCCT[3:0] = 0111:充电过流保护延时 = 400mS
|
||
OCCT[3:0] = 1000:充电过流保护延时 = 600mS
|
||
OCCT[3:0] = 1001:充电过流保护延时 = 800mS
|
||
OCCT[3:0] = 1010:充电过流保护延时 = 1S
|
||
OCCT[3:0] = 1011:充电过流保护延时 = 2S
|
||
OCCT[3:0] = 1100:充电过流保护延时 = 4S
|
||
OCCT[3:0] = 1101:充电过流保护延时 = 8S
|
||
OCCT[3:0] = 1110:充电过流保护延时 = 10S
|
||
OCCT[3:0] = 1111:充电过流保护延时 = 20S
|
||
*/
|
||
u8 OCCV3_0 :4; //充电过流保护电压
|
||
/*
|
||
OCCV[3:0] = 0000:充电过流保护电压 = 20mV
|
||
OCCV[3:0] = 0001:充电过流保护电压 = 30mV
|
||
OCCV[3:0] = 0010:充电过流保护电压 = 40mV
|
||
OCCV[3:0] = 0011:充电过流保护电压 = 50mV
|
||
OCCV[3:0] = 0100:充电过流保护电压 = 60mV
|
||
OCCV[3:0] = 0101:充电过流保护电压 = 70mV
|
||
OCCV[3:0] = 0110:充电过流保护电压 = 80mV
|
||
OCCV[3:0] = 0111:充电过流保护电压 = 90mV
|
||
OCCV[3:0] = 1000:充电过流保护电压 = 100mV
|
||
OCCV[3:0] = 1001:充电过流保护电压 = 110mV
|
||
OCCV[3:0] = 1010:充电过流保护电压 = 120mV
|
||
OCCV[3:0] = 1011:充电过流保护电压 = 130mV
|
||
OCCV[3:0] = 1100:充电过流保护电压 = 140mV
|
||
OCCV[3:0] = 1101:充电过流保护电压 = 160mV
|
||
OCCV[3:0] = 1110:充电过流保护电压 = 180mV
|
||
OCCV[3:0] = 1111:充电过流保护电压 = 200mV
|
||
*/
|
||
}bits;
|
||
}Occv_occt; //充电过流设置
|
||
//////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 PFT1_0 :2; //二次过充电保护延时
|
||
/*
|
||
PFT[1:0] = 00: 二次过充电保护延时 =8S
|
||
PFT[1:0] = 01: 二次过充电保护延时= 16S
|
||
PFT[1:0] = 10: 二次过充电保护延时= 32S
|
||
PFT[1:0] = 11: 二次过充电保护延时= 64S
|
||
*/
|
||
u8 OCRT1_0 :2; //充放电过流自恢复延时
|
||
/*
|
||
OCRT[1:0] = 00:充放电过流自动恢复延时 = 8S
|
||
OCRT[1:0] = 01:充放电过流自动恢复延时 = 16S
|
||
OCRT[1:0] = 10:充放电过流自动恢复延时 = 32S
|
||
OCRT[1:0] = 11:充放电过流自动恢复延时 = 64S
|
||
*/
|
||
u8 MOST1_0 :2; //充放电MOSFET开启延时
|
||
/*
|
||
MOST[1:0] = 00: 充放电MOSFET开启延时 = 64uS
|
||
MOST[1:0] = 01: 充放电MOSFET开启延时 = 128uS
|
||
MOST[1:0] = 10: 充放电MOSFET开启延时 = 256uS
|
||
MOST[1:0] = 11: 充放电MOSFET开启延时 = 512uS
|
||
*/
|
||
u8 CHS1_0 :2; //充放电状态检测电压
|
||
/*
|
||
CHS [1:0] = 00: 充放电状态检测电压 = 200uV
|
||
CHS [1:0] = 01: 充放电状态检测电压 = 500uV
|
||
CHS [1:0] = 10: 充放电状态检测电压 = 1000uV
|
||
CHS [1:0] = 11: 充放电状态检测电压 = 2000uV
|
||
*/
|
||
}bits;
|
||
}Most_ocrt_pft; //充放电过流自动恢复/二次过充电保护延时设置
|
||
////////////////////////////////////////////////////////////////////
|
||
|
||
char Otc; //充电高温保护设置 充电高温保护阈值
|
||
|
||
char Otcr; //充电高温保护释放 充电高温保护释放阈值
|
||
|
||
char Utc; //充电低温保护设置 充电低温保护阈值
|
||
|
||
char Utcr; //充电低温保护释放设置 充电低温保护释放阈值
|
||
|
||
char Otd; //放电高温保护设置 放电高温保护阈值
|
||
|
||
char Otdr; //放电高温保护释放设置 放电高温保护释放阈值
|
||
|
||
char Utd; //放电低温保护设置 放电低温保护阈值
|
||
|
||
char Utdr; //放电低温保护释放设置 放电低温保护释放阈值
|
||
|
||
}EEPROMWridata;
|
||
////////////////////////////////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////////////
|
||
/*EEPROM寄存器读数据*/
|
||
struct
|
||
{
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 cn3_cn0 :4; //串数配置单位
|
||
/*
|
||
CN[3:0] = 0101: 5串电芯应用
|
||
CN[3:0] = 0110: 6串电芯应用
|
||
CN[3:0] = 0111: 7串电芯应用
|
||
CN[3:0] = 1000: 8串电芯应用
|
||
CN[3:0] = 1001: 9串电芯应用
|
||
CN[3:0] = 1010: 10串电芯应用
|
||
CN[3:0] = 1011: 11串电芯应用
|
||
CN[3:0] = 1100: 12串电芯应用
|
||
CN[3:0] = 1101: 13串电芯应用
|
||
CN[3:0] = 1110: 14串电芯应用
|
||
CN[3:0] = 1111: 15串电芯应用
|
||
CN[3:0] = 渌<>?16串电芯应用
|
||
*/
|
||
u8 BAL :1; //平衡功能模块使能控制位 0: 平衡开启由SH367309内部逻辑控制 1: 平衡开启由外部MCU控制,平衡时序仍由SH367309内部逻辑控制
|
||
u8 OCPM :1; //充放电过流MOSFET控制位 0:充电过流只关闭充电MOSFET;放电过流只关闭放电MOSFET 1:充放电过流关闭充放电MOSFET
|
||
u8 ENMOS :1; //充电MOSFET恢复控制位 0:禁用充电MOSFET恢复控制位 1:启用充电MOSFET恢复控制位。当过充电/温度保护关闭充电MOSFET后,如果检过流1或者放电状态,则开启充电MOSFET;
|
||
u8 ENPCH :1; //预充电模块控制位 0:禁用预充电功能 1:启用预充电功能
|
||
}bits;
|
||
}Sconf1; //读系统配置寄存器1
|
||
////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 EUVR :1; //过放电恢复设置控制位 0: 过放电保护状态释放与负载释放无关 1: 过放电保护状态释放还需负载释放
|
||
u8 OCRA :1; //电流恢复设置控制位 0:不允许电流保护定时恢复 1:允许电流保护定时恢复
|
||
u8 CTLC1_0 :2; //CTL管脚功能设置控制位
|
||
/*
|
||
CTLC[1:0]=00:充放电和预充电MOSFET由内部逻辑控制, CTL管脚输入无效
|
||
CTLC[1:0]=01: 控制充电和预充电MOSFET。 CTL输入VL-CTL电平时强制关闭充电和
|
||
预充电MOSFET; CTL输入VH-CTL电平时充电和预充电MOSFET由内
|
||
部逻辑控制
|
||
CTLC[1:0]=10: 控制放电MOSFET。 CTL输入VL-CTL电平时强制关闭放电MOSFET;
|
||
CTL输入VH-CTL电平时,放电MOSFET由内部逻辑控制
|
||
CTLC[1:0]=11: 控制充放电和预充电MOSFET。 CTL输入VL-CTL电平时强制关闭充放
|
||
电和预充电MOSFET; CTL输入VH-CTL电平时,充放电和预充电
|
||
MOSFET哨部逻辑控制
|
||
*/
|
||
u8 DIS_PF :1; //二次过充电模块使能控制位 0:启用二次过充电保护 1:禁止二次过充电保护
|
||
u8 UV_OP :1; //过放电时MOSFET控制位 0: 过放电只关闭放电MOSFET 1: 过放电关闭充放电MOSFET
|
||
u8 Res :1; //保留
|
||
u8 E0VB :1; //禁止低压电芯充电功能设置控制位 0:关闭“禁止低压电芯充电”功能 1:开启“禁止低压电芯充电”功能
|
||
}bits;
|
||
}Sconf2; //读系统配置寄存器2
|
||
////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u16 datas;
|
||
struct
|
||
{
|
||
u16 OV9_0 :10; //过充保护电压 计算方式:寄存器值×5mV
|
||
u16 LDRT1_0 :2; //负载释放延时设置控制位
|
||
/*
|
||
LDRT[1:0] = 00: 负载释放延时 = 100mS
|
||
LDRT[1:0] = 01: 负载释放延时 = 500mS
|
||
LDRT[1:0] = 10: 负载释放延时 = 1000mS
|
||
LDRT[1:0] = 11: 贺头叛邮?= 2000mS
|
||
*/
|
||
u16 OVT3_0 :4; //过充电保护延时设置控制位
|
||
/*
|
||
OVT[3:0] = 0000: 过充电保护延时 = 100mS
|
||
OVT[3:0] = 0001: 过充电保护延时 = 200mS
|
||
OVT[3:0] = 0010: 过充电保护延时 = 300mS
|
||
OVT[3:0] = 0011: 过充电保护延时 = 400mS
|
||
OVT[3:0] = 0100: 过充电保护延时 = 600mS
|
||
OVT[3:0] = 0101: 过充电保护延时 = 800mS
|
||
OVT[3:0] = 0110: 过充电保护延时 = 1S
|
||
OVT[3:0] = 0111: 过充电保护延时 = 2S
|
||
OVT[3:0] = 1000: 过充电保护延时 = 3S
|
||
OVT[3:0] = 1001: 过充电保护延时 = 4S
|
||
OVT[3:0] = 1010: 过充电保护延时 = 6S
|
||
OVT[3:0] = 1011: 过充电保护延时 = 8S
|
||
OVT[3:0] = 1100: 过充电保护延时 = 10S
|
||
OVT[3:0] = 1101: 过充电保护延时 = 20S
|
||
OVT[3:0] = 1110: 过充电保护延时 = 30S
|
||
OVT[3:0] = 1111: 过充电保护延时 = 40S
|
||
*/
|
||
}bits;
|
||
}Ovh_ovl; //读过充电保护电压/过充电保护延时/负载释放延时设置寄存器
|
||
//////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u16 datas;
|
||
struct
|
||
{
|
||
u16 OVR9_0 :10; //过充电恢复电压, 计算方式:寄存器值×5mV
|
||
u16 Res :2; //保留
|
||
u16 UVT3_0 :4; //过放电保护延时设置控制位
|
||
/*
|
||
UVT[3:0] = 0000: 过放电保护延时 = 100mS
|
||
UVT[3:0] = 0001: 过放电保护延时 = 200mS
|
||
UVT[3:0] = 0010: 过放电保护延时 = 300mS
|
||
UVT[3:0] = 0011: 过放电保护延时 = 400mS
|
||
UVT[3:0] = 0100: 过放电保护延时 = 600mS
|
||
UVT[3:0] = 0101: 过放电保护延时 = 800mS
|
||
UVT[3:0] = 0110: 过放电保护延时 = 1S
|
||
UVT[3:0] = 0111: 过放电保护延时 = 2S
|
||
UVT[3:0] = 1000: 过放电保护延时 = 3S
|
||
UVT[3:0] = 1001: 过放电保护延时 = 4S
|
||
UVT[3:0] = 1010: 过放电保护延时 = 6S
|
||
UVT[3:0] = 1011: 过放电保护延时 = 8S
|
||
UVT[3:0] = 1100: 过放电保护延时 = 10S
|
||
UVT[3:0] = 1101: 过放电保护延时 = 20S
|
||
UVT[3:0] = 1110: 过放电保护延时 = 30S
|
||
UVT[3:0] = 1111: 过放电保护延时 = 40S
|
||
*/
|
||
}bits;
|
||
}Ovrh_ovrl;//读过充电恢复电压/过放电保护延时
|
||
/////////////////////////////////////////////////////////////////////
|
||
u8 Uv; //读过放电保护电压 过放电保护电压, 计算方式:寄存器值×20mV
|
||
|
||
u8 Uvr; //读过放电恢复电压 过放电恢复电压, 计算方式:寄存器值×20mV 且UV<UVR
|
||
|
||
u8 Balv; //读平衡开启电压 平衡开启电压, 计算方式:寄存器值×20mV
|
||
|
||
u8 Prev; //读预充电电压 预充电电压, 计算方式:寄存器值×20mV
|
||
|
||
u8 Lov; //读低电压禁止充电电压 低电压禁止充电电压, 计算方式:寄存器值×20mV
|
||
|
||
u8 Pfv; //读二次过充电保护电压 二次过充电保护电压, 计算方式:寄存器值×20mV
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 CD1T3_0 :4; //放电过流1保护延时
|
||
/*
|
||
OCD1T[3:0] = 0000:放电过流1保护延时 = 50mS
|
||
OCD1T[3:0] = 0001:放电过流1保护延时 = 100mS
|
||
OCD1T[3:0] = 0010:放电过流1保护延时 = 200mS
|
||
OCD1T[3:0] = 0011:放电过流1保护延时 = 400mS
|
||
OCD1T[3:0] = 0100:放电过流1保护延时 = 600mS
|
||
OCD1T[3:0] = 0101:放电过流1保护延时 = 800mS
|
||
OCD1T[3:0] = 0110:放电过流1保护延时 = 1S
|
||
OCD1T[3:0] = 0111:放电过流1保护延时 = 2S
|
||
OCD1T[3:0] = 1000:放电过流1保护延时 = 4S
|
||
OCD1T[3:0] = 1001:放电过流1保护延时 = 6S
|
||
OCD1T[3:0] = 1010:放电过流1保护延时 = 8S
|
||
OCD1T[3:0] = 1011:放电过流1保护延时 = 10S
|
||
OCD1T[3:0] = 1100:放电过流1保护延时 = 15S
|
||
OCD1T[3:0] = 1101:放电过流1保护延时 = 20S
|
||
OCD1T[3:0] = 1110:放电过流1保护延时 = 30S
|
||
OCD1T[3:0] = 1111:放电过流1保护延时 = 40S
|
||
*/
|
||
u8 OCD1V3_0 :4; //放电过流1保护电压
|
||
/*
|
||
OCD1V[3:0] = 0000:放电过流1保护电压 = 20mV
|
||
OCD1V[3:0] = 0001:放电过流1保护电压 = 30mV
|
||
OCD1V[3:0] = 0010:放电过流1保护电压 = 40mV
|
||
OCD1V[3:0] = 0011:放电过流1保护电压 = 50mV
|
||
OCD1V[3:0] = 0100: 放电过流1保护电压 = 60mV
|
||
OCD1V[3:0] = 0101:放电过流1保护电压 = 70mV
|
||
OCD1V[3:0] = 0110:放电过流1保护电压 = 80mV
|
||
OCD1V[3:0] = 0111:放电过流1保护电压 = 90mV
|
||
OCD1V[3:0] = 1000:放电过流1保护电压 = 100mV
|
||
OCD1V[3:0] = 1001:放电过流1保护电压 = 110mV
|
||
OCD1V[3:0] = 1010:放电过流1保护电压 = 120mV
|
||
OCD1V[3:0] = 1011:放电过流1保护电压 = 130mV
|
||
OCD1V[3:0] = 1100:放电过流1保护电压 = 140mV
|
||
OCD1V[3:0] = 1101:放电过流1保护电压 = 160mV
|
||
OCD1V[3:0] = 1110:放电过流1保护电压 = 180mV
|
||
OCD1V[3:0] = 1111悍诺绻<E8AFBA>?保护电压 = 200mV
|
||
*/
|
||
}bits;
|
||
}Ocd1V_ocd1t; //读放电过流1
|
||
////////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datats;
|
||
struct
|
||
{
|
||
u8 OCD2T3_0 :4; //放电过流2保护延时
|
||
/*
|
||
OCD2T[3:0] = 0000:放电过流2保护延时 = 10mS
|
||
OCD2T[3:0] = 0001:放电过流2保护延时 = 20mS
|
||
OCD2T[3:0] = 0010:放电过流2保护延时 = 40mS
|
||
OCD2T[3:0] = 0011:放电过流2保护延时 = 60mS
|
||
OCD2T[3:0] = 0100:放电过流2保护延时 = 80mS
|
||
OCD2T[3:0] = 0101:放电过流2保护延时 = 100mS
|
||
OCD2T[3:0] = 0110:放电过流2保护延时 = 200mS
|
||
OCD2T[3:0] = 0111:放电过流2保护延时 = 400mS
|
||
OCD2T[3:0] = 1000:放电过流2保护延时 = 600mS
|
||
OCD2T[3:0] = 1001:放电过流2保护延时 = 800mS
|
||
OCD2T[3:0] = 1010:放电过流2保护延时 = 1S
|
||
OCD2T[3:0] = 1011:放电过流2保护延时 = 2S
|
||
OCD2T[3:0] = 1100:放电过流2保护延时 = 4S
|
||
OCD2T[3:0] = 1101:放电过流2保护延时 = 8S
|
||
OCD2T[3:0] = 1110:放电过流2保护延时 = 10S
|
||
OCD2T[3:0] = 1111悍诺绻<E8AFBA>?保护延时 = 20S
|
||
*/
|
||
u8 OCD2V3_0 :4; //放电过流2保护电压
|
||
/*
|
||
OCD2V[3:0] = 0000:放电过流2保护电压 = 30mV
|
||
OCD2V[3:0] = 0001:放电过流2保护电压 = 40mV
|
||
OCD2V[3:0] = 0010:放电过流2保护电压 = 50mV
|
||
OCD2V[3:0] = 0011:放电过流2保护电压 = 60mV
|
||
OCD2V[3:0] = 0100:放电过流2保护电压 = 70mV
|
||
OCD2V[3:0] = 0101:放电过流2保护电压 = 80mV
|
||
OCD2V[3:0] = 0110:放电过流2保护电压 = 90mV
|
||
OCD2V[3:0] = 0111:放电过流2保护电压 = 100mV
|
||
OCD2V[3:0] = 1000:放电过流2保护电压 = 120mV
|
||
OCD2V[3:0] = 1001:放电过流2保护电压 = 140mV
|
||
OCD2V[3:0] = 1010:放电过流2保护电压 = 160mV
|
||
OCD2V[3:0] = 1011:放电过流2保护电压 = 180mV
|
||
OCD2V[3:0] = 1100:放电过流2保护电压 = 200mV
|
||
OCD2V[3:0] = 1101:放电过流2保护电压 = 300mV
|
||
OCD2V[3:0] = 1110:放电过流2保护电压 = 400mV
|
||
OCD2V[3:0] = 1111:放电过流2保护电压 = 500mV
|
||
*/
|
||
}bits;
|
||
}Ocd2V_ocd2t; //读放电过流2
|
||
///////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 SCT3_0 :4; //短路保护延时
|
||
/*
|
||
SCT[3:0] = 0000:短路保护延时 = 0uS
|
||
SCT[3:0] = 0001:短路保护延时 = 64uS
|
||
SCT[3:0] = 0010:短路保护延时 = 128uS
|
||
SCT[3:0] = 0011:短路保护延时 = 192uS
|
||
SCT[3:0] = 0100:短路保护延时 = 256uS
|
||
SCT[3:0] = 0101:短路保护延时 = 320uS
|
||
SCT[3:0] = 0110:短路保护延时 = 384uS
|
||
SCT[3:0] = 0111:短路保护延时 = 448uS
|
||
SCT[3:0] = 1000:短路保护延时 = 512uS
|
||
SCT[3:0] = 1001:短路保护延时 = 576uS
|
||
SCT[3:0] = 1010:短路保护延时 = 640uS
|
||
SCT[3:0] = 1011:短路保护延时 = 704uS
|
||
SCT[3:0] = 1100:短路保护延时 = 768uS
|
||
SCT[3:0] = 1101:短路保护延时 = 832uS
|
||
SCT[3:0] = 1110:短路保护延时 = 896uS
|
||
SCT[3:0] = 1111:短路保护延时 = 960uS
|
||
*/
|
||
u8 SCV_3_0 :4; //短路保护保护电压
|
||
/*
|
||
SCV[3:0] = 0000:短路保护电压 = 50mV
|
||
SCV[3:0] = 0001:短路保护电压 = 80mV
|
||
SCV[3:0] = 0010:短路保护电压 = 110mV
|
||
SCV[3:0] = 0011:短路保护电压 = 140mV
|
||
SCV[3:0] = 0100:短路保护电压 = 170mV
|
||
SCV[3:0] = 0101:短路保护电压 = 200mV
|
||
SCV[3:0] = 0110:短路保护电压 = 230mV
|
||
SCV[3:0] = 0111:短路保护电压 = 260mV
|
||
SCV[3:0] = 1000:短路保护电压 = 290mV
|
||
SCV[3:0] = 1001:短路保护电压 = 320mV
|
||
SCV[3:0] = 1010:短路保护电压 = 350mV
|
||
SCV[3:0] = 1011:短路保护电压 = 400mV
|
||
SCV[3:0] = 1100:短路保护电压 = 500mV
|
||
SCV[3:0] = 1101:短路保护电压 = 600mV
|
||
SCV[3:0] = 1110:短路保护电压 = 800mV
|
||
SCV[3:0] = 1111:短路保护电压 = 1000mV
|
||
*/
|
||
}bits;
|
||
}Scv_sct; //读短路保护
|
||
///////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 OCCT3_0 :4; //充电过流保护延时
|
||
/*
|
||
OCCT[3:0] = 0000:充电过流保护延时 = 10mS
|
||
OCCT[3:0] = 0001:充电过流保护延时 = 20mS
|
||
OCCT[3:0] = 0010:充电过流保护延时 = 40mS
|
||
OCCT[3:0] = 0011:充电过流保护延时 = 60mS
|
||
OCCT[3:0] = 0100:充电过流保护延时 = 80mS
|
||
OCCT[3:0] = 0101:充电过流保护延时 = 100mS
|
||
OCCT[3:0] = 0110:充电过流保护延时 = 200mS
|
||
OCCT[3:0] = 0111:充电过流保护延时 = 400mS
|
||
OCCT[3:0] = 1000:充电过流保护延时 = 600mS
|
||
OCCT[3:0] = 1001:充电过流保护延时 = 800mS
|
||
OCCT[3:0] = 1010:充电过流保护延时 = 1S
|
||
OCCT[3:0] = 1011:充电过流保护延时 = 2S
|
||
OCCT[3:0] = 1100:充电过流保护延时 = 4S
|
||
OCCT[3:0] = 1101:充电过流保护延时 = 8S
|
||
OCCT[3:0] = 1110:充电过流保护延时 = 10S
|
||
OCCT[3:0] = 1111:充电过流保护延时 = 20S
|
||
*/
|
||
u8 OCCV3_0 :4; //充电过流保护电压
|
||
/*
|
||
OCCV[3:0] = 0000:充电过流保护电压 = 20mV
|
||
OCCV[3:0] = 0001:充电过流保护电压 = 30mV
|
||
OCCV[3:0] = 0010:充电过流保护电压 = 40mV
|
||
OCCV[3:0] = 0011:充电过流保护电压 = 50mV
|
||
OCCV[3:0] = 0100:充电过流保护电压 = 60mV
|
||
OCCV[3:0] = 0101:充电过流保护电压 = 70mV
|
||
OCCV[3:0] = 0110:充电过流保护电压 = 80mV
|
||
OCCV[3:0] = 0111:充电过流保护电压 = 90mV
|
||
OCCV[3:0] = 1000:充电过流保护电压 = 100mV
|
||
OCCV[3:0] = 1001:充电过流保护电压 = 110mV
|
||
OCCV[3:0] = 1010:充电过流保护电压 = 120mV
|
||
OCCV[3:0] = 1011:充电过流保护电压 = 130mV
|
||
OCCV[3:0] = 1100:充电过流保护电压 = 140mV
|
||
OCCV[3:0] = 1101:充电过流保护电压 = 160mV
|
||
OCCV[3:0] = 1110:充电过流保护电压 = 180mV
|
||
OCCV[3:0] = 1111:充电过流保护电压 = 200mV
|
||
*/
|
||
}bits;
|
||
}Occv_occt; //读充电过流
|
||
//////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 PFT1_0 :2; //二次过充电保护延时
|
||
/*
|
||
PFT[1:0] = 00: 二次过充电保护延时 =8S
|
||
PFT[1:0] = 01: 二次过充电保护延时= 16S
|
||
PFT[1:0] = 10: 二次过充电保护延时= 32S
|
||
PFT[1:0] = 11: 二次过充电保护延时= 64S
|
||
*/
|
||
u8 OCRT1_0 :2; //充放电过流自恢复延时
|
||
/*
|
||
OCRT[1:0] = 00:充放电过流自动恢复延时 = 8S
|
||
OCRT[1:0] = 01:充放电过流自动恢复延时 = 16S
|
||
OCRT[1:0] = 10:充放电过流自动恢复延时 = 32S
|
||
OCRT[1:0] = 11:充放电过流自动恢复延时 = 64S
|
||
*/
|
||
u8 MOST1_0 :2; //充放电MOSFET开启延时
|
||
/*
|
||
MOST[1:0] = 00: 充放电MOSFET开启延时 = 64uS
|
||
MOST[1:0] = 01: 充放电MOSFET开启延时 = 128uS
|
||
MOST[1:0] = 10: 充放电MOSFET开启延时 = 256uS
|
||
MOST[1:0] = 11: 充放电MOSFET开启延时 = 512uS
|
||
*/
|
||
u8 CHS1_0 :2; //充放电状态检测电压
|
||
/*
|
||
CHS [1:0] = 00: 充放电状态检测电压 = 200uV
|
||
CHS [1:0] = 01: 充放电状态检测电压 = 500uV
|
||
CHS [1:0] = 10: 充放电状态检测电压 = 1000uV
|
||
CHS [1:0] = 11: 充放电状态检测电压 = 2000uV
|
||
*/
|
||
}bits;
|
||
}Most_ocrt_pft; //读充放电过流自动恢复/二次过充电保护延时
|
||
////////////////////////////////////////////////////////////////////
|
||
|
||
char Otc; //读充电高温保护 充电高温保护阈值
|
||
|
||
char Otcr; //读充电高温保护释放 充电高温保护释放阈值
|
||
|
||
char Utc; //读充电低温保护 充电低温保护阈值
|
||
|
||
char Utcr; //读充电低温保护释放 充电低温保护释放阈值
|
||
|
||
char Otd; //读放电高温保护 放电高温保护阈值
|
||
|
||
char Otdr; //读放电高温保护释放 放电高温保护释放阈值
|
||
|
||
char Utd; //读放电低温保护 放电低温保护阈值
|
||
|
||
char Utdr; //读放电低温保护释放 放电低温保护释放阈值
|
||
|
||
char Tr; //读温度内部参考电阻系数
|
||
}EEPROMRevdata;
|
||
|
||
|
||
///////////////////////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////
|
||
/*RAM寄存器写数据*/
|
||
struct
|
||
{
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 IDLE :1; //IDLE设置控制位 0: SH367309不进入IDLE状态 1: SH367309将进入IDLE状态,唤醒后硬件自动清零
|
||
u8 SLEEP :1; //SLEEP设置控制位 0: SH367309不进入SLEEP状态 1: SH367309将进入SLEEP状态,唤醒后硬件自动清零
|
||
u8 ENWDT :1; //看门狗设置控制位 0: SH367309关闭看门狗模块 1: SH367309开启看门狗模块
|
||
u8 CADCON :1; //CADC设置控制位 0: SH367309关闭CADC 1: SH367309开启CADC进行电流采集
|
||
u8 CHGMOS :1; //充电MOSFET控制位 0: 充电MOSFET关闭 1:充电MOSFET由硬件保护模块决定
|
||
u8 DSGMOS :1; //放电MOSFET控制位 0:放电MOSFET关闭 1:放电MOSFET由硬件保护模块决定
|
||
u8 PCHMOS :1; //预充电MOSFET控制位 0:预充电MOSFET关闭 1:预充电MOSFET由硬件保护模块决定
|
||
u8 OCRC :1; //过流保护控制位 过流保护状态清除需在OCRC位连续写: 0-1-0
|
||
}bits;
|
||
}Conf; //系统配置
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u16 datas;
|
||
struct
|
||
{
|
||
u16 CB1 :1; //0:关闭CellN平衡回路 1:开启CellN平衡回路
|
||
u16 CB2 :1;
|
||
u16 CB3 :1;
|
||
u16 CB4 :1;
|
||
u16 CB5 :1;
|
||
u16 CB6 :1;
|
||
u16 CB7 :1;
|
||
u16 CB8 :1;
|
||
u16 CB9 :1;
|
||
u16 CB10 :1;
|
||
u16 CB11 :1;
|
||
u16 CB12 :1;
|
||
u16 CB13 :1;
|
||
u16 CB14 :1;
|
||
u16 CB15 :1;
|
||
u16 CB16 :1;
|
||
}bits;
|
||
}Balanceh_l; //控制电池阻的平衡回路
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 OV_FLG :1; //过压保护标志位 1:发生过过压保护 0:未发生过过压保护
|
||
u8 UV_FLG :1; //欠压保护标志位 1:发生过欠压保护 0:未发生过欠压保护
|
||
u8 OCD_FLG :1; //放电过流保护标志位 1:发生过放电过流保护 0:未发生过放电过流保护
|
||
u8 LOAD_FLG :1; //LDO3过流标志位 1:发生过过流 0:未发生过过流
|
||
u8 OCC_FLG :1; //充电过流保护标志位 1:发生过充电过流保护 0:未发生过充电过流保护
|
||
u8 SC_FLG :1; //短路保护标志位 1:发生过短路保护 0:未发生过短路保护
|
||
u8 PF_FLG :1; //二次过充电保护标志位 1:发生过二次过充电保护 0:未发生过二次过充电保护
|
||
u8 WDT_FLG :1; //看门狗标志位 1:发生过看门狗溢出 0: 未发生过看门狗溢出
|
||
}bits;
|
||
}Bflag1; //系统标志寄存器1 只能进行写0操作
|
||
/////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 UTC_FLG :1; //充电低温保护标志位 1:发生过充电低温保护 0:未发生过充电低温保护
|
||
u8 OTC_FLG :1; //充电高温保护标志位 1:发生过充电高温保护 0:未发生过充电高温保护
|
||
u8 UTD_FLG :1; //放电低温保护标志位 1:发生过放电低温保护 0:未发生过放电低温保护
|
||
u8 OTD_FLG :1; //放电高温保护标志位 1:发生过放电高温保护 0:未发生过放电高温保护
|
||
u8 VADC_FLG :1; //VADC中断标志位 1:发生过VADC中断 0:未发生过VADC中断 该bit被读取之后,硬件会自动清零
|
||
u8 CADC_FLG :1; //CADC中断标志位 1:发生过CADC中断 0:未发生过CADC中断 该bit被读取之后,硬件会自动清零
|
||
u8 WAKE_FLG :1; //唤醒中断标志位 1:从IDLE状态(检测到充放电电流)或者SLEEP状态(充电器连接)被唤醒 0:未被唤醒
|
||
u8 RST_FLG :1; //复位标志位 1:系统复位后,自动置1,需MCU清零 0:未被唤醒
|
||
|
||
}bits;
|
||
}Bflag2; //系统标志寄存器2 只能进行写0错做
|
||
/////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 WDT1_0 :2; //看门狗溢出时间控制位
|
||
/*
|
||
WDT[1-0]=00:看门狗溢出时间为32S;
|
||
WDT[1-0]=01:看门狗溢出时间为16S;
|
||
WDT[1-0]=10:看门狗溢出时间为8S;
|
||
WDT[1-0]=11:看门狗溢出时间为4S;
|
||
*/
|
||
}bits;
|
||
}Rststat;
|
||
////////////////////////////////////////////////////////////
|
||
}RAM_Wridata;
|
||
|
||
|
||
|
||
|
||
/////////////////////////////////////////////////////////////////////////////////
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
/*RAM寄存器读数据*/
|
||
struct
|
||
{
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 IDLE :1; //IDLE设置控制位 0: SH367309不进入IDLE状态 1: SH367309将进入IDLE状态,唤醒后硬件自动清零
|
||
u8 SLEEP :1; //SLEEP设置控制位 0: SH367309不进入SLEEP状态 1: SH367309将进入SLEEP状态,唤醒后硬件自动清零
|
||
u8 ENWDT :1; //看门狗设置控制位 0: SH367309关闭看门狗模块 1: SH367309开启看门狗模块
|
||
u8 CADCON :1; //CADC设置控制位 0: SH367309关闭CADC 1: SH367309开启CADC进行电流采集
|
||
u8 CHGMOS :1; //充电MOSFET控制位 0: 充电MOSFET关闭 1:充电MOSFET由硬件保护模块决定
|
||
u8 DSGMOS :1; //放电MOSFET控制位 0:放电MOSFET关闭 1:放电MOSFET由硬件保护模块决定
|
||
u8 PCHMOS :1; //预充电MOSFET控制位 0:预充电MOSFET关闭 1:预充电MOSFET由硬件保护模块决定
|
||
u8 OCRC :1; //过流保护控制位 过流保护状态清除需在OCRC位连续写: 0-1-0
|
||
}bits;
|
||
}Conf; //系统配置
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u16 datas;
|
||
struct
|
||
{
|
||
u16 CB1 :1; //0:关闭CellN平衡回路 1:开启CellN平衡回路
|
||
u16 CB2 :1;
|
||
u16 CB3 :1;
|
||
u16 CB4 :1;
|
||
u16 CB5 :1;
|
||
u16 CB6 :1;
|
||
u16 CB7 :1;
|
||
u16 CB8 :1;
|
||
u16 CB9 :1;
|
||
u16 CB10 :1;
|
||
u16 CB11 :1;
|
||
u16 CB12 :1;
|
||
u16 CB13 :1;
|
||
u16 CB14 :1;
|
||
u16 CB15 :1;
|
||
u16 CB16 :1;
|
||
}bits;
|
||
}Balanceh_l; //控制电池阻的平衡回路
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 OV :1; // 过压保护状态位 1:发生过压保护 0:未发生过压保护
|
||
u8 UV :1; // 欠压保护状态位 1:发生欠压保护 0:未发生欠压保护
|
||
u8 OCD1 :1; // 放电过流1保护状态位 1:发生放电过流1保护 0:未发生放电过流1保护
|
||
u8 OCD2 :1; // 放电过流2保护状态位 1:发生放电过流2保护 0:未发生放电过流2保护
|
||
u8 OCC :1; // 充电过流保护状态位 1:发生充电过流保护 0: 未发生充电过流保护
|
||
u8 SC :1; // 短路保护状态位 1:发生短路保护 0: 未发生短路保护
|
||
u8 PF :1; // 二次过充电保护状态位 1:发生二次过充电保护 0:未发生二次过充电保护
|
||
u8 WDT :1; // 看门狗状态位 1:看门狗溢出 0:看门狗正常
|
||
}bits;
|
||
}Bstrtus1;//系统状态1寄存器
|
||
///////////////////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 UTC :1; //充电低温保护状态位 1:发生充电低温保护 0:未发生充电低温保护
|
||
u8 OTC :1; //充电高温保护状态位 1:发生充电高温保护 0:未发生充电高温保护
|
||
u8 UTD :1; //放电低温保护状态位 1:发生放电低温保护 0:未发生放电低温保护
|
||
u8 OTD :1; //放电高温保护状态位 1:发生放电高温保护 0:未发生放电高温保护
|
||
u8 Ren :4; //保留
|
||
}bits;
|
||
}Bstrtus2;//系统状态2寄存器
|
||
////////////////////////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 DSG_FET :1; //放电MOSFET开关状态位 1:放电MOSFET开启 0:放电MOSFET关闭
|
||
u8 CHG_FET :1; //充电MOSFET开关状态位 1:充电MOSFET开启 0:充电MOSFET关闭
|
||
u8 PCHG_FET :1; //预充电MOSFET开关状态位 1:预充电MOSFET开启 0:预充电MOSFET关闭
|
||
u8 L0V :1; //低电压禁止充电状态位 1:发生低电压禁止充电 0:未发生低电压禁止充电
|
||
u8 EEPR_WR :1; //EEPROM写操作状态位 1: EEPROM写操作错误 0: EEPROM写操作正确
|
||
u8 Ren :1; //保留
|
||
u8 DSGING :1; //放电状态位 1:放电状态 0:非放电状态
|
||
u8 CHGING :1; //充电状态位 1:充电状态 0:非充电状态
|
||
}bits;
|
||
|
||
}Bstrtus3;//系统状态3寄存器
|
||
///////////////////////////////////////////////////////////////////////////
|
||
|
||
u16 TEMP1h_l; //T1温度 当转换完成后,数据更新为温度电阻1上的电压分压比对应的数值
|
||
|
||
u16 TEMP2h_l; //T2温度 当转换完成后,数据更新为温度电阻2上的电压分压比对应的数值
|
||
|
||
u16 TEMP3h_l; //T3温度 当转换完成后,数据更新为温度电阻3上的电压分压比对应的数值
|
||
|
||
u16 Curh_l; // CUR15 当转换完成后,数据更新为 为符号位, “1”表示放电; Sense“0” 电阻两端电压对 表示充电。 应的数值 &0xef
|
||
|
||
union
|
||
{
|
||
u16 cellvol[16];
|
||
|
||
struct
|
||
{
|
||
u16 cell1_vol; //电芯电压1
|
||
|
||
u16 cell2_vol; //电芯电压2
|
||
|
||
u16 cell3_vol; //电芯电压3
|
||
|
||
u16 cell4_vol; //电芯电压4
|
||
|
||
u16 cell5_vol; //电芯电压5
|
||
|
||
u16 cell6_vol; //电芯电压6
|
||
|
||
u16 cell7_vol; //电芯电压7
|
||
|
||
u16 cell8_vol; //电芯电压8
|
||
|
||
u16 cell9_vol; //电芯电压9
|
||
|
||
u16 cell10_vol; //电芯电压10
|
||
|
||
u16 cell11_vol; //电芯电压11
|
||
|
||
u16 cell12_vol; //电芯电压12
|
||
|
||
u16 cell13_vol; //电芯电压13
|
||
|
||
u16 cell14_vol; //电芯电压14
|
||
|
||
u16 cell15_vol; //电芯电压15
|
||
|
||
u16 cell16_vol; //电芯电压16
|
||
}cellbits;
|
||
}Cell;
|
||
|
||
u16 CADcdh_l; //电流 DATA.15 当转换完成后,数据更新为 为符号位, “1”表示放电; Sense电阻两端电压对应的数值 &0xef
|
||
|
||
////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 OV_FLG :1; //过压保护标志位 1:发生过过压保护 0:未发生过过压保护
|
||
u8 UV_FLG :1; //欠压保护标志位 1:发生过欠压保护 0:未发生过欠压保护
|
||
u8 OCD_FLG :1; //放电过流保护标志位 1:发生过放电过流保护 0:未发生过放电过流保护
|
||
u8 LOAD_FLG :1; //LDO3过流标志位 1:发生过过流 0:未发生过过流
|
||
u8 OCC_FLG :1; //充电过流保护标志位 1:发生过充电过流保护 0:未发生过充电过流保护
|
||
u8 SC_FLG :1; //短路保护标志位 1:发生过短路保护 0:未发生过短路保护
|
||
u8 PF_FLG :1; //二次过充电保护标志位 1:发生过二次过充电保护 0:未发生过二次过充电保护
|
||
u8 WDT_FLG :1; //看门狗标志位 1:发生过看门狗溢出 0: 未发生过看门狗溢出
|
||
}bits;
|
||
}Bflag1; //系统标志寄存器1
|
||
///////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 UTC_FLG :1; //充电低温保护标志位 1:发生过充电低温保护 0:未发生过充电低温保护
|
||
u8 OTC_FLG :1; //充电高温保护标志位 1:发生过充电高温保护 0:未发生过充电高温保护
|
||
u8 UTD_FLG :1; //放电低温保护标志位 1:发生过放电低温保护 0:未发生过放电低温保护
|
||
u8 OTD_FLG :1; //放电高温保护标志位 1:发生过放电高温保护 0:未发生过放电高温保护
|
||
u8 VADC_FLG :1; //VADC中断标志位 1:发生过VADC中断 0:未发生过VADC中断 该bit被读取之后,硬件会自动清零
|
||
u8 CADC_FLG :1; //CADC中断标志位 1:发生过CADC中断 0:未发生过CADC中断 该bit被读取之后,硬件会自动清零
|
||
u8 WAKE_FLG :1; //唤醒中断标志位 1:从IDLE状态(检测到充放电电流)或者SLEEP状态(充电器连接)被唤醒 0:未被唤醒
|
||
u8 RST_FLG :1; //复位标志位 1:系统复位后,自动置1,需MCU清零 0:未被唤醒
|
||
|
||
}bits;
|
||
}Bflag2; //系统标志寄存器2 只能进行写0错做
|
||
/////////////////////////////////////////////////////////
|
||
union
|
||
{
|
||
u8 datas;
|
||
struct
|
||
{
|
||
u8 WDT1_0 :2; //看门狗溢出时间控制位
|
||
/*
|
||
WDT[1-0]=00:看门狗溢出时间为32S;
|
||
WDT[1-0]=01:看门狗溢出时间为16S;
|
||
WDT[1-0]=10:看门狗溢出时间为8S;
|
||
WDT[1-0]=11:看门狗溢出时间为4S;
|
||
*/
|
||
}bits;
|
||
}Rststat;
|
||
//////////////////////////////////////////////////////////
|
||
}RAM_Revdata;
|
||
|
||
|
||
|
||
}Data_309buf;
|
||
|
||
|
||
/*变量声明*/
|
||
extern Data_309buf data_309_A; //主309相关数据 最多16串数据
|
||
extern Data_309buf data_309_B; //副309相关数据 最多16串数据
|
||
|
||
|
||
/*获取309数据*/
|
||
extern void RevResData(u8 num);
|
||
|
||
#endif
|