Эх сурвалжийг харах

Squashed commit of the following:

commit 2d28b1eaf2929c68b52909b234d9ff74275ca37d
Author: dail.zhou <dail.zhou@ttiummotor.com>
Date:   Tue Aug 27 10:07:23 2019 +0800

    V1.0.1 20190826
    1、修改UART通信失联检测方式,在While(1)中进行判断;
    2、增加母线电压的滤波处理;
    3、看门狗初始化位置调整,避免开机时出现故障;
    4、修改踏频传感器故障检测方法,调整到1ms中断中检测;
    5、故障码定义中增加TE MCU的标志位,并且对TE的故障检测进行分类和修改;
    6、NTC故障检测的逻辑调整

# Conflicts:
#	Core/Src/adc.c
#	Core/Src/main.c
#	MDK-ARM/bin/QD007A_CTL_APP.bin
#	MDK-ARM/bin/QD007A_CTL_APP_CRC.bin
#	MDK-ARM/startup_stm32f103xb.lst
#	User/Src/fault_check.c
dail.zhou 6 жил өмнө
parent
commit
e7ec3b1c5a

+ 0 - 10
Core/Inc/can.h

@@ -103,12 +103,6 @@ typedef struct
 	  TrueOrFalse_Flag_Struct_t IsWaitRX_Flag; //³¬Ê±µÈ´ýÊý¾Ý±êÖ¾
 }CAN_Buf_TypeDef;
 
-typedef struct
-{
-  TrueOrFalse_Flag_Struct_t IsOK_Flag;
-	uint32_t OK_TrigTime;
-}ComOK_Check_Struct_t;
-
 /* USER CODE END Private defines */
 
 extern void _Error_Handler(char *, int);
@@ -125,10 +119,6 @@ extern CAN_Buf_TypeDef CAN_RxBuf_Struct_HMI;
 extern uint8_t CAN_RxBuf_CDL[255];
 extern CAN_Buf_TypeDef CAN_RxBuf_Struct_CDL;
 
-extern ComOK_Check_Struct_t IsComOK_PBU;
-extern ComOK_Check_Struct_t IsComOK_HMI;
-extern ComOK_Check_Struct_t IsComOK_BMS;
-
 extern void CAN_SendData(uint16_t ID, uint8_t *Data, uint16_t Length);
 extern void CANFilterConfig_Scale32_IdMask_StandardIdOnly(void);
 /* USER CODE END Prototypes */

+ 0 - 1
Core/Inc/usart.h

@@ -71,7 +71,6 @@ extern void _Error_Handler(char *, int);
 void MX_USART3_UART_Init(void);
 
 /* USER CODE BEGIN Prototypes */
-extern TrueOrFalse_Flag_Struct_t IsComOK_TE;
 extern uint8_t UART_RxBuff3[255];
 extern USART_Buf_TypeDef UART_RxBuff_Struct3;
 extern uint8_t UART_TxBuff3[255];

+ 5 - 10
Core/Src/adc.c

@@ -414,14 +414,13 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 	#endif
 		
 	int32_t Temp_32;
-	int64_t Temp_64;
+	static int32_t BusVoltageFltSum = 0;
 	static int32_t IdcFltSum = 0;
 	static uint32_t T_Roil_Sum = 0;
 	static uint16_t T_Roil_FiltCnt = 0;
 	static uint32_t T_PCB_Sum = 0;
 	static uint16_t T_PCB_FiltCnt = 0;
 	static int32_t GasSensorFltSum = 0;
-	static int64_t BusVoltageFltSum = 0;
 	
 	//更新PCB温度
 	T_PCB_Sum += ADC1_Result[ADC1_RANK_NTC_PCB];
@@ -434,17 +433,13 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 	}
 	
 	//更新母线电压 
-	///MC_RunInfo.BusVoltage = (uint32_t)ADC1_Result[ADC1_RANK_VIN] * 18507 >> 10;//3300 * 1256 / (4095 * 56)
-	Temp_64 = (uint32_t)ADC1_Result[ADC1_RANK_VIN] * 18507 >> 10;
-	BusVoltageFltSum += ((Temp_64 << 32) - BusVoltageFltSum) >> 10;
-	MC_RunInfo.BusVoltage = BusVoltageFltSum >> 32;
+	BusVoltageFltSum += ((ADC1_Result[ADC1_RANK_VIN] << 10) - BusVoltageFltSum) >>8;
+	MC_RunInfo.BusVoltage = (uint32_t)((BusVoltageFltSum >> 10) * 18507) >> 10;//3300 * 1256 / (4095 * 56)
 	
 	//更新绕组温度
-	#if 1 //正常运行
+
 	T_Roil_Sum += ADC1_Result[ADC1_RANK_NTC_ROIL];
