Просмотр исходного кода

2.1.5_20201130 TC033001A_V0.1
1、减小指拨的滤波深度,解决停机延时较长的问题;
2、优化速度传感器滤波,去掉较大值,并在停机时清空滤波数组,解决第一圈信号有随机值问题;
3、调整踏频模式的控制方法,目前存在起步抖动、限速点停机等问题。

dail.zhou 4 лет назад
Родитель
Сommit
208de3b845

+ 1 - 1
Core/Src/adc.c

@@ -488,7 +488,7 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 	//更新指拨
 	Temp_32 = ADC1_Result[ADC1_RANK_GAS] - GasSensor_OffSet;
 	Temp_32 = (Temp_32 <= 0) ? 0 : Temp_32;
-	GasSensorFltSum += ((Temp_32 << 10) - GasSensorFltSum) >> 10;  //滤波延时0.33 * 1024 = 338ms
+	GasSensorFltSum += ((Temp_32 << 10) - GasSensorFltSum) >> 8;  //滤波延时0.33 * 256 = 84ms
 	ADC_SensorData.GasSensor = GasSensorFltSum >> 10;
 	
 	//更新MCU温度

+ 7 - 1
Core/Src/gpio.c

@@ -151,6 +151,7 @@ void Disable_PwmGpio_Out(void)
 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 {
 	static uint32_t SignalTrigCount = 0;
+	static uint32_t DiffTime_ms_Old = 0;
 	
 	if(GPIO_Pin == SPEED_SENSOR_Pin)
 	{
@@ -159,14 +160,19 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 		if(MC_SpeedSensorData.IsStopFlag == TRUE)
 		{
 		  MC_SpeedSensorData.TrigSysTime = HAL_GetTick();
-			MC_SpeedSensorData.DiffTime_ms = 0;
+			MC_SpeedSensorData.DiffTime_ms = 0xFFFFFFFF;
 			MC_SpeedSensorData.IsStopFlag = FALSE;
 		}
 		else
 		{
 		  MC_SpeedSensorData.DiffTime_ms = HAL_GetTick() - MC_SpeedSensorData.TrigSysTime;
+			if(MC_SpeedSensorData.DiffTime_ms < 75)//限制车速测量最高值,抗干扰,3600/0.075*2.19/1000 = 105km/h
+			{
+			  MC_SpeedSensorData.DiffTime_ms = DiffTime_ms_Old;
+			}
 			MC_SpeedSensorData.TrigSysTime = HAL_GetTick();
 		}
+		DiffTime_ms_Old = MC_SpeedSensorData.DiffTime_ms;
 		//车轮圈数更新
 		SignalTrigCount++;
 		MC_SpeedSensorData.WheelTurnCount = SignalTrigCount / ((MC_ConfigParam1.SpeedSensorPoles == 0) ? 1: MC_ConfigParam1.SpeedSensorPoles);

+ 39 - 107
MDK-ARM/JLinkLog.txt

@@ -1,108 +1,40 @@
 
-T1864 000:306 SEGGER J-Link V5.12e Log File (0001ms, 0263ms total)
-T1864 000:306 DLL Compiled: Apr 29 2016 15:03:58 (0001ms, 0263ms total)
-T1864 000:306 Logging started @ 2020-09-03 10:59 (0001ms, 0263ms total)
-T1864 000:307 JLINK_SetWarnOutHandler(...) (0000ms, 0263ms total)
-T1864 000:307 JLINK_OpenEx(...)
-Firmware: J-Link V9 compiled Sep  1 2016 18:29:50
-Hardware: V9.70
-S/N: 59700618
-Feature(s): RDI, FlashBP, FlashDL, JFlash, GDB  returns O.K. (0264ms, 0527ms total)
-T1864 000:571 JLINK_SetErrorOutHandler(...) (0000ms, 0527ms total)
-T1864 000:571 JLINK_ExecCommand("ProjectFile = "C:\Users\xuwei\Desktop\Motor\QD007E_20190711\QD007E_CTRL_APP\MDK-ARM\JLinkSettings.ini"", ...)  returns 0x00 (0001ms, 0528ms total)
-T1864 000:572 JLINK_ExecCommand("Device = STM32F103RB", ...)Device "STM32F103RB" selected.  returns 0x00 (0000ms, 0528ms total)
-T1864 000:572 JLINK_ExecCommand("DisableConnectionTimeout", ...)  returns 0x01 (0000ms, 0528ms total)
-T1864 000:572 JLINK_GetHardwareVersion()  returns 0x17AE8 (0000ms, 0528ms total)
-T1864 000:572 JLINK_GetDLLVersion()  returns 51205 (0000ms, 0528ms total)
-T1864 000:572 JLINK_GetFirmwareString(...) (0000ms, 0528ms total)
-T1864 000:573 JLINK_GetDLLVersion()  returns 51205 (0000ms, 0528ms total)
-T1864 000:573 JLINK_GetCompileDateTime() (0000ms, 0528ms total)
-T1864 000:573 JLINK_GetFirmwareString(...) (0000ms, 0528ms total)
-T1864 000:573 JLINK_GetHardwareVersion()  returns 0x17AE8 (0000ms, 0528ms total)
-T1864 000:573 JLINK_TIF_Select(JLINKARM_TIF_SWD)  returns 0x00 (0001ms, 0529ms total)
-T1864 000:574 JLINK_SetSpeed(5000) (0000ms, 0529ms total)
-T1864 000:574 JLINK_GetId() >0x108 TIF>Found SWD-DP with ID 0x1BA01477 >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF>
- >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x21 TIF> >0x108 TIF>Found SWD-DP with ID 0x1BA01477 >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF>
- >0x28 TIF> >0x0D TIF> >0x21 TIF> >0x0D TIF> >0x21 TIF>Found Cortex-M3 r1p1, Little endian. -- CPU_ReadMem(4 bytes @ 0xE000EDF0) -- CPU_ReadMem(4 bytes @ 0xE0002000)FPUnit: 6 code (BP) slots and 2 literal slots -- CPU_ReadMem(4 bytes @ 0xE000EDFC) -- CPU_ReadMem(4 bytes @ 0xE0001000) -- CPU_WriteMem(4 bytes @ 0xE0001000) -- CPU_ReadMem(4 bytes @ 0xE000ED88) -- CPU_WriteMem(4 bytes @ 0xE000ED88) -- CPU_ReadMem(4 bytes @ 0xE000ED88) -- CPU_WriteMem(4 bytes @ 0xE000ED88)CoreSight components:
-ROMTbl 0 @ E00FF000 -- CPU_ReadMem(16 bytes @ 0xE00FF000) -- CPU_ReadMem(16 bytes @ 0xE000EFF0) -- CPU_ReadMem(16 bytes @ 0xE000EFE0)ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 001BB000 SCS -- CPU_ReadMem(16 bytes @ 0xE0001FF0) -- CPU_ReadMem(16 bytes @ 0xE0001FE0)ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 001BB002 DWT -- CPU_ReadMem(16 bytes @ 0xE0002FF0) -- CPU_ReadMem(16 bytes @ 0xE0002FE0)ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 000BB003 FPB -- CPU_ReadMem(16 bytes @ 0xE0000FF0)
- -- CPU_ReadMem(16 bytes @ 0xE0000FE0)ROMTbl 0 [3]: FFF01000, CID: B105E00D, PID: 001BB001 ITM -- CPU_ReadMem(16 bytes @ 0xE00FF010) -- CPU_ReadMem(16 bytes @ 0xE0040FF0) -- CPU_ReadMem(16 bytes @ 0xE0040FE0)ROMTbl 0 [4]: FFF41000, CID: B105900D, PID: 001BB923 TPIU-Lite >0x0D TIF> >0x21 TIF>  returns 0x1BA01477 (0019ms, 0548ms total)
-T1864 000:593 JLINK_GetDLLVersion()  returns 51205 (0000ms, 0548ms total)
-T1864 000:593 JLINK_CORE_GetFound()  returns 0x30000FF (0000ms, 0548ms total)
-T1864 000:593 JLINK_GetDebugInfo(0x100) -- Value=0xE00FF000  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_GetDebugInfo(0x100) -- Value=0xE00FF000  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_GetDebugInfo(0x101) -- Value=0x00000000  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_ReadMem (0xE0041FF0, 0x0010 Bytes, ...) -- CPU is running -- CPU_ReadMem(16 bytes @ 0xE0041FF0) - Data: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_GetDebugInfo(0x102) -- Value=0x00000000  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_GetDebugInfo(0x103) -- Value=0xE0040000  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_GetDebugInfo(0x104) -- Value=0xE0000000  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_GetDebugInfo(0x105) -- Value=0xE0001000  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_GetDebugInfo(0x106) -- Value=0xE0002000  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_GetDebugInfo(0x107) -- Value=0xE000E000  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_GetDebugInfo(0x10C) -- Value=0xE000EDF0  returns 0x00 (0000ms, 0548ms total)
-T1864 000:593 JLINK_ReadMemU32(0xE000ED00, 0x0001 Items, ...) -- CPU is running -- CPU_ReadMem(4 bytes @ 0xE000ED00) - Data: 31 C2 1F 41  returns 0x01 (0001ms, 0549ms total)
-T1864 000:594 JLINK_SetResetType(JLINKARM_RESET_TYPE_NORMAL)  returns JLINKARM_RESET_TYPE_NORMAL (0000ms, 0549ms total)
-T1864 000:594 JLINK_Reset() -- CPU is running -- CPU_WriteMem(4 bytes @ 0xE000EDF0) -- CPU is running -- CPU_WriteMem(4 bytes @ 0xE000EDFC) >0x35 TIF> -- CPU is running -- CPU_WriteMem(4 bytes @ 0xE000ED0C) -- CPU is running -- CPU_ReadMem(4 bytes @ 0xE000EDF0) -- CPU is running -- CPU_ReadMem(4 bytes @ 0xE000EDF0) -- CPU is running -- CPU_WriteMem(4 bytes @ 0xE000EDF0) -- CPU is running -- CPU_WriteMem(4 bytes @ 0xE000EDFC) -- CPU is running -- CPU_ReadMem(4 bytes @ 0xE000EDF0)
- -- CPU_WriteMem(4 bytes @ 0xE0002000) -- CPU_ReadMem(4 bytes @ 0xE000EDFC) -- CPU_ReadMem(4 bytes @ 0xE0001000) (0015ms, 0564ms total)
-T1864 000:609 JLINK_ReadReg(R15 (PC))  returns 0x08000100 (0000ms, 0564ms total)
-T1864 000:609 JLINK_ReadReg(XPSR)  returns 0x01000000 (0000ms, 0564ms total)
-T1864 000:609 JLINK_Halt()  returns 0x00 (0000ms, 0564ms total)
-T1864 000:609 JLINK_IsHalted()  returns TRUE (0000ms, 0564ms total)
-T1864 000:609 JLINK_ReadMemU32(0xE000EDF0, 0x0001 Items, ...) -- CPU_ReadMem(4 bytes @ 0xE000EDF0) - Data: 03 00 03 00  returns 0x01 (0001ms, 0565ms total)
-T1864 000:610 JLINK_WriteU32(0xE000EDF0, 0xA05F0003) -- CPU_WriteMem(4 bytes @ 0xE000EDF0)  returns 0x00 (0000ms, 0565ms total)
-T1864 000:610 JLINK_WriteU32(0xE000EDFC, 0x01000000) -- CPU_WriteMem(4 bytes @ 0xE000EDFC)  returns 0x00 (0000ms, 0565ms total)
-T1864 000:610 JLINK_GetHWStatus(...)  returns 0x00 (0000ms, 0565ms total)
-T1864 000:610 JLINK_GetNumBPUnits(Type = 0xFFFFFF00)  returns 0x06 (0000ms, 0565ms total)
-T1864 000:610 JLINK_GetNumBPUnits(Type = 0xF0)  returns 0x2000 (0000ms, 0565ms total)
-T1864 000:610 JLINK_GetNumWPUnits()  returns 0x04 (0000ms, 0565ms total)
-T1864 000:611 JLINK_GetSpeed()  returns 0xFA0 (0000ms, 0565ms total)
-T1864 000:611 JLINK_ReadMemU32(0xE000E004, 0x0001 Items, ...) -- CPU_ReadMem(4 bytes @ 0xE000E004) - Data: 01 00 00 00  returns 0x01 (0000ms, 0565ms total)
-T1864 000:611 JLINK_ReadMemU32(0xE000E004, 0x0001 Items, ...) -- CPU_ReadMem(4 bytes @ 0xE000E004) - Data: 01 00 00 00  returns 0x01 (0000ms, 0565ms total)
-T1864 000:611 JLINK_WriteMem(0xE0001000, 0x001C Bytes, ...) - Data: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... -- CPU_WriteMem(28 bytes @ 0xE0001000)  returns 0x1C (0001ms, 0566ms total)
-T1864 000:612 JLINK_ReadMem (0xE0001000, 0x001C Bytes, ...) -- CPU_ReadMem(28 bytes @ 0xE0001000) - Data: 01 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 ...  returns 0x00 (0000ms, 0566ms total)
-T1864 000:612 JLINK_ReadReg(R15 (PC))  returns 0x08000100 (0000ms, 0566ms total)
-T1864 000:612 JLINK_ReadReg(XPSR)  returns 0x01000000 (0000ms, 0566ms total)
-T1864 000:713 JLINK_SetResetType(JLINKARM_RESET_TYPE_NORMAL)  returns JLINKARM_RESET_TYPE_NORMAL (0000ms, 0566ms total)
-T1864 000:713 JLINK_Reset() -- CPU_WriteMem(4 bytes @ 0xE000EDF0) -- CPU_WriteMem(4 bytes @ 0xE000EDFC) >0x35 TIF> -- CPU_WriteMem(4 bytes @ 0xE000ED0C) -- CPU_ReadMem(4 bytes @ 0xE000EDF0) -- CPU_ReadMem(4 bytes @ 0xE000EDF0) -- CPU_WriteMem(4 bytes @ 0xE000EDF0) -- CPU_WriteMem(4 bytes @ 0xE000EDFC) -- CPU is running -- CPU_ReadMem(4 bytes @ 0xE000EDF0) -- CPU_WriteMem(4 bytes @ 0xE0002000) -- CPU_ReadMem(4 bytes @ 0xE000EDFC) -- CPU_ReadMem(4 bytes @ 0xE0001000) (0014ms, 0580ms total)
-T1864 000:727 JLINK_ReadReg(R15 (PC))  returns 0x08000100 (0000ms, 0580ms total)
-T1864 000:727 JLINK_ReadReg(XPSR)  returns 0x01000000 (0000ms, 0580ms total)
-T1864 000:728 JLINK_ReadMem (0x08000100, 0x003C Bytes, ...) -- CPU_ReadMem(64 bytes @ 0x08000100) -- Updating C cache (64 bytes @ 0x08000100) -- Read from C cache (60 bytes @ 0x08000100) - Data: 06 48 80 47 06 48 00 47 FE E7 FE E7 FE E7 FE E7 ...  returns 0x00 (0000ms, 0580ms total)
-T083C 002:108 JLINK_SetBPEx(Addr = 0x0800438C, Type = 0xFFFFFFF2)  returns 0x00000001 (0000ms, 0580ms total)
-T083C 002:108 JLINK_Go() -- CPU_WriteMem(4 bytes @ 0xE0002000) -- CPU_ReadMem(4 bytes @ 0xE0001000) -- CPU_WriteMem(4 bytes @ 0xE0002008) -- CPU_WriteMem(4 bytes @ 0xE000200C) -- CPU_WriteMem(4 bytes @ 0xE0002010) -- CPU_WriteMem(4 bytes @ 0xE0002014) -- CPU_WriteMem(4 bytes @ 0xE0002018) -- CPU_WriteMem(4 bytes @ 0xE000201C) -- CPU_WriteMem(4 bytes @ 0xE0001004) (0002ms, 0582ms total)
-T083C 002:211 JLINK_IsHalted()  returns FALSE (0000ms, 0582ms total)
-T083C 002:312 JLINK_IsHalted()  returns TRUE (0001ms, 0583ms total)
-T083C 002:313 JLINK_Halt()  returns 0x00 (0000ms, 0582ms total)
-T083C 002:313 JLINK_IsHalted()  returns TRUE (0000ms, 0582ms total)
-T083C 002:313 JLINK_IsHalted()  returns TRUE (0000ms, 0582ms total)
-T083C 002:313 JLINK_IsHalted()  returns TRUE (0000ms, 0582ms total)
-T083C 002:313 JLINK_ReadReg(R15 (PC))  returns 0x0800438C (0000ms, 0582ms total)
-T083C 002:313 JLINK_ReadReg(XPSR)  returns 0x61000000 (0000ms, 0582ms total)
-T083C 002:313 JLINK_ClrBPEx(BPHandle = 0x00000001)  returns 0x00 (0001ms, 0583ms total)
-T083C 002:314 JLINK_ReadMemU32(0xE000ED30, 0x0001 Items, ...) -- CPU_ReadMem(4 bytes @ 0xE000ED30) - Data: 02 00 00 00  returns 0x01 (0000ms, 0583ms total)
-T083C 002:314 JLINK_ReadMemU32(0xE0001028, 0x0001 Items, ...) -- CPU_ReadMem(4 bytes @ 0xE0001028) - Data: 00 00 00 00  returns 0x01 (0000ms, 0583ms total)
-T083C 002:314 JLINK_ReadMemU32(0xE0001038, 0x0001 Items, ...) -- CPU_ReadMem(4 bytes @ 0xE0001038) - Data: 00 02 00 00  returns 0x01 (0000ms, 0583ms total)
-T083C 002:314 JLINK_ReadMemU32(0xE0001048, 0x0001 Items, ...) -- CPU_ReadMem(4 bytes @ 0xE0001048) - Data: 00 00 00 00  returns 0x01 (0001ms, 0584ms total)
-T083C 002:315 JLINK_ReadMemU32(0xE0001058, 0x0001 Items, ...) -- CPU_ReadMem(4 bytes @ 0xE0001058) - Data: 00 00 00 00  returns 0x01 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R0)  returns 0x0800438D (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R1)  returns 0x20002010 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R2)  returns 0x00000000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R3)  returns 0x08014905 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R4)  returns 0x0801788C (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R5)  returns 0x0801788C (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R6)  returns 0x00000000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R7)  returns 0x00000000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R8)  returns 0x00000000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R9)  returns 0x20000160 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R10)  returns 0x00000000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R11)  returns 0x00000000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R12)  returns 0x40010000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R13 (SP))  returns 0x20002000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R14)  returns 0x080042D1 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(R15 (PC))  returns 0x0800438C (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(XPSR)  returns 0x61000000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(MSP)  returns 0x20002000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(PSP)  returns 0x20001000 (0000ms, 0584ms total)
-T083C 002:315 JLINK_ReadReg(CFBP)  returns 0x00000000 (0000ms, 0584ms total)
-T1864 002:321 JLINK_ReadMem (0x0800438C, 0x003C Bytes, ...) -- CPU_ReadMem(128 bytes @ 0x08004380) -- Updating C cache (128 bytes @ 0x08004380) -- Read from C cache (60 bytes @ 0x0800438C) - Data: 10 B5 72 B6 06 48 00 79 AA 28 01 D0 0D F0 84 FC ...  returns 0x00 (0000ms, 0584ms total)
-T1864 003:294 JLINK_Close() -- CPU_WriteMem(4 bytes @ 0xE0002008) -- CPU_ReadMem(4 bytes @ 0xE0001000) >0x42 TIF> >0x28 TIF> >0x0D TIF> >0x21 TIF> (0002ms, 0586ms total)
-T1864 003:294  (0002ms, 0586ms total)
-T1864 003:294 Closed (0002ms, 0586ms total)
+T1150 000:431 SEGGER J-Link V4.98e Log File (0000ms, 0291ms total)
+T1150 000:431 DLL Compiled: May  5 2015 11:00:52 (0000ms, 0291ms total)
+T1150 000:431 Logging started @ 2020-11-30 17:32 (0000ms, 0291ms total)
+T1150 000:431 JLINK_SetWarnOutHandler(...) (0000ms, 0291ms total)
+T1150 000:431 JLINK_OpenEx(...)
+Firmware: J-Link V9 compiled Jul 19 2017 16:11:45
+Hardware: V9.40
+S/N: 59404884
+Feature(s): RDI, GDB, FlashDL, FlashBP, JFlash  returns O.K. (0289ms, 0580ms total)
+T1150 000:720 JLINK_SetErrorOutHandler(...) (0000ms, 0580ms total)
+T1150 000:720 JLINK_ExecCommand("ProjectFile = "D:\SoftDesign\20190311_QD007A_CTL\QD007E_CTRL_APP\QD007E_CTRL_APP\MDK-ARM\JLinkSettings.ini"", ...)  returns 0x00 (0004ms, 0584ms total)
+T1150 000:724 JLINK_ExecCommand("Device = STM32F103RB", ...)Device "STM32F103RB" selected.  returns 0x00 (0000ms, 0584ms total)
+T1150 000:724 JLINK_ExecCommand("DisableConnectionTimeout", ...)  returns 0x01 (0000ms, 0584ms total)
+T1150 000:724 JLINK_GetHardwareVersion()  returns 0x16F30 (0000ms, 0584ms total)
+T1150 000:724 JLINK_GetDLLVersion()  returns 49805 (0000ms, 0584ms total)
+T1150 000:724 JLINK_GetFirmwareString(...) (0000ms, 0584ms total)
+T1150 000:724 JLINK_GetDLLVersion()  returns 49805 (0000ms, 0584ms total)
+T1150 000:724 JLINK_GetCompileDateTime() (0000ms, 0584ms total)
+T1150 000:724 JLINK_GetFirmwareString(...) (0000ms, 0584ms total)
+T1150 000:724 JLINK_GetHardwareVersion()  returns 0x16F30 (0000ms, 0584ms total)
+T1150 000:724 JLINK_TIF_Select(JLINKARM_TIF_SWD)  returns 0x00 (0005ms, 0589ms total)
+T1150 000:729 JLINK_SetSpeed(5000) (0001ms, 0590ms total)
+T1150 000:730 JLINK_SetResetType(JLINKARM_RESET_TYPE_NORMAL)  returns JLINKARM_RESET_TYPE_NORMAL (0000ms, 0590ms total)
+T1150 000:730 JLINK_Reset() >0x108 TIF> >0x108 TIF> >0x108 TIF> >0x108 TIF> >0x108 TIF> >0x108 TIF> >0x108 TIF> >0x108 TIF> >0x108 TIF> >0x108 TIF> >0x108 TIF> >0x108 TIF>STM32Fxxxx: Cannot attach to CPU. Trying connect under reset. >0x108 TIF> >0x108 TIF>
+                JLINK_EMU_HasCapEx(0x0000002C)  returns 0x01 (0000ms, 0000ms total)
+               >0x0D TIF>
+                JLINK_EMU_HasCapEx(0x0000002C)  returns 0x01 (0000ms, 0000ms total)
+               >0x0D TIF>JLINK_GetId() >0x108 TIF> >0x108 TIF>STM32Fxxxx: Cannot attach to CPU. Trying connect under reset. >0x108 TIF> >0x108 TIF>
+                JLINK_EMU_HasCapEx(0x0000002C)  returns 0x01 (0000ms, 0000ms total)
+               >0x0D TIF>
+                JLINK_EMU_HasCapEx(0x0000002C)  returns 0x01 (0000ms, 0000ms total)
+               >0x0D TIF>  returns 0x00000000 (0332ms, 1794ms total)
+T1150 001:935 JLINK_GetId() >0x108 TIF> >0x108 TIF>STM32Fxxxx: Cannot attach to CPU. Trying connect under reset. >0x108 TIF> >0x108 TIF>
+                JLINK_EMU_HasCapEx(0x0000002C)  returns 0x01 (0000ms, 0000ms total)
+               >0x0D TIF>  returns 0x00000000 (0323ms, 2117ms total)
+T1150 002:261 JLINK_GetFirmwareString(...) (0000ms, 2117ms total)
+T1150 002:788 JLINK_Close() (0001ms, 2118ms total)
+T1150 002:788  (0001ms, 2118ms total)
+T1150 002:788 Closed (0001ms, 2118ms total)

BIN
MDK-ARM/bin/MC_VS7500-TC033001A-V2.1.5.0.1_20201130.bin


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 1 - 0
User/Inc/math_tools.h

@@ -24,4 +24,5 @@ extern int16_t accDecProcess(int16_t V_Set,	\
 											int32_t* V_SetMiddle);
 extern uint16_t Standard_deviation_aver(uint16_t *data,uint8_t len, uint16_t *pAver);
 extern uint8_t CheckArrayIs0(uint8_t* Data, uint16_t Len);
+extern void ArrayFillZero(uint16_t* Array, uint16_t Length);
 #endif

+ 1 - 1
User/Inc/motor_control.h

@@ -25,7 +25,7 @@ typedef struct
 typedef struct
 {
 	FlagStatus MotorStopLock_Flag; //停机锁定标志
-	uint16_t CadenceInput;         //力矩采集值
+	uint16_t CadenceInput;         //踏频采集值
   TrueOrFalse_Flag_Struct_t IsEnterFlag; //进入踏频模式标志
 	uint32_t MotorSpeedSetBegin;           //进入踏频模式电机转速值
 }MC_CadenceProcess_Param_Struct_t;

+ 9 - 0
User/Src/math_tools.c

@@ -387,3 +387,12 @@ uint8_t CheckArrayIs0(uint8_t* Data, uint16_t Len)
 	return 0;
 }
 
