3 Commits fd5b0a00ce ... e3f7c8d435

Author SHA1 Message Date
  dd e3f7c8d435 修改限速Bug 3 weeks ago
  dd f811a316c8 新增客户定制编号和硬件版本的写入。 1 month ago
  dd c7ba7214d3 尾灯模式增加模式7、模式8、模式9,其中模式9按照新协议,即控制指令中灯控字节低4位按照位或方式。 1 month ago

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


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 2 - 0
User/Inc/eeprom_flash.h

@@ -19,6 +19,8 @@
 #define    EEPROM_FLASH_ADDR_GEARBOX_PARAMS      EEPROM_FLASH_BEGIN_ADDRESS + (uint32_t)144         //自动变速器控制参数 8bytes + 4bytes   
 #define    EEPROM_FLASH_ADDR_BATTERY_PARMAS      EEPROM_FLASH_BEGIN_ADDRESS + (uint32_t)156         //电池放电曲线参数 204bytes + 4bytes  
 #define    EEPROM_FLASH_ADDR_TAG_INFO            EEPROM_FLASH_BEGIN_ADDRESS + (uint32_t)364         //产品标签信息 32bytes + 4bytes
+#define    EEPROM_FLASH_ADDR_CUSTOMER_INFO       EEPROM_FLASH_BEGIN_ADDRESS + (uint32_t)400         //客户定制编号信息 32bytes + 4bytes
+#define    EEPROM_FLASH_ADDR_HW_VERSION          EEPROM_FLASH_BEGIN_ADDRESS + (uint32_t)436         //硬件版本信息 16bytes + 4bytes
 
 #define    EEPROM_FLASH_ADDR_TEMP_BEGIN_ADDRESS    0x0801E800
 #define    EEPROM_FLASH_ADDR_TEMP_END_ADDRESS      0x0801EFFF

+ 7 - 3
User/Inc/var.h

@@ -179,10 +179,13 @@ typedef enum MC_TAIL_LIGHT_MODE
 {
   MC_TAIL_LIGHT_MODE1 = (uint8_t)0x01,  //模式1,连接尾灯,开灯时低亮,刹车时高亮
 	MC_TAIL_LIGHT_MODE2 = (uint8_t)0x02,  //模式2,连接尾灯,开灯时高亮,刹车时闪烁
-	MC_TAIL_LIGHT_MODE3 = (uint8_t)0x03,  //模式3,连接刹车灯,刹车时高亮
-	MC_TAIL_LIGHT_MODE4 = (uint8_t)0x04,  //模式4,连接刹车灯,刹车时闪烁
+	MC_TAIL_LIGHT_MODE3 = (uint8_t)0x03,  //模式3,连接刹车灯,刹车时高亮
+	MC_TAIL_LIGHT_MODE4 = (uint8_t)0x04,  //模式4,连接刹车灯,刹车时闪烁
 	MC_TAIL_LIGHT_MODE5 = (uint8_t)0x05,  //模式5,常亮
-	MC_TAIL_LIGHT_MODE6 = (uint8_t)0x06   //模式6,超速报警
+	MC_TAIL_LIGHT_MODE6 = (uint8_t)0x06,  //模式6,超速报警
+	MC_TAIL_LIGHT_MODE7 = (uint8_t)0x07,  //模式7,连接尾灯,开机自动低亮,刹车高亮
+	MC_TAIL_LIGHT_MODE8 = (uint8_t)0x08,  //模式8,连接尾灯,仅开灯高亮,与前灯指令一致
+	MC_TAIL_LIGHT_MODE9 = (uint8_t)0x09   //模式9,连接Logo灯,仅开灯高亮,与前灯指令不同
 }MC_TailLight_Mode_Struct_t;
 
 typedef enum MC_LIGHT_VOLTAGE
@@ -556,6 +559,7 @@ extern MC_ErrorCode_Struct_t MC_ErrorCode;
 extern MC_VerInfo_Struct_t MC_VerInfo;
 extern char Firmware_Special[32];
 extern uint8_t MC_TagInfo[32];
