BMS开发板从机采集板,从零开始学习

LTC6804/6811 STM32驱动程序如下

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);
	}
}
void Get_BQ_Current(void)           //计算电流        这里应该做滤波,取一段时间内的数据,做平滑滤波      2.5	V	基准
{
	uint32_t  temp = 0;
	//**********************电流计算*************************
	/*
	INA282固定增益G=50。REF=2.5V因此
	Vout=(Isense x Rshunt x 50)+ 2.5V
	*/
	static int state_i =10;
	curren_mA = (aux_codes[0][0]);
	//curren_mA = (25000 - curren_mA) ;       //REF3225 2.5V基准    实际基准电压误差 = (2.5-2.4964)/2.5 = 0.144%
	//curren_mA = (30000 - curren_mA) ;       //VREF2 3V基准    
	//curren_mA = (3*5 - curren_mA/10000*5)*1000 ;       //VREF2 3V基准    Vout=3V-(Isense x 0.004 x 50)    Isense(A) = (Vout - 3)/0.2 = 15 - 5Vout   Isense(mA) =1000(15 - 5Vout)
	curren_mA = (3000/2 - curren_mA/20) ;   //0.04欧   3V基准
	//curren_mA = (2500/2 - curren_mA/20) ;   //0.04欧   2.5V基准
	if(state_i==10)     //剔除因卡尔曼滤波前期导致的异常数据
	{
		while(state_i--)
		{
		 //curren_mA = KalmanFilter_1ADC(curren_mA );   //原始数据经过卡尔曼滤波
		 //curren_mA = KalmanFilter_2ADC(curren_mA );   //原始数据经过卡尔曼滤波
	   //curren_mA  = MovMiddle((uint16_t)curren_mA);             //中值滤波
			curren_mA = filter((uint16_t)curren_mA);      //中位值平均滤波法(防脉冲干扰平均滤波法)
		}
	}
//	if(abs((int)curren_mA)<10)curren_mA=0;        //取绝对值,小电流忽略不计
	temp = abs((int)curren_mA);      //取绝对值  上位机不支持显示有符号
	shang[36]=(uint32_t)temp>> 8;     //无符号  上位机不支持显示有符号
	shang[37]=(uint32_t)temp & 0X00FF;
	
//	shang[36]=(uint32_t)curren_mA >> 8;     //无符号  上位机不支持显示有符号
//	shang[37]=(uint32_t)curren_mA & 0X00FF;
	can_buf6[6]=(char)shang[36];
	can_buf6[7]=(char)shang[37];
}

以上内容均已经在开发板上实现
采集板带电源隔离/SPI隔离通信方案
程序移植,调试,测试均可以。
程序采用STM32F103 用SPI驱动
从机采集板
两个6S电池盒串联  外加从机采集板行程从控+动力电池
正点原子精英版作为主控 通过SPI读取LTC6804  采集12S电池盒的数据
提供技术指导,楼主是搞技术的所以互相学习互相进步

实现的功能: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、可以增加无线通信,将数据通过无限模块上传到上位机;
持续更新:20231223
资料:测试上位机,采集源码(主控STM32F103 SPI通信),原理图,BOM,源码解析,电量soc算法代码及解析,断线检测代码及解析等等
作者热心详细解答技术问题
注:学习技术交流使用,个人版权,未经授权不允许商用!
在这里插入图片描述

  • 37
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛溪之恋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值