|
@@ -16,9 +16,11 @@
|
|
|
#include "syspar.h"
|
|
|
#include "bikespeed.h"
|
|
|
#include "CodePara.h"
|
|
|
-#include "asr.h"
|
|
|
-#include "can.h"
|
|
|
#include "hwsetup.h"
|
|
|
+
|
|
|
+#ifdef RUN_ARCH_SIM
|
|
|
+#include "test_user.h"
|
|
|
+#endif
|
|
|
/******************************
|
|
|
*
|
|
|
* Parameter
|
|
@@ -30,10 +32,12 @@ BIKESPEED_OUT bikespeed_stFreGetOut = BIKESPEED_OUT_DEFAULT;
|
|
|
BIKESPDPI_IN bikespeed_stPIIn;
|
|
|
static BIKESPDPI_COF bikespeed_stPICof;
|
|
|
BIKESPDPI_OUT bikespeed_stPIOut;
|
|
|
+
|
|
|
+static ULONG bikespeed_pvt_FreqPu = 0;
|
|
|
/***************************************************************
|
|
|
- Function: bikespeed_voBikeSpeedCof;
|
|
|
+ Function: bikespeed_voBikeSpeedCof
|
|
|
Description: Bike speed cof calculation
|
|
|
- Call by: functions in main loop;
|
|
|
+ Call by:
|
|
|
Input Variables: N/A
|
|
|
Output/Return Variables: N/A
|
|
|
Subroutine Call: N/A;
|
|
@@ -62,10 +66,10 @@ void bikespeed_voBikeSpeedCof(void)
|
|
|
/***************************************************************
|
|
|
Function: bikespeed_voBikeSpeedIdle;
|
|
|
Description: bike speed function in idel state
|
|
|
- Call by: functions in main loop;
|
|
|
+ Call by:
|
|
|
Input Variables: N/A
|
|
|
Output/Return Variables: N/A
|
|
|
- Subroutine Call: N/A;
|
|
|
+ Subroutine Call: N/A
|
|
|
Reference: N/A
|
|
|
****************************************************************/
|
|
|
static void bikespeed_voBikeSpeedIdle(UWORD source)
|
|
@@ -94,20 +98,20 @@ static void bikespeed_voBikeSpeedIdle(UWORD source)
|
|
|
// bikespeed_stFreGetOut.uwCaputureNumCnt = 0;
|
|
|
bikespeed_stFreGetOut.uwCaputureNumCnt = 1;
|
|
|
bikespeed_stFreGetOut.bikespeed_fsm = BIKESPEED_WORK;
|
|
|
-
|
|
|
- bikespeed_stFreGetOut.uwFrequencyPu = 1 * BIKESPEED_KMPERH2FREQPU;
|
|
|
+ bikespeed_pvt_FreqPu = 1 * BIKESPEED_KMPERH2FREQPU ;
|
|
|
+ bikespeed_stFreGetOut.uwFrequencyPu = (UWORD)bikespeed_pvt_FreqPu;
|
|
|
bikespeed_stFreGetOut.uwCaputure1Cnt = (UWORD)TIMER1_CAP_BIKESPD;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/***************************************************************
|
|
|
- Function: bikespeed_voBikeSpeedWork;
|
|
|
+ Function: bikespeed_voBikeSpeedWork
|
|
|
Description: bike speed function in work state
|
|
|
- Call by: functions in main loop;
|
|
|
+ Call by:
|
|
|
Input Variables: N/A
|
|
|
Output/Return Variables: N/A
|
|
|
- Subroutine Call: N/A;
|
|
|
+ Subroutine Call: N/A
|
|
|
Reference: N/A
|
|
|
****************************************************************/
|
|
|
static void bikespeed_voBikeSpeedWork(UWORD source)
|
|
@@ -116,6 +120,46 @@ static void bikespeed_voBikeSpeedWork(UWORD source)
|
|
|
if (source == 1 && bikespeed_stFreGetOut.uwCaputureNumCnt == 1)
|
|
|
{
|
|
|
bikespeed_stFreGetOut.uwCaputureOverflowCnt++;
|
|
|
+ if (timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_CH3) != 0)
|
|
|
+ {
|
|
|
+ bikespeed_stFreGetOut.uwCaputure2Cnt =(UWORD)TIMER1_CAP_BIKESPD;
|
|
|
+ if(bikespeed_stFreGetOut.uwCaputure2Cnt > 9000) // TIMER1 half Period
|
|
|
+ {
|
|
|
+ bikespeed_stFreGetOut.uwOverflowfirst= 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ bikespeed_stFreGetOut.uwOverflowfirst= 2;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(bikespeed_stFreGetOut.uwOverflowfirst == 1)
|
|
|
+ {
|
|
|
+ bikespeed_stFreGetOut.uwCaputureOverflowCnt -=1;
|
|
|
+ ulCaputureCntErr = ((ULONG)bikespeed_stFreGetOut.uwCaputureOverflowCnt * TIM1CLK_KHZ * bikespeed_stFreGetCof.uwTimerUnit) + bikespeed_stFreGetOut.uwCaputure2Cnt
|
|
|
+ -bikespeed_stFreGetOut.uwCaputure1Cnt;
|
|
|
+ bikespeed_stFreGetOut.uwCaputureOverflowCnt = 1;
|
|
|
+ bikespeed_stFreGetOut.uwOverflowfirst = 0;
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ulCaputureCntErr = ((ULONG)bikespeed_stFreGetOut.uwCaputureOverflowCnt * TIM1CLK_KHZ * bikespeed_stFreGetCof.uwTimerUnit) + bikespeed_stFreGetOut.uwCaputure2Cnt
|
|
|
+ -bikespeed_stFreGetOut.uwCaputure1Cnt;
|
|
|
+ bikespeed_stFreGetOut.uwCaputureOverflowCnt = 0;
|
|
|
+ bikespeed_stFreGetOut.uwOverflowfirst = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* BikeSpeed Freq Cal */
|
|
|
+ bikespeed_pvt_FreqPu = (ULONG)(((UQWORD)720000 << 20) / ((UQWORD)ulCaputureCntErr * bikespeed_stFreGetCof.uwNumbersPulses * FBASE));
|
|
|
+
|
|
|
+ bikespeed_stFreGetOut.uwCaputureNumCnt = 1;
|
|
|
+ bikespeed_stFreGetOut.uwCaputure1Cnt = bikespeed_stFreGetOut.uwCaputure2Cnt;
|
|
|
+ timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_CH3);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ bikespeed_stFreGetOut.uwOverflowfirst= 0;
|
|
|
+ }
|
|
|
}
|
|
|
else if (source == 3)
|
|
|
{
|
|
@@ -129,21 +173,25 @@ static void bikespeed_voBikeSpeedWork(UWORD source)
|
|
|
bikespeed_stFreGetOut.uwCaputureNumCnt = 2;
|
|
|
bikespeed_stFreGetOut.uwCaputure2Cnt = (UWORD)TIMER1_CAP_BIKESPD;
|
|
|
|
|
|
- ulCaputureCntErr = (ULONG)(((UQWORD)bikespeed_stFreGetOut.uwCaputureOverflowCnt * (720 * bikespeed_stFreGetCof.uwTimerUnit)) -
|
|
|
- bikespeed_stFreGetOut.uwCaputure1Cnt + bikespeed_stFreGetOut.uwCaputure2Cnt);
|
|
|
+ ulCaputureCntErr = (ULONG)(((UQWORD)bikespeed_stFreGetOut.uwCaputureOverflowCnt * (720 * bikespeed_stFreGetCof.uwTimerUnit))+ bikespeed_stFreGetOut.uwCaputure2Cnt
|
|
|
+ - bikespeed_stFreGetOut.uwCaputure1Cnt);
|
|
|
|
|
|
bikespeed_stFreGetOut.uwCaputureOverflowMinCnt = (UWORD)(bikespeed_stFreGetOut.uwCaputureOverflowCnt << 1);
|
|
|
if(bikespeed_stFreGetOut.uwCaputureOverflowMinCnt > bikespeed_stFreGetCof.uwHfMinTimeCnt)
|
|
|
{
|
|
|
- bikespeed_stFreGetOut.uwCaputureOverflowMinCnt = bikespeed_stFreGetCof.uwHfMinTimeCnt;
|
|
|
+ bikespeed_stFreGetOut.uwCaputureOverflowMinCnt = bikespeed_stFreGetCof.uwHfMinTimeCnt;
|
|
|
+ }
|
|
|
+ else if(bikespeed_stFreGetOut.uwCaputureOverflowMinCnt < 1)
|
|
|
+ {
|
|
|
+ bikespeed_stFreGetOut.uwCaputureOverflowMinCnt = 1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ //do noting
|
|
|
}
|
|
|
- // ulCaputureCntErr = ((SQWORD)bikespeed_stFreGetOut.uwCaputureOverflowCnt*(72000000/100/(1000/bikespeed_stFreGetCof.uwTimerUnit))) -
|
|
|
- // bikespeed_stFreGetOut.uwCaputure1Cnt + bikespeed_stFreGetOut.uwCaputure2Cnt;
|
|
|
- bikespeed_stFreGetOut.uwFrequencyPu =
|
|
|
- (UWORD)(((SQWORD)720000 << 20) / ((SQWORD)ulCaputureCntErr * bikespeed_stFreGetCof.uwNumbersPulses * FBASE));
|
|
|
+
|
|
|
+ /* BikeSpeed Freq Cal */
|
|
|
+ bikespeed_pvt_FreqPu = (ULONG)(((UQWORD)720000 << 20) / ((UQWORD)ulCaputureCntErr * bikespeed_stFreGetCof.uwNumbersPulses * FBASE));
|
|
|
bikespeed_stFreGetOut.uwCaputure1Cnt = bikespeed_stFreGetOut.uwCaputure2Cnt;
|
|
|
bikespeed_stFreGetOut.uwBikeForwardCnt++;
|
|
|
bikespeed_stFreGetOut.uwCaputureOverflowCnt = 0;
|
|
@@ -159,7 +207,7 @@ static void bikespeed_voBikeSpeedWork(UWORD source)
|
|
|
//do noting
|
|
|
}
|
|
|
|
|
|
- if (bikespeed_stFreGetOut.uwCaputureOverflowCnt >= bikespeed_stFreGetOut.uwCaputureOverflowMinCnt) //
|
|
|
+ if (bikespeed_pvt_FreqPu > bikespeed_stFreGetCof.uwMaxBikeSpeedFre)
|
|
|
{
|
|
|
bikespeed_stFreGetOut.uwFrequencyPu = 0;
|
|
|
bikespeed_stFreGetOut.blBikeSpeedCalStartState = FALSE;
|
|
@@ -167,11 +215,12 @@ static void bikespeed_voBikeSpeedWork(UWORD source)
|
|
|
bikespeed_stFreGetOut.uwCaputureNumCnt = 0;
|
|
|
bikespeed_stFreGetOut.uwCaputure2Cnt = 0;
|
|
|
bikespeed_stFreGetOut.uwCaputure1Cnt = 0;
|
|
|
- bikespeed_stFreGetOut.bikespeed_fsm = BIKESPEED_IDLE;
|
|
|
+ bikespeed_stFreGetOut.bikespeed_fsm = BIKESPEED_ERROR;
|
|
|
+ bikespeed_stFreGetOut.blBikeSpeedSensorErrorFlg = TRUE;
|
|
|
bikespeed_stFreGetOut.uwCaputureOverflowMinCnt = bikespeed_stFreGetCof.uwHfMinTimeCnt;
|
|
|
+ cp_stHistoryPara.uwBikeSpdSensorAlamTimes++;
|
|
|
}
|
|
|
-
|
|
|
- if (bikespeed_stFreGetOut.uwLPFFrequencyPu >= bikespeed_stFreGetCof.uwMaxBikeSpeedFre) // 100ms
|
|
|
+ else if (bikespeed_stFreGetOut.uwCaputureOverflowCnt > bikespeed_stFreGetOut.uwCaputureOverflowMinCnt)
|
|
|
{
|
|
|
bikespeed_stFreGetOut.uwFrequencyPu = 0;
|
|
|
bikespeed_stFreGetOut.blBikeSpeedCalStartState = FALSE;
|
|
@@ -179,20 +228,22 @@ static void bikespeed_voBikeSpeedWork(UWORD source)
|
|
|
bikespeed_stFreGetOut.uwCaputureNumCnt = 0;
|
|
|
bikespeed_stFreGetOut.uwCaputure2Cnt = 0;
|
|
|
bikespeed_stFreGetOut.uwCaputure1Cnt = 0;
|
|
|
- bikespeed_stFreGetOut.bikespeed_fsm = BIKESPEED_ERROR;
|
|
|
- bikespeed_stFreGetOut.blBikeSpeedSensorErrorFlg = TRUE;
|
|
|
+ bikespeed_stFreGetOut.bikespeed_fsm = BIKESPEED_IDLE;
|
|
|
bikespeed_stFreGetOut.uwCaputureOverflowMinCnt = bikespeed_stFreGetCof.uwHfMinTimeCnt;
|
|
|
- cp_stHistoryPara.uwBikeSpdSensorAlamTimes++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ bikespeed_stFreGetOut.uwFrequencyPu = (UWORD)bikespeed_pvt_FreqPu;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/***************************************************************
|
|
|
- Function: bikespeed_voBikeSpeedError;
|
|
|
+ Function: bikespeed_voBikeSpeedError
|
|
|
Description: bike speed error judge
|
|
|
- Call by: functions in main loop;
|
|
|
+ Call by:
|
|
|
Input Variables: N/A
|
|
|
Output/Return Variables: N/A
|
|
|
- Subroutine Call: N/A;
|
|
|
+ Subroutine Call: N/A
|
|
|
Reference: N/A
|
|
|
****************************************************************/
|
|
|
static void bikespeed_voBikeSpeedError(UWORD source)
|
|
@@ -247,12 +298,12 @@ void bikespeed_voGetBikeSpeedPwrError(UWORD BikeSpeedPwrVolPu)
|
|
|
}
|
|
|
|
|
|
/***************************************************************
|
|
|
- Function: bikespeed_voBikeSpeedInit;
|
|
|
+ Function: bikespeed_voBikeSpeedInit
|
|
|
Description: Bike speed initialization
|
|
|
- Call by: functions in main loop;
|
|
|
+ Call by:
|
|
|
Input Variables: N/A
|
|
|
Output/Return Variables: N/A
|
|
|
- Subroutine Call: N/A;
|
|
|
+ Subroutine Call: N/A
|
|
|
Reference: N/A
|
|
|
****************************************************************/
|
|
|
void bikespeed_votempTripCal(void)
|
|
@@ -267,12 +318,12 @@ void bikespeed_votempTripCal(void)
|
|
|
}
|
|
|
|
|
|
/***************************************************************
|
|
|
- Function: bikespeed_voBikeSpeedInit;
|
|
|
+ Function: bikespeed_voBikeSpeedInit
|
|
|
Description: Bike speed initialization
|
|
|
- Call by: functions in main loop;
|
|
|
+ Call by:
|
|
|
Input Variables: N/A
|
|
|
Output/Return Variables: N/A
|
|
|
- Subroutine Call: N/A;
|
|
|
+ Subroutine Call: N/A
|
|
|
Reference: N/A
|
|
|
****************************************************************/
|
|
|
void bikespeed_voBikeSpeedInit(void)
|
|
@@ -295,10 +346,10 @@ void bikespeed_voBikeSpeedInit(void)
|
|
|
/***************************************************************
|
|
|
Function: bikespeed_voBikeSpeedCal;
|
|
|
Description: bike speed FSM
|
|
|
- Call by: functions in main loop;
|
|
|
+ Call by:
|
|
|
Input Variables: N/A
|
|
|
Output/Return Variables: N/A
|
|
|
- Subroutine Call: N/A;
|
|
|
+ Subroutine Call: N/A
|
|
|
Reference: N/A
|
|
|
****************************************************************/
|
|
|
void bikespeed_voBikeSpeedCal(UWORD source)
|
|
@@ -320,12 +371,12 @@ void bikespeed_voBikeSpeedCal(UWORD source)
|
|
|
}
|
|
|
|
|
|
/***************************************************************
|
|
|
- Function: bikespeedinput, motorspeedoutput;
|
|
|
+ Function: bikespeed_voPIInit
|
|
|
Description:
|
|
|
- Call by: ;
|
|
|
+ Call by:
|
|
|
Input Variables: N/A
|
|
|
Output/Return Variables: N/A
|
|
|
- Subroutine Call: N/A;
|
|
|
+ Subroutine Call: N/A
|
|
|
Reference: N/A
|
|
|
****************************************************************/
|
|
|
void bikespeed_voPIInit(void)
|
|
@@ -334,13 +385,29 @@ void bikespeed_voPIInit(void)
|
|
|
bikespeed_stPIOut.slIqRefPu = 0;
|
|
|
bikespeed_stPIOut.swIqRefPu = 0;
|
|
|
}
|
|
|
-
|
|
|
+/***************************************************************
|
|
|
+ Function: bikespeed_voPICoef
|
|
|
+ Description:
|
|
|
+ Call by:
|
|
|
+ Input Variables: N/A
|
|
|
+ Output/Return Variables: N/A
|
|
|
+ Subroutine Call: N/A
|
|
|
+ Reference: N/A
|
|
|
+****************************************************************/
|
|
|
void bikespeed_voPICoef(void)
|
|
|
{
|
|
|
bikespeed_stPICof.uwKpPu = 25000 ; //Q15
|
|
|
bikespeed_stPICof.uwKiPu = 500 ; //Q15
|
|
|
}
|
|
|
-
|
|
|
+/***************************************************************
|
|
|
+ Function: bikespeed_voPI
|
|
|
+ Description:
|
|
|
+ Call by:
|
|
|
+ Input Variables: N/A
|
|
|
+ Output/Return Variables: N/A
|
|
|
+ Subroutine Call: N/A
|
|
|
+ Reference: N/A
|
|
|
+****************************************************************/
|
|
|
void bikespeed_voPI(const BIKESPDPI_IN *in, BIKESPDPI_OUT *out)
|
|
|
{
|
|
|
SLONG slIqMaxPu, slIqMinPu; // Q30
|