+extern uint8_t MC_Customer_Info[32];
 extern OnLine_Status_Struct_t DeviceOnLine_Status;
 extern BMS_RunInfo_Struct_t BMS_RunInfo;
 extern Device_CheckInfo_Struct_t BMS_CheckInfo;

+ 1 - 1
User/Src/cadence_sensor.c

@@ -159,7 +159,7 @@ void CadenceSensor_Process1(MC_CadenceResult_Struct_t* p_MC_CadenceResult, uint1
 	/*
   n < 20rpm, k = 3
   n > 40rpm, k = 1
-  20rpm <= n <= 40rpm, k = -0.1 * n + 5,???k??100?
+  20rpm <= n <= 40rpm, k = -0.1 * n + 5
   */  
   uint16_t k = 100;
   k = (CadenceTemp < 20) ? 300 : ((CadenceTemp > 40) ? 100 : (500 - CadenceTemp * 10));

+ 26 - 14
User/Src/can_process.c

@@ -183,7 +183,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				  GetParamFromEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM1, sizeof(MC_ConfigParam1), (uint8_t*)&MC_ConfigParam1.GasCtrlMode_Param);
 					Data[0] = MC_ConfigParam1.WheelSize;   //轮胎默认周长
 					Data[1] = MC_ConfigParam1.StarModel;   //启动模式
-					Data[2] = MC_ConfigParam1.SpeedLimit;  //限速值
+					Data[2] = (MC_ConfigParam1.SpeedLimit & 0x7F);  //限速值
 					Data[3] = MC_ConfigParam1.WheelSizeAdj;//轮胎微调值
 					GetParamFromEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM2, sizeof(MC_ConfigParam2), (uint8_t*)&MC_ConfigParam2.ZeroAngle_Pitch);
 					Data[4] = 1;				
@@ -253,12 +253,12 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 					}
 					break;
 				}
-				#else //ECU的指令
+				#else //ECU的指令,停用
 				case 0x3300://ECU查询用户参数
 				{
 				  	GetParamFromEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM1, sizeof(MC_ConfigParam1), (uint8_t*)&MC_ConfigParam1.GasCtrlMode_Flag);
 					Data[0] = MC_ConfigParam1.WheelSize;   //轮胎默认周长
-					Data[1] = MC_ConfigParam1.SpeedLimit;  //限速值
+					Data[1] = (MC_ConfigParam1.SpeedLimit & 0x7F);  //限速值
 					Data[2] = 0x18;                        //低压保护阈值 31000mV
 					Data[3] = 0x79;
 					SendData(ID_MC_TO_PBU, MODE_REPORT, 0x5410, Data);
@@ -296,16 +296,8 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 					if(MC_ConfigParam1.WheelSize < 120)
 					{
 					 	 MC_ConfigParam1.WheelSize = 120;
-					}
-					MC_ConfigParam1.SpeedLimit = Data[1];
-					if(MC_ConfigParam1.SpeedLimit > 99)
-					{
-					  	MC_ConfigParam1.SpeedLimit = 99;
-					}
-					if(MC_ConfigParam1.SpeedLimit < 5)
-					{
-					  	MC_ConfigParam1.SpeedLimit = 5;
-					}
+					}					
+					MC_ConfigParam1.SpeedLimit = (MC_ConfigParam1.SpeedLimit & 0x80) | (Data[1] & 0x7F);					
 					//Data[2]和Data[3]低压保护值暂不处理
 					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM1, sizeof(MC_ConfigParam1), (uint8_t*)&MC_ConfigParam1.GasCtrlMode_Flag);
 					//变速器参数初始化
@@ -414,7 +406,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				  GetParamFromEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM1, sizeof(MC_ConfigParam1), (uint8_t*)&MC_ConfigParam1.GasCtrlMode_Param);
 					Data[0] = MC_ConfigParam1.WheelSize;   //轮胎默认周长
 					Data[1] = MC_ConfigParam1.StarModel;   //启动模式
