电池包通信协议 网上找的

系统通讯协议
版本:V09
日期:2022-12-06 1、声明
此通讯协议针对普通串口通信项目,总体规划和控制规则符合《电池包/控制器/充电器
PCBA 方案》。
2、通讯协议
2.1 通用规则
通讯接口采用非隔离的半双工 UART(异步串行收发)通讯方式,二进制格式。通讯为主从
的连接方式,电池组的通讯为从机通讯。
2.2 串行通讯参数
控制器与电池通讯:波特率是 9600bps,8bit 数据位,无校验位,1bit 停止位。
充电器与电池通讯:波特率是 9600bps,8bit 数据位,无校验位,1bit 停止位。
2.3 数据帧格式(控制器与充电器为主机、电池为从机)
通讯数据帧包含起始标识、地址标识、通讯命令、数据长度、数据内容、校验数据
(CRC)、结束标识等 7 部分组成。其中:
起始标识:单字节,内容为 0x3A,为固定值;
地址标识:双字节,用于识别充电控制/放电控制/电池包,电池包地址标识 0x0306, 放电
制地址标识 0x0A05,充电控制地址标识 0x050A;
通讯命令:单字节,详细见描述;
数据长度: 双字节,内容为该通讯数据帧内数据缓冲区内的数据长度。主机发送数据时,
如无特别命令要求,建议设置为 0;
数据内容:多字节,内容为具体各个命令对应的数据字节,字节数是不固定的,数量由数
据长度部分的数值确定。主机发送数据时,如果数据长度为 0,此部分省略;
校验数据(CRC):两字节,内容为通讯数据的校验数据(CRC 模式),包括起始标识、从地
址标识、命令标识、数据长度、数据内容等内容的 CRC 校验数据,低字节在前,高字节在
后;
结束标识:两字节,内容为结束标识 1(为固定值 0x0D)和结束标识 2(为固定值
0x0A)。
2.4 控制器发送数据帧示例说明
2.4.1 放电控制器从机发送读取命令的数据帧(十六进制)为:
3A 0A 05 55 00 02 00 00 C4 F9 0D 0A。其中:
3A——为起始标识,单字节,为固定值;
0A 05——为地址标识,双字节,代表控制器放电地址编码; 55——为通讯命令,55 为正常放电;
00 02——为数据长度,双字节,代表该通讯数据帧内数据缓冲区内的数据长度;
00——预留
00——数据内容,单字节表示主控状态字
Bit7 表示系统输入输出状态,1 表示控制系统输入输出已关断,0 表示控制系统有输入输
Bit6-Bit5:预留
Bit4:系统关 PACK 标志位,正常为 0,1 表示系统要关 PACK 输入输出
Bit3:系统屏显状态位,1 系统处于亮屏,0 系统处于灭屏
Bit2 :边充边放标志位,1 系统处于边充边放状态,0 系统无边充边放
Bit1 :系统放电标志位,1 系统在放电,0 系统无放电
Bit0 : 系统充电标注位,1 系统在充电,0 系统无充电
C4 F9——为 CRC 校验和,两字节,低字节为 F9,高字节为 C4。校验和计算公式见
CRC 计算公式;
0D 0A——分别为结束标识 1 和结束标识 2,两字节,为固定值。
2.4.2 从机(电池 BMS 保护板)返回数据帧示例说明
从机接收到命令后返回(十六进制)数据为:
3A 06 03 55 00 0B 50 00 00 14 41 13 B0 7C 18 FF 00 F9 14 0D 0A。其中:
3A——为起始标识,单字节,为固定值;
06 03——为地址标识,双字节,代表电池组地址编码;
55——为通讯命令,单字节;
00 0B——为数据长度,双字节,代表该通讯数据帧内数据缓冲区内的数据长度;
50-------该字节标识电池包容量,分别率为 0.5AH,0x50 表示电池包容量为 40AH;
00-------该字节表示电池包状态字 1,00 表示电池包允许正常充放电,非 0 状态表示电池
包异常,具体信息参考电池包状态字 1。
00-------该字节表示电池包状态字 2,具体信息参考电池包状态字 2 详解。
14-------电池 SOC 位,分辨率 1%,14 对应剩余容量 20%;
41-------该字节表示电池包电芯温度,分辨率为 1℃,偏移值 40,例如 0x41 表示 65-
40=25℃;
13 B0----电池总压,用 16 位表示,分辨率位 10mV,13 B0 对应十进制 5040 即电池总
压位 50.4V;
7C 18----电池系统电流,偏移值 32768,大于 32768 为充电状态电流,小于大于 32768
为放电状态电流,分辨率 10mA,例如 7c 18 对应 31768 即系统放电电流为 10A(32768 – 31768 = 1000,1000 *10mA= 10A); 83 E0 对应 33768 即系统充电电流为 10A(33768 –
32768 = 1000,1000 *10mA= 10A);
FF——系统处于放电时,该字节可忽略,系统充电时,参考充电模式对该字节定义;
00——单字节,表示系统电池组状态
Bit7 表示切包标志位,1 表示要切包,0 表示不切包;
Bit6:1 表示主控关 PACK,0 表示 PACK 正常工作;(此位只针对从机显示屏模块)
Bit5:亮屏标志位,1 亮屏,0 灭屏;(此位只针对从机显示屏模块)
Bit4:表示 SLAVE2 在位;
Bit3:表示 SLAVE1 在位;
Bit2~Bit0 : 01 表示主包在工作,02 表示 SLAVE1 在工作,0x04 表示 SLAVE2 在工作;
F9 14——CRC 校验和,两字节,低字节为 14,高字节为 F9。校验和计算公式见 CRC 计算
公式;
0D 0A——分别为结束标识 1 和结束标识 2,两字节,为固定值。
2.5 充电控制发送数据帧示例说明
2.5.1 充电控制向从机发送读取命令的数据帧(十六进制)为:
3A 05 0A 55 00 02 3C 00 2A 06 0D 0A。其中:
3A——为起始标识,单字节,为固定值;
05 0A——为地址标识,双字节,代表充电器地址编码;
55——为通讯命令,55 为正常充电;
00 02——为数据长度,双字节,代表该通讯数据帧内数据缓冲区内的数据长度;
3C——数据内容,单字节表示充电器最大可输出充电电流,分辨率为 0.2A,数据十六进
制 3C 表示充电器最大输出充电电流 12A;
00——数据内容,单字节表示主控状态字
Bit7 表示系统输入输出状态,1 表示控制系统输入输出已关断,0 表示控制系统有输入输
Bit6-Bit5:预留
Bit4:系统关 PACK 标志位,正常为 0,1 表示系统要关 PACK 输入输出
Bit3:系统屏显状态位,1 系统处于亮屏,0 系统处于灭屏
Bit2 :边充边放标志位,1 系统处于边充边放状态,0 系统无边充边放
Bit1 :系统放电标志位,1 系统在放电,0 系统无放电
Bit0 : 系统充电标注位,1 系统在充电,0 系统无充电
2A 06——CRC 校验和,两字节,低字节为 06,高字节为 2A。校验和计算公式见 CRC
计算公式; 0D 0A——分别为结束标识 1 和结束标识 2,两字节,为固定值。
2.5.2 从机(电池 BMS 保护板)返回数据帧示例说明
从机接收到命令后返回(十六进制)数据为:
3A 06 03 55 00 0B 50 00 00 14 41 13 B0 83 E0 3C 80 19 A1 0D 0A。其中:
3B——为起始标识,单字节,为固定值;
06 03——为地址标识,双字节,代表电池组地址编码;
55——为通讯命令,单字节;
00 0B——为数据长度,双字节,代表该通讯数据帧内数据缓冲区内的数据长度;
50-------该字节标识电池包容量,分别率为 0.5AH,0x50 表示电池包容量为 40AH;
00-------该字节表示电池包状态字 1,00 表示电池包允许正常充放电,非 0 状态表示电池
包异常,具体信息参考电池包状态字 1。
00-------该字节表示电池包状态字 2,具体信息参考电池包状态字 2 详解。
14-------电池 SOC 位,分辨率 1%,14 对应剩余容量 20%;
41-------该字节表示电池包电芯温度,分辨率为 1℃,偏移值 40,例如 0x41 表示 65-
40=25℃;
13 B0----电池总压,用 16 位表示,分辨率位 10mV,13 B0 对应十进制 5040 即电池总
压位 50.4V;
83 E0----电池系统电流,偏移值 32768,大于 32768 为充电状态电流,小于大于 32768
为放电状态电流,分辨率 10mA,例如 83 E0 对应 33768 即系统充电电流为 10A(33768 –
32768 = 1000,1000 *10mA= 10A);7c 18 对应 31768 即系统放电电流为 10A(32768 –
31768 = 1000,1000 *10mA= 10A);
3C——电池系统需要充电器输出的电流值,分辨率为 0.2A,3C 表示电池系统需要充电系
统输出的电流为 12A,当电池系统发送充电保护标志位时,中控系统忽略此数值;
80——单字节,表示系统电池组状态
Bit7 表示切包标志位,1 表示要切包,0 表示不切包;
Bit6:1 表示主控关 PACK,0 表示 PACK 正常工作;(此位只针对从机显示屏模块)
Bit5:亮屏标志位,1 亮屏,0 灭屏; (此位只针对从机显示屏模块)
Bit4:表示 SLAVE2 在位;
Bit3:表示 SLAVE1 在位;
Bit2~Bit0 : 01 表示主包在工作,02 表示 SLAVE1 在工作,0x04 表示 SLAVE2 在工作;
19 A1——CRC 校验和,两字节,低字节为 A1,高字节为 19。校验和计算公式见 CRC
计算公式;
0D 0A——分别为结束标识 1 和结束标识 2,两字节,为固定值。 2.6 读软件版本指令
主控发送:3A 03 06 AB 00 00 30 29 0D 0A
从机响应:3A 06 03 AB 00 14 00 00 00 01 FF 00 00 00 20 22 09 24 FF FF FF FF FF
FF FF FF 23 6A 0d 0a
如上标注红色字节 ( 第十二个字节 ) BMS 软件版本, 00 表示版本为 V00
3、电池包状态字说明
3.1 状态字 1 说明
OV
(bit7)
UV
(bit6)
OT
(bit5)
UT
(bit4)
OC
(bit3)
UB
(bit2)
ALERT
(bit1)
AFE
(bit0)
OV:此位为电池包充满标志位,充电器接收到此位置 1 后,切断充电回路,充电截止;
工具板控制器无需关注此位
UV:此位为电池包过放标志位,控制器接收到此位置 1 后,切断放电回路,放电截止,充
电器无需关注此位。
OT:高温状态位,控制器接收到此位置 1 后,控制器必须切断放电回路,停止放电输出;
充电器接收到此位置 1 后,关闭充电输出,等待温度恢复,此标志位重新清 0 后,充电器打开
充电回路。
UT:低温状态位,控制器接收到此位置 1 后,控制器必须切断放电回路,停止放电输出;
充电器接收到此位置 1 后,关闭充电输出,等待温度恢复,此标志位重新清 0 后,充电器打开
充电回路。
OC:此位为电流过流标志位,此位为置 1 后,控制器必须切断放电回路,停止输出;充
电器接收到此位置 1 后,必须切断充电回路,停止输出;
UB:此位为电池包预留位,充电器和控制器无需关注
ALERT:此位置 1,表示电池包有故障,控制器和充电器必需停止输出。
AFE:此位为电池包预留位,充电器和控制器无需关注。
3.2 状态字 2 说明
OV
(bit7)
UV
(bit6)
OT
(bit5)
UT
(bit4)
OC
(bit3)
MOS_
ON
(bit2)
MOT
(bit1)
SOC
(bit0)
OV:此位为电池包过充预警标志位,置 1 表示出现过充预警;
UV:此位为电池包过放预警标志位,置 1 表示出现过放预警;
OT:高温预警标志位,充电时,置 1 表示电池系统出现充电过温预警;放电时,置 1 表
示电池系统出现放电高温预警; UT:低温预警状态位,充电时,置 1 表示电池系统出现充电低温预警;放电时,置 1 表
示电池系统出现放电低温预警;
OC:此位为电流过流预警标志位,充电时,置 1 表示电池系统出现充电过流预警;放电
时,置 1 表示电池系统出现放电电流预警;
MOS_ON:主回路 MOS 开启成功标志位
MOT:此位为系统 MOS 过温预警位;
SOC:SOC 调整标志位,此位为 1 时,输入显示功率按最大功率显示;
4、通信机制
充电器、控制器作为主机,电池包作为从机。系统主机要放电时,控制系统作为主机给电
池包发送指令,电池包接收到指令后,在 50MS 内回复电池包状态给控制器,控制器根据电池
包状态字判断电池包是否处于良好放电状态,如果状态字 1 报异常则控制器不允许输出。同
理,系统主机要充电时,主机给电池包发送指令,电池包接收到指令后,在 50MS 内回复电池
包状态给系统主机,系统主机根据电池包状态字判断电池包是否处于良好充电状态,如果状态
字 1 报异常则充电器不允许充电。
主机发送指令时间间隔为 200MS,即每 200ms 发送查询电池包状态指令,电池包接收到
指令后,在 50MS 内回复电池包状态。
主机连续发送指令,从机不回复或者主机接收到的帧指令校验异常累计时间超过 5S,则
主机可以停止输出;同理,如果从机连续 5S 接收不到主机读指令或者接收到的指令有异常,
则从机进入休眠。
当电池包异常不允许继续工作时,电池包在接收到主机的读指令后,回复相应的状态字
1 异常代码(详见电池包状态字 1),主机接收到指令后停止输出;同理,如果主机有异常或
需要关机,主机可发送系统关机指令。
6、CRC 校验公式
static const uint8_t u8CRCHTalbe[] =
{
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40
};
static const uint8_t u8CRCLTalbe[] =
{
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,
0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E,
0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9,
0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC,
0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32,
0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D,
0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38,
0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF,
0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1,
0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4,
0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA,
0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,
0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97,
0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E,
0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89,
0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,
0x41, 0x81, 0x80, 0x40
};
/*****************************************************************************************
******************************
* Function Name: Crc16Calculate
* Description : the function is used to crc16 calculate
* Arguments : data point, crc count nummber
* Return Value : crc value
******************************************************************************************
*****************************/
uint16_t Crc16Calculate (uint8_t *pu8crc_buf, const uint16_t u16crc_count)
{
uint16_t u16Index;
uint16_t u16CRCHi = 0xFF;
uint16_t u16CRCLo = 0xFF;
uint16_t i;
for(i = 0; i < u16crc_count; i++)
{
u16Index = u16CRCLo ^ pu8crc_buf[i];
u16CRCLo = u16CRCHi ^ u8CRCHTalbe[u16Index];
u16CRCHi = u8CRCLTalbe[u16Index]; }
return ((u16CRCLo << 8) | u16CRCHi) ;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值