|
@@ -23,6 +23,7 @@
|
|
|
#include "hwsetup.h"
|
|
|
#include "spi_master.h"
|
|
|
#include "user.h"
|
|
|
+#include "FSM_2nd.h"
|
|
|
/******************************
|
|
|
*
|
|
|
* Parameter
|
|
@@ -215,7 +216,7 @@ void Can_voInitMC_Run(void)
|
|
|
else
|
|
|
strncpy(MC_VerInfo.HW_Version, (char *)"TEST. ", 16);
|
|
|
// Software version
|
|
|
- strncpy(MC_VerInfo.FW_Version, (char *)"V0r1r9_20230531.", 16);
|
|
|
+ strncpy(MC_VerInfo.FW_Version, (char *)"V0r1r9_20230607.", 16);
|
|
|
// Firmware Special Info
|
|
|
strncpy(Firmware_Special, (char*)"TC00000-MC00000-V0r0. ", 32);
|
|
|
// Model name
|
|
@@ -509,8 +510,16 @@ void Can_voMC_Run_1ms(void)
|
|
|
MC_ErrorCode.ERROR_Bit.Fault_TorqueSensor = 0;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- BMS_VoltEstimat.swIdcPu = (((ULONG)scm_stMotoPwrInLpf.slY.sw.hi << 13) / adc_stUpOut.uwVdcLpfPu); //Q15+Q13-Q14=Q14 Calculated dc current
|
|
|
+ UWORD TempPower;
|
|
|
+ if(FSM2nd_Run_state.state == Exit)
|
|
|
+ {
|
|
|
+ TempPower = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ TempPower = scm_stMotoPwrInLpf.slY.sw.hi;
|
|
|
+ }
|
|
|
+ BMS_VoltEstimat.swIdcPu = (((ULONG)TempPower << 13) / adc_stUpOut.uwVdcLpfPu); //Q15+Q13-Q14=Q14 Calculated dc current
|
|
|
if(BMS_VoltEstimat.swIdcPu < 0)
|
|
|
{
|
|
|
BMS_VoltEstimat.swIdcPu = 0;
|
|
@@ -532,7 +541,7 @@ void Can_voMC_Run_5ms(void)
|
|
|
|
|
|
void Can_voMC_Run_200ms(void)
|
|
|
{
|
|
|
- UWORD TempPower;
|
|
|
+
|
|
|
Can_GearSt_switch();
|
|
|
SizeMCUP = sizeof(MC_UpcInfo.stAssistInfo);
|
|
|
if (MC_BC_COM == 0)
|
|
@@ -576,21 +585,14 @@ void Can_voMC_Run_200ms(void)
|
|
|
}
|
|
|
MC_RunInfo.Power = scm_swMotorPwrInLpfWt / 10; ///>鐢靛姛鐜� 1W锛屽湴鍧€鍋忕Щ4
|
|
|
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)BMS_VoltEstimat.swIdcPu * cof_uwIbAp * 100 >> 14; ///>姣嶇嚎鐢垫祦 1mA锛屽湴鍧€鍋忕Щ8
|
|
|
MC_RunInfo.Cadence =(cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * 60) >> 20; ///>韪忛� 1rpm锛屽湴鍧€鍋忕Щ10
|
|
|
MC_RunInfo.Torque = ((ULONG)torsensor_stTorSensorOut.uwTorqueLPFPu * 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; ///>鍔╁姏妗d綅锛屽湴鍧€鍋忕Щ13
|
|
|
MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch; ///>鐏�紑鍏� 0xF0-鍏筹紝0xF1-寮€锛屽湴鍧€鍋忕Щ14
|
|
|
- Can_SOC_Cal(); ///>鍓╀綑鐢甸噺 1%锛屽湴鍧€鍋忕Щ15
|
|
|
+ MC_RunInfo.SOC = Can_SOC_Cal(); ///>剩余电量 1%,地址偏移15
|
|
|
MC_RunInfo.ODO_Km = MC_RideLog.ODO_Km / 10; ///>鎬婚噷绋� 1km锛屽湴鍧€鍋忕Щ18
|
|
|
Can_Trip_Cal();
|
|
|
|
|
@@ -729,30 +731,52 @@ SLONG slBMSMaxVol = 54600;
|
|
|
SLONG slBMSMinVol = 41600;
|
|
|
#endif
|
|
|
SWORD SOC_Cnt, SOC_Value, SOC_MIN;
|
|
|
-SLONG SOC_Sum;
|
|
|
+SLONG Voltage_Sum;
|
|
|
BOOL blSOCfirstSet = FALSE;
|
|
|
-void Can_SOC_Cal(void)
|
|
|
+UWORD Can_SOC_Cal(void)
|
|
|
{
|
|
|
- UWORD templenght;
|
|
|
+ UWORD templenght, VoltageAvg = 0;
|
|
|
+ //开机1s等待电压稳定后初始化电量
|
|
|
+ if(cp_ulSystickCnt < 1000)
|
|
|
+ {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ //开机初始化一次电量
|
|
|
if (blSOCfirstSet == FALSE)
|
|
|
{
|
|
|
- SOC_Value = ((SLONG)MC_RunInfo.BusVoltage - (SLONG)slBMSMinVol) * 100 / ((SLONG)slBMSMaxVol - (SLONG)slBMSMinVol);
|
|
|
- SOC_MIN = SOC_Value;
|
|
|
- if (SOC_MIN > 100)
|
|
|
+ if(MC_RunInfo.BusVoltage >= slBMSMaxVol)
|
|
|
+ {
|
|
|
+ SOC_Value = 100;
|
|
|
+ }
|
|
|
+ else if(MC_RunInfo.BusVoltage <= slBMSMinVol)
|
|
|
+ {
|
|
|
+ SOC_Value = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- SOC_MIN = 100;
|
|
|
+ SOC_Value = ((SLONG)MC_RunInfo.BusVoltage - (SLONG)slBMSMinVol) * 100 / ((SLONG)slBMSMaxVol - (SLONG)slBMSMinVol);
|
|
|
}
|
|
|
+ SOC_MIN = SOC_Value;
|
|
|
blSOCfirstSet = TRUE;
|
|
|
}
|
|
|
+ //1min更新一次电量
|
|
|
else
|
|
|
{
|
|
|
- templenght = 60000 / 200; // 60s in 200ms time task
|
|
|
+ templenght = 300; // 60s in 200ms time task
|
|
|
SOC_Cnt++;
|
|
|
- SOC_Sum += ((SLONG)MC_RunInfo.BusVoltage - (SLONG)slBMSMinVol) * 100 / ((SLONG)slBMSMaxVol - (SLONG)slBMSMinVol);
|
|
|
+ Voltage_Sum += MC_RunInfo.BusVoltage;
|
|
|
if (SOC_Cnt >= templenght) // 60s
|
|
|
{
|
|
|
-
|
|
|
- SOC_Value = SOC_Sum / templenght;
|
|
|
+ VoltageAvg = Voltage_Sum / templenght;
|
|
|
+ if(VoltageAvg <= slBMSMinVol)
|
|
|
+ {
|
|
|
+ SOC_Value = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SOC_Value = ((SLONG)VoltageAvg - (SLONG)slBMSMinVol) * 100 / ((SLONG)slBMSMaxVol - (SLONG)slBMSMinVol);
|
|
|
+ }
|
|
|
+
|
|
|
if (SOC_Value < SOC_MIN)
|
|
|
{
|
|
|
SOC_MIN = SOC_Value;
|
|
@@ -760,9 +784,10 @@ void Can_SOC_Cal(void)
|
|
|
else
|
|
|
{}
|
|
|
SOC_Cnt = 0;
|
|
|
- SOC_Sum = 0;
|
|
|
+ Voltage_Sum = 0;
|
|
|
}
|
|
|
}
|
|
|
+ //电量仅递减
|
|
|
if (SOC_Value > SOC_MIN)
|
|
|
{
|
|
|
SOC_Value = SOC_MIN;
|
|
@@ -773,7 +798,7 @@ void Can_SOC_Cal(void)
|
|
|
}
|
|
|
else
|
|
|
{}
|
|
|
- MC_RunInfo.SOC = SOC_Value;
|
|
|
+ return SOC_Value;
|
|
|
}
|
|
|
|
|
|
void Can_GearSt_switch(void)
|