-					Data[2] = MC_ConfigParam1.SpeedLimit;  //限速值
+					Data[2] = (MC_ConfigParam1.SpeedLimit & 0x7F);  //限速值
 					Data[3] = MC_ConfigParam1.WheelSizeAdj;//轮胎微调值
 					SendData(ID_MC_TO_HMI, MODE_REPORT, 0x7308, Data);
 					break;
@@ -828,6 +820,26 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 					SendData(ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t*)"ACK");
 					break;
 				}
+				case 0x5310://写入HW
+				{
+				  memcpy(MC_VerInfo.HW_Version, Data, DataLength);
+					IsFlashSaveDataUpdate = TRUE;
+					SendData(ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t*)"ACK");
+					break;
+				}
+				case 0x5600://查询客户定制信息
+				{
+				  ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_CUSTOMER_INFO, MC_Customer_Info, 32);
+					SendData(ID_MC_TO_CDL, MODE_REPORT, 0xC220, MC_Customer_Info);
+					break;
+				}
+				case 0x5720://写入客户定制信息
+				{
+				  memcpy(MC_Customer_Info, Data, DataLength);
+					IsFlashSaveDataUpdate = TRUE;
+					SendData(ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t*)"ACK");
+					break;
+				}
 				default:break;
 			}
 			break;

+ 17 - 1
User/Src/eeprom_flash.c

@@ -37,7 +37,11 @@ void CopyDataToEEPROM_Flash(void)
 	SaveDataToEEPROM_Flash(EEPROM_FLASH_ADDR_BATTERY_PARMAS, (uint8_t*)&BatteryCellInfo.DesignCap, sizeof(BatterCellInfo_Struct_t));
 	//写入产品标签信息
 	SaveDataToEEPROM_Flash(EEPROM_FLASH_ADDR_TAG_INFO, (uint8_t*)MC_TagInfo, 32);		
-
+	//写入客户定制信息
+  SaveDataToEEPROM_Flash(EEPROM_FLASH_ADDR_CUSTOMER_INFO, (uint8_t*)MC_Customer_Info, 32);	
+  //写入硬件版本
+	SaveDataToEEPROM_Flash(EEPROM_FLASH_ADDR_HW_VERSION, (uint8_t*)MC_VerInfo.HW_Version, 16);	
+	
 	//写入标志
 	Temp_32[0] = (EEPROM_Flash_Flag[0] << 24) + (EEPROM_Flash_Flag[1] << 16) + (EEPROM_Flash_Flag[2] << 8) + EEPROM_Flash_Flag[3];
 	Temp_32[1] = CRC32_Calculate((uint8_t*)EEPROM_Flash_Flag, 4);
@@ -103,6 +107,18 @@ void CopyDataFromEEPROM_Flash(void)
 	{
 	   memcpy(&MC_TagInfo, Flash_ReadDataBuf, 32);
 	}
+	//读取客户定制信息
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_CUSTOMER_INFO, Flash_ReadDataBuf, 32);
+	if(Error_OK == 0)
+	{
+	   memcpy(&MC_Customer_Info, Flash_ReadDataBuf, 32);
+	}
+	//读取HW版本信息
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_HW_VERSION, Flash_ReadDataBuf, 16);
+	if(Error_OK == 0)
+	{
+	   memcpy(&MC_VerInfo.HW_Version, Flash_ReadDataBuf, 16);
+	}
 	
 }
 

+ 61 - 26
User/Src/light_driver.c

@@ -14,11 +14,11 @@ MC_LightDriver_IO_Struct_t TailLightIO_Groups[3] =
   {GPIOA, GPIO_PIN_6}   //尾灯随电池电压
 };
 