-	#elif 1 //模拟固定值
-	T_Roil_Sum += 2000;
-	#endif
+
 	T_Roil_FiltCnt++;
 	if(T_Roil_FiltCnt >= 2048)
 	{

+ 0 - 3
Core/Src/can.c

@@ -55,9 +55,6 @@ CAN_Buf_TypeDef CAN_RxBuf_Struct_HMI = {0,255,0,0,0,0,CAN_RxBuf_HMI,0,FALSE};
 uint8_t CAN_RxBuf_CDL[255];
 CAN_Buf_TypeDef CAN_RxBuf_Struct_CDL = {0,255,0,0,0,0,CAN_RxBuf_CDL,0,FALSE};
 
-ComOK_Check_Struct_t IsComOK_PBU = {TRUE, 0};
-ComOK_Check_Struct_t IsComOK_HMI = {TRUE, 0};
-ComOK_Check_Struct_t IsComOK_BMS = {TRUE, 0};
 /* USER CODE END 0 */
 
 CAN_HandleTypeDef hcan;

+ 11 - 14
Core/Src/main.c

@@ -123,7 +123,6 @@ int main(void)
   MX_TIM2_Init();
 	MX_TIM3_Init();
   MX_DMA_Init();
-	
   MX_ADC1_Init();
   MX_ADC2_Init();
   MX_CAN_Init();
@@ -133,21 +132,23 @@ int main(void)
 	ADC_Start();
 	HAL_Delay(20);
 	
+	//定时器2启动计数
 	HAL_TIM_Base_Start(&htim2);
 	
 	//变量初始化
 	Var_Init();
 	
+	//看门狗初始化
+	#if DEBUG
+  MX_IWDG_Init();
+	#endif
+	
 	//续航里程计算变量初始化
 	RD_RemainDis_Init(MC_ConfigParam.WheelSize, MC_RunInfo.BusVoltage / 10);
 	
 	//传感器初始化
 	MC_SensorInit();
 	
-	#if DEBUG
-  MX_IWDG_Init();
-	#endif
-	
 	//EEPROM_24C02初始化
 	EEPROM_24C02_Init(&I2C_Handle_EEPROM);
 	
@@ -169,14 +170,7 @@ int main(void)
 	
 	//MC控制初始化
 	MC_Init();
-	
-	//外部设备在线检测
-	#if 0
-	MC_OnLineCheck(&DeviceOnLine_Status, &MC_ErrorCode);
-	#else //关闭该功能时,认为所有设备离线
-	DeviceOnLine_Status.Status = 0x07;
-	#endif
-	
+		
 	//外部设备授权校验
 	#if 0
 	MC_DeviceCheck(&MC_ErrorCode);
@@ -209,9 +203,12 @@ int main(void)
 			//UART数据解析及处理
 			UartRx_Process();
 			
-			//通信状态检测
+			//CAN设备通信状态检测
 	    MC_CanRxCheck_Process(MC_ConfigParam.NoPBU_Flag, PBU_ConfigParam.NoHMI_Flag, MC_WorkMode, &MC_ControlCode.GearSt);
 			
+			//UART设备通信状态检测
+			MC_UartRxCheck_Process();
+			
 			//速度传感器采集及计算
 			SpeedSensor_Process(&MC_SpeedSensorData, &MC_RunInfo.BikeSpeed, MC_ConfigParam.WheelSize);
 			

+ 1 - 1
Core/Src/usart.c

@@ -43,11 +43,11 @@
 #include "gpio.h"
 
 /* USER CODE BEGIN 0 */
-TrueOrFalse_Flag_Struct_t IsComOK_TE = TRUE;              //TEͨÐűêÖ¾
 uint8_t UART_RxBuff3[255];
 USART_Buf_TypeDef UART_RxBuff_Struct3 = {255,0,0,0,0,UART_RxBuff3,&huart3};
 uint8_t UART_TxBuff3[255];
 USART_Buf_TypeDef UART_TxBuff_Struct3 = {255,0,0,0,0,UART_TxBuff3,&huart3};
+
 /* USER CODE END 0 */
 
 UART_HandleTypeDef huart3;

+ 42 - 9
MDK-ARM/QD007A_CTL_APP.uvprojx

@@ -10,12 +10,11 @@
       <TargetName>QD007A_CTL_APP</TargetName>
       <ToolsetNumber>0x4</ToolsetNumber>
       <ToolsetName>ARM-ADS</ToolsetName>
-      <pCCUsed>5060422::V5.06 update 4 (build 422)::ARMCC</pCCUsed>
       <TargetOption>
         <TargetCommonOption>
           <Device>STM32F103RB</Device>
           <Vendor>STMicroelectronics</Vendor>
-          <PackID>Keil.STM32F1xx_DFP.2.1.0</PackID>
+          <PackID>Keil.STM32F1xx_DFP.1.1.0</PackID>
           <PackURL>http://www.keil.com/pack/</PackURL>
           <Cpu>IROM(0x08000000,0x20000) IRAM(0x20000000,0x5000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
           <FlashUtilSpec></FlashUtilSpec>
@@ -125,6 +124,47 @@
             <HexOffset>0</HexOffset>
             <Oh166RecLen>16</Oh166RecLen>
           </OPTHX>
+          <Simulator>
+            <UseSimulator>0</UseSimulator>
+            <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+            <RunToMain>1</RunToMain>
+            <RestoreBreakpoints>1</RestoreBreakpoints>
+            <RestoreWatchpoints>1</RestoreWatchpoints>
+            <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+            <RestoreFunctions>1</RestoreFunctions>
+            <RestoreToolbox>1</RestoreToolbox>
+            <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+            <RestoreSysVw>1</RestoreSysVw>
+          </Simulator>
+          <Target>
+            <UseTarget>1</UseTarget>
+            <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+            <RunToMain>1</RunToMain>
+            <RestoreBreakpoints>1</RestoreBreakpoints>
+            <RestoreWatchpoints>1</RestoreWatchpoints>
+            <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+            <RestoreFunctions>1</RestoreFunctions>
+            <RestoreToolbox>1</RestoreToolbox>
+            <RestoreTracepoints>1</RestoreTracepoints>
+            <RestoreSysVw>1</RestoreSysVw>
+          </Target>
+          <RunDebugAfterBuild>0</RunDebugAfterBuild>
+          <TargetSelection>6</TargetSelection>
+          <SimDlls>
+            <CpuDll></CpuDll>
+            <CpuDllArguments></CpuDllArguments>
+            <PeripheralDll></PeripheralDll>
+            <PeripheralDllArguments></PeripheralDllArguments>
+            <InitializationFile></InitializationFile>
+          </SimDlls>
+          <TargetDlls>
+            <CpuDll></CpuDll>
+            <CpuDllArguments></CpuDllArguments>
+            <PeripheralDll></PeripheralDll>
+            <PeripheralDllArguments></PeripheralDllArguments>
+            <InitializationFile></InitializationFile>
+            <Driver>Segger\JL2CM3.dll</Driver>
+          </TargetDlls>
         </DebugOption>
         <Utilities>
           <Flash1>
@@ -189,7 +229,6 @@
             <useUlib>1</useUlib>
             <EndSel>0</EndSel>
             <uLtcg>0</uLtcg>
-            <nSecure>0</nSecure>
             <RoSelD>3</RoSelD>
             <RwSelD>3</RwSelD>
             <CodeSel>0</CodeSel>
@@ -326,11 +365,6 @@
             <useXO>0</useXO>
             <v6Lang>0</v6Lang>
             <v6LangP>0</v6LangP>
-            <vShortEn>1</vShortEn>
-            <vShortWch>1</vShortWch>
-            <v6Lto>0</v6Lto>
-            <v6WtE>0</v6WtE>
-            <v6Rtti>0</v6Rtti>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define>USE_HAL_DRIVER,STM32F103xB</Define>
@@ -348,7 +382,6 @@
             <NoWarn>0</NoWarn>
             <uSurpInc>0</uSurpInc>
             <useXO>0</useXO>
-            <uClangAs>0</uClangAs>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define></Define>

BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


BIN
MDK-ARM/bin/QD007A_CTL_APP_CRC.bin


+ 5 - 5
MDK-ARM/startup_stm32f103xb.lst

@@ -524,11 +524,11 @@ ork --depend=.\qd007a_ctl_app\startup_stm32f103xb.d -o.\qd007a_ctl_app\startup_
 ARM Macro Assembler    Page 9 
 
 
-stm32f103xb.o -ID:\A_motinova\QD007E_CTRL_APP_dev_gas\MDK-ARM\RTE\_QD007A_CTL_A
-PP -IC:\Keil_v5\ARM\PACK\ARM\CMSIS\5.0.0\CMSIS\Include -IC:\Keil_v5\ARM\PACK\Ke
-il\STM32F1xx_DFP\2.1.0\Device\Include --predefine="__MICROLIB SETA 1" --predefi
-ne="__UVISION_VERSION SETA 522" --predefine="_RTE_ SETA 1" --predefine="STM32F1
-0X_MD SETA 1" --list=startup_stm32f103xb.lst startup_stm32f103xb.s
+stm32f103xb.o -ID:\SoftDesign\20190311_QD007A_CTL\QD007E_CTRL_APP\QD007E_CTRL_A
+PP\MDK-ARM\RTE -IC:\Keil_v5\ARM\PACK\ARM\CMSIS\4.4.0\CMSIS\Include -IC:\Keil_v5
+\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include --predefine="__MICROLIB SETA 
+1" --predefine="__UVISION_VERSION SETA 515" --predefine="_RTE_ SETA 1" --predef
+ine="STM32F10X_MD SETA 1" --list=startup_stm32f103xb.lst startup_stm32f103xb.s
 
 
 

+ 1 - 0
User/Inc/fault_check.h

@@ -6,6 +6,7 @@
 #include "hall_sensor.h"
 
 extern void MC_Fault_HallSensor_Process(MC_HallSensorStatus_Struct_t HallSensorStatus, MC_ErrorCode_Struct_t* p_MC_ErrorCode);
+extern void MC_Fault_CadenceSensor_Process(uint16_t Torque, uint16_t BikeSpeed, MC_ErrorCode_Struct_t* p_MC_ErrorCode);
 extern void MC_Fault_Check_Process(void);
 
 #endif

+ 1 - 0
User/Inc/tasks.h

@@ -17,6 +17,7 @@ extern void MC_TE_SensorData_Process(uint16_t Speed, MC_TE_SensorData_Struct_t*
 extern uint8_t MC_CadenceLimit_Cal(uint8_t Cadence, uint16_t Current, uint8_t T_Roil);
 extern void PowerOff_Process(void);
 extern void MC_CanRxCheck_Process(MC_SupportFlag_Struct_t NoPBU_Flag, MC_SupportFlag_Struct_t NoHMI_Flag, MC_WorkMode_Struct_t WorkMode, MC_GearSt_Struct_t* GearSt);
+extern void MC_UartRxCheck_Process(void);
 extern void MC_RunTime_Cal(uint32_t* p_Runtime);
 extern void MC_OnLineCheck(OnLine_Status_Struct_t* p_OnLineStatus, MC_ErrorCode_Struct_t* p_ErrorCode);
 extern void MC_DeviceCheck(MC_ErrorCode_Struct_t* p_ErrorCode);

+ 24 - 14
User/Inc/var.h

@@ -61,6 +61,7 @@ typedef union MC_ERRORCODE
 		uint32_t Fault_MOS                :1;//MOS短路
 		uint32_t Protect_VoltageChange    :1;//电压波动异常
 		uint32_t Fault_Circuit            :1;//电路故障
+		uint32_t Fault_TE_MCU             :1;//TE MCU故障
 		uint32_t RS1 :1;
 		uint32_t RS2 :1;
 		uint32_t RS3 :1;
@@ -73,7 +74,6 @@ typedef union MC_ERRORCODE
 		uint32_t RS10 :1;
 		uint32_t RS11 :1;
 		uint32_t RS12 :1;
-		uint32_t RS13 :1;
 	}ERROR_Bit;
   uint32_t Code;	
 }MC_ErrorCode_Struct_t;
@@ -264,22 +264,22 @@ typedef union TE_ERROR_CODE
 {
   struct
 	{
-		uint16_t BikeSpeed        :1;//速度传感器
-		uint16_t TorqueSensor     :1;//力矩传感器
-		uint16_t Current          :1;//母线电流
-		uint16_t T_Roil           :1;//绕组温度
-		uint16_t HallSensor_A     :1;//霍尔传感器A
-		uint16_t HallSensor_B     :1;//霍尔传感器A
-		uint16_t CadenseSensor_1  :1;//踏频传感器1
-		uint16_t CadenseSensor_2  :1;//踏频传感器2
-		uint16_t StopBreak        :1;//刹车信号
-		uint16_t VCC              :1;//3.3V异常
-		uint16_t ClockFreq        :1;//系统时钟
+		uint16_t BikeSpeed        :1;//速度传感器,    电路故障
+		uint16_t TorqueSensor     :1;//力矩传感器,    电路故障
+		uint16_t Current          :1;//母线电流,      电路故障
+		uint16_t T_Roil           :1;//绕组温度,      电路故障
+		uint16_t HallSensor_A     :1;//霍尔传感器A,   电路故障
+		uint16_t HallSensor_B     :1;//霍尔传感器A,   电路故障
+		uint16_t CadenseSensor_1  :1;//踏频传感器1,   电路故障
+		uint16_t CadenseSensor_2  :1;//踏频传感器2,   电路故障
+		uint16_t StopBreak        :1;//刹车信号,      电路故障
+		uint16_t VCC              :1;//3.3V异常,      电路故障
+		uint16_t ClockFreq        :1;//系统时钟异常,  主控MCU故障
+		uint16_t ComFault         :1;//串口通讯RX故障,主控MCU故障
+		uint16_t MCUFault         :1;//MCU异常,       TE MCU故障
 		uint16_t RS1              :1;
 		uint16_t RS2              :1;
 		uint16_t RS3              :1;
-		uint16_t RS4              :1;
-		uint16_t RS5              :1;
 	}Status_Bit;
   uint16_t Code;
 }TE_ErrorCode_Struct_t;
@@ -330,6 +330,12 @@ typedef struct
 	nGearParam_Struct_t    Gear_SMART;     //SMART档控制参数,偏移地址 48
 }MC_AssistParam_Struct_t;
 
