BMS开发板 /凌力尔特LTC6804/6811开发板BMS电池管理评估板/储能BMS采集板
BMS从机开发板 /凌力尔特LTC6804/6811开发板BMS从机电池管理评估板/储能BMS从机采集板
采集板带电源隔离/SPI隔离通信方案
最重要的事说三遍!!!
免费提供技术支持!!!
免费提供技术支持!!!
免费提供技术支持!!!
程序移植,调试,测试均可以。
程序采用STM32F103 用SPI驱动
售卖PCBA 调试功能正常 如图所示
如只需要资料或者想要开发板可私信楼主VX:xiaogao_bq
提供技术支持,楼主是搞技术的所以互相学习互相进步
功能:SPI/菊花链通信
1、电压采集功能(精度1mv以内,高精度四位半万用表测试结果)
2、GPIO1~5电压采集功能(INA282双向高精度电流采集,精度10ma)
3、辅助测量功能(总压,内部温度,内部基准电压等等)
4、断线自检功能(判断哪一节电池断线并输出故障电池节号)
5、电流采集功能(高精度双向电流采集芯片,软件集成卡尔曼滤波,中值滤波等滤波算法)
6、IIC(GPIO4-GPIO5)通信功能(使用LTC6804读写EEPROM----24C02,无需主控编程即可存储数据)可以用来保存采集板的配置信息。该方案网上资料无,独此一家开源
7、被动均衡功能(设置压差阈值并找出最高电压开启均衡)可设置0~1000mv任意值均衡
8、温度采集功能(精度0 .1°C)
9、有上位机,显示检测的数据,如图5(有通信协议说明)可以开源上位机;
10、可以增加无线通信,将数据通过无限模块上传到上位机;
11、可联系楼主配置一套充放电控制套装(增加充电器,充放电控制板,电子负载仪,若干线)
持续更新:20231223
资料:测试上位机,采集源码(主控STM32F103 SPI通信),原理图,BOM,源码解析,电量soc算法代码及解析,断线检测代码及解析等等
服务:作者热心详细解答技术问题
注:学习技术交流使用,个人版权,未经授权不允许商用!
部分代码如下
int main(void)
{
float temp[2] = {0};
u16 adcx;
float adc_v;
HSE_SetSysClock(RCC_PLLMul_9); //则设置系统时钟为:8MHZ * 9 = 72MHZ
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
LED_Init(); //LED端口初始化
KEY_Init(); //按键IO初始化
IO_CTRL_Config(); //系统的一些IO口设置;
Adc_Init(); //ADC初始化
uart_init(115200); //串口初始化为115200
CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_Normal);//CAN初始化环回模式,波特率500Kbps
LTC6804_initialize();//LTC6804初始化配置 标准模式 不允许放电 电压所有单元 GPIO所有通道
//SPI2_Init(); //硬件SPI
Simulated_SPI_IoInit(); //软件SPI
while(1)
{
LTC6804_adcv(); //Starts cell voltage conversion 开始电池电压转换
LTC6804_rdcv(0,cell_zu,cell_codes); //6804获取12节电池电压
Get_Cell_Voltage(); //获取电池电压四位整数 mv
Get_Cell_Voltage_Max_Min(); //最大电压、最小电压
Get_Update_ALL_Data(); //各项相加求总压 / 寄存器读取
Get_SOC(); //目前根据电压取SOC 后面根据电流积分法
Get_BQ_Current(); //电流检测
adow_test() ; //断线检测
BMS_STA(); //充放电状态检测
//***************温度***********************
temp[0] = Get_Tempture(aux_codes[0][1]);
temp[1] = Get_Tempture(aux_codes[0][2]);
shang[38]=temp[0];
can_buf7[2]=(char)shang[38];
Balance_task(300); //计算电池电压MAX 的标号并开启均衡 200mv 均衡开启阈值
charge_management(); //按键充放电,并检测过冲过放
RECEICE_DATA_DEAL(); //串口1接收上位机数据处理
Usart_Send_Array(USART1, shang,50); //TTL上传数据
CAN_SEND();
// adcx=Get_Adc_Average(ADC_Channel_5,10);
// printf(" ADC:%d\r\n",adcx); //打印ADC的值
// adc_v=(float)adcx*(3.3/4096);
// printf(" 电压值:%f V\r\n",adc_v); //打印电压值
LED0 = ~ LED0;
//printf("**************作者:小高霸气********************** \r\n");
delay_ms(100);
}
}
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!