-static void LightDriver_IO_Control(MC_LightDriver_IO_Struct_t* IO_Groups, uint8_t Len, uint8_t ID, MC_LightSwitch_Struct_t SwitchCode)
+static void LightDriver_IO_Control(MC_LightDriver_IO_Struct_t* IO_Groups, uint8_t Len, uint8_t ID, TrueOrFalse_Flag_Struct_t OnFlag)
 {
 	uint8_t i;
 	
-	if(SwitchCode == MC_LightSwitch_ON)//开灯时,仅打开配置的IO
+	if(OnFlag == TRUE)//开灯时,仅打开配置的IO
 	{
 		for(i=0; i<Len; i++)
 		{
@@ -61,15 +61,15 @@ void LightDriver_Init(void)
 	}
 }
 
-void LightDriver_Process(MC_TailLight_Mode_Struct_t Light_Mode, MC_LightVoltage_Struct_t HeadLightVol, MC_LightVoltage_Struct_t TailLightVol, TrueOrFalse_Flag_Struct_t IsBreakFlag, MC_LightSwitch_Struct_t LightSwitchCode)
+void LightDriver_Process(uint8_t Light_Mode, MC_LightVoltage_Struct_t HeadLightVol, MC_LightVoltage_Struct_t TailLightVol, TrueOrFalse_Flag_Struct_t IsBreakFlag, MC_LightSwitch_Struct_t LightSwitchCode)
 {	
 	uint8_t HeadLightIO_Groups_ID, TailLightIO_Groups_ID;
 	
 	//开机前2s不处理,关灯处理
 	if(HAL_GetTick() < 2000)
 	{
-	  LightDriver_IO_Control(HeadLightIO_Groups, sizeof(HeadLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), HeadLightIO_Groups_ID, MC_LightSwitch_OFF);
-	  LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_OFF);
+	  LightDriver_IO_Control(HeadLightIO_Groups, sizeof(HeadLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), HeadLightIO_Groups_ID, FALSE);
+	  LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, FALSE);
 		return;
 	}		
 	
@@ -126,12 +126,12 @@ void LightDriver_Process(MC_TailLight_Mode_Struct_t Light_Mode, MC_LightVoltage_
 	{
 	  case MC_FRONT_LIGHT_MODE1: //常亮
 		{
-		  LightDriver_IO_Control(HeadLightIO_Groups, sizeof(HeadLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), HeadLightIO_Groups_ID, MC_LightSwitch_ON);
+		  LightDriver_IO_Control(HeadLightIO_Groups, sizeof(HeadLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), HeadLightIO_Groups_ID, TRUE);
 			break;
 		}
 		case MC_FRONT_LIGHT_MODE2: default: //仪表控制开关
 		{
-		  LightDriver_IO_Control(HeadLightIO_Groups, sizeof(HeadLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), HeadLightIO_Groups_ID, LightSwitchCode);
+		  LightDriver_IO_Control(HeadLightIO_Groups, sizeof(HeadLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), HeadLightIO_Groups_ID, (LightSwitchCode & 0x01) ? TRUE : FALSE);
 			break;
 		}
 		
@@ -145,20 +145,20 @@ void LightDriver_Process(MC_TailLight_Mode_Struct_t Light_Mode, MC_LightVoltage_
 		{
 			if(IsBreakFlag == TRUE)//刹车时,高亮
 			{
-				LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_ON);
+				LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, TRUE);
 				FlashTimeCnt = 0;
 			}
 			else//无刹车时,开灯低亮
 			{
-				if(LightSwitchCode == MC_LightSwitch_ON)
+				if(LightSwitchCode & 0x01)
 				{
 					if(FlashTimeCnt < MC_ConfigParam2.u16EffectVal) //尾灯亮起有效值
 					{
-						LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_ON);
+						LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, TRUE);
 					}
 					else if(FlashTimeCnt < MC_ConfigParam2.u16Prediv) //控制周期:15K / Period  尾灯亮起的频率
 					{
-						LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_OFF);
+						LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, FALSE);
 					}
 					else
 					{
@@ -166,9 +166,9 @@ void LightDriver_Process(MC_TailLight_Mode_Struct_t Light_Mode, MC_LightVoltage_
 					}
 					FlashTimeCnt++;
 				}
