资源简介
电池管理系统BMS项目,包括电路图设计,PCB板设计和源代码,电路经过验证无需修改,PCB板直接可以打板回贴片生产,源代码无Bug,已经量产出货
代码片段和文件信息
#include “LTC6803.h“
//LTC6803初始化
void LTC6803_Init (void)
{
byte i=0;
byte ret=0;
uint8_t pec=0;
uint8_t CFGR[6]={0x890x000x000x000x000xff};
uint8_t CFGR_Buff[14]={0};
SPI_CS12V_PutVal(0); //片选置低
ret=AD12V_SPI_SendChar(WRCFG);//发送写命令
delay100(10);
ret=AD12V_SPI_SendChar(0xC7);//发送校验码
delay100(10);
pec=CRC8(CFGR6); //计算校验
for(i=0;i<6;i++) //写入配置
{
ret=AD12V_SPI_SendChar(CFGR[i]);
delay100(10);
}
ret=AD12V_SPI_SendChar(pec); //发送校验码
delay100(10);
SPI_CS12V_PutVal(1); //片选置高
delay100(1200);
SPI_CS12V_PutVal(0); //片选置低
ret=AD12V_SPI_SendChar(0x02); //发送读命令
delay100(10);
ret=AD12V_SPI_SendChar(0xce); //发送校验
delay100(10);
for(i=0;i<14;i++)
{ //读取寄存器
ret=AD12V_SPI_SendChar(0x00); //提供时钟信号
delay100(10);
ret=AD12V_SPI_RecvChar(&CFGR_Buff[i]); //读取寄存器值放入缓存区
delay100(10);
}
SPI_CS12V_PutVal(1); //片选置高
delay100(10);
}
//计算PEC校验
uint8_t CRC8(uint8_t *buf int8_t len)
{
uint16_t ij=0;
uint8_t crc = 0x41;
while(len--!=0)
{
for(i= 0x80;i!=0;i/=2)
{
if ((crc & 0x80)!=0)
{
crc *= 2;
crc ^= 0x07;
}
else crc *= 2;
if ((*(buf+j) & i)!=0)
crc^=0x07;
}
j++;
}
return crc;
}
//读取电压值
uint8_t ReadCellVoltage(uint16_t cellVol[])
{
uint8_t i=0;
uint8_t ret=0;
uint8_t pec_code=0;
uint8_t CVR[7]={0};
uint16_t SPI_Data[8];
SPI_CS12V_PutVal(0); //片选置低
ret=AD12V_SPI_SendChar(CLRV); //清空命令
delay100(10);
ret=AD12V_SPI_SendChar(0x93); //清空命令PEC校验码
delay100(1200); //延时20ms
SPI_CS12V_PutVal(1); //片选置高
delay100(10);
SPI_CS12V_PutVal(0); //片选置低
ret=AD12V_SPI_SendChar(STCVAD); //启动全部电压转换
ret=AD12V_SPI_SendChar(RDCVA);
delay100(10);
ret=AD12V_SPI_SendChar(0xB0); //启动电压转换命令PEC校验码
delay100(3600); //延时20ms
SPI_CS12V_PutVal(1); //片选置高
delay100(10);
SPI_CS12V_PutVal(0); //片选置低
ret=AD12V_SPI_SendChar(RDCVA);
delay100(10);
ret=AD12V_SPI_SendChar(0xD2); //启动电压转换命令PEC校验码
delay100(10);
for(i=0;i<7;i++) //将读出的数值赋给电池电压寄存器组10节电池+校验码
{
ret=AD12V_SPI_SendChar(0x00);
delay100(10);
ret=AD12V_SPI_RecvChar(&CVR[i]);
delay100(10);
}
SPI_CS12V_PutVal(1); //片选置高
//参数校验
pec_code=CRC8(CVR6);
if(pec_code!=CVR[6])
{
return 0;
}
else
{
//将电池电压寄存器组转化成实际的电池电压值3个寄存器对应两个电池电压值
AD_Data_process(SPI_DataCVR);
for(i=0;i {
cellVol[i]=(SPI_Data[i]-512)*3/2;
}
return 1;
}
}
//电压计算
void AD_Data_process
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2461696 2014-12-23 23:10 BMS项目\BMU\21182w-BMUPCB20150126\BMUPCB.PcbDoc
文件 6951 2015-09-01 14:49 BMS项目\BMU\21182w-BMUPCB20150126\BMUPCB.PCBDOC.htm
文件 3189 2015-09-01 19:47 BMS项目\BMU\21182w-BMUPCB20150126\BMUPCB.pcbdoc_viewstate
文件 675760 2015-01-26 11:43 BMS项目\BMU\21182w-BMUPCB20150126.rar
文件 2340864 2015-08-20 14:00 BMS项目\BMU\BMU PCB板.PCBDOC
文件 7620 2015-08-04 10:51 BMS项目\BMU\BMUPCB.Dat
文件 4560 2019-08-21 18:35 BMS项目\BMU\BMUPCB.PcbDoc.htm
文件 3188 2015-09-01 14:48 BMS项目\BMU\BMUPCB.pcbdoc_viewstate
文件 2041360 2015-01-30 11:15 BMS项目\BMU\BMU原理图.pdf
文件 750154 2015-08-20 14:00 BMS项目\BMU\History\BMUPCB.~(1).PCBDOC.Zip
文件 1818112 2015-01-25 18:32 BMS项目\LECU\21182w-LECU20150126\LECU-CPU.PcbDoc
文件 1428038 2015-01-29 12:31 BMS项目\LECU\BMS_LECU_N.pdf
文件 6092 2015-08-04 10:49 BMS项目\LECU\LECU-CPU.Dat
文件 1818112 2015-01-25 18:32 BMS项目\LECU\LECU-CPU.PcbDoc
文件 3842 2019-05-10 09:32 BMS项目\LECU\LECU-CPU.PcbDoc.htm
文件 3179 2015-09-08 14:10 BMS项目\LECU\LECU-CPU.pcbdoc_viewstate
文件 4445 2018-01-13 14:13 BMS项目\软件\LTC6803.c
文件 999 2018-01-13 14:13 BMS项目\软件\LTC6803.h
文件 25119 2017-12-29 09:28 BMS项目\软件\LTC6804.c
文件 9588 2017-12-27 14:51 BMS项目\软件\LTC6804.h
目录 0 2019-08-21 18:34 BMS项目\BMU\21182w-BMUPCB20150126
目录 0 2019-08-21 18:34 BMS项目\BMU\History
目录 0 2015-09-08 20:37 BMS项目\BMU\ProjectOutputs
目录 0 2019-08-21 18:34 BMS项目\LECU\21182w-LECU20150126
目录 0 2019-08-21 18:38 BMS项目\BMU
目录 0 2019-08-21 18:37 BMS项目\LECU
目录 0 2019-08-21 18:52 BMS项目\软件
目录 0 2019-08-21 18:39 BMS项目
----------- --------- ---------- ----- ----
13412868 28
............此处省略1个文件信息
评论
共有 条评论