|
@@ -28,6 +28,7 @@
|
|
|
#include "bikeinformation.h"
|
|
|
#include "FSM_1st.h"
|
|
|
#include "FSM_2nd.h"
|
|
|
+#include "TimeTask_Event.h"
|
|
|
/******************************
|
|
|
*
|
|
|
* Parameter
|
|
@@ -35,6 +36,7 @@
|
|
|
******************************/
|
|
|
typedef _Bool BOOL;
|
|
|
MC_RunInfo_Struct_t MC_RunInfo;
|
|
|
+MC_DebugInfo_Struct_t MC_DebugInfo;
|
|
|
MC_ErrorCode_Struct_t MC_ErrorCode = CAN_MC_ALARMCODE_DEFAULT;
|
|
|
MC_ErrorCode_CNT_RECORD_Struct_t MC_ErrorCntRecord = CAN_MC_ALARMCODE_CNT_RECORD_DEFAULT;
|
|
|
MC_VerInfo_Struct_t MC_VerInfo;
|
|
@@ -58,7 +60,6 @@ ULONG ulOBC_ComTimeOutCount = 0;
|
|
|
ULONG ulBMS_ComTimeOutCount = 0;
|
|
|
uint8_t MC_MotorSPD_rpm_Percent = 0;
|
|
|
uint8_t MC_WorkMode;
|
|
|
-uint8_t MC_BC_COM = 1;
|
|
|
LPF_OUT BMS_swCurIdcLpf;
|
|
|
BOOL blBMSCommFault = FALSE;
|
|
|
static UWORD uwRemainDistanceCal;
|
|
@@ -751,37 +752,18 @@ void Can_voMC_Run_200ms(void)
|
|
|
blBMSCommFault = FALSE; // communication normal
|
|
|
}
|
|
|
|
|
|
+ //温度最值记录
|
|
|
Can_MaxMinTempHistory();
|
|
|
+
|
|
|
+ //挡位切换
|
|
|
Can_GearSt_switch();
|
|
|
SizeMCUP = sizeof(MC_UpcInfo.stAssistInfo);
|
|
|
- if (MC_BC_COM == 0)
|
|
|
- {
|
|
|
- MC_RunInfoToCDL.Torque = ((ULONG)maf_torque.value * TORQUEBASE / 10) >> 14; // 0.1 Nm
|
|
|
- MC_RunInfoToCDL.CadenceDir = (MC_CadenceDir_Struct_t)cadence_stFreGetOut.cadence_dir; // 踩踏方向 0-正,1-反,2-停止,
|
|
|
- MC_RunInfoToCDL.Cadence = (cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwVbRpm) >> 20; // rpm
|
|
|
- MC_RunInfoToCDL.GearSt = MC_ControlCode.GearSt;
|
|
|
- MC_RunInfoToCDL.T_PCB = adc_stUpOut.PCBTemp + 40;
|
|
|
- MC_RunInfoToCDL.T_Coil = adc_stUpOut.PCBTemp + 40;
|
|
|
- MC_RunInfoToCDL.BusVoltage = ((ULONG)adc_stUpOut.uwVdcLpfPu * cof_uwUbVt * 100) >> 14; // 1mV
|
|
|
- // MC_RunInfoToCDL.BusCurrent = (((ULONG)scm_stMotoPwrInLpf.slY.sw.hi << 13) / adc_stUpOut.uwVdcLpfPu * cof_uwIbAp * 100) >> 14; // 1mA
|
|
|
- MC_RunInfoToCDL.BusCurrent = ((ULONG)adc_stUpOut.uwIbusAvgLpfPu) * cof_uwIbAp * 10 >> 14; ///>母线电流 1mA,地址偏移8
|
|
|
- MC_RunInfoToCDL.MotorSpeed = (SLONG)scm_stSpdFbkLpf.slY.sw.hi * cof_uwVbRpm >> 15;
|
|
|
- // MC_RunInfoToCDL.BikeSpeed =
|
|
|
- // (((SQWORD)bikespeed_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * ass_ParaCong.uwWheelPerimeter * 3216 * 36 >> 15) * 1050) >>
|
|
|
- // 35; // 600 0.1cm 3216 = Q10(3.1415926) 105 = Q20(1/10000) 0.1 km/h;
|
|
|
- //
|
|
|
- MC_RunInfoToCDL.BikeSpeed =
|
|
|
- (((SQWORD)bikespeed_stFreGetOut.uwLPFFrequencyPu * FBASE * ass_ParaCong.uwWheelPerimeter * 36 >> 20) * 1048 * 10) >> 20;
|
|
|
-// MC_RunInfoToCDL.BikeSpeed = MC_RunInfoToCDL.MotorSpeed /10;
|
|
|
- MC_RunInfoToCDL.IqCurrent = ((SLONG)scm_swIqRefPu * cof_uwIbAp * 100) >> 14;
|
|
|
- MC_RunInfoToCDL.AlarmCode = MC_ErrorCode.Code & 0x00FF;
|
|
|
- //SendData(ID_MC_TO_CDL, MODE_REPORT, 0xF112, (uint8_t *)&MC_RunInfoToCDL.Torque);
|
|
|
- }
|
|
|
|
|
|
- MC_RunInfo.BikeSpeed = cp_stBikeRunInfoPara.BikeSpeedKmH; ///>车速 0.1km/h,地址偏移0
|
|
|
+ //更新电机运行信息
|
|
|
+ MC_RunInfo.BikeSpeed = cp_stBikeRunInfoPara.BikeSpeedKmH; //车速 0.1km/h,地址偏移0
|
|
|
if(cp_stFlg.ThetaGetModelSelect == ANG_SWITCHHALL)
|
|
|
{
|
|
|
- MC_RunInfo.MotorSpeed = (SLONG)abs(switchhall_stOut.swLowSpdLpfPu) * cof_uwVbRpm >> 15; ///>输出转速 1rpm,地址偏移2 if(scm_swMotorPwrInLpfWt > 5000)
|
|
|
+ MC_RunInfo.MotorSpeed = (SLONG)abs(switchhall_stOut.swLowSpdLpfPu) * cof_uwVbRpm >> 15; //电机输出转速 1rpm,地址偏移2 if(scm_swMotorPwrInLpfWt > 5000)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -789,56 +771,41 @@ void Can_voMC_Run_200ms(void)
|
|
|
}
|
|
|
if(scm_swMotorPwrInLpfWt > 5000)
|
|
|
{
|
|
|
- scm_swMotorPwrInLpfWt = 5000;
|
|
|
+ scm_swMotorPwrInLpfWt = 5000;
|
|
|
}
|
|
|
if(scm_swMotorPwrInLpfWt < 0 )
|
|
|
{
|
|
|
- scm_swMotorPwrInLpfWt = 0;
|
|
|
+ scm_swMotorPwrInLpfWt = 0;
|
|
|
}
|
|
|
if(hw_blPWMOnFlg == FALSE)
|
|
|
{
|
|
|
- scm_swMotorPwrInLpfWt = 0;
|
|
|
-
|
|
|
+ scm_swMotorPwrInLpfWt = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
}
|
|
|
Power_Cal();
|
|
|
- MC_RunInfo.Power= Powercal.PowerPoit;
|
|
|
- //MC_RunInfo.Power = scm_swMotorPwrInLpfWt / 10; ///>电功率 1W,地址偏移4
|
|
|
- MC_RunInfo.BusVoltage = ((ULONG)adc_stUpOut.uwVdcLpfPu * cof_uwUbVt * 100) >> 14; ///>母线电压 1mV,地址偏移6
|
|
|
- // MC_RunInfo.BusVoltage = ((ULONG)(adc_stUpOut.uwVdcLpfPu + BMS_VoltEstimat.uwVdcCompPu) * cof_uwUbVt * 100) >> 14; ///>母线电压 1mV,地址偏移6
|
|
|
-
|
|
|
-// if (scm_stMotoPwrInLpf.slY.sw.hi < 10)
|
|
|
-// {
|
|
|
-// TempPower = 0;
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// TempPower = scm_stMotoPwrInLpf.slY.sw.hi;
|
|
|
-// }
|
|
|
-// MC_RunInfo.BusCurrent = (((ULONG)TempPower << 13) / adc_stUpOut.uwVdcLpfPu) * cof_uwIbAp * 100 >> 14; ///>母线电流 1mA,地址偏移8
|
|
|
- MC_RunInfo.BusCurrent = ((ULONG)adc_stUpOut.uwIbusAvgLpfPu) * cof_uwIbAp * 10 >> 14; ///14 >母线电流 1mA,地址偏移8
|
|
|
- MC_RunInfo.Cadence = (cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * 60) >> 20; ///>踏频 1rpm,地址偏移10
|
|
|
- MC_RunInfo.Torque = ((ULONG)torsensor_stTorSensorOut.uwTorquePu * cof_uwTorqNm / 10) >> 14; ///>踩踏力矩 1Nm,地址偏移11
|
|
|
- MC_RunInfo.CadenceDir = (MC_CadenceDir_Struct_t)cadence_stFreGetOut.cadence_dir; ///>踩踏方向 0-正,1-反,2-停止,地址偏移12
|
|
|
- MC_RunInfo.GearSt = MC_ControlCode.GearSt; ///>助力档位,地址偏移13
|
|
|
- MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch; ///>灯开关 0xF0-关,0xF1-开,地址偏移14
|
|
|
- MC_RunInfo.TorqueReg = torsensor_stTorSensorOut.uwTorqueReg;
|
|
|
- MC_RunInfo.SOC = Can_SOC_Cal(); ///>剩余电量 1%,地址偏移15
|
|
|
+ MC_RunInfo.Power= Powercal.PowerPoit; //功率
|
|
|
+ MC_RunInfo.BusVoltage = ((ULONG)adc_stUpOut.uwVdcLpfPu * cof_uwUbVt * 100) >> 14; //母线电压 1mV,地址偏移6
|
|
|
+ MC_RunInfo.BusCurrent = ((ULONG)adc_stUpOut.uwIbusAvgLpfPu) * cof_uwIbAp * 10 >> 14; //母线电流 1mA,地址偏移8
|
|
|
+ MC_RunInfo.Cadence = (cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * 60) >> 20; //踏频 1rpm,地址偏移10
|
|
|
+ MC_RunInfo.Torque = ((ULONG)torsensor_stTorSensorOut.uwTorquePu * cof_uwTorqNm / 10) >> 14; //踩踏力矩 1Nm,地址偏移11
|
|
|
+ MC_RunInfo.CadenceDir = (MC_CadenceDir_Struct_t)cadence_stFreGetOut.cadence_dir; //踩踏方向 0-正,1-反,2-停止,地址偏移12
|
|
|
+ MC_RunInfo.GearSt = MC_ControlCode.GearSt; //助力档位,地址偏移13
|
|
|
+ MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch; //灯开关 0xF0-关,0xF1-开,地址偏移14
|
|
|
+ MC_RunInfo.TorqueReg = torsensor_stTorSensorOut.uwTorqueReg; //力矩Reg
|
|
|
+ MC_RunInfo.SOC = Can_SOC_Cal(); //剩余电量 1%,地址偏移15
|
|
|
if(hw_blPWMOnFlg == FALSE)
|
|
|
- {
|
|
|
+ {
|
|
|
MC_RunInfo.BusCurrent=0;
|
|
|
- }
|
|
|
- // MC_RunInfo.ODO_Km = MC_RideLog.ODO_Km / 10; ///>总里程 1km,地址偏移18
|
|
|
+ }
|
|
|
Can_Trip_Cal();
|
|
|
-
|
|
|
if (cp_stBikeRunInfoPara.blGearStUpdate)
|
|
|
{
|
|
|
if(cp_stBikeRunInfoPara.uwBikeGear > 0 &&(cp_stBikeRunInfoPara.uwBikeGear <=5))
|
|
|
{
|
|
|
MC_RunInfo.PowerPerKm =
|
|
|
- *(&cp_stHistoryPara.uwG1AvgPwrConsumption + (cp_stBikeRunInfoPara.uwBikeGear - 1)) / 10; //>平均功耗 0.01Ah/km ,地址偏移20
|
|
|
+ *(&cp_stHistoryPara.uwG1AvgPwrConsumption + (cp_stBikeRunInfoPara.uwBikeGear - 1)) / 10; //平均功耗 0.01Ah/km ,地址偏移20
|
|
|
uwRemainDistanceCal = BMS_RunInfo.RC / MC_RunInfo.PowerPerKm / 10;
|
|
|
}
|
|
|
else
|
|
@@ -846,7 +813,6 @@ void Can_voMC_Run_200ms(void)
|
|
|
MC_RunInfo.PowerPerKm = 0;
|
|
|
uwRemainDistanceCal = 0xffff; //invalid value
|
|
|
}
|
|
|
-
|
|
|
cp_stBikeRunInfoPara.BMSRestChargeLast = BMS_RunInfo.RC;
|
|
|
cp_stBikeRunInfoPara.uwPowerPerKm = 0;
|
|
|
cp_stBikeRunInfoPara.uwAvePowerPerKm = 0;
|
|
@@ -855,7 +821,6 @@ void Can_voMC_Run_200ms(void)
|
|
|
cp_stBikeRunInfoPara.uwAvePowerCNT = 0;
|
|
|
cp_stBikeRunInfoPara.uwCruisDis = 0;
|
|
|
}
|
|
|
-
|
|
|
if(blBMSCommFault == TRUE)
|
|
|
{
|
|
|
MC_RunInfo.RemainDistance = 0xeeee; /* no bms info*/
|
|
@@ -864,33 +829,46 @@ void Can_voMC_Run_200ms(void)
|
|
|
{
|
|
|
MC_RunInfo.RemainDistance = uwRemainDistanceCal;
|
|
|
}
|
|
|
-
|
|
|
MC_RunInfo.T_PCB = adc_stUpOut.PCBTemp + 40; ///>PCB温度 +40℃,地址偏移21
|
|
|
MC_RunInfo.T_Coil = adc_stUpOut.MotorTemp + 40; ///>绕组温度 +40℃,地址偏移22
|
|
|
MC_RunInfo.T_MCU = adc_stUpOut.PCBTemp + 40; ///>MCU温度 +40℃,地址偏移23
|
|
|
MC_RunInfo.Ride_Time = cp_stBikeRunInfoPara.ulRiTime >> 10; ///>开机后骑行时间 1s,地址偏移26
|
|
|
-
|
|
|
MC_RunInfo.TorqueSensorData1=(UBYTE)(TorqueSensorRegFlt.SensorPer1 >> 4);
|
|
|
MC_RunInfo.TorqueSensorData2=(UBYTE)(TorqueSensorRegFlt.SensorPer2 >> 4);
|
|
|
MC_RunInfo.TorqueSensorData3=(UBYTE)(TorqueSensorRegFlt.SensorPer3 >> 4);
|
|
|
|
|
|
- static UBYTE test1 = 0;
|
|
|
- if(MC_WorkMode == 1)
|
|
|
+ //更新调试信息
|
|
|
+ MC_DebugInfo.SysFSM1 = FSM1st_Sys_state.state; //一层状态机
|
|
|
+ MC_DebugInfo.SysFSM2 = FSM2nd_Run_state.state; //二层状态机
|
|
|
+ MC_DebugInfo.SysFSM3 = curSpeed_state.state; //电流环状态机
|
|
|
+ MC_DebugInfo.SysFSM4 = event_enMode << 4; //助力模式
|
|
|
+ if(event_enMode == TorqAss)
|
|
|
+ MC_DebugInfo.SysFSM4 |= Ass_FSM; //力矩模式助力状态机
|
|
|
+ else if(event_enMode == SpdAss)
|
|
|
+ MC_DebugInfo.SysFSM4 |= ass_enCadAssStatus; //速度模式助力状态机
|
|
|
+ else
|
|
|
+ MC_DebugInfo.SysFSM4 |= 0xF;
|
|
|
+ MC_DebugInfo.IdRef = scm_swIdRefPu; //IdRef
|
|
|
+ MC_DebugInfo.IqRef = scm_swIqRefPu; //IqRef
|
|
|
+ MC_DebugInfo.UdRef = scm_swUdRefPu; //UdRef
|
|
|
+ MC_DebugInfo.UqRef = scm_swUqRefPu; //UqRef
|
|
|
+ MC_DebugInfo.PedalTorquePer = torsensor_stTorSensorOut.uwTorqueReg; //力矩AD
|
|
|
+ MC_DebugInfo.PedalTorqueAvg = torsensor_stTorSensorOut.uwTorqueLPFPu; //力矩滤波AD
|
|
|
+ MC_DebugInfo.PedalTorqueByCad = maf_torque.AverValue; //力矩踏频滤波AD
|
|
|
+ MC_DebugInfo.IdFdb = scm_swIdFdbLpfPu; //IdFdb
|
|
|
+ MC_DebugInfo.IqFdb = scm_swIqFdbLpfPu; //IqFdb
|
|
|
+ MC_DebugInfo.AssistOut = uart_swTorqRefNm; //助力输出
|
|
|
+
|
|
|
+ //发送数据
|
|
|
+ if(MC_WorkMode == 1) //配置模式,定时发送运行信息
|
|
|
{
|
|
|
-#if(UART_ID==3)
|
|
|
- test1++;
|
|
|
- if(test1>=5)
|
|
|
-#else
|
|
|
- test1++;
|
|
|
- if(test1>=2)
|
|
|
-#endif
|
|
|
- {
|
|
|
- test1=0;
|
|
|
-
|
|
|
- SendData(&UART_TxBuff_Struct_OBC, ID_MC_BC, MODE_REPORT, 0x1020, (uint8_t *)&MC_RunInfo.BikeSpeed);
|
|
|
- }
|
|
|
+ SendData(&UART_TxBuff_Struct_OBC, ID_MC_BC, MODE_REPORT, 0x1020, (uint8_t *)&MC_RunInfo.BikeSpeed);
|
|
|
+ }
|
|
|
+ else if(MC_WorkMode == 2) //调试模式,定时发送调试信息和运行信息
|
|
|
+ {
|
|
|
+ SendData(&UART_TxBuff_Struct_OBC, ID_MC_BC, MODE_REPORT, 0x1020, (uint8_t *)&MC_RunInfo.BikeSpeed);
|
|
|
+ SendData(&UART_TxBuff_Struct_OBC, ID_MC_BC, MODE_REPORT, 0xBA20, (uint8_t *)&MC_DebugInfo.SysFSM1);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
void Can_Trip_Cal(void)
|