-				else if(LightSwitchCode == MC_LightSwitch_OFF)
+				else
 				{
-					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_OFF);
+					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, FALSE);
 					FlashTimeCnt = 0;
 				}
 			}
@@ -180,11 +180,11 @@ void LightDriver_Process(MC_TailLight_Mode_Struct_t Light_Mode, MC_LightVoltage_
 			{
 				if(FlashTimeCnt < 600)
 				{
-					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_ON);
+					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, TRUE);
 				}
 				else if(FlashTimeCnt < 1200) //闪烁频率:15K / 1200 = 12.5Hz
 				{
-					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_OFF);
+					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, FALSE);
 				}
 				else
 				{
@@ -194,14 +194,14 @@ void LightDriver_Process(MC_TailLight_Mode_Struct_t Light_Mode, MC_LightVoltage_
 			}
 			else//无刹车时,开灯亮
 			{
-				LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, LightSwitchCode);
+				LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, (LightSwitchCode & 0x01) ? TRUE : FALSE);
 				FlashTimeCnt = 0;
 			}	
 			break;
 		}
 		case MC_TAIL_LIGHT_MODE3://连接刹车灯,刹车高亮
 		{
-			LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, (IsBreakFlag == TRUE) ? MC_LightSwitch_ON : MC_LightSwitch_OFF);
+			LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, (IsBreakFlag == TRUE) ? TRUE : FALSE);
 			break;
 		}
 		case MC_TAIL_LIGHT_MODE4://连接刹车灯,刹车闪烁
@@ -210,11 +210,11 @@ void LightDriver_Process(MC_TailLight_Mode_Struct_t Light_Mode, MC_LightVoltage_
 			{
 				if(FlashTimeCnt < 600)
 				{
-					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_ON);
+					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, TRUE);
 				}
 				else if(FlashTimeCnt < 1200) //闪烁频率:15K / 1200 = 12.5Hz
 				{
-					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_OFF);
+					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, FALSE);
 				}
 				else
 				{
@@ -224,27 +224,27 @@ void LightDriver_Process(MC_TailLight_Mode_Struct_t Light_Mode, MC_LightVoltage_
 			}
 			else//无刹车时,关闭
 			{
-				LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_OFF);
+				LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, FALSE);
 				FlashTimeCnt = 0;
 			}	
 			break;
 		}
 		case MC_TAIL_LIGHT_MODE5://模式5,常亮
 		{
-			LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_ON);
+			LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, TRUE);
 			break;
 		}
-		case MC_TAIL_LIGHT_MODE6://超速报警
+		case MC_TAIL_LIGHT_MODE6://模式6,超速报警
 		{
 			if(MC_SpeedSensorData.Speed_Data >= MC_ConfigParam2.u16OverspeedWarnVal)
 			{
 				if(FlashTimeCnt < MC_ConfigParam2.u16EffectVal)
 				{
-					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_ON);
+					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, TRUE);
 				}
-				else if(FlashTimeCnt < MC_ConfigParam2.u16Prediv) //
+				else if(FlashTimeCnt < MC_ConfigParam2.u16Prediv)
 				{
-					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_OFF);
+					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, FALSE);
 				}
 				else
 				{
@@ -255,10 +255,45 @@ void LightDriver_Process(MC_TailLight_Mode_Struct_t Light_Mode, MC_LightVoltage_
 			else
 			{
 				FlashTimeCnt = 0;
-				LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, MC_LightSwitch_OFF);
+				LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, FALSE);
 			}
 			break;
 		}