+/*Ęý×éĚîłä0*/
+void ArrayFillZero(uint16_t* Array, uint16_t Length)
+{
+  uint16_t i;
+	for(i=0; i<Length; i++)
+	{
+	  Array[i] = 0;
+	}
+}

+ 108 - 48
User/Src/motor_control.c

@@ -172,6 +172,7 @@ MC_AssistRunMode_Struct_t MC_JudgeAsistRunMode_Process(MC_GearSt_Struct_t GearSt
 			  MC_AssistRunMode_Result = MC_AssistRunMode_CADENCE;
 			}
 			//进入力矩模式
+			else
 			{
 			  MC_AssistRunMode_Result = MC_AssistRunMode_TORQUE;
 			}
@@ -610,10 +611,25 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
 	int16_t SpdMotorByIdc = 0;                 //限流内环输出
 	uint16_t MotorSpeedSet = 0;                //电机转速设定,根据踏频输入计算
 	uint16_t TorqueStartData, TorqueStopData;  //低力矩停机值
+	uint16_t TorqueStopDelayTime = 0;          //低力矩停机延时
+	static uint16_t Cadence_Old = 0;           //踏频上一刻值
+	static int16_t Cadence_Diff_Sum = 0;       //踏频变化累积值
 	static uint32_t TorqueStopDelayTimeCnt = 0;//低力矩停机计时
 	static FlagStatus IsEnterGasMode = RESET;
 	static uint16_t CurrentLimitPresent;       //限流实际值,做升降速处理
 	uint16_t CurrentLimitSet;                  //限流设置值,不同助力档位更新