+typedef struct
+{
+  TrueOrFalse_Flag_Struct_t IsOK_Flag;
+	uint32_t OK_TrigTime;
+}ComOK_Check_Struct_t;
+
 /******************************类型定义End***************************/
 
 /**************************全局变量声明Begin*************************/
@@ -358,6 +364,10 @@ extern MC_TE_SensorData_Struct_t MC_TE_SensorData;
 extern uint16_t MC_TE_SyncClockFreqScan;
 extern MC_AssistParam_Struct_t MC_AssisParam;
 extern uint8_t MC_WalkMode_Persent;
+extern ComOK_Check_Struct_t IsComOK_TE;
+extern ComOK_Check_Struct_t IsComOK_PBU;
+extern ComOK_Check_Struct_t IsComOK_HMI;
+extern ComOK_Check_Struct_t IsComOK_BMS;
 
 /**************************全局变量声明End***************************/
 

+ 1 - 1
User/Src/MC_FOC_Driver.c

@@ -67,7 +67,7 @@ void FOC_Model(int16_t Ref, int16_t MotorSpeed, uint16_t SVM_Angle)	  //
 					= DbSpdMotor*VMax/1020
 	*/
 	#if 1    //加入前馈
-	UqCal = ((int32_t)MotorSpeed * MAX_MODULE) / 1457;
+	UqCal = ((int32_t)MotorSpeed * MAX_MODULE) / ((MC_MotorParam.Rate_Speed * 183) >> 7);//电机转速 * 1.43
 	UqVoltTmp = UqCal + (UqVoltFlt >> 9);
 	#else    //去掉前馈
 	UqVoltTmp = UqVoltFlt >> 9;

