Bladeren bron

MC_VS7500-TC033001-MS2002-V2.1.6.1.0_20210913_1
1、修改I2C的驱动,解决频繁封波导致电机异常;
2、增加清除历史记录的指令。

dail 3 jaren geleden
bovenliggende
commit
6e3fcd2323

File diff suppressed because it is too large
+ 2540 - 2540
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/MC_VS75XX-TC033001-MS2002-V2.1.6.1.0_20210913_2.bin


+ 4 - 15
User/Src/I2C_Analog.c

@@ -2,23 +2,12 @@
 
 static void _SDA_IN(I2C_Handle_Struct_t* I2C_Handle)
 {
-  GPIO_InitTypeDef GPIO_InitStruct;
-
-  GPIO_InitStruct.Pin = I2C_Handle->SDA_GPIO_Pin;
-  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
-  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-	GPIO_InitStruct.Pull = GPIO_PULLUP;
-  HAL_GPIO_Init(I2C_Handle->SDA_GPIOx, &GPIO_InitStruct);
+	HAL_GPIO_WritePin(I2C_Handle->SDA_GPIOx, I2C_Handle->SDA_GPIO_Pin, GPIO_PIN_SET);
 }
 
 static void _SDA_OUT(I2C_Handle_Struct_t* I2C_Handle)
 {
-  GPIO_InitTypeDef GPIO_InitStruct;
-
-  GPIO_InitStruct.Pin = I2C_Handle->SDA_GPIO_Pin;
-  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
-  HAL_GPIO_Init(I2C_Handle->SDA_GPIOx, &GPIO_InitStruct);
+	__NOP();
 }
 
 static void _GPIO_CLK_Init(GPIO_TypeDef* GPIOx)
@@ -59,12 +48,12 @@ void I2C_GPIO_Config(I2C_Handle_Struct_t* I2C_Handle)
 
   GPIO_InitStruct.Pin = I2C_Handle->SCL_GPIO_Pin;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
-  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
   HAL_GPIO_Init(I2C_Handle->SCL_GPIOx, &GPIO_InitStruct);
 	
 	GPIO_InitStruct.Pin = I2C_Handle->SDA_GPIO_Pin;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
-  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
   HAL_GPIO_Init(I2C_Handle->SDA_GPIOx, &GPIO_InitStruct);
 }
 

+ 12 - 2
User/Src/can_process.c

@@ -219,7 +219,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 							}
 							strncpy((char*)UserString1, (char*)"CLEAR_ODO", 9);
 							IsFlashSaveDataUpdate = TRUE;
-						}	
+						}
 						SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RIDE_LOG, sizeof(MC_RideLog_Struct_t), (uint8_t*)&MC_RideLog.ODO_Km);
 						SendData(ID_MC_TO_PBU, MODE_REPORT, 0x5303, (uint8_t*)"ACK");
 						MC_RunInfo.Ride_Km = 0;
@@ -355,7 +355,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 							}
 							strncpy((char*)UserString1, (char*)"CLEAR_ODO", 9);
 							IsFlashSaveDataUpdate = TRUE;
-						}	
+						}
 						SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RIDE_LOG, sizeof(MC_RideLog_Struct_t), (uint8_t*)&MC_RideLog.ODO_Km);
 						SendData(ID_MC_TO_HMI, MODE_REPORT, 0x7403, (uint8_t*)"ACK");
 						MC_RunInfo.Ride_Km = 0;
@@ -633,6 +633,16 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 					SendData(ID_MC_TO_CDL, MODE_REPORT, 0xA903, (uint8_t*)"ACK");
 					break;
 				}
+				case 0x3909://Çå³ýÀúÊ·ÐÅÏ¢
+				{
+				  if(strncmp("LOG CLEAR", (char*)Data, DataLength) == 0)
+					{
+					  Var_SetToDefaultLog();
+						EEPROM_24C02_LogReset(&I2C_Handle_EEPROM);
+						SendData(ID_MC_TO_CDL, MODE_REPORT, 0xA903, (uint8_t*)"ACK");
+					}
+					break;
+				}
 				default:break;
 			}
 			break;

+ 19 - 18
User/Src/protect_check.c