+	uint16_t SpeedAcc = 32;                    //转速加速曲线,1ms转速升 32 / 32 = 1rpm
+	uint16_t SpeedDec = 8;                     //转速减速曲线,1ms转速降 8 / 32 = 0.25rpm
+	
+	#define CADENCE_MODE_SOFT_SATRT 1
+	
+	#if CADENCE_MODE_SOFT_SATRT
+	static FlagStatus SoftStartFlag = SET;
+	static uint16_t SoftStartDelayTimeCount = 0;
+	uint16_t SoftStartAcc = 0;
+	#endif
+	
+	MC_CadenceProcess_Param.CadenceInput = MC_RunInfo.Cadence;
 	
 	//根据指拨控制
 	if((GasCtrlMode == MC_SUPPORT_ENABLE) && (AdcSenorData.GasSensor > 50))
@@ -625,10 +641,10 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
 		  MC_CadenceProcess_Param.MotorStopLock_Flag = SET;
 		}
 		//设定马达转速
-//		MotorSpeedSet = (AdcSenorData.GasSensor * MC_MotorParam.Rate_Speed) >> 11;
-		if(MotorSpeedSet < (CadenceData.Cadence_Data * 1390) >> 7)
+		MotorSpeedSet = (AdcSenorData.GasSensor * MC_MotorParam.Rate_Speed) >> 11;
+		if(MotorSpeedSet < (MC_CadenceProcess_Param.CadenceInput * 1445) >> 7)
 		{
-		  MotorSpeedSet = (CadenceData.Cadence_Data * 1390) >> 7;
+		  MotorSpeedSet = (MC_CadenceProcess_Param.CadenceInput * 1445) >> 7;
 		}
 		MotorSpeedSet = MotorSpeedSet > MC_MotorParam.Rate_Speed ? MC_MotorParam.Rate_Speed : MotorSpeedSet;
 		MotorSpeedSet <<= 5;