+ 1 - 0
User/Src/cadence_sensor.c

@@ -50,6 +50,7 @@ void CadenceSensor_Process(MC_CadenceResult_Struct_t* p_MC_CadenceResult, uint16
 	static TrueOrFalse_Flag_Struct_t IsFirstEnterFalg = TRUE;
 		
 	//¶ÁÈ¡»ô¶ûÐźÅ
+	
 	MC_CadenceSensorStatus.HallGropuStatus = Cadence_ReadHallState();
 	if(IsFirstEnterFalg == TRUE)
 	{

+ 1 - 0
User/Src/can_process.c

@@ -208,6 +208,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				  GetParamFromEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM, sizeof(MC_ConfigParam), &MC_ConfigParam.RS1);
 					Data[0] = MC_ConfigParam.WheelSize;
 					Data[1] = MC_ConfigParam.StarModel;
+					Data[2] = MC_ConfigParam.SpeedLimit;
 					SendData(ID_MC_TO_HMI, MODE_REPORT, 0x7308, Data);
 					break;
 				}

+ 127 - 188
User/Src/fault_check.c

@@ -189,25 +189,24 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Roil_Result, MC_
 	static uint8_t T_PCB_Old = 0;
 	static uint8_t T_Roil_Old = 0;
 		
-	//为初始化预留1s
-	if((HAL_GetTick() < 1000) || (MC_RunInfo.T_MCU > 90))//50度以上,不检测NTC故障
+	//初始化2s,且50度以上,不检测NTC故障
+	if((HAL_GetTick() < 2000) || (MC_RunInfo.T_MCU > 90))
 	{
 	  TrigTimeCnt_PCB = HAL_GetTick();
 		TrigTimeCnt_PCB = HAL_GetTick();
+		NTC_Check_PeriodTimeCnt = HAL_GetTick();
+		NTC_Check_Count = 0;
+		
 		T_PCB_Old = T_PCB_Result;
 		T_Roil_Old = T_Roil_Result;
 		
-		if(HAL_GetTick() < 1000)
-		{
-		  NTC_Check_PeriodTimeCnt = HAL_GetTick();
-			return;
-		}		
+		return;
 	}
 	
 	if(p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor == 0)
 	{
 	  //PCB上NTC短路或开路检测,判断AD值是否为异常值
-	  if((T_PCB_Result < 20) || (T_PCB_Result > 140))//20:AD为3812,140:AD为227
+	  if((T_PCB_Result < 10) || (T_PCB_Result > 180))           //10(-30度):AD为3940,180(140度):AD为80
 		{
 			if((HAL_GetTick() - TrigTimeCnt_PCB) > 200)
 			{
@@ -221,8 +220,8 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Roil_Result, MC_
 		}
 		
 	  //NTC短路或开路检测,判断AD值是否为异常值
-		if(((T_Roil_Result < 20) || (T_Roil_Result > 140)) ||	
-			 ((T_PCB_Result < 20) || (T_PCB_Result > 140))
+		if(((T_Roil_Result < 10) || (T_Roil_Result > 180)) ||	    //10:AD为3940,180:AD为80
+			 ((T_PCB_Result < 10) || (T_PCB_Result > 180))
 		  )
 		{
 			if((HAL_GetTick() - TrigTimeCnt_Roil) > 200)
@@ -236,7 +235,7 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Roil_Result, MC_
 		  TrigTimeCnt_Roil = HAL_GetTick();
 		}
 		
-		//NTC为固定值的检测,检测3min内母线电流平均值 > 5A 时的前后温差
+		//NTC为固定值的检测,检测3min内母线电流平均值 > 10A 时的前后温差
 		if((HAL_GetTick() - NTC_Check_PeriodTimeCnt) >= 100)
 		{
 		  NTC_Check_PeriodTimeCnt = HAL_GetTick();
@@ -248,8 +247,8 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Roil_Result, MC_
 			  NTC_Check_Count = 0;
 				BusCurrentAvg = BusCurrentSum >> 11;
 				BusCurrentSum = 0;
-				//平均电流超过5A,判断是否有温升
-				if(BusCurrentAvg > 39) // 39  * 1.28 = 50
+				//平均电流超过10A,判断是否有温升
+				if(BusCurrentAvg > 79) // 79  * 1.28 = 101
 				{
 				  if((abs(T_PCB_Result - T_PCB_Old) < 2) ||  //PCB 温升低于2度
 						 (abs(T_Roil_Result - T_Roil_Old) < 2))  //绕组温升低于2度
@@ -265,94 +264,6 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Roil_Result, MC_
 	}
 }
 
-//踏频传感器故障检测
-void MC_Fault_CadenceSensor_Process(uint16_t Torque, uint16_t BikeSpeed, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
-{
-	static uint8_t Hall_1_Trg = 0; //霍尔1信号变化标志
-	static uint8_t Hall_1_Cont = 0;//霍尔1状态
-	static uint32_t Hall_1_Fault_TrigTimeCnt = 0;
-	static uint8_t Hall_2_Trg = 0; //霍尔2信号变化标志
-	static uint8_t Hall_2_Cont = 0;//霍尔2状态
-	static uint32_t Hall_2_Fault_TrigTimeCnt = 0;
-	static uint8_t Hall_1_2_EQA_Flag = 1;
-	static uint32_t Hall_1_2_EQA_TrigTimeCnt = 0;
-	uint8_t Hall_1_State;
-	uint8_t Hall_2_State;
-	
-	Hall_1_State = HAL_GPIO_ReadPin(CADENCE_1_GPIO_Port, CADENCE_1_Pin);
-	Hall_2_State = HAL_GPIO_ReadPin(CADENCE_2_GPIO_Port, CADENCE_2_Pin);
-
-	//更新霍尔1信号变化状态
-	Hall_1_Trg = Hall_1_State ^ Hall_1_Cont;
-	Hall_1_Cont = Hall_1_State;
-	//更新霍尔2信号变化状态
-	Hall_2_Trg = Hall_2_State ^ Hall_2_Cont;
-	Hall_2_Cont = Hall_2_State;
-	//更新霍尔1和霍尔2相同标志
-	Hall_1_2_EQA_Flag = Hall_1_State ^ Hall_2_State;
-	
-	if(HAL_GetTick() < 1000)
-	{
-	  Hall_1_Fault_TrigTimeCnt = HAL_GetTick();
-		Hall_2_Fault_TrigTimeCnt = HAL_GetTick();
-		Hall_1_2_EQA_TrigTimeCnt = HAL_GetTick();
-		return;
-	}
-	
-	if(p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor == 0)
-	{
-	  //两个霍尔传感器分别检测是否存在开路或短路 
-		if((Torque > 1000) && (BikeSpeed > 50))
-		{
-		  //判断霍尔1
-			if(Hall_1_Trg == 0)
-			{
-			  if((HAL_GetTick() - Hall_1_Fault_TrigTimeCnt) > 300)
-				{
-				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
-					return;
-				}
-			}
-			else
-			{
-			  Hall_1_Fault_TrigTimeCnt = HAL_GetTick();
-			}
-			//判断霍尔2
-			if(Hall_2_Trg == 0)
-			{
-			  if((HAL_GetTick() - Hall_2_Fault_TrigTimeCnt) > 300)
-				{
-				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
-					return;
-				}
-			}
-			else
-			{
-			  Hall_2_Fault_TrigTimeCnt = HAL_GetTick();
-			}		
-      //判断霍尔1和霍尔2黏连
-      if(Hall_1_2_EQA_Flag == 0)
-			{
-			  if((HAL_GetTick() - Hall_1_2_EQA_TrigTimeCnt) > 300)
-				{
-				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
-					return;
-				}
-			}		
-      else
-			{
-			  Hall_1_2_EQA_TrigTimeCnt = HAL_GetTick();
-			}				
-		}
-		else
-		{
-		  Hall_1_Fault_TrigTimeCnt = HAL_GetTick();
-		  Hall_2_Fault_TrigTimeCnt = HAL_GetTick();
-			Hall_1_2_EQA_TrigTimeCnt = HAL_GetTick();
-		}
-	}
-}
-
 //指拨故障检测
 void MC_Fault_GasSensor_Process(uint16_t ADC_Data, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 {
@@ -424,95 +335,41 @@ void MC_Fault_MOS_Process(ADC_3ShuntCurrent_Struct_t ShuntCurrent, MC_ErrorCode_
 
 //TE故障检测
 void MC_Fault_TE_Process(MC_TE_SensorStatus_Struct_t* p_MC_TE_SensorStatus, TrueOrFalse_Flag_Struct_t ComOK_Flag, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
-{
-	static uint32_t TrigTimeCnt_Com = 0;
-  static uint32_t TrigTimeCnt_Sensor = 0;
-	static uint32_t DelayTimeCnt_Sensor = 0;
-	static FlagStatus SensorCheckFault_Falg = RESET;
-	static FlagStatus TE_ComFault_Flag = RESET;
-	static FlagStatus TE_SyncClockFault_Flag = RESET;
-	
-	//传感器检测异常判断
-	if(SensorCheckFault_Falg == RESET)
+{	
+	//TE电路故障异常判断,存在TE与主控采集值差异较大(故障位bit0-9),或主MCU工作电压大于4.2V
+	if(((p_MC_TE_SensorStatus->TE_ErrorCode.Code & 0x03FF) != 0) || (p_MC_TE_SensorStatus->MCU_Voltage > 4200))
 	{
-	  if((p_MC_TE_SensorStatus->TE_ErrorCode.Code != 0) || (p_MC_TE_SensorStatus->MCU_Voltage > 3800))  //存在传感器检测异常,或主MCU工作电压大于4.2V
-		{
-			if((HAL_GetTick() - TrigTimeCnt_Sensor) > 1000)
-			{
-				SensorCheckFault_Falg = SET;
-			}
-		}
-		else
-		{
-		  TrigTimeCnt_Sensor = HAL_GetTick();
-		}
+		p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
 	}
-	//传感器检测异常恢复判断
-	else
+	//TE电路故障异常恢复判断
+	else if(((p_MC_TE_SensorStatus->TE_ErrorCode.Code & 0x03FF) == 0) && (p_MC_TE_SensorStatus->MCU_Voltage < 3600))
 	{
-	  if((p_MC_TE_SensorStatus->TE_ErrorCode.Code == 0) && (p_MC_TE_SensorStatus->MCU_Voltage < 3600))
-		{
-		  if((HAL_GetTick() - DelayTimeCnt_Sensor) > 1000)
-			{
-			  SensorCheckFault_Falg = RESET;
-			}
-		}
-		else
-		{
-		  DelayTimeCnt_Sensor = HAL_GetTick();
-		}
+		p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 0;
 	}
 	
-	//TE通信异常判断
-	if(TE_ComFault_Flag == RESET)
+	//主控MCU异常判断,主控发送TE的数据超时或时钟频率异常
+	if(((p_MC_TE_SensorStatus->TE_ErrorCode.Code & 0x0C00) != 0))
 	{
-	  if(ComOK_Flag == FALSE)
-		{
-			if((HAL_GetTick() - TrigTimeCnt_Com) > 3000)
-			{
-				TE_ComFault_Flag = SET;
-			}
-		}
-		else
-		{
-			TrigTimeCnt_Com = HAL_GetTick();
-		}
+		p_MC_ErrorCode->ERROR_Bit.Fault_MCU = 1;
 	}
-	//TE通信异常恢复判断
-	else
+	//主控MCU异常恢复判断
+	else if((p_MC_TE_SensorStatus->TE_ErrorCode.Code & 0x0C00) == 0)
 	{
-	  if(ComOK_Flag == TRUE)
-		{
-			TE_ComFault_Flag = RESET;
-		}
+		p_MC_ErrorCode->ERROR_Bit.Fault_MCU = 0;
 	}
-	
-//	//TE时钟判断
-//	if(  (MC_TE_SyncClockFreqScan < (p_MC_TE_SensorStatus->SyncClockFreq - 200))
-//		 ||(MC_TE_SyncClockFreqScan > (p_MC_TE_SensorStatus->SyncClockFreq + 200)))
-//	{
-//	  TE_SyncClockFault_Flag = SET;
-//	}
-//	else
-//	{
-//	  TE_SyncClockFault_Flag = RESET;
-//	}
-	
-	//故障码输出
-	if((SensorCheckFault_Falg == RESET) && (TE_ComFault_Flag == RESET) && (TE_SyncClockFault_Flag == RESET))
+		
+	//TE MCU异常判断,TE发送主控的数据超时、时钟频率异常或TE检测的MCU故障位置位
+	if(   (ComOK_Flag == FALSE)                                                     //UART接收数据超时
+		 || ((MC_TE_SyncClockFreqScan < (p_MC_TE_SensorStatus->SyncClockFreq - 200))  //TE发送的时钟频率超限
+		 ||  (MC_TE_SyncClockFreqScan > (p_MC_TE_SensorStatus->SyncClockFreq + 200)))
+	   || ((p_MC_TE_SensorStatus->TE_ErrorCode.Code & 0x1000) != 0)                 //TE MCU异常
+	  )
 	{
-	  p_MC_ErrorCode->ERROR_Bit.Fault_MCU = 0;
+	  p_MC_ErrorCode->ERROR_Bit.Fault_TE_MCU = 1;
 	}
 	else
 	{
-	  if(SensorCheckFault_Falg == SET)
-		{
-      p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;  //认为电路故障
-		}
-		if((TE_ComFault_Flag == SET) || (TE_SyncClockFault_Flag == SET))   //认为MCU故障
-		{
-	  	p_MC_ErrorCode->ERROR_Bit.Fault_MCU = 1;
-		}
+	  p_MC_ErrorCode->ERROR_Bit.Fault_TE_MCU = 0;
 	}
 }
 
@@ -522,7 +379,7 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 	static uint32_t C31_SC_TrigTimeCnt = 0;//C32 短路判断计时
 	static uint32_t PowerDriver_TrigTimeCnt = 0; //驱动电源判断计时
 	
-	//为初始化预留3s
+	//为初始化预留5s
 	if(HAL_GetTick() < 5000)
 	{
 	  PeriodTimeCnt = HAL_GetTick();
@@ -576,11 +433,8 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 		//检测母线电流和相电流是否为异常
 		static uint8_t i = 0, CurrentFaultCount = 0;
 		static uint32_t BusCurrent_Flt = 0, PhasesCurrentA_Flt = 0, PhasesCurrentB_Flt = 0, PhasesCurrentC_Flt = 0;
-		#if 1 //正常运行
+		
 		BusCurrent_Flt += ADC1_Result_Filt[ADC1_RANK_CURRENT];
-		#elif 1 //模拟母线电流采样为固定值
-		BusCurrent_Flt += 2048;
-		#endif
 		PhasesCurrentA_Flt += ADC2_Result_Filt[ADC2_RANK_CURRENT_A];
 		PhasesCurrentB_Flt += ADC2_Result_Filt[ADC2_RANK_CURRENT_B];
 		PhasesCurrentC_Flt += ADC2_Result_Filt[ADC2_RANK_CURRENT_C];
@@ -598,7 +452,7 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 			  p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
 			}
 			
-			if((IqFdbFlt >> 10) > 200)
+			if((IqFdbFlt >> 10) > 200) //250时,相电流为9.6A;330时,相电流为12.4A;350时,相电流为13.6A。得到,相电流 = 0.038 * IqFdb
 			{
 				if(((BusCurrent_Flt >> 5) - uw_current_offset) < 50) //50对应的母线电流约1.2A
 				{
@@ -632,7 +486,7 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 		static uint32_t DelayTimeCnt = 0;
 		if((MC_RunInfo.GearSt == 0) && (MC_RunInfo.MotorSpeed == 0))
 		{
-		  if((HAL_GetTick() - DelayTimeCnt) > 3000) // 由运动转为静止3s后进行判断
+		  if((HAL_GetTick() - DelayTimeCnt) > 5000) // 由运动转为静止5s后进行判断
 			{
 				BusCurrent_Array[j] = ADC1_Result_Filt[ADC1_RANK_CURRENT];
 				PhaseCurrentA_Array[j] = ADC2_Result_Filt[ADC2_RANK_CURRENT_A];
@@ -723,6 +577,94 @@ void MC_Fault_HallSensor_Process(MC_HallSensorStatus_Struct_t HallSensorStatus,
 	}
 }
 
+//踏频传感器故障检测
+void MC_Fault_CadenceSensor_Process(uint16_t Torque, uint16_t BikeSpeed, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
+{
+	static uint8_t Hall_1_Trg = 0; //霍尔1信号变化标志
+	static uint8_t Hall_1_Cont = 0;//霍尔1状态
+	static uint32_t Hall_1_Fault_TrigTimeCnt = 0;
+	static uint8_t Hall_2_Trg = 0; //霍尔2信号变化标志
+	static uint8_t Hall_2_Cont = 0;//霍尔2状态
+	static uint32_t Hall_2_Fault_TrigTimeCnt = 0;
+	static uint8_t Hall_1_2_EQA_Flag = 1;
+	static uint32_t Hall_1_2_EQA_TrigTimeCnt = 0;
+	static uint8_t Hall_1_State;
+	static uint8_t Hall_2_State;
+	
+	Hall_1_State = HAL_GPIO_ReadPin(CADENCE_1_GPIO_Port, CADENCE_1_Pin);
+	Hall_2_State = HAL_GPIO_ReadPin(CADENCE_2_GPIO_Port, CADENCE_2_Pin);
+	
+	//更新霍尔1信号变化状态,相同为0,不同为1
+	Hall_1_Trg = Hall_1_State ^ Hall_1_Cont;
+	Hall_1_Cont = Hall_1_State;
+	//更新霍尔2信号变化状态,相同为0,不同为1
+	Hall_2_Trg = Hall_2_State ^ Hall_2_Cont;
+	Hall_2_Cont = Hall_2_State;
+	//更新霍尔1和霍尔2相同标志,相同为0,不同为1
+	Hall_1_2_EQA_Flag = Hall_1_State ^ Hall_2_State;
+	
+	if(HAL_GetTick() < 1000)
+	{
+	  Hall_1_Fault_TrigTimeCnt = HAL_GetTick();
+		Hall_2_Fault_TrigTimeCnt = HAL_GetTick();
+		Hall_1_2_EQA_TrigTimeCnt = HAL_GetTick();
+		return;
+	}
+	
+	if(p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor == 0)
+	{
+	  //两个霍尔传感器分别检测是否存在开路或短路 
+		if((Torque > 1200) && (BikeSpeed > 70))
+		{
+		  //判断霍尔1
+			if(Hall_1_Trg == 0)
+			{
+			  if((HAL_GetTick() - Hall_1_Fault_TrigTimeCnt) > 300)
+				{
+				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
+					return;
+				}
+			}
+			else
+			{
+			  Hall_1_Fault_TrigTimeCnt = HAL_GetTick();
+			}
+			//判断霍尔2
+			if(Hall_2_Trg == 0)
+			{
+			  if((HAL_GetTick() - Hall_2_Fault_TrigTimeCnt) > 300)
+				{
+				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
+					return;
+				}
+			}
+			else
+			{
+			  Hall_2_Fault_TrigTimeCnt = HAL_GetTick();
+			}		
+      //判断霍尔1和霍尔2黏连
+      if(Hall_1_2_EQA_Flag == 0) 
+			{
+			  if((HAL_GetTick() - Hall_1_2_EQA_TrigTimeCnt) > 300)
+				{
+				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
+					return;
+				}
+			}		
+      else
+			{
+			  Hall_1_2_EQA_TrigTimeCnt = HAL_GetTick();
+			}				
+		}
+		else
+		{
+		  Hall_1_Fault_TrigTimeCnt = HAL_GetTick();
+		  Hall_2_Fault_TrigTimeCnt = HAL_GetTick();
+			Hall_1_2_EQA_TrigTimeCnt = HAL_GetTick();
+		}
+	}
+}
+
 //故障检测
 void MC_Fault_Check_Process(void)
 {
@@ -741,9 +683,6 @@ void MC_Fault_Check_Process(void)
 	//温度传感器故障检测
 	MC_Fault_NTCSensor_Process(MC_RunInfo.T_PCB, MC_RunInfo.T_Roil, &MC_ErrorCode);
 
-	//踏频传感器故障检测
-	MC_Fault_CadenceSensor_Process(ADC_SensorData.TorqueSensor, MC_RunInfo.BikeSpeed, &MC_ErrorCode);
-
 	//指拨故障检测
 	MC_Fault_GasSensor_Process(ADC1_Result[ADC1_RANK_GAS], &MC_ErrorCode);
 
@@ -751,7 +690,7 @@ void MC_Fault_Check_Process(void)
 	MC_Fault_MOS_Process(ADC_3ShuntCurrent_RMSValue, &MC_ErrorCode);
 
   //TE故障检测
-	MC_Fault_TE_Process(&MC_TE_SensorStatus, IsComOK_TE, &MC_ErrorCode);
+	MC_Fault_TE_Process(&MC_TE_SensorStatus, IsComOK_TE.IsOK_Flag, &MC_ErrorCode);
 	
 	//电路故障检测
 	MC_Fault_Circuit_Process(&MC_ErrorCode);

+ 1 - 1
User/Src/motor_control.c

@@ -1064,4 +1064,4 @@ void SpdProportion_calculate(void)
 			SpdProportion = test_SpdProportionAver;
 		}
 	}
-}
+}

+ 17 - 2
User/Src/tasks.c

@@ -42,6 +42,9 @@ void HAL_SYSTICK_Callback(void)
 	//踏频传感器采集及计算
 	CadenceSensor_Process(&MC_CadenceResult, MC_ConfigParam.StopTime);
 	
+	//踏頻傳感器故障檢測
+	MC_Fault_CadenceSensor_Process(ADC_SensorData.TorqueSensor, MC_RunInfo.BikeSpeed, &MC_ErrorCode);
+	
 	//根据电机工作模式(MC_WorkMode)、力矩传感器和指拨AD值(ADC_SensorData)、控制档位(MC_ControlCode.GearSt)计算控制FOC输入值(MC_CalParam)
 	if(((uint8_t)(MC_WorkMode ^ MC_WorkMode_Back) != (uint8_t)~0) || 
 		 ((uint8_t)(MC_ControlCode.GearSt ^ MC_ControlCode_Back.GearSt) != (uint8_t)~0) ||
@@ -313,7 +316,6 @@ void MC_TE_SensorData_Process(uint16_t Speed, MC_TE_SensorData_Struct_t* p_MC_TE
 	if((HAL_GetTick() - PeriodTimeCnt) >= 500)
 	{
 	  SendCmdData(&UART_TxBuff_Struct3, MODE_REPORT, 0x1014, (uint8_t*)&p_MC_TE_SensorData->AD_Torque);
-		IsComOK_TE = FALSE;
 		PeriodTimeCnt = HAL_GetTick();
 	}
 }
@@ -408,7 +410,7 @@ void PowerOff_Process(void)
 	SendData(ID_MC_BC, MODE_REPORT, 0x1305, (uint8_t*)"READY");
 }
 
-//CAN设备PBU通信状态检测处理
+//CAN设备PBU、HMI、BMS通信状态检测处理
 void MC_CanRxCheck_Process(MC_SupportFlag_Struct_t NoPBU_Flag, MC_SupportFlag_Struct_t NoHMI_Flag, MC_WorkMode_Struct_t WorkMode, MC_GearSt_Struct_t* GearSt)
 {
   if((WorkMode == MC_WorkMode_Run) && (NoPBU_Flag == MC_SUPPORT_DISABLE)) //不支持无PBU,且正常运行模式
@@ -480,6 +482,19 @@ void MC_CanRxCheck_Process(MC_SupportFlag_Struct_t NoPBU_Flag, MC_SupportFlag_St
 	}
 }
 
+//UART设备TE通信状态检测处理
+void MC_UartRxCheck_Process(void)
+{
+  //TE通信状态检测
+	if(IsComOK_TE.IsOK_Flag == TRUE)
+	{
+		if((HAL_GetTick() - IsComOK_TE.OK_TrigTime) > 2000)  
+		{  
+			IsComOK_TE.IsOK_Flag = FALSE;
+		}
+	}
+}
+
 //运行总时间计算
 void MC_RunTime_Cal(uint32_t* p_Runtime)
 {

+ 2 - 1
User/Src/uart_process.c

@@ -12,7 +12,8 @@ void UART_DataProcess(uint8_t Mode, uint16_t Command, uint8_t* Data)
 	static uint8_t EnterCnt = 0;
 	
 	//ͨÐÅÕý³£±êÖ¾
-	IsComOK_TE = TRUE;
+	IsComOK_TE.IsOK_Flag = TRUE;
+	IsComOK_TE.OK_TrigTime = HAL_GetTick();
 	
 	//ÃüÁî½âÎö
 	DataLength = (uint8_t)(Command &0x00FF);

+ 5 - 4
User/Src/var.c

@@ -25,9 +25,10 @@ MC_TE_SensorData_Struct_t MC_TE_SensorData;               //
 uint16_t MC_TE_SyncClockFreqScan;                         //TE同步时钟频率
 MC_AssistParam_Struct_t MC_AssisParam;		                //助力输出计算参数
 uint8_t MC_WalkMode_Persent = 100;                        //推行模式最高转速百分比设置
-#if INSERT_FAULT_TEST_FLAG
-uint8_t InsertFault_Flag = INSERT_FAULT_NC;
-#endif
+ComOK_Check_Struct_t IsComOK_TE = {TRUE, 0};              //TE通信状态标志
+ComOK_Check_Struct_t IsComOK_PBU = {TRUE, 0};             //PBU通信状态标志
+ComOK_Check_Struct_t IsComOK_HMI = {TRUE, 0};             //HMI通信状态标志
+ComOK_Check_Struct_t IsComOK_BMS = {TRUE, 0};             //BMS通信状态标志
 
 //BMS默认设计信息
 const BMS_DesignInfo_Struct_t BMS_DesignInfo_Default =
@@ -260,7 +261,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"V0r5r0_20190610.", 16);//QD007E,增加修改同步IO和同步时钟的跳线,QD004D第二版设计可以引用
-	strncpy(MC_VerInfo.FW_Version, (char*)"V1r0r0_20190814.", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V1r0r1_20190826.", 16);
 	
 	//MC校验信息初始化,校验码从EEPROM读取
 	uint32_t ID_Temp;

+ 84 - 0
修改说明.txt

@@ -0,0 +1,84 @@
+适用于QD004E主控板,和QD004D第二次改进的主控板
+
+V0.1.0 20190710
+基于QD007D_CTRL_APP修改,按照QD007E主控板进行改动。
+1、3相电流采样的输入通道按照原理图调整;
+2、设备在线检测,默认修改为全部在线;
+3、取消尾灯的控制,输出给变速器的12V初始化关闭;
+4、设备校验的MAC_ID数组类型修改;
+5、蹋频检测计算加入滤波处理;
+6、接收到CDL或PBU的控制档位指令时,及时更改运行信息中的档位值;
+7、MODE的SN的默认值写入更改实现方式,解决第一次写入时,对HW第一个字符产生影响;
+8、增加Volans VolansPlus的控制参数,实现根据系列号来调取对应的参数。
+
+QD007E_CTR_APP-torque_compensation
+基于V0.1.0修改,助力控制改为按照Damon调试的控制逻辑
+FW版本号为V0.1.0_20190712,已用于第一批20190712的Volans和Volans Plus出货
+
+QD007E_CTR_APP-torque_compensation_1
+按照V0.2.0_20190717修改
+1、增加低踏频停机时延时加长;
+2、上位机查询历史信息时,ODO除10处理;
+3、版本号记为V0.1.1_20190719
+
+V0.2.0 20190723
+1、EEPROM写入的延时10ms时加入看门狗清零,避免清除指令或写入数据长度过长导致复位
+2、清除故障插入测试相关的定义
+3、踏频滤波的累加值由uint32_t改为int32_t
+4、踏频停机判断,在低踏频时延长停机判断时间
+5、收到写入电机控制参数指令时,初始化助力参数,避免写完系列号时需要复位才能生效
+6、发送历史信息时,把ODO除10处理
+7、收到上位机控制档位指令时,PBU判断超时的变量更新,解决威格测工机无法设置助力档位的问题
+8、修改助力模式,限速的处理,超限速值后的衰减斜率和恢复点
+9、修改Volans和Volans Plus的助力参数
+
+V1.0.0 20190814
+1、在MC_CanRxCheck_Process()中增加对HMI、BMS实时判断是否离线,相应的CAN解析中做标志置位处理;
+2、三相电流采集中A相IO初始化修改;
+3、MC_TE_SensorStatus中MCU_Voltage采用由TE发送过来的值,而不是根据主控MCU采集计算;
+4、增加TIM2采集计算TE发送的1M同步信号频率,并根据TE的UART发送过来的值作比较判断;
+5、修改刹车和GearSensor的检测,并增加根据GearSensor_Flag状态标志控制电机停机;
+6、增加骑行总时间的统计和存储功能,变量名称为ODO_Time;
+7、收到BMS运行信息时,增加对RemainDis.IsBMS_ComOK_Flag的置位,用于续航计算;
+8、增加HMI和MC之间关于轮胎周长的查询和配置功能;
+9、增加ECO、NORM档位变化时限流值的线性变化;
+10、低力矩停机时间的计算方法优化;
+11、12V电源驱动函数的优化;
+12、低压和过压保护修改为根据设置马达参数中的额定电压判断;
+13、开路计算SOC改为根据放电曲线中的容量值股钻;
+14、车速计算方法优化,改用滑动滤波算法,并在前一个信号触发后超时开始对速度衰减;
+15、版本号修改为V1.0.0_20190814
+
+V0.2.1 20190821
+1、三相电流采集中A相IO初始化修改;
+2、看门狗初始化位置调整;
+3、增加了母线电压的滤波,续航计算变量初始化直接采用ADC转化结果;
+4、电池放电曲线表更新为SKY01电池;
+5、增加骑行总时间的统计和存储功能,变量名称为ODO_Time;
+6、增加HMI和MC之间关于轮胎周长的查询和配置功能;
+7、修改Key扫描函数处理逻辑;
+8、前馈调整为根据电机设定的额定转速值;
+9、增加ECO、NORM档位变化时限流值的线性变化;
+10、低力矩停机由180度更改为120度;
+11、低压和过压保护修改为根据设置马达参数中的额定电压判断;
+12、开路计算SOC改为根据放电曲线中的容量值估算;
+13、版本号修改为V0.2.1_20190821
+
+V1.0.1 20190826
+1、修改UART通信失联检测方式,在While(1)中进行判断;
+2、增加母线电压的滤波处理;
+3、看门狗初始化位置调整,避免开机时出现故障;
+4、修改踏频传感器故障检测方法,调整到1ms中断中检测;
+5、故障码定义中增加TE MCU的标志位,并且对TE的故障检测进行分类和修改;
+6、NTC故障检测的逻辑调整
+
+
+
+
+
+
+
+
+
+
+