@@ -345,7 +345,7 @@ void MC_OverCurrent_SoftProtect_Process(uint16_t BusCurrent, uint16_t MaxCurrent
 
 /******************************全局函数定义******************************/
 #define OC_CLEARFLAG_DELAYTIME 15 //过流标志间隔清零延时,单位ms
-#define OC_COUNTER_TH 1000          //过流保护计数判断阈值
+#define OC_COUNTER_TH 100          //过流保护计数判断阈值
 //过流保护检测
 /*
 检测原理:
@@ -363,31 +363,32 @@ void MC_Protect_OverCurrent_Process(FlagStatus* OverCurrentTrigFlag, MC_ErrorCod
   static uint8_t OffPwmCnt = 0;        //过流信号触发后,关闭PWM延时计数
 	static uint8_t StarPwmCnt = 0;       //关闭PWM后启动PWM延时计数
 	
+	if(*OverCurrentTrigFlag == RESET)
 	{
-		if(*OverCurrentTrigFlag == RESET)
+		//关闭PWM计数清零
+		OffPwmCnt = 0;
+		//开启PWM
+		if(StarPwmCnt == 0)
 		{
-			//关闭PWM计数清零
-			OffPwmCnt = 0;
-			//开启PWM
-			if(StarPwmCnt == 0)
-			{
-				StarPwmCnt++;
-				Enable_PwmGpio_Out();
-			}
+			StarPwmCnt++;
+			Enable_PwmGpio_Out();
+		}
+	}
+	else
+	{
+		//开启PWM计数清零
+		StarPwmCnt = 0;
+		//2个PWM周期后,过流触发标志复位
+		if(OffPwmCnt >= 1)
+		{
+			*OverCurrentTrigFlag = RESET;
 		}
 		else
 		{
-			//开启PWM计数清零
-			StarPwmCnt = 0;
 			//关闭PWM
 			Disable_PwmGpio_Out();
-			//2个PWM周期后,过流触发标志复位
-			if(OffPwmCnt >= 1)
-			{
-				*OverCurrentTrigFlag = RESET;
-			}
-			OffPwmCnt++;
 		}
+		OffPwmCnt++;
 	}
 }
 

+ 5 - 3
User/Src/remain_distance.c

@@ -423,11 +423,11 @@ void RD_SaveAndUpdateInfo(MC_GearSt_Struct_t GearSt, MC_AssistRunMode_Struct_t M
 				case MC_GearSt_Torque_TURBO:
 					RemainDis.Power_per_km_average = MC_AvgPower.GearSt_TURBO;
 					powerDefaultCurrentMode = MC_AvgPower_Default.GearSt_TURBO;
-					break;	
-        case MC_GearSt_Torque_5:
+					break;				
+				case MC_GearSt_Torque_5:
 					RemainDis.Power_per_km_average = MC_AvgPower.GearSt_5;
 					powerDefaultCurrentMode = MC_AvgPower_Default.GearSt_5;
-					break;				
+					break;
 				case MC_GearSt_SMART:
 					RemainDis.Power_per_km_average = MC_AvgPower.GearSt_SMART;
 					powerDefaultCurrentMode = MC_AvgPower_Default.GearSt_SMART;
@@ -558,3 +558,5 @@ uint8_t Battery_SocCal(uint16_t Voltage_mV)
 	}
 }
 
+
+

+ 1 - 1
User/Src/tim.c

@@ -182,7 +182,7 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
     /* Peripheral interrupt init*/
     HAL_NVIC_SetPriority(TIM1_UP_IRQn, 1, 1);
     HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);
-
+		
   /* USER CODE BEGIN TIM1_MspInit 1 */
 
   /* USER CODE END TIM1_MspInit 1 */

+ 3 - 0
修改说明.txt

@@ -430,6 +430,9 @@ MC_VS7500-TC033001-MS2002-V2.1.6.1.0_20210913_1
 1、里程统计增加过滤,避免干扰信号导致里程统计不准;
 2、针对开机后母线电压采集上升缓慢,优化SOC初始值的计算方法。
 
+MC_VS7500-TC033001-MS2002-V2.1.6.1.0_20210913_1
+1、修改I2C的驱动,解决频繁封波导致电机异常;
+2、增加清除历史记录的指令。
 
 
 

Some files were not shown because too many files changed in this diff