LWL/MDK-ARM/user/inc/SH367309.h~RF13b77049.TMP
youxianghua faacc7b570 提交
2024-07-10 14:01:39 +08:00

1353 lines
51 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef SH367309_H
#define SH367309_H
#include "stm32f10x.h"
/*
*注意寄存器地址范围 有两种存储方法 1EEPROM 寄存器 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 且UVUVR
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 且UVUVR
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