#include "var.h" #include "adc.h" #include "hardware_check.h" MC_RunInfo_Struct_t MC_RunInfo; //MC运行信息 MC_DebugInfo_Struct_t MC_DebugInfo; //MC调试信息 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授权校验 BMS_DesignInfo_Struct_t BMS_DesignInfo; //BMS设计信息 BatterCellInfo_Struct_t BatteryCellInfo; //电池电芯放电信息 Device_CheckInfo_Struct_t PBU_CheckInfo; //PBU授权校验 PBU_ConfigParam_Struct_t PBU_ConfigParam; //PBU配置参数 Device_CheckInfo_Struct_t HMI_CheckInfo; //HMI授权校验 MC_GasMode_Struct_t MC_GasMode_Param; //转把模式控制参数 MC_ConfigParam1_Struct_t MC_ConfigParam1; //MC配置参数1 MC_ConfigParam2_Struct_t MC_ConfigParam2; //MC配置参数1 MC_TorqueCorrectParam_Struct_t MC_TorqueCorrectParam; //力矩传感器校正信息 MC_MotorParam_Struct_t MC_MotorParam; //马达参数 MC_RunLog1_Struct_t MC_RunLog1; //MC历史信息1 MC_RunLog2_Struct_t MC_RunLog2; //MC历史信息2 uint8_t RunLogSaveIndex = 0; //MC历史信息存储序号,0:不存储,1:存储MC_RunLog1,2:存储MC_RunLog2 uint8_t Secret_Key[8]; //授权验证密钥 MC_MacInfo_Struct_t MC_MacInfo; //MC生产信息 uint8_t UserString1[16]; //MC自定义字符串1 uint8_t UserString2[16]; //MC自定义字符串2 uint8_t UserString3[16]; //MC自定义字符串3 MC_PowerOffBkp_Struct_t MC_PowerOffBkp; //MC关机时刻临时存储的数据 Device_CheckInfo_Struct_t MC_CheckInfo; //MC授权信息 MC_TE_SensorStatus_Struct_t MC_TE_SensorStatus; //TE传回传感器状态 MC_TE_SensorData_Struct_t MC_TE_SensorData; //发给TE传感器结果 uint16_t MC_TE_SyncClockFreqScan; //TE同步时钟频率 TrueOrFalse_Flag_Struct_t TE_MCU_DataRefreshFlag = FALSE; //TE MCU数据更新标志 MC_AssistParam_Struct_t MC_AssisParam; //助力输出计算参数 uint8_t MC_WalkMode_Persent = 100; //推行模式最高转速百分比设置 ComOK_Check_Struct_t IsComOK_TE = {FALSE, 0}; //TE通信状态标志 ComOK_Check_Struct_t IsComOK_PBU = {FALSE, 0}; //PBU通信状态标志 ComOK_Check_Struct_t IsComOK_HMI = {FALSE, 0}; //HMI通信状态标志 ComOK_Check_Struct_t IsComOK_BMS = {FALSE, 0}; //BMS通信状态标志 MC_AttitudeAngle_Struct_t MC_AttitudeAngle; //姿态传感器数值 MC_RideLog_Struct_t MC_RideLog; //骑行历史 MC_RideInfo_Struct_t MC_RideInfo; //骑行信息 MC_AvgPower_Struct_t MC_AvgPower; //助力平均功耗 MCU_Manufacturter_Struct_t MCUManufacturer; //MCU生厂商 uint16_t SpeedRatio; //传动比计算结果 uint16_t HardwareVersion_AD=0; //硬件识别AD TrueOrFalse_Flag_Struct_t VersionIdentifyFinishedFlag = FALSE; //硬件识别结束标识 TrueOrFalse_Flag_Struct_t PowerDown_SaveFlag = FALSE; //断电标识 Bike_RatioCal_Struct_t Bike_RatioCalParam = {0,0,0,100,10,0,0};//传动比计算 int32_t PedalPowerFltSum = 0; //踩踏功率 int32_t MotorPowerFltSum = 0; //电机输入功率 //BMS默认设计信息 const BMS_DesignInfo_Struct_t BMS_DesignInfo_Default = { (uint16_t)10400, //设计容量 (uint8_t)36, //设计电压 {0,0,0,0,0,0,0,0} //电芯型号 }; //电池电芯默认放电参数 const BatterCellInfo_Struct_t BatteryCellInfoDefault = { 15000, { 4152, 4104, 4089, 4078, 4070, 4064, 4059, 4055, 4051, 4047, 4043, 4039, 4034, 4028, 4021, 4013, 4004, 3995, 3984, 3973, 3962, 3951, 3940, 3930, 3919, 3910, 3901, 3892, 3883, 3875, 3867, 3858, 3850, 3843, 3834, 3826, 3817, 3809, 3799, 3790, 3780, 3769, 3759, 3748, 3737, 3727, 3716, 3706, 3696, 3687, 3677, 3669, 3660, 3652, 3645, 3637, 3630, 3623, 3617, 3611, 3605, 3599, 3593, 3587, 3582, 3576, 3572, 3566, 3561, 3556, 3551, 3546, 3540, 3534, 3528, 3523, 3516, 3510, 3503, 3495, 3487, 3479, 3470, 3461, 3451, 3440, 3428, 3415, 3401, 3387, 3374, 3365, 3356, 3346, 3336, 3325, 3313, 3296, 3271, 3219, 3100, } }; //PBU默认配置 const PBU_ConfigParam_Struct_t PBU_ConfigParam_Default = { 4, //档位数量 MC_SUPPORT_DISABLE, //是否支持无PBU操作 }; //MC默认配置参数1,占用32bytes const MC_ConfigParam1_Struct_t MC_ConfigParam1_Default = { (uint8_t)0x55, //指拨模式参数,0x55-不支持 (MC_StarMode_Struct_t)MC_StarMode_NORM, //启动模式 (uint16_t)100, //停机时间 ms (uint8_t)25, //限速 km/h (uint8_t)3, //下降速度 (uint8_t)16, //前齿数 T (uint8_t)16, //后齿数 T (uint8_t)15, //限流 A (uint8_t)135, //高温预警值 +40℃ (uint8_t)165, //高温保护值 +40℃ (MC_SupportFlag_Struct_t)MC_SUPPORT_DISABLE, //无码表支持,0x55-不支持,0x-AA支持 (uint8_t)219, //轮胎周长 cm (uint8_t)2, //系列号, {100,100}, //ECO {100,100}, //NORM {100,100}, //SPORT {100,100}, //TURBO {100,100}, //SMART (uint8_t)1, //速度传感器极数 (uint8_t)2, //踏频启动信号个数 (MC_SpeedSignal_Struct_t)MC_SPEED_WHEEL_TRIG, //速度信号来源,0x55-车轮触发,0x-AA踏频估算,0x-EE通信获取车轮旋转周期 (int8_t)0, //轮胎周长微调值 (uint16_t)3000, //低压保护阈值,单位mV,针对单节电芯的设置值 (uint8_t)60, //推行限速值,单位0.1km/h (uint8_t)135 //推行模式电机转速设置值 }; //MC配置参数2,占用32bytes const MC_ConfigParam2_Struct_t MC_ConfigParam2_Default = { (int16_t)0, //俯仰角零偏 (int16_t)0, //横滚角零偏 (MC_SupportFlag_Struct_t)MC_SUPPORT_DISABLE, //0x55-不支持,0x-AA支持 (uint8_t)0x02, //前后灯模式 (MC_LightVoltage_Struct_t)12, //前灯电压 (MC_LightVoltage_Struct_t)12, //后灯电压 (uint16_t)150, //超速报警 (uint16_t)75, //尾灯控制高电平系数 (uint16_t)150, //尾灯控制周期系数 (int8_t)0, //限速起始偏移 (int8_t)0, //限速结束偏移 (int8_t)0, //限速偏移 (uint8_t)0, //预留 {100,100}, //ECO {100,100}, //NORM {100,100}, //SPORT {100,100}, //TURBO {100,100}, //SMART }; const MC_TorqueCorrectParam_Struct_t MC_TorqueCorrectParam_Default = { (uint16_t)400, (uint8_t)100 }; //MC默认马达参数,占用16bytes #if defined (VOLANS_36V) const MC_MotorParam_Struct_t MC_MotorParam_Default = { (uint16_t)250, //W (uint16_t)1200, //rpm (uint16_t)200, //mohm (uint16_t)10, //mH (uint16_t)10, //mH (uint16_t)36000, //mV (uint8_t)36, //V (uint8_t)8 }; #elif defined (VOLANS_48V) const MC_MotorParam_Struct_t MC_MotorParam_Default = { (uint16_t)250, //W (uint16_t)1600, //rpm (uint16_t)200, //mohm (uint16_t)10, //mH (uint16_t)10, //mH (uint16_t)48000, //mV (uint8_t)48, //V (uint8_t)8 }; #endif //MC默认历史信息,占用48bytes const MC_RunLog1_Struct_t MC_RunLog1_Default = { (uint32_t)1, //开机次数 (uint32_t)0, //运行总时间 min (uint16_t)0, //过流保次数 (uint16_t)0, //低压保护次数 (uint16_t)0, //高压保护次数 (uint16_t)0, //堵转保护次数 (uint16_t)0, //温度保护次数 (uint16_t)0, //速度传感器错误次数 (uint16_t)0, //力矩传感器错误次数 (uint16_t)0, //霍尔传感器错误次数 (uint16_t)0, //马达相线错误次数 (uint16_t)0, //NTC错误次数 (uint16_t)0, //BMS校验错误次数 (uint16_t)0, //HMI校验错误次数 (uint16_t)0, //PBU校验错误次数 (uint8_t)65, //PCB历史最高温 (uint8_t)65, //PCB历史最低温 (uint32_t)0, //ODO里程 (uint8_t)65, //绕组历史最高温 (uint8_t)65, //绕组历史最低温 (uint8_t)65, //MCU历史最高温 (uint8_t)65, //MCU历史最低温 (uint32_t)0 //ODO时间 }; //MC默认历史信息,占用24bytes const MC_RunLog2_Struct_t MC_RunLog2_Default = { (uint16_t)0, //MCU故障次数 (uint16_t)0, //踏频传感器故障次数 (uint16_t)0, //指拨传感器故障次数 (uint16_t)0, //MOS短路次数 (uint16_t)0, //电压异常次数 (uint16_t)0, //电路故障次数 (uint16_t)0, //TE MCU故障次数 (uint16_t)0, //TE 电路故障次数 }; //平均功耗默认值 const MC_AvgPower_Struct_t MC_AvgPower_Default = { (uint16_t)100, (uint16_t)160, (uint16_t)190, (uint16_t)270, (uint16_t)180, (uint16_t)0, (uint32_t)0, }; //MC骑行历史信息,占用32bytes const MC_RideLog_Struct_t MC_RideLog_Default = { (uint32_t)0, (uint32_t)0, (uint32_t)0, (uint32_t)0 }; //默认密钥,占用8bytes const uint8_t Secret_Key_Default[8] = "AVONITOM"; const uint16_t Ver_Table[11] = { 372, 744, 1116, 1489, 1861, 2233, 2605, 2978, 3350, 3722, 4095 }; /************Volans助力参数************/ //ECO档位助力参数 const nGearParam_Struct_t GearParam_Default_ECO_Volans = { (uint16_t)392, (uint16_t)0, (uint16_t)100, (uint16_t)800, (uint8_t)2, (uint8_t)1, (uint16_t)512 }; //NORM档位助力参数 const nGearParam_Struct_t GearParam_Default_NORM_Volans = { (uint16_t)786, (uint16_t)0, (uint16_t)100, (uint16_t)1000, (uint8_t)2, (uint8_t)1, (uint16_t)686 }; //SPORT档位助力参数 const nGearParam_Struct_t GearParam_Default_SPORT_Volans = { (uint16_t)1309, (uint16_t)700, (uint16_t)100, (uint16_t)1300, (uint8_t)3, (uint8_t)1, (uint16_t)870 }; //TURBO档位助力参数 const nGearParam_Struct_t GearParam_Default_TURBO_Volans = { (uint16_t)1964, (uint16_t)840, (uint16_t)100, (uint16_t)2100, (uint8_t)5, (uint8_t)1, (uint16_t)1024 }; //SMART档位助力参数 const nGearParam_Struct_t GearParam_Default_SMART_Volans = { (uint16_t)0, (uint16_t)460, (uint16_t)100, (uint16_t)2100, (uint8_t)4, (uint8_t)1, (uint16_t)1024 }; /************Volans Plus助力参数************/ //ECO档位助力参数 const nGearParam_Struct_t GearParam_Default_ECO_Volans_Plus = { (uint16_t)452, (uint16_t)0, (uint16_t)100, (uint16_t)840, (uint8_t)2, (uint8_t)1, (uint16_t)512 }; //NORM档位助力参数 const nGearParam_Struct_t GearParam_Default_NORM_Volans_Plus = { (uint16_t)954, (uint16_t)0, (uint16_t)100, (uint16_t)1200, (uint8_t)2, (uint8_t)1, (uint16_t)686 }; //SPORT档位助力参数 const nGearParam_Struct_t GearParam_Default_SPORT_Volans_Plus = { (uint16_t)1504, (uint16_t)700, (uint16_t)100, (uint16_t)1590, (uint8_t)3, (uint8_t)1, (uint16_t)870 }; //TURBO档位助力参数 const nGearParam_Struct_t GearParam_Default_TURBO_Volans_Plus = { (uint16_t)2354, (uint16_t)840, (uint16_t)100, (uint16_t)2100, (uint8_t)5, (uint8_t)1, (uint16_t)1024 }; //SMART档位助力参数 const nGearParam_Struct_t GearParam_Default_SMART_Volans_Plus = { (uint16_t)0, (uint16_t)460, (uint16_t)100, (uint16_t)2100, (uint8_t)4, (uint8_t)1, (uint16_t)1024 }; /************Pegasi助力参数************/ //ECO档位助力参数 const nGearParam_Struct_t GearParam_Default_ECO_Pegasi = { (uint16_t)476, (uint16_t)560, (uint16_t)0, (uint16_t)937, (uint8_t)2, (uint8_t)1, (uint16_t)338 }; //NORM档位助力参数 const nGearParam_Struct_t GearParam_Default_NORM_Pegasi = { (uint16_t)1142, (uint16_t)700, (uint16_t)0, (uint16_t)1250, (uint8_t)3, (uint8_t)2, (uint16_t)489 }; //SPORT档位助力参数 const nGearParam_Struct_t GearParam_Default_SPORT_Pegasi = { (uint16_t)1903, (uint16_t)840, (uint16_t)0, (uint16_t)1459, (uint8_t)4, (uint8_t)2, (uint16_t)686 }; //TURBO档位助力参数 const nGearParam_Struct_t GearParam_Default_TURBO_Pegasi = { (uint16_t)2857, (uint16_t)980, (uint16_t)0, (uint16_t)2100, (uint8_t)5, (uint8_t)3, (uint16_t)1024 }; //SMART档位助力参数 const nGearParam_Struct_t GearParam_Default_SMART_Pegasi = { (uint16_t)0, (uint16_t)1200, (uint16_t)0, (uint16_t)2100, (uint8_t)4, (uint8_t)2, (uint16_t)1024 }; /************Pegasi Plus助力参数************/ //ECO档位助力参数 const nGearParam_Struct_t GearParam_Default_ECO_Pegasi_Plus = { (uint16_t)523, (uint16_t)560, (uint16_t)100, (uint16_t)871, (uint8_t)1, (uint8_t)1, (uint16_t)235 }; //NORM档位助力参数 const nGearParam_Struct_t GearParam_Default_NORM_Pegasi_Plus = { (uint16_t)1198, (uint16_t)700, (uint16_t)100, (uint16_t)1055, (uint8_t)2, (uint8_t)1, (uint16_t)331 }; //SPORT档位助力参数 const nGearParam_Struct_t GearParam_Default_SPORT_Pegasi_Plus = { (uint16_t)1712, (uint16_t)840, (uint16_t)100, (uint16_t)1464, (uint8_t)3, (uint8_t)1, (uint16_t)512 }; //TURBO档位助力参数 const nGearParam_Struct_t GearParam_Default_TURBO_Pegasi_Plus = { (uint16_t)2861, (uint16_t)980, (uint16_t)100, (uint16_t)2100, (uint8_t)5, (uint8_t)2, (uint16_t)1024 }; //SMART档位助力参数 const nGearParam_Struct_t GearParam_Default_SMART_Pegasi_Plus = { (uint16_t)0, (uint16_t)1850, (uint16_t)100, (uint16_t)2100, (uint8_t)4, (uint8_t)1, (uint16_t)1024 }; //全局函数定义 //MC存储的参数初始化为默认值 void Var_SetToDefaultParam(void) { //校验码 strncpy((char*)MC_CheckInfo.CheckCode, (char*)"000000000000", 12); //校验密钥 memcpy(Secret_Key, Secret_Key_Default, sizeof(Secret_Key_Default)); //力矩传感器校正参数 memcpy((uint8_t*)&MC_TorqueCorrectParam.StarData, (uint8_t*)&MC_TorqueCorrectParam_Default.StarData, sizeof(MC_TorqueCorrectParam_Default)); //配置参数1 memcpy((uint8_t*)&MC_ConfigParam1.GasCtrlMode_Param, (uint8_t*)&MC_ConfigParam1_Default.GasCtrlMode_Param, sizeof(MC_ConfigParam1_Default)); MC_GasMode_Param.Mode = MC_ConfigParam1.GasCtrlMode_Param; //配置参数2 memcpy((uint8_t*)&MC_ConfigParam2.ZeroAngle_Pitch, (uint8_t*)&MC_ConfigParam2_Default.ZeroAngle_Pitch, sizeof(MC_ConfigParam2_Default)); //马达参数 memcpy((uint8_t*)&MC_MotorParam.Rate_Power, (uint8_t*)&MC_MotorParam_Default.Rate_Power, sizeof(MC_MotorParam_Default)); //电池放电参数 memcpy((uint8_t*)&BatteryCellInfo.DesignCap, (uint8_t*)&BatteryCellInfoDefault.DesignCap, sizeof(BatterCellInfo_Struct_t)); } //MC存储的记录初始化为0 void Var_SetToDefaultLog(void) { //历史信息1 memcpy((uint8_t*)&MC_RunLog1.PowerOnCnt, (uint8_t*)&MC_RunLog1_Default.PowerOnCnt, sizeof(MC_RunLog1_Default)); //历史信息2 memcpy((uint8_t*)&MC_RunLog2.MCU_FaultCnt, (uint8_t*)&MC_RunLog2_Default.MCU_FaultCnt, sizeof(MC_RunLog2_Default)); //骑行历史信息 memcpy((uint8_t*)&MC_RideLog.ODO_Km, (uint8_t*)&MC_RideLog_Default.ODO_Km, sizeof(MC_RideLog_Default)); //平均功耗值 MC_AvgPower = MC_AvgPower_Default; } //变量初始化 void Var_Init(void) { //MC故障码初始化为0 MC_ErrorCode.Code = 0; //TE故障码初始化为0 MC_TE_SensorStatus.TE_ErrorCode.Code = 0; //设备在线检测结果初始化为离线 DeviceOnLine_Status.Status = 0x07; //BMS校验信息初始化为0 memset((uint8_t*)BMS_CheckInfo.MAC_ID, 0, sizeof(BMS_CheckInfo)); //HMI校验信息初始化为0 memset((uint8_t*)HMI_CheckInfo.MAC_ID, 0, sizeof(HMI_CheckInfo)); //PBU校验信息初始化为0 memset((uint8_t*)PBU_CheckInfo.MAC_ID, 0, sizeof(PBU_CheckInfo)); //BMS设计信息初始化为默认值 memcpy((uint8_t*)&BMS_DesignInfo.Capacity, (uint8_t*)&BMS_DesignInfo_Default.Capacity, sizeof(BMS_DesignInfo_Struct_t)); //PBU配置参数初始化为默认值 memcpy((uint8_t*)&PBU_ConfigParam.GearsNum, (uint8_t*)&PBU_ConfigParam_Default.GearsNum, sizeof(PBU_ConfigParam_Struct_t)); //硬件版本,8位板号,2位电压标识,2位MCU型号,4位物理ID CRC32 #if defined (VOLANS_36V) strncpy(MC_VerInfo.HW_Version, (char*)" 36 ", 16); #elif defined (VOLANS_48V) strncpy(MC_VerInfo.HW_Version, (char*)" 48 ", 16); #else Error #endif //软件版本 #if defined BARD_250K strncpy(MC_VerInfo.FW_Version, (char*)"V6r2r2_20231121C", 16); #elif defined BARD_125K strncpy(MC_VerInfo.FW_Version, (char*)"V2r3r2_20231121C", 16); #else Error(); #endif #if NormalWork MC_VerInfo.FW_Version[15] = '.'; #endif //软件标识 strncpy(Firmware_Special, (char*)"TC011000-MS0000-V0r2. ", 32); //编译时间 do { uint8_t String_BuildDate[] = __DATE__; //Mouth Date Year,例如Jan 13 2022 uint8_t String_BuildTime[] = __TIME__; //HH:MM:SS,例如18:00:00 //年 Firmware_Special[26] = (String_BuildDate[9] - '0') * 10 + (String_BuildDate[10] - '0'); //月 if(strncasecmp((char*)String_BuildDate, "Jan", 3) == 0) Firmware_Special[27] = 1; else if(strncasecmp((char*)String_BuildDate, "Feb", 3) == 0) Firmware_Special[27] = 2; else if(strncasecmp((char*)String_BuildDate, "Mar", 3) == 0) Firmware_Special[27] = 3; else if(strncasecmp((char*)String_BuildDate, "Apr", 3) == 0) Firmware_Special[27] = 4; else if(strncasecmp((char*)String_BuildDate, "May", 3) == 0) Firmware_Special[27] = 5; else if(strncasecmp((char*)String_BuildDate, "Jun", 3) == 0) Firmware_Special[27] = 6; else if(strncasecmp((char*)String_BuildDate, "Jul", 3) == 0) Firmware_Special[27] = 7; else if(strncasecmp((char*)String_BuildDate, "Aug", 3) == 0) Firmware_Special[27] = 8; else if(strncasecmp((char*)String_BuildDate, "Sep", 3) == 0) Firmware_Special[27] = 9; else if(strncasecmp((char*)String_BuildDate, "Oct", 3) == 0) Firmware_Special[27] = 10; else if(strncasecmp((char*)String_BuildDate, "Nov", 3) == 0) Firmware_Special[27] = 11; else if(strncasecmp((char*)String_BuildDate, "Dec", 3) == 0) Firmware_Special[27] = 12; else Firmware_Special[27] = 0; //日 Firmware_Special[28] = (String_BuildDate[4] == 0x20 ? 0 : String_BuildDate[4] - '0') * 10 + (String_BuildDate[5] - '0'); //时 Firmware_Special[29] = (String_BuildTime[0] == 0x20 ? 0 : String_BuildTime[0] - '0') * 10 + (String_BuildTime[1] - '0'); //分 Firmware_Special[30] = (String_BuildTime[3] == 0x20 ? 0 : String_BuildTime[3] - '0') * 10 + (String_BuildTime[4] - '0'); //秒 Firmware_Special[31] = (String_BuildTime[6] == 0x20 ? 0 : String_BuildTime[6] - '0') * 10 + (String_BuildTime[7] - '0'); }while(0); //MCU型号 if(MCUManufacturer == NoName) MC_VerInfo.HW_Version[10] = '0'; else if(MCUManufacturer == STM32F103RBT6) MC_VerInfo.HW_Version[10] = '1'; else if(MCUManufacturer == APM32F103RBT6) MC_VerInfo.HW_Version[10] = '2'; else if(MCUManufacturer == APM32F103RCT7) MC_VerInfo.HW_Version[10] = '2'; else if(MCUManufacturer == HK32F103RBT6) MC_VerInfo.HW_Version[10] = '3'; else if(MCUManufacturer == GD32F103RBT6) MC_VerInfo.HW_Version[10] = '4'; else MC_VerInfo.HW_Version[10] = '0'; //电机型号 strncpy(MC_VerInfo.Mode, (char*)"VL6500 & VS7500.", 16); //电机序列号 strncpy(MC_VerInfo.SN_Num, (char*)"0000000000000000", 16); //生产信息 strncpy(MC_MacInfo.Manufacturer, (char*)"MOTINOVA", 8); //生产信息 strncpy(MC_MacInfo.MacAddr, (char*)"WUHAN. ", 8); strncpy(MC_MacInfo.MacDate, (char*)"20210901", 8); //产品标签 /* Digit1-2: MO(Battery:BT, Controller:CT, BB:BB, Charger:CG, Display:DP, Motor:MO) Digit3-4: MA(MOTINOVA) Digit5-10: 000001(Consecutive number) Digit11-17: V1.2202(Hardware version:"Version." + Date(YYMM)) Digit18-24: /261022(Production Date:/DDMMYY) Digit25-26: FI(Customer:Fishcer) Digit27-31: 65347(Customer Article No.) */ //strncpy(MC_TagInfo, (char*)"MOMA000001V1.2202/261022FI65347 ", 32); //MCU ID读取 memcpy((uint8_t*)MC_CheckInfo.MAC_ID, (uint8_t*)(0x1FFFF7E8), 12); //MC存储数据初始化为默认值 Var_SetToDefaultParam(); Var_SetToDefaultLog(); //传动比计算初始值,车速 = 电机转速 / 4.55 * 前牙盘 / 后牙盘* 周长(cm) * 60 / 1000,周长按cm算相当于放大100倍 Bike_RatioCalParam.RatioDefault = (uint32_t)((MC_ConfigParam1.TeethNum_F * (MC_ConfigParam1.WheelSize + MC_ConfigParam1.WheelSizeAdj) * 60) << 10) / (4550 * MC_ConfigParam1.TeethNum_B); Bike_RatioCalParam.RatioResult = Bike_RatioCalParam.RatioDefault; } //根据电机型号系列号调用不同的助力参数 void UpdateGearParam(uint8_t SerialNum) { //根据电机系列号初始化 switch(SerialNum) { case 1://Volans { //助力参数初始化 memcpy((uint8_t*)&MC_AssisParam.Gear_ECO.Gain_K, (uint8_t*)&GearParam_Default_ECO_Volans.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_NORM.Gain_K, (uint8_t*)&GearParam_Default_NORM_Volans.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_SPORT.Gain_K, (uint8_t*)&GearParam_Default_SPORT_Volans.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_TURBO.Gain_K, (uint8_t*)&GearParam_Default_TURBO_Volans.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_SMART.Gain_K, (uint8_t*)&GearParam_Default_SMART_Volans.Gain_K, sizeof(nGearParam_Struct_t)); if(MC_TorqueCorrectParam.CalibrateEnableFlag == 0xAA) { MC_AssisParam.Gear_ECO.Gain_K = 627; MC_AssisParam.Gear_NORM.Gain_K = 1021; MC_AssisParam.Gear_SPORT.Gain_K = 1570; MC_AssisParam.Gear_SPORT.TorqueApp_TH = 560; MC_AssisParam.Gear_TURBO.Gain_K = 2356; MC_AssisParam.Gear_TURBO.TorqueApp_TH = 560; } break; } case 2://Volans Plus { //助力参数初始化 memcpy((uint8_t*)&MC_AssisParam.Gear_ECO.Gain_K, (uint8_t*)&GearParam_Default_ECO_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_NORM.Gain_K, (uint8_t*)&GearParam_Default_NORM_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_SPORT.Gain_K, (uint8_t*)&GearParam_Default_SPORT_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_TURBO.Gain_K, (uint8_t*)&GearParam_Default_TURBO_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_SMART.Gain_K, (uint8_t*)&GearParam_Default_SMART_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t)); if(MC_TorqueCorrectParam.CalibrateEnableFlag == 0xAA) { MC_AssisParam.Gear_ECO.Gain_K = 714; MC_AssisParam.Gear_NORM.Gain_K = 1142; MC_AssisParam.Gear_SPORT.Gain_K = 1908; MC_AssisParam.Gear_SPORT.TorqueApp_TH = 560; MC_AssisParam.Gear_TURBO.Gain_K = 2862; MC_AssisParam.Gear_TURBO.TorqueApp_TH = 560; } break; } case 3://Pegasi { //助力参数初始化 memcpy((uint8_t*)&MC_AssisParam.Gear_ECO.Gain_K, (uint8_t*)&GearParam_Default_ECO_Pegasi.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_NORM.Gain_K, (uint8_t*)&GearParam_Default_NORM_Pegasi.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_SPORT.Gain_K, (uint8_t*)&GearParam_Default_SPORT_Pegasi.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_TURBO.Gain_K, (uint8_t*)&GearParam_Default_TURBO_Pegasi.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_SMART.Gain_K, (uint8_t*)&GearParam_Default_SMART_Pegasi.Gain_K, sizeof(nGearParam_Struct_t)); break; } case 4://Pegasi Plus { //助力参数初始化 memcpy((uint8_t*)&MC_AssisParam.Gear_ECO.Gain_K, (uint8_t*)&GearParam_Default_ECO_Pegasi_Plus.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_NORM.Gain_K, (uint8_t*)&GearParam_Default_NORM_Pegasi_Plus.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_SPORT.Gain_K, (uint8_t*)&GearParam_Default_SPORT_Pegasi_Plus.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_TURBO.Gain_K, (uint8_t*)&GearParam_Default_TURBO_Pegasi_Plus.Gain_K, sizeof(nGearParam_Struct_t)); memcpy((uint8_t*)&MC_AssisParam.Gear_SMART.Gain_K, (uint8_t*)&GearParam_Default_SMART_Pegasi_Plus.Gain_K, sizeof(nGearParam_Struct_t)); break; } default: { //默认处理 break; } } //根据配置参数调整各挡位助力比 if((MC_ConfigParam1.UserAdjParam1_ECO.Assist_K_GAIN <= 120) && (MC_ConfigParam1.UserAdjParam1_ECO.Assist_K_GAIN >= 80)) MC_AssisParam.Gear_ECO.Gain_K = (MC_AssisParam.Gear_ECO.Gain_K * MC_ConfigParam1.UserAdjParam1_ECO.Assist_K_GAIN) / 100; if((MC_ConfigParam1.UserAdjParam1_NORM.Assist_K_GAIN <= 120) && (MC_ConfigParam1.UserAdjParam1_NORM.Assist_K_GAIN >= 80)) MC_AssisParam.Gear_NORM.Gain_K = (MC_AssisParam.Gear_NORM.Gain_K * MC_ConfigParam1.UserAdjParam1_NORM.Assist_K_GAIN) / 100; if((MC_ConfigParam1.UserAdjParam1_SPORT.Assist_K_GAIN <= 120) && (MC_ConfigParam1.UserAdjParam1_SPORT.Assist_K_GAIN >= 80)) MC_AssisParam.Gear_SPORT.Gain_K = (MC_AssisParam.Gear_SPORT.Gain_K * MC_ConfigParam1.UserAdjParam1_SPORT.Assist_K_GAIN) / 100; if((MC_ConfigParam1.UserAdjParam1_TURBO.Assist_K_GAIN <= 120) && (MC_ConfigParam1.UserAdjParam1_TURBO.Assist_K_GAIN >= 80)) MC_AssisParam.Gear_TURBO.Gain_K = (MC_AssisParam.Gear_TURBO.Gain_K * MC_ConfigParam1.UserAdjParam1_TURBO.Assist_K_GAIN) / 100; if((MC_ConfigParam1.UserAdjParam1_SMART.Assist_K_GAIN <= 120) && (MC_ConfigParam1.UserAdjParam1_SMART.Assist_K_GAIN >= 80)) MC_AssisParam.Gear_SMART.TorqueApp_TH = (MC_AssisParam.Gear_SMART.TorqueApp_TH * MC_ConfigParam1.UserAdjParam1_SMART.Assist_K_GAIN) / 100; //根据配置参数调整各挡位加速度 if(MC_ConfigParam1.UserAdjParam1_ECO.StarModel_GAIN <= 90) MC_AssisParam.Gear_ECO.AccCnt -= 1; else if(MC_ConfigParam1.UserAdjParam1_ECO.StarModel_GAIN >= 110) MC_AssisParam.Gear_ECO.AccCnt += 1; if(MC_ConfigParam1.UserAdjParam1_NORM.StarModel_GAIN <= 90) MC_AssisParam.Gear_NORM.AccCnt -= 1; else if(MC_ConfigParam1.UserAdjParam1_NORM.StarModel_GAIN >= 110) MC_AssisParam.Gear_NORM.AccCnt += 1; if(MC_ConfigParam1.UserAdjParam1_SPORT.StarModel_GAIN <= 90) MC_AssisParam.Gear_SPORT.AccCnt -= 1; else if(MC_ConfigParam1.UserAdjParam1_SPORT.StarModel_GAIN >= 110) MC_AssisParam.Gear_SPORT.AccCnt += 1; if(MC_ConfigParam1.UserAdjParam1_TURBO.StarModel_GAIN <= 90) MC_AssisParam.Gear_TURBO.AccCnt -= 1; else if(MC_ConfigParam1.UserAdjParam1_TURBO.StarModel_GAIN >= 110) MC_AssisParam.Gear_TURBO.AccCnt += 1; if(MC_ConfigParam1.UserAdjParam1_SMART.StarModel_GAIN <= 90) MC_AssisParam.Gear_SMART.AccCnt -= 1; else if(MC_ConfigParam1.UserAdjParam1_SMART.StarModel_GAIN >= 110) MC_AssisParam.Gear_SMART.AccCnt += 1; //根据配置参数调整各挡位最大力矩 if((MC_ConfigParam2.UserAdjParam2_ECO.MaxTorque_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_ECO.MaxTorque_K_GAIN >= 80)) MC_AssisParam.Gear_ECO.Upper_Iq = (MC_AssisParam.Gear_ECO.Upper_Iq * MC_ConfigParam2.UserAdjParam2_ECO.MaxTorque_K_GAIN) / 100; if((MC_ConfigParam2.UserAdjParam2_NORM.MaxTorque_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_NORM.MaxTorque_K_GAIN >= 80)) MC_AssisParam.Gear_NORM.Upper_Iq = (MC_AssisParam.Gear_NORM.Upper_Iq * MC_ConfigParam2.UserAdjParam2_NORM.MaxTorque_K_GAIN) / 100; if((MC_ConfigParam2.UserAdjParam2_SPORT.MaxTorque_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_SPORT.MaxTorque_K_GAIN >= 80)) MC_AssisParam.Gear_SPORT.Upper_Iq = (MC_AssisParam.Gear_SPORT.Upper_Iq * MC_ConfigParam2.UserAdjParam2_SPORT.MaxTorque_K_GAIN) / 100; if((MC_ConfigParam2.UserAdjParam2_TURBO.MaxTorque_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_TURBO.MaxTorque_K_GAIN >= 80)) MC_AssisParam.Gear_TURBO.Upper_Iq = (MC_AssisParam.Gear_TURBO.Upper_Iq * MC_ConfigParam2.UserAdjParam2_TURBO.MaxTorque_K_GAIN) / 100; if((MC_ConfigParam2.UserAdjParam2_SMART.MaxTorque_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_SMART.MaxTorque_K_GAIN >= 80)) MC_AssisParam.Gear_SMART.Upper_Iq = (MC_AssisParam.Gear_SMART.Upper_Iq * MC_ConfigParam2.UserAdjParam2_SMART.MaxTorque_K_GAIN) / 100; //根据配置参数调整各挡位最大电流 if((MC_ConfigParam2.UserAdjParam2_ECO.MaxCurrent_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_ECO.MaxCurrent_K_GAIN >= 80)) MC_AssisParam.Gear_ECO.CurrentMax_K = (MC_AssisParam.Gear_ECO.CurrentMax_K * MC_ConfigParam2.UserAdjParam2_ECO.MaxCurrent_K_GAIN) / 100; if((MC_ConfigParam2.UserAdjParam2_NORM.MaxCurrent_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_NORM.MaxCurrent_K_GAIN >= 80)) MC_AssisParam.Gear_NORM.CurrentMax_K = (MC_AssisParam.Gear_NORM.CurrentMax_K * MC_ConfigParam2.UserAdjParam2_NORM.MaxCurrent_K_GAIN) / 100; if((MC_ConfigParam2.UserAdjParam2_SPORT.MaxCurrent_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_SPORT.MaxCurrent_K_GAIN >= 80)) MC_AssisParam.Gear_SPORT.CurrentMax_K = (MC_AssisParam.Gear_SPORT.CurrentMax_K * MC_ConfigParam2.UserAdjParam2_SPORT.MaxCurrent_K_GAIN) / 100; if((MC_ConfigParam2.UserAdjParam2_TURBO.MaxCurrent_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_TURBO.MaxCurrent_K_GAIN >= 80)) MC_AssisParam.Gear_TURBO.CurrentMax_K = (MC_AssisParam.Gear_TURBO.CurrentMax_K * MC_ConfigParam2.UserAdjParam2_TURBO.MaxCurrent_K_GAIN) / 100; if((MC_ConfigParam2.UserAdjParam2_SMART.MaxCurrent_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_SMART.MaxCurrent_K_GAIN >= 80)) MC_AssisParam.Gear_SMART.CurrentMax_K = (MC_AssisParam.Gear_SMART.CurrentMax_K * MC_ConfigParam2.UserAdjParam2_SMART.MaxCurrent_K_GAIN) / 100; }