|
@@ -14,6 +14,7 @@
|
|
|
Compiler Directives:
|
|
|
*************************************************************************/
|
|
|
#include "syspar.h"
|
|
|
+#include "mathtool.h"
|
|
|
#include "bikespeed.h"
|
|
|
#include "CodePara.h"
|
|
|
#include "api.h"
|
|
@@ -30,6 +31,7 @@ BIKESPEED_OUT bikespeed_stFreGetOut = BIKESPEED_OUT_DEFAULT;
|
|
|
BIKESPDPI_IN bikespeed_stPIIn;
|
|
|
static BIKESPDPI_COF bikespeed_stPICof;
|
|
|
BIKESPDPI_OUT bikespeed_stPIOut;
|
|
|
+LPF_OUT bike_pvt_stCurLpf;
|
|
|
|
|
|
static ULONG bikespeed_pvt_FreqPu = 0;
|
|
|
/***************************************************************
|
|
@@ -302,6 +304,7 @@ void bikespeed_voBikeSpeedInit(void)
|
|
|
bikespeed_stFreGetOut.uwBikespeedPwrErrorCnt = 0;
|
|
|
bikespeed_stFreGetOut.uwBikespeedPwrRecoverCnt = 0;
|
|
|
bikespeed_stFreGetOut.uwCaputureOverflowMinCntTest = 0;
|
|
|
+ mth_voLPFilterCoef(1000000 / 25, EVENT_1MS_HZ/100, &bike_pvt_stCurLpf.uwKx); //100Hz
|
|
|
}
|
|
|
|
|
|
/***************************************************************
|
|
@@ -369,6 +372,7 @@ void bikespeed_voPICoef(void)
|
|
|
Subroutine Call: N/A
|
|
|
Reference: N/A
|
|
|
****************************************************************/
|
|
|
+UWORD uwBikeSpeedGain;
|
|
|
void bikespeed_voPI(const BIKESPDPI_IN *in, BIKESPDPI_OUT *out)
|
|
|
{
|
|
|
SLONG slIqMaxPu, slIqMinPu; // Q30
|
|
@@ -405,75 +409,78 @@ void bikespeed_voPI(const BIKESPDPI_IN *in, BIKESPDPI_OUT *out)
|
|
|
{
|
|
|
/* Nothing */
|
|
|
}
|
|
|
-
|
|
|
- bikespeed_stPICof.uwKpPu = 25000;
|
|
|
- if(((SWORD)ABS(out->slErrorZ1) - (SWORD)ABS(slSpdErrPu)) > 20) //Fast Approach
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKiPu = 0;
|
|
|
-
|
|
|
- if(slSpdErrPu < 0 && slSpdErrPu > (SWORD)-3 * BIKESPEED_KMPERH2FREQPU)
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKpPu = 6250;
|
|
|
- bikespeed_stPICof.uwKiPu = 200;
|
|
|
- }
|
|
|
- else if(slSpdErrPu <= (SWORD)-3 * BIKESPEED_KMPERH2FREQPU)
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKpPu = 6250;
|
|
|
- bikespeed_stPICof.uwKiPu = 400;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //do nothing
|
|
|
- }
|
|
|
- }
|
|
|
- else if(((SWORD)ABS(out->slErrorZ1) - (SWORD)ABS(slSpdErrPu)) > 0) //Fast Approach
|
|
|
- {
|
|
|
- if(in->slSpdFdkPu<500)
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKiPu = 500;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKiPu = 1000;
|
|
|
- }
|
|
|
-
|
|
|
- if(slSpdErrPu < 0 && slSpdErrPu > (SWORD)-3 * BIKESPEED_KMPERH2FREQPU)
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKpPu = 6250;
|
|
|
- bikespeed_stPICof.uwKiPu = 200;
|
|
|
- }
|
|
|
- else if(slSpdErrPu <= (SWORD)-3 * BIKESPEED_KMPERH2FREQPU)
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKpPu = 6250;
|
|
|
- bikespeed_stPICof.uwKiPu = 400;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //do nothing
|
|
|
- }
|
|
|
- }
|
|
|
- else //Away
|
|
|
- {
|
|
|
- if(in->slSpdFdkPu<500)
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKiPu = 500;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKiPu = 3000;
|
|
|
- }
|
|
|
-
|
|
|
- if(slSpdErrPu > (0 * BIKESPEED_KMPERH2FREQPU) && slSpdErrPu <= (3 * BIKESPEED_KMPERH2FREQPU))
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKiPu = 0;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(in->slSpdFdkPu >= (27 * BIKESPEED_KMPERH2FREQPU))
|
|
|
- {
|
|
|
- bikespeed_stPICof.uwKiPu = 6000;
|
|
|
- }
|
|
|
|
|
|
+ bikespeed_stPICof.uwKpPu = 10000;
|
|
|
+ bikespeed_stPICof.uwKiPu = 20000;
|
|
|
+
|
|
|
+// bikespeed_stPICof.uwKpPu = 25000;
|
|
|
+// if(((SWORD)ABS(out->slErrorZ1) - (SWORD)ABS(slSpdErrPu)) > 20) //Fast Approach
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKiPu = 0;
|
|
|
+//
|
|
|
+// if(slSpdErrPu < 0 && slSpdErrPu > (SWORD)-3 * BIKESPEED_KMPERH2FREQPU)
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKpPu = 6250;
|
|
|
+// bikespeed_stPICof.uwKiPu = 200;
|
|
|
+// }
|
|
|
+// else if(slSpdErrPu <= (SWORD)-3 * BIKESPEED_KMPERH2FREQPU)
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKpPu = 6250;
|
|
|
+// bikespeed_stPICof.uwKiPu = 400;
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// //do nothing
|
|
|
+// }
|
|
|
+// }
|
|
|
+// else if(((SWORD)ABS(out->slErrorZ1) - (SWORD)ABS(slSpdErrPu)) > 0) //Fast Approach
|
|
|
+// {
|
|
|
+// if(in->slSpdFdkPu<500)
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKiPu = 500;
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKiPu = 1000;
|
|
|
+// }
|
|
|
+//
|
|
|
+// if(slSpdErrPu < 0 && slSpdErrPu > (SWORD)-3 * BIKESPEED_KMPERH2FREQPU)
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKpPu = 6250;
|
|
|
+// bikespeed_stPICof.uwKiPu = 200;
|
|
|
+// }
|
|
|
+// else if(slSpdErrPu <= (SWORD)-3 * BIKESPEED_KMPERH2FREQPU)
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKpPu = 6250;
|
|
|
+// bikespeed_stPICof.uwKiPu = 400;
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// //do nothing
|
|
|
+// }
|
|
|
+// }
|
|
|
+// else //Away
|
|
|
+// {
|
|
|
+// if(in->slSpdFdkPu<500)
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKiPu = 500;
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKiPu = 3000;
|
|
|
+// }
|
|
|
+//
|
|
|
+// if(slSpdErrPu > (0 * BIKESPEED_KMPERH2FREQPU) && slSpdErrPu <= (3 * BIKESPEED_KMPERH2FREQPU))
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKiPu = 0;
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// if(in->slSpdFdkPu >= (27 * BIKESPEED_KMPERH2FREQPU))
|
|
|
+// {
|
|
|
+// bikespeed_stPICof.uwKiPu = 6000;
|
|
|
+// }
|
|
|
+//
|
|
|
sqIqpPu = ((SQWORD)slDeltaErrPu * bikespeed_stPICof.uwKpPu) << 4; // Q30
|
|
|
sqIqiPu = (SQWORD)slSpdErrPu * bikespeed_stPICof.uwKiPu ; // Q30
|
|
|
sqIqRefPu = sqIqpPu + sqIqiPu + (SQWORD)out->slIqRefPu; // Q30
|
|
@@ -490,8 +497,43 @@ void bikespeed_voPI(const BIKESPDPI_IN *in, BIKESPDPI_OUT *out)
|
|
|
{
|
|
|
out->slIqRefPu = (SLONG)sqIqRefPu;
|
|
|
}
|
|
|
-
|
|
|
- out->swIqRefPu = (SWORD)(out->slIqRefPu >> 16); // Q30-Q16=Q14
|
|
|
+
|
|
|
+ if (in->slSpdFdkPu <= 33*BIKESPEED_KMPERH2FREQPU)
|
|
|
+ {
|
|
|
+ uwBikeSpeedGain = Q12_1; // Q12
|
|
|
+
|
|
|
+ }
|
|
|
+ else if (in->slSpdFdkPu > 33*BIKESPEED_KMPERH2FREQPU && in->slSpdFdkPu <= 37*BIKESPEED_KMPERH2FREQPU)
|
|
|
+ {
|
|
|
+ uwBikeSpeedGain =
|
|
|
+ Q12_1 -
|
|
|
+ ((((SQWORD)in->slSpdFdkPu - (SQWORD)33*BIKESPEED_KMPERH2FREQPU ) * (SQWORD)ass_stCurLimCoef.ulBikeSpdDeltInv) >> 9); // Q12
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ uwBikeSpeedGain = 0;
|
|
|
+ }
|
|
|
+ mth_voLPFilter(uwBikeSpeedGain, &bike_pvt_stCurLpf);
|
|
|
+
|
|
|
+// if (in->slSpdFdkPu <= 33*BIKESPEED_KMPERH2FREQPU)
|
|
|
+// {
|
|
|
+// uwBikeSpeedGain = Q12_1; // Q12
|
|
|
+//
|
|
|
+// }
|
|
|
+// else if (in->slSpdFdkPu > 33*BIKESPEED_KMPERH2FREQPU && in->slSpdFdkPu <= 37*BIKESPEED_KMPERH2FREQPU)
|
|
|
+// {
|
|
|
+// uwBikeSpeedGain =
|
|
|
+// Q12_1 -
|
|
|
+// ((((SQWORD)in->slSpdFdkPu - (SQWORD)33*BIKESPEED_KMPERH2FREQPU ) * (SQWORD)ass_CurLimCoef.ulBikeSpdDeltInv) >> 9); // Q12
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// uwBikeSpeedGain = 0;
|
|
|
+// }
|
|
|
+// mth_voLPFilter(uwBikeSpeedGain, &bike_pvt_stCurLpf);
|
|
|
+
|
|
|
+// out->swIqRefPu = (SWORD)(out->slIqRefPu >> 16); // Q30-Q16=Q14
|
|
|
+ out->swIqRefPu = ((SLONG)BIKE_ASS_MOTOR_CURRENT_MAX * in->slSpdRefPu /4750 << 14) / IBASE ;
|
|
|
out->slErrorZ1 = slSpdErrPu;
|
|
|
}
|
|
|
/*************************************************************************
|