@@ -638,40 +654,57 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
 	//根据踏频控制
 	else
 	{
-//		//低力矩停机
-//		TorqueStopData = (MC_TorqueCorrectParam.StarData < 400) ? 100 : (MC_TorqueCorrectParam.StarData >> 2);
-//		if(AdcSenorData.TorqueSensor > TorqueStopData)
-//		{
-//			TorqueStopDelayTimeCnt = HAL_GetTick();
-//		}
-//		else
-//		{
-//			if((HAL_GetTick() - TorqueStopDelayTimeCnt) > 1500)
-//			{
-//				MC_CadenceProcess_Param.MotorStopLock_Flag = SET;
-//			}
-//		}
-//		
-//		//启动判断
-//		TorqueStartData = (MC_TorqueCorrectParam.StarData < 200 ? 150 : (MC_TorqueCorrectParam.StarData > 700 ? 525 : MC_TorqueCorrectParam.StarData));
-//		if(AdcSenorData.TorqueSensor >= TorqueStartData)
-//		{
-//			MC_CadenceProcess_Param.MotorStopLock_Flag = RESET;
-//		}	
-//		
-//		//踏频反向或踏频停止停机
-//		if((CadenceData.Cadence_Dir == MC_Cadence_Backward) ||
-//			 (CadenceData.IsStopFlag == TRUE)		
-//			)
-//		{
-//			MC_CadenceProcess_Param.MotorStopLock_Flag = SET;
-//		}
-//		
-    MC_CadenceProcess_Param.MotorStopLock_Flag = RESET;
+		//低力矩停机
+		TorqueStopData = 60;//(MC_TorqueCorrectParam.StarData < 400) ? 100 : (MC_TorqueCorrectParam.StarData >> 2);
+		if(AdcSenorData.TorqueSensor > TorqueStopData)
+		{
+			TorqueStopDelayTimeCnt = HAL_GetTick();
+			Cadence_Diff_Sum = 0;
+		}
+		else
+		{
+			TorqueStopDelayTime = 2000;
+			Cadence_Diff_Sum += abs(CadenceData.Cadence_Data - Cadence_Old);
+						
+			MC_RunInfo.Ride_Km = Cadence_Diff_Sum;
+			
+			Cadence_Old = CadenceData.Cadence_Data;
+			if((HAL_GetTick() - TorqueStopDelayTimeCnt) > TorqueStopDelayTime)
+			{			
+				if(Cadence_Diff_Sum < 200)
+				{
+				  MC_CadenceProcess_Param.MotorStopLock_Flag = SET;
+				}
+				else
+				{
+				  TorqueStopDelayTimeCnt = HAL_GetTick();
+			    Cadence_Diff_Sum = 0;
+				}
+			}
+		}
+		
+		//启动判断
+		TorqueStartData = (MC_TorqueCorrectParam.StarData < 300 ? 300 : (MC_TorqueCorrectParam.StarData > 700 ? 700 : MC_TorqueCorrectParam.StarData));
+		if(AdcSenorData.TorqueSensor >= TorqueStartData)
+		{
+			MC_CadenceProcess_Param.MotorStopLock_Flag = RESET;
+		}	
+		
+		//踏频反向或踏频停止停机
+		if((CadenceData.Cadence_Dir == MC_Cadence_Backward) ||
+			 (CadenceData.IsStopFlag == TRUE)		
+			)
+		{
+			MC_CadenceProcess_Param.MotorStopLock_Flag = SET;
+		}
+		
 		//根据输入踏频计算电机转速给定值
-		MotorSpeedSet = (CadenceData.Cadence_Data * 1390) >> 7;
+//		MotorSpeedSet = (CadenceData.Cadence_Data * 1445) >> 7;
+		MotorSpeedSet = (1872 * CadenceData.Cadence_Data - 4 * CadenceData.Cadence_Data * CadenceData.Cadence_Data) >> 7; 
+//		MotorSpeedSet = (MC_CadenceProcess_Param.CadenceInput < 30) ? (MC_CadenceProcess_Param.CadenceInput * 13448 >> 10)
+//	                                                 	            : ((MC_CadenceProcess_Param.CadenceInput * 10547 + 87040) >> 10); 
 		MotorSpeedSet = MotorSpeedSet > MC_MotorParam.Rate_Speed ? MC_MotorParam.Rate_Speed : MotorSpeedSet;
-		MotorSpeedSet = MotorSpeedSet < 150 ? 150 : MotorSpeedSet;
+		MotorSpeedSet = MotorSpeedSet < 300 ? 300 : MotorSpeedSet;
 		MotorSpeedSet <<= 5;
 		//进入指拨模式标志
 		IsEnterGasMode = RESET;
@@ -680,31 +713,58 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
 	//停机状态,延时处理
 	if(MC_CadenceProcess_Param.MotorStopLock_Flag == SET)
 	{
-	  if(MC_CadenceProcess_Param.MotorSpeedSetBegin < 200)
+	  if(MC_CadenceProcess_Param.MotorSpeedSetBegin < 35)
 		{
 		  MC_CadenceProcess_Param.MotorSpeedSetBegin = 0;
 			//停机处理
 			MC_MotorStop(&MC_StarFlag);
+			
+			#if CADENCE_MODE_SOFT_SATRT
+			//缓启动标志置位
+			SoftStartFlag = SET;
+			SoftStartDelayTimeCount = 0;
+			#endif
 		}
 		else
 		{
-		  MC_CadenceProcess_Param.MotorSpeedSetBegin -= 190;  //这里影响到停止踩踏后的断电时间
+		  MC_CadenceProcess_Param.MotorSpeedSetBegin -= 32;  //这里影响到停止踩踏后的断电时间, 1ms降32 / 32 = 1rpm
 			MC_MotorStar(&MC_StarFlag);
 		}
 	}
 	//随档位给定电机输出助力大小
 	else
 	{
-	  //设定电机转速加减速曲线
-		if(MC_CadenceProcess_Param.MotorSpeedSetBegin < MotorSpeedSet - 10)
+		//速度环
+		#if CADENCE_MODE_SOFT_SATRT
+		if(SoftStartFlag == SET)
 		{
-			MC_CadenceProcess_Param.MotorSpeedSetBegin += 200;
+			if(SoftStartDelayTimeCount <= 1024)
+			{
+				SoftStartDelayTimeCount++;
+				SoftStartAcc = SoftStartDelayTimeCount >> 5;
+			  SpeedAcc = SoftStartAcc;
+			}
+			else
+			{
+			  SoftStartFlag = RESET;
+				SoftStartDelayTimeCount = 0;
+			}
+		}
+		else
+		{
+		  SpeedAcc = 32;
+		}
+		#endif
+		
+		if(MC_CadenceProcess_Param.MotorSpeedSetBegin < MotorSpeedSet - 10)//设定电机转速加减速曲线
+		{
+			MC_CadenceProcess_Param.MotorSpeedSetBegin += SpeedAcc;
 		}
 		else if(MC_CadenceProcess_Param.MotorSpeedSetBegin > MotorSpeedSet + 10)
 		{
-			if(MC_CadenceProcess_Param.MotorSpeedSetBegin > 200)
+			if(MC_CadenceProcess_Param.MotorSpeedSetBegin > SpeedDec)
 			{
-				MC_CadenceProcess_Param.MotorSpeedSetBegin -= 200;
+				MC_CadenceProcess_Param.MotorSpeedSetBegin -= SpeedDec;
 			}
 			else
 			{
@@ -715,6 +775,8 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
 		{
 			MC_CadenceProcess_Param.MotorSpeedSetBegin = MotorSpeedSet;
 		}
+		TorQueBySpd = PID_Regulator((MC_CadenceProcess_Param.MotorSpeedSetBegin >> 5), MC_RunInfo.MotorSpeed, &PID_MotorSpd); // 电机速度闭环输出
+		
 		//限流控制
 		if(IsEnterGasMode == SET) //指拨模式,全功率输出
 		{
@@ -757,12 +819,10 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
 			}
 			SpdMotorByIdc = PID_Regulator(CurrentLimitPresent / 100, (MC_RunInfo.BusCurrent >> 7), &PID_ConstantPower);
 		}
-		//速度环
-		TorQueBySpd = PID_Regulator((MC_CadenceProcess_Param.MotorSpeedSetBegin >> 5), MC_RunInfo.MotorSpeed, &PID_MotorSpd); // 电机速度闭环输出
 	  TorQueBySpd += SpdMotorByIdc;
 		//限速处理
-		TorQueBySpd = (uint16_t)((uint32_t)(TorQueBySpd * Function_Linear_3Stage(0, 0, MC_ConfigParam1.SpeedLimit, 52, MC_RunInfo.BikeSpeed)) >> 10);
-		if(MC_RunInfo.BikeSpeed > MC_ConfigParam1.SpeedLimit + 22)
+		TorQueBySpd = (uint16_t)((uint32_t)(TorQueBySpd * Function_Linear_3Stage(0, 0, MC_ConfigParam1.SpeedLimit * 10, 68, MC_RunInfo.BikeSpeed)) >> 10);
+		if(MC_RunInfo.BikeSpeed > MC_ConfigParam1.SpeedLimit * 10 + 22)
 		{
 			MC_CadenceProcess_Param.MotorSpeedSetBegin = 0;
 			MC_MotorStop(&MC_StarFlag);
@@ -999,8 +1059,8 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(MC_CadenceResult_Struct_t C
 		if(IsEnterGasMode == SET)
 		{
 		  Torque_Temp = MC_TorqueProcess_Param.TorqueApp;
-			TorqueAccStep = MC_AssisParam.Gear_TURBO.AccCnt;
-			TorqueDecStep = MC_AssisParam.Gear_TURBO.DecCnt;
+			TorqueAccStep = 5;
+			TorqueDecStep = 7;
 			//给定上限
 		  Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_TURBO.Upper_Iq) ? MC_AssisParam.Gear_TURBO.Upper_Iq : Torque_Temp;
 			CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_TURBO.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * MC_CadenceLimit_K;

+ 1 - 0
User/Src/speed_sensor.c

@@ -74,6 +74,7 @@ void SpeedSensor_Process(MC_SpeedSensorData_Struct_t* p_MC_SpeedSensorData, uint
 		{
 			p_MC_SpeedSensorData->Speed_Data = 0;
 			*AvgResult = 0;
+			ArrayFillZero(FiltTemp, sizeof(FiltTemp) >> 1);
 			p_MC_SpeedSensorData->DiffTime_ms = 0xFFFFFFFF;
 			return;
 		}

+ 1 - 1
User/Src/var.c

@@ -489,7 +489,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"QD007G.         ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r5_20201125.", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r5_20201201.", 16);
 	strncpy(Firmware_Special, (char*)"TC033001-MS2001-V0r1.           ", 32);
 		
 	//电机型号

+ 4 - 0
修改说明.txt

@@ -351,6 +351,10 @@ V2.1.5_20200903
 3、修改踏频模式的控制方式,根据踏频控制电机转速;
 4、测试版本小版本号按照规则定义为V0.x。
 
+2.1.5_20201130 TC033001A_V0.1
+1、减小指拨的滤波深度,解决停机延时较长的问题;
+2、优化速度传感器滤波,去掉较大值,并在停机时清空滤波数组,解决第一圈信号有随机值问题;
+3、调整踏频模式的控制方法,目前存在起步抖动、限速点停机等问题。