350 lines
9.1 KiB
C
350 lines
9.1 KiB
C
/*
|
||
*文件描述
|
||
|
||
*CRC校验范围:模块类别-CRC校验前的一个字节
|
||
|
||
*低字节先发送原则
|
||
|
||
*通信参数:9600,N,8,1
|
||
*协议中的模块序号是BMS的地址,需与上位机的配置一致,范围1-254 出厂默认值为0x01
|
||
*/
|
||
|
||
|
||
#ifndef __GPS2_H
|
||
#define __GPS2_H
|
||
|
||
#include "stm32f10x.h"
|
||
|
||
|
||
/*****************************************宏定义*************************************************/
|
||
#define GPSFRAME_HAND 0x7e //帧头
|
||
#define GPSMOD_TYPE 0x0a //模块类别
|
||
#define GPSMOD_NUM 0x01 //模块序号
|
||
|
||
#define GPSCOMMOND_0x30 0x30 //信息查询
|
||
#define GPSCOMMOND_0x40 0x40 //参数读取
|
||
#define GPSCOMMOND_0x41 0x41 //参数下发
|
||
#define GPSCOMMOND_0x50 0x50 //恢复出厂设置
|
||
#define GPSCOMMOND_0x51 0x51 //配置新地址
|
||
#define GPSCOMMOND_0x62 0x62 //电流校准
|
||
#define GPSCOMMOND_0x63 0x63 //获取UUID
|
||
#define GPSCOMMOND_0x22 0x22 //开关放电MOS管
|
||
#define GPSCOMMOND_0x23 0x23 //开关充电MOS管
|
||
|
||
/*帧格式*/
|
||
typedef struct
|
||
{
|
||
u8 Framehand; //帧头
|
||
u8 ModeType; //模块类别
|
||
u8 ModeNum; //模块序号
|
||
u8 Len_L; //报文长度低字节 只描述数据体
|
||
u8 Len_H; //报文长度高字节
|
||
u8 Commond; //命令
|
||
u8 ModeWord; //模块工作状态 0 停止均衡 1-15通道号 254自由均衡
|
||
u8 Data[130]; //数据体
|
||
u8 CRC_L; //CRC低字节
|
||
u8 CRC_H; //CRC高字节
|
||
}data_Gps;
|
||
|
||
|
||
/*接收GPS的数据缓存*/
|
||
typedef struct
|
||
{
|
||
u8 gps_Rev_startss; //接收一帧数据完成标志位
|
||
u8 gps_Rev_bufss[100]; //数据缓存
|
||
u16 gps_Rev_buftmpss; //数据索引
|
||
}Rev_Gps;
|
||
|
||
|
||
/*数据*/
|
||
typedef struct
|
||
{
|
||
union
|
||
{
|
||
u8 data[120];
|
||
struct //分辨率1mv 未使用置0xFFFF
|
||
{
|
||
u8 Singcellvol_1_l; //单体电压1低字节
|
||
u8 Singcellvol_1_h; //单体电压1高字节
|
||
u8 Singcellvol_2_l;
|
||
u8 Singcellvol_2_h;
|
||
u8 Singcellvol_3_l;
|
||
u8 Singcellvol_3_h;
|
||
u8 Singcellvol_4_l;
|
||
u8 Singcellvol_4_h;
|
||
u8 Singcellvol_5_l;
|
||
u8 Singcellvol_5_h;
|
||
u8 Singcellvol_6_l;
|
||
u8 Singcellvol_6_h;
|
||
u8 Singcellvol_7_l;
|
||
u8 Singcellvol_7_h;
|
||
u8 Singcellvol_8_l;
|
||
u8 Singcellvol_8_h;
|
||
u8 Singcellvol_9_l;
|
||
u8 Singcellvol_9_h;
|
||
u8 Singcellvol_10_l;
|
||
u8 Singcellvol_10_h;
|
||
u8 Singcellvol_11_l;
|
||
u8 Singcellvol_11_h;
|
||
u8 Singcellvol_12_l;
|
||
u8 Singcellvol_12_h;
|
||
u8 Singcellvol_13_l;
|
||
u8 Singcellvol_13_h;
|
||
u8 Singcellvol_14_l;
|
||
u8 Singcellvol_14_h;
|
||
u8 Singcellvol_15_l;
|
||
u8 Singcellvol_15_h;
|
||
u8 Singcellvol_16_l; //单体电压16低字节
|
||
u8 Singcellvol_16_h; //单体电压16高字节
|
||
u8 Singcellvol_17_l;
|
||
u8 Singcellvol_17_h;
|
||
u8 Singcellvol_18_l;
|
||
u8 Singcellvol_18_h;
|
||
u8 Singcellvol_19_l;
|
||
u8 Singcellvol_19_h;
|
||
u8 Singcellvol_20_l;
|
||
u8 Singcellvol_20_h;
|
||
u8 Singcellvol_21_l;
|
||
u8 Singcellvol_21_h;
|
||
u8 Singcellvol_22_l;
|
||
u8 Singcellvol_22_h;
|
||
u8 Singcellvol_23_l;
|
||
u8 Singcellvol_23_h;
|
||
u8 Singcellvol_24_l;
|
||
u8 Singcellvol_24_h;
|
||
u8 Singcellvol_25_l;
|
||
u8 Singcellvol_25_h;
|
||
u8 Singcellvol_26_l;
|
||
u8 Singcellvol_26_h;
|
||
u8 Singcellvol_27_l;
|
||
u8 Singcellvol_27_h;
|
||
u8 Singcellvol_28_l;
|
||
u8 Singcellvol_28_h;
|
||
u8 Singcellvol_29_l;
|
||
u8 Singcellvol_29_h;
|
||
u8 Singcellvol_30_l;
|
||
u8 Singcellvol_30_h;
|
||
u8 Singcellvol_31_l;
|
||
u8 Singcellvol_31_h;
|
||
u8 Singcellvol_32_l;
|
||
u8 Singcellvol_32_h; //64
|
||
|
||
u8 tmp_1_l; //温度1低字节 分辨率:0.1℃ 负值最高位为1 未使用的置0x07d0
|
||
u8 tmp_1_h; //温度1高字节
|
||
u8 tmp_2_l; //温度2低字节
|
||
u8 tmp_2_h; //温度2高字节
|
||
u8 tmp_3_l; //温度3低字节
|
||
u8 tmp_3_h; //温度3高字节
|
||
u8 mostmp_l; //MOS温度低字节
|
||
u8 mostmp_h; //MOS温度高字节
|
||
u8 tmp_5_l; //温度5低字节
|
||
u8 tmp_5_h; //温度5高字节
|
||
u8 tmp_6_l; //温度6低字节
|
||
u8 tmp_6_h; //温度6高字节
|
||
u8 tmp_7_l; //温度7低字节
|
||
u8 tmp_7_h; //温度7高字节
|
||
u8 tmp_8_l; //温度8低字节
|
||
u8 tmp_8_h; //温度8高字节
|
||
u8 maxtmp_l; //最高温度低字节
|
||
u8 maxtmp_h; //最高温度高字节
|
||
|
||
u8 maxtmpnum; //最高温度序号
|
||
|
||
u8 mintmp_l; //最低温度低字节 分辨率:0.1℃ 负值最高位为1 未使用的置0x07d0
|
||
u8 mintmp_h; //最低温度高字节
|
||
|
||
u8 mintmpnum; //最低温度序号
|
||
|
||
u8 Singmaxvol_l; //单体最高电压低字节 1mv
|
||
u8 Singmaxvol_h; //单体最高电压高字节
|
||
|
||
u8 Singminvol_l; //单体最低电压低字节 1mv
|
||
u8 Singminvol_h; //单体最低电压高字节
|
||
|
||
u8 SumVol_1; //电池总电压 1 1mv
|
||
u8 SumVol_2; //电池总电压 2
|
||
u8 SumVol_3; //电池总电压 3
|
||
u8 SumVol_4; //电池总电压 4
|
||
|
||
u8 SumCurr_1; //电池组电流 1 1ma
|
||
u8 SumCurr_2; //电池组电流 2
|
||
u8 SumCurr_3; //电池组电流 3
|
||
u8 SumCurr_4; //电池组电流 4
|
||
|
||
u8 eQl_l; //额度容量低字节 0.1AH
|
||
u8 eQl_h; //额定容量高字节
|
||
|
||
u8 SOC_l; //SOC低字节 0.1%
|
||
u8 SOC_h; //SOC高字节 0.1%
|
||
|
||
u8 CellXHnum_l; //电池循环次数低字节
|
||
u8 CellXHnum_h; //电池循环次数高字节
|
||
|
||
u8 rjbb_l; //软件版本号低字节
|
||
u8 rjbb_h; //软件版本号高字节
|
||
|
||
u8 cellnum_l; //电池系列号低字节
|
||
u8 cellnum_h; //电池系列号高字节
|
||
|
||
u8 BMSerro_1; //告警字——1
|
||
u8 BMSerro_2; //告警字——2
|
||
u8 BMSerro_3; //告警字——3
|
||
u8 BMSerro_4; //告警字——4
|
||
/*
|
||
0位:超压 1位:欠压 2位:放电超温 3位:放电低温
|
||
4位:充电超温 5位:充电低温 6位:放电过流;7位:放电短路
|
||
8位:充电过流:9位:容量过低:13位MOS温度过高
|
||
*/
|
||
|
||
u8 jhnum_1; //均衡通道号1
|
||
u8 jhnum_2; //均衡通道号2
|
||
u8 jhnum_3; //均衡通道号3
|
||
u8 jhnum_4; //均衡通道号4
|
||
|
||
u8 maxsingnum; //最高单体序号
|
||
u8 minsingnum; //最低单体序号
|
||
|
||
u8 OutMOS; //放电MOS管状态
|
||
u8 ChgMOS; //充电MOS管状态
|
||
|
||
}data_Query;
|
||
}data_Querysss; //信息查询
|
||
|
||
|
||
union
|
||
{
|
||
u8 data[75];
|
||
struct //分辨率1mv 未使用置0xFFFF
|
||
{
|
||
u8 Overvol_l; //超压保护门限低字节 1mv
|
||
u8 Overvol_h; //超压保护门限高字节
|
||
u8 Overvoltime; //超压保护延时 s
|
||
u8 Qvol_l; //欠压保护门限低电压 1mv
|
||
u8 Qvol_h; //欠压保护门限高电压
|
||
u8 Qvoltime; //欠压保护延时
|
||
|
||
u8 JHON_Vol_l; //均衡开启电压低字节
|
||
u8 JHON_Vol_h; //均衡开启电压高字节
|
||
u8 JHON_yc_l; //均衡开启压差低字节
|
||
u8 JhON_yc_h; //均衡开启压差高字节
|
||
|
||
u8 cyzuz_l; //采样电阻阻值低字节
|
||
u8 cyzuz_h; //采样电阻阻值高字节
|
||
|
||
u8 OutcurrG_l; //放电过流保护门限低字节 0.1A
|
||
u8 OutcurrG_h; //放电过流保护门限高字节
|
||
u8 Outcurrtime_l; //放电过流保护延时低字节 s
|
||
u8 Outcurrtime_h; //放电过流保护延时高字节
|
||
|
||
u8 Outdl_l; //放电短路保护门限低字节 1mv
|
||
u8 Outdl_h; //放电短路保护门限高字节
|
||
u8 Outdltime_l; //放电短路保护延时低字节
|
||
u8 Outdltime_h; //放电短路保护延时高字节
|
||
u8 ChgcurrG_l; //充电过流保护门限低字节 mv
|
||
u8 ChgcurrG_h; //充电过流保护门限高字节
|
||
u8 Chgcurrtime;//充电过流恢复延时s
|
||
|
||
u8 OutCtmp_l; //放电超温保护温度低字节 0.1
|
||
u8 OutCtmp_h; //放电超温保护温度高字节
|
||
u8 OutCHtmp_l; //放电超温恢复温度低字节 0.1
|
||
u8 OutCHtmp_h; //放电超温恢复温度高字节
|
||
u8 OutDtmp_l; //放电低温保护温度低字节 0.1
|
||
u8 OutDtmp_h; //放电低温保护温度高字节
|
||
u8 OutDHtmp_l; //放电低温恢复温度低字节 0.1
|
||
u8 OutDHtmp_h; //放电低温恢复温度高字节
|
||
|
||
u8 ChgCtmp_l; //充电超温保护温度低字节 0.1
|
||
u8 ChgCtmp_h; //充电超温保护温度高字节
|
||
u8 ChgCHtmp_l; //充电超温恢复温度低字节 0.1
|
||
u8 ChgCHtmp_h; //充电超温恢复温度高字节
|
||
u8 ChgDtmp_l; //充电低温保护温度低字节 0.1
|
||
u8 ChgDtmp_h; //充电低温保护温度高字节
|
||
u8 ChgDHtmp_l; //充电低温恢复温度低字节 0.1
|
||
u8 ChgDHtmp_h; //充电低温恢复温度高字节
|
||
|
||
u8 SjRL_l; //设计容量低字节
|
||
u8 SjRL_h; //设计容量高字节
|
||
|
||
u8 SyRL_l; //剩余容量低字节
|
||
u8 SyRL_h; //剩余容量高字节
|
||
|
||
u8 FCC_l; //FCC低字节
|
||
u8 FCC_h; //FCC高字节
|
||
|
||
u8 Statebit; //学习标志位
|
||
u8 bhrl; //保护容量百分比
|
||
u8 znum; //电池总串数
|
||
|
||
u8 RSNS_VALUE; // 0
|
||
|
||
u8 CvolH_l; //超压恢复电压低字节
|
||
u8 CvolH_h; //超压恢复电压高字节
|
||
|
||
u8 QvolH_l; //欠压恢复电压低字节
|
||
u8 QvolH_h; //欠压恢复电压高字节
|
||
|
||
u8 CBvol_l; //查表电压低字节
|
||
u8 CBvol_h; //查表电压高字节
|
||
|
||
u8 Sleeptime_l; //休眠延时低字节
|
||
u8 Sleeptime_h; //休眠延时高字节
|
||
|
||
u8 HXCurr_l; //唤醒电流低字节
|
||
u8 HXCurr_h; //唤醒电流高字节
|
||
|
||
u8 erGcurr_l; //二级过流保护低字节
|
||
u8 erGcurr_h; //二级过流保护高字节
|
||
|
||
u8 erGcurrtime_l; //二级过流保护延时低字节
|
||
u8 erGcurrtimr_h; //二级过流保护延时高字节
|
||
|
||
u8 ChgGcurr; //充电过流保护延时
|
||
|
||
u8 AFE1; //AFE1串数
|
||
u8 AFE2; //AFE2串数
|
||
|
||
u8 celltype; //电芯类型
|
||
|
||
u8 MOSCtmp_l; //MOS超温保护低字节 0.1度
|
||
u8 MOSCtmp_h; //MOS超温保护高字节
|
||
u8 MOSCHtmp_l; //MOS超温恢复低字节 0.1度
|
||
u8 MOSCHtmp_h; //MOS超温恢复高字节
|
||
|
||
u8 LDcurr_l; //漏电流低字节
|
||
u8 LDcurr_h; //漏电流高字节
|
||
|
||
u8 SleepLDcurr_l; //睡眠漏电流低字节 MA
|
||
u8 SleepLDcurr_h; //睡眠漏电流高字节 MA
|
||
|
||
}data_RevWrite;
|
||
}data_RevWritesss; //参数读取写入
|
||
|
||
|
||
struct
|
||
{
|
||
u8 addrdata; //模块地址
|
||
}Addr;
|
||
|
||
struct
|
||
{
|
||
u8 step; //0为电流0偏校准 4为二次零偏校准
|
||
u32 currjzz; //校准值 ma
|
||
}CurrJZ; //电流校准
|
||
|
||
struct
|
||
{
|
||
u8 uuid[12];
|
||
}UUID; //UUID
|
||
|
||
}gpss_datas;
|
||
|
||
|
||
/*定义全局变量*/
|
||
extern Rev_Gps Rev_GpsUsart1; //接收串口下传的数据
|
||
|
||
extern gpss_datas gps_datas; //GPS相关内容
|
||
|
||
extern unsigned char UUID[12];
|
||
|
||
#endif
|