+		case MC_TAIL_LIGHT_MODE7://模式7,开机自动低亮,刹车高亮
+		{
+			if(IsBreakFlag == TRUE)//刹车时,高亮
+			{
+				LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, TRUE);
+				FlashTimeCnt = 0;
+			}
+			else//无刹车时,低亮
+			{
+				if(FlashTimeCnt < MC_ConfigParam2.u16EffectVal) //尾灯亮起有效值
+				{
+					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, TRUE);
+				}
+				else if(FlashTimeCnt < MC_ConfigParam2.u16Prediv) //控制周期:15K / Period  尾灯亮起的频率
+				{
+					LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, FALSE);
+				}
+				else
+				{
+					FlashTimeCnt = 0;
+				}
+				FlashTimeCnt++;
+			}
+			break;
+		}
+		case MC_TAIL_LIGHT_MODE8://模式8,仅开灯高亮,与前灯指令一致
+		{
+			LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, (LightSwitchCode & 0x01) ? TRUE : FALSE);
+			break;
+		}
+		case MC_TAIL_LIGHT_MODE9://模式9,仅开灯高亮,与前灯指令不同
+		{
+			LightDriver_IO_Control(TailLightIO_Groups, sizeof(TailLightIO_Groups)/sizeof(MC_LightDriver_IO_Struct_t), TailLightIO_Groups_ID, (LightSwitchCode & 0x02) ? TRUE : FALSE);
+			break;
+		}
 	}
 }
 

+ 13 - 13
User/Src/motor_control.c

@@ -345,9 +345,9 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
 	Tmp = (Tmp * Tmp) / 2048;   //指拨值改为抛物线,低速控制行程变大
 	/*电机转速设定,根据指拨大小、车轮限速值和速比,换算*/
 	if(MC_GasMode_Param.Mode_bit.SpeedLimit <= 5)
-	  SpeedLimit = ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3)) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+	  SpeedLimit = (((MC_ConfigParam1.SpeedLimit & 0x7F) + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3)) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
 	else
