Browse Source

V 2.3.0.30 在V2.3.0.29(温度检测,断开继电器)的基础上,新增充电控制,不允许电池充满

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
2a082f3711
2 changed files with 25 additions and 11 deletions
  1. 1 1
      inc/app.h
  2. 24 10
      src/UartTask.c

+ 1 - 1
inc/app.h

@@ -51,7 +51,7 @@ extern "C" {
 #define	BLSWVERSION		0x01020000    //BootLoader版本号V1.2.0.0
 #define	DRVSWVERSION		0x01050000     //驱动层版本号V1.4.0.0  驱动层1.5.0.0,增加了三轴
 //#define	APPSWVERSION		0x01020209     
-#define	APPSWVERSION		0x0203001C
+#define	APPSWVERSION		0x0203001E
 //#define	APPSWVERSION		0x0201000E
 //--------------------------------------------------------------------------------
 

+ 24 - 10
src/UartTask.c

@@ -166,21 +166,20 @@ static void UartTask(void* arg)
 						break;
 					}
                 }
-				if(maxCellVol>4400&&maxCellVol<6000)//继电器测试
+				if(maxCellVol>4400&&maxCellVol<6000)//过压断开继电器
 				{
 					AppDataInfo.RelayControl=TRUE;
 				}
-				else if(maxCellVol<4000)
-				{
-					AppDataInfo.RelayControl=FALSE;
-				} 
-				if(maxCellTemp>=90&&minCellTemp>=90&&battHeatEnableState==0x00&&MOSTemp>=120)//温度的判定需要加40摄氏度,如果模组最高>50度,模组最低>50度,mos温度>80度,并且加热关闭,持续超过10s,则断开继电器
+				if((maxCellTemp>=45+40)&&(minCellTemp>=45+40)&&(battHeatEnableState==0x00)&&(MOSTemp>=70+40))//温度的判定需要加40摄氏度,如果模组最高>=45度,模组最低>=45度,mos温度>=70度,并且加热关闭,持续超过10s,则断开继电器,锁定放电mos
 				{
 					heatErrorCounter++;
 					if(heatErrorCounter>100)
 					{
 						heatErrorCounter = 0;
+						AppDataInfo.appDataModify = TRUE;
+						AppNVMData.appDataModify = TRUE;
 						AppDataInfo.RelayControl=TRUE;
+						AppNVMData.isBattLocked = TRUE;
 						if(osOK==osMutexAcquire(Error_Mutex, 100))
 						{
 							UINT8 ErrorNumTemp = 20;
@@ -257,24 +256,39 @@ static void UartTask(void* arg)
 						break;
 					}
 				}
-				if(battWorkState ==0x00 && AppNVMData.isBattLocked==TRUE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03)!=0x02)//try to lock lock the discharge 
+				//限制充电测试
+				if((battSOC>=95)&&(battWorkState ==0x02)&&(((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x02)!=0x00))//try to lock lock the charge 
+				{
+					UartWriteData.WriteCmd = 0x01;
+					UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
+					UartWriteData.Data[1] = 0x00|((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x01);
+					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
+				}
+				else if((battSOC<=90)&&(((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x02)!=0x02))//try to unlock lock the charge 
+				{
+					UartWriteData.WriteCmd = 0x01;
+					UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
+					UartWriteData.Data[1] = 0x02|((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x01);
+					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
+				}
+				if((battWorkState ==0x00) && (AppNVMData.isBattLocked==TRUE) && (((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x01)!=0x00))//try to lock lock the discharge 
 				{
 					#ifdef USING_PRINTF
                         printf("[%d]try to lock:%X-%X\n",__LINE__,AppNVMData.isBattLocked,(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03);
                     #endif
 					UartWriteData.WriteCmd = 0x01;
 					UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
-					UartWriteData.Data[1] = 0x02;
+					UartWriteData.Data[1] = 0x00|((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x02);
 					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
 				}
-				else if (battWorkState ==0x00 && AppNVMData.isBattLocked==FALSE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03)!=0x03) // try to unlock
+				else if (battWorkState ==0x00 && AppNVMData.isBattLocked==FALSE && (((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x01)!=0x01)) // try to unlock
 				{
 					#ifdef USING_PRINTF
                         printf("[%d]try to unlock:%X-%X\n",__LINE__,AppNVMData.isBattLocked,(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03);
                     #endif
 					UartWriteData.WriteCmd = 0x01;
 					UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
-					UartWriteData.Data[1] = 0x03;
+					UartWriteData.Data[1] = 0x01|((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x02);
 					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
 				}
 				if(AppDataInfo.RelayControl==TRUE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2])&0x80)==0x00)//继电器断开