|
@@ -34,10 +34,20 @@ Include File
|
|
|
#include "cmdgennew.h"
|
|
|
#include "power.h"
|
|
|
#include "sys_ctrl.h"
|
|
|
+#include "can.h"
|
|
|
+#include "canAppl.h"
|
|
|
+#include "string.h"
|
|
|
/************************************************************************
|
|
|
Constant Table:
|
|
|
************************************************************************/
|
|
|
-
|
|
|
+UWORD T_rotate_count = 0;
|
|
|
+UWORD T_rotateDelay_count = 0;
|
|
|
+UWORD T_rotateCoef = 0;
|
|
|
+UWORD T_rotateDelayCoef = 0;
|
|
|
+UWORD uwAngle = 0;
|
|
|
+UWORD uwAngle_sector = 0;
|
|
|
+UWORD Angle[44] = {0};//0-SpiThetaOrigin;1-SpiThetaNow;2-44:Angle
|
|
|
+UWORD AngleGet_count = 2;
|
|
|
/************************************************************************
|
|
|
Exported Functions:
|
|
|
************************************************************************/
|
|
@@ -69,8 +79,19 @@ void StartUp_TbcupHook(void)
|
|
|
scm_swIdRefPu = align_stOut.swIdRefPu;
|
|
|
scm_swIqRefPu = align_stOut.swIqRefPu;
|
|
|
scm_slAngManuPu = align_stOut.slAngManuPu;
|
|
|
- scm_uwAngRefPu = align_stOut.uwAngRefPu;
|
|
|
+// scm_uwAngRefPu = align_stOut.uwAngRefPu;
|
|
|
scm_StartUpOvrFlg = align_stOut.blStartUpOvrFlg;
|
|
|
+
|
|
|
+ if(AngleTest == TRUE)
|
|
|
+ {
|
|
|
+ scm_swIdRefPu = align_stCoef.uwDragCurPu;
|
|
|
+ scm_swIqRefPu = 0;
|
|
|
+ scm_uwAngRefPu = StartUp_SpiSensorTest();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ scm_uwAngRefPu = align_stOut.uwAngRefPu;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void Open2Clz_TbcupHook(void)
|
|
@@ -145,7 +166,7 @@ void ClzLoop_TbcupHook(void)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- scm_swIdRefPu = 0; //flx_stCtrlOut.swIdRefPu;
|
|
|
+ scm_swIdRefPu = flx_stCtrlOut.swIdRefPu; //0; //
|
|
|
}
|
|
|
|
|
|
scm_swIqRefPu = cvb_stBrakeOut.swIqRefPu;
|
|
@@ -505,6 +526,14 @@ void scm_voSpdCtrMdFSM(void) /* parasoft-suppress METRICS-28 "本项目圈复杂
|
|
|
|
|
|
Switch_speed_FSM(&Stop_state);
|
|
|
}
|
|
|
+
|
|
|
+ if (uart_swTorqRefNm == 0)
|
|
|
+ {
|
|
|
+ scm_swIdRefPu = 0;
|
|
|
+ scm_swIqRefPu = 0;
|
|
|
+
|
|
|
+ Switch_speed_FSM(&Stop_state);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{}
|
|
@@ -559,6 +588,58 @@ void Switch_speed_FSMInit(void)
|
|
|
curSpeed_state = Stop_state;
|
|
|
}
|
|
|
|
|
|
+UWORD StartUp_SpiSensorTest(void)
|
|
|
+{
|
|
|
+ T_rotateCoef = 8*1000/cp_stControlPara.swDragSpdHz/6;
|
|
|
+ T_rotateDelayCoef = T_rotateCoef*50;
|
|
|
+ if(T_rotate_count > 0)
|
|
|
+ {
|
|
|
+ T_rotateDelay_count++;
|
|
|
+ if(T_rotateDelay_count == T_rotateDelayCoef)
|
|
|
+ {
|
|
|
+ Angle[AngleGet_count] = spi_stResolverOut.uwSpiThetaPu;
|
|
|
+ AngleGet_count++;
|
|
|
+ if(AngleGet_count >= 44)
|
|
|
+ {
|
|
|
+ AngleTest = FALSE;
|
|
|
+ Switch_speed_FSM(&Stop_state);
|
|
|
+ AngleGet_count = 2;
|
|
|
+ MC_MotorSPD_rpm_Percent = 0;
|
|
|
+ cp_stFlg.RunModelSelect = MC_UpcInfo.stTestParaInfo.RunModelSelect;
|
|
|
+
|
|
|
+ memcpy((UBYTE*)(Angle), (UBYTE*)(&spi_stResolverOut.swSpiThetaOffsetOrignPu), (uint32_t)2);
|
|
|
+ memcpy((UBYTE*)(Angle+1), (UBYTE*)(&spi_stResolverOut.swSpiThetaOffsetPu), (uint32_t)2);
|
|
|
+ SendData(ID_MC_TO_CDL, MODE_REPORT, 0xBF58, (UBYTE *)&Angle[0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ T_rotate_count = 0;
|
|
|
+ T_rotateDelay_count = 0;
|
|
|
+ uwAngle_sector++;
|
|
|
+ if(uwAngle_sector==6)
|
|
|
+ {
|
|
|
+ uwAngle_sector = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(uwAngle < ((uwAngle_sector+1)*cof_sl60DegreePu - (scm_slDragSpdPu * TBC_TM >> 10)))
|
|
|
+ {
|
|
|
+ uwAngle += ((SQWORD)scm_slDragSpdPu * TBC_TM >> 10);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ T_rotate_count++;
|
|
|
+ uwAngle = (uwAngle_sector+1)*cof_sl60DegreePu;
|
|
|
+ if (uwAngle >= cof_sl360DegreePu)
|
|
|
+ {
|
|
|
+ uwAngle -= cof_sl360DegreePu;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return uwAngle;
|
|
|
+}
|
|
|
/************************************************************************
|
|
|
Function: void RUN_FSM_Main(void)
|
|
|
Description:
|