-		SpeedLimit = ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+		SpeedLimit = (((MC_ConfigParam1.SpeedLimit & 0x7F) + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
 	//根据SOC限制最大车速
 	#if 0 //旧版传动比计算
 	SpeedSet = Tmp * ((SpeedLimit + 1) * SpdProportion) / 10  >> 11;  //(Tmp >> 11) * cd_Speedlimit * ( SpdProportion / 10)  		
@@ -648,14 +648,14 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasTorque_Process(MC_GasMode_Struct_t GasM
 		
 	if(MC_GasMode_Param.Mode_bit.SpeedLimit <= 5)
 	{
-	  speedLimitStart = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3) - 2) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
-	  speedLimitEnd = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+	  speedLimitStart = ((((MC_ConfigParam1.SpeedLimit & 0x7F) + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3) - 2) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+	  speedLimitEnd = ((((MC_ConfigParam1.SpeedLimit & 0x7F) + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
 	  slewRate = 1024 / (speedLimitEnd - speedLimitStart - 3);		
 	}
 	else
 	{
-	  speedLimitStart = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3) - 2) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
-	  speedLimitEnd = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+	  speedLimitStart = ((((MC_ConfigParam1.SpeedLimit & 0x7F) + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3) - 2) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+	  speedLimitEnd = ((((MC_ConfigParam1.SpeedLimit & 0x7F) + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
 	  slewRate = 1024 / (speedLimitEnd - speedLimitStart - 3);	
 	}	
 			
@@ -1026,16 +1026,16 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 	}
 	else
 	{
-		if(MC_RunInfo.MotorSpeed > 200)
+		if(MC_RunInfo.MotorSpeed > 250)
 		{
-		  TorqueStopDelayTime = 218400 / MC_RunInfo.MotorSpeed; //60s / (电机转速 / 4.55 / 2.4) / 3,曲柄1/3
+		  TorqueStopDelayTime = 327600 / MC_RunInfo.MotorSpeed; //60s / (电机转速 / 4.55 / 2.4) / 3,曲柄1/2
 		}
 		else
 		{
 		  TorqueStopDelayTime = 1200;
 		}
 		TorqueStopDelayTime= (TorqueStopDelayTime < 500) ? 500 : TorqueStopDelayTime;
-		if((HAL_GetTick() - TorqueStopDelayTimeCnt) > TorqueStopDelayTime)//超时1200ms
+		if((HAL_GetTick() - TorqueStopDelayTimeCnt) > TorqueStopDelayTime)
 		{
 			MC_TorqueProcess_Param.MotorStopLock_Flag = SET;
 		}
@@ -1046,7 +1046,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 	{
 		TorqueStartData =  (MC_TorqueCorrectParam.StarData < 200 ? 150 \
 																														 : (MC_TorqueCorrectParam.StarData > 700 ? 525 \
-																																																		 : (MC_TorqueCorrectParam.StarData  >> 1)));
+																																																		 : (MC_TorqueCorrectParam.StarData >> 1)));
 	}
 	else
 	{
@@ -1233,8 +1233,8 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 		static uint16_t speedLimitStart = 250, speedLimitEnd = 272, slewRate = 52;
 		if((MC_ConfigParam2.SpeedLimitStartAdj > 50) || (MC_ConfigParam2.SpeedLimitStartAdj < -50)) MC_ConfigParam2.SpeedLimitStartAdj = 0;
 		if((MC_ConfigParam2.SpeedLimitEndAdj > 50) || (MC_ConfigParam2.SpeedLimitEndAdj < -50)) MC_ConfigParam2.SpeedLimitEndAdj = 0;		
-		speedLimitStart = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
-		speedLimitEnd   = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+		speedLimitStart = ((((MC_ConfigParam1.SpeedLimit & 0x7F) + (int8_t)MC_ConfigParam2.SpeedLimitAdj) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+		speedLimitEnd   = ((((MC_ConfigParam1.SpeedLimit & 0x7F) + (int8_t)MC_ConfigParam2.SpeedLimitAdj) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
 		slewRate        = 1024 / (speedLimitEnd - speedLimitStart - 3);			
 		//随车速调节助力比
 		Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(speedLimitStart, 0, speedLimitStart, slewRate, MC_SpeedSensorData.Speed_Data)) >> 10);
@@ -1341,7 +1341,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 			MC_MotorStop(&MC_StarFlag);
 		}
 		#if 0  //低于限速点启动电机
-		else if(MC_RunInfo.BikeSpeed < ((MC_ConfigParam1.SpeedLimit) * 10))
+		else if(MC_RunInfo.BikeSpeed < (((MC_ConfigParam1.SpeedLimit & 0x7F)) * 10))
 		{
 		  MC_MotorStar(&MC_StarFlag);
 		}

+ 2 - 1
User/Src/var.c

@@ -9,6 +9,7 @@ MC_ErrorCode_Struct_t MC_ErrorCode;                       //MC
 MC_VerInfo_Struct_t MC_VerInfo;                           //MC版本信息
 char Firmware_Special[32] = {0,};                         //MC软件版本特性说明
 uint8_t MC_TagInfo[32] = {0xFF,};                         //MC生产标签信息
+uint8_t MC_Customer_Info[32] = {0xFF,};                   //客户定制信息
 OnLine_Status_Struct_t DeviceOnLine_Status;               //设备在线检测结果
 BMS_RunInfo_Struct_t BMS_RunInfo;                         //BMS运行信息
 Device_CheckInfo_Struct_t BMS_CheckInfo;                  //BMS授权校验
@@ -741,7 +742,7 @@ void Var_Init(void)
 	//MCU ID读取
 	memcpy((uint8_t*)MC_CheckInfo.MAC_ID, (uint8_t*)(0x1FFFF7E8), 12);
 	
-    //MC存储数据初始化为默认值
+  //MC存储数据初始化为默认值
 	Var_SetToDefaultParam();
 	Var_SetToDefaultLog();
 	

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