123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #include "gtest/gtest.h"
- #include <gtest/gtest.h>
- #include <tuple>
- #include "scope.h"
- #include "test_user.h"
- class BikeSpeedTest : public testing::Test
- {
- protected:
- static void SetUpTestSuite()
- {
- bikespeed_voBikeSpeedInit();
- iRt_Init();
- }
- virtual void SetUp() override
- {
- }
- virtual void TearDown() override
- {
- bikespeed_voBikeSpeedInit();
- }
- };
- class BikeSpeedTest1 : public BikeSpeedTest, public testing::WithParamInterface<int>
- {};
- TEST_P(BikeSpeedTest1, FreCal)
- {
- /* Coef Cal */
- bikespeed_voBikeSpeedCof();
- bikespeed_stFreGetCof.uwNumbersPulses = BIKESPEED_NUMBERS_PULSES;
- int timerPrd = TIM1CLK_KHZ * 1000 / (1000 / 25); // cnt = 18000, same as STM32
- int timerCnt = 0;
- int bikeSpeedSignal = 0, bikeSpeedCnt = 0, bikeSpeedSignalLast = 0;
- int bikeSpeedPrd = GetParam();
- int capValue = 0;
- /* BikeSpeed Freq Cal */
- int j = 0;
- for(int i = 0; i < 100000000; i++)
- {
- /* Input BikeSpeed Signal */
- bikeSpeedCnt++;
- if(bikeSpeedCnt <= (bikeSpeedPrd/10)) // 10% duty
- {
- bikeSpeedSignal = 0;
- }
- else
- {
- bikeSpeedSignal = 1;
- if(bikeSpeedPrd == 18000 && j == 0)
- {
- if(bikeSpeedCnt >= bikeSpeedPrd - 1)
- {
- bikeSpeedCnt = 0;
- j = 1;
- }
- }
- else
- {
- if(bikeSpeedCnt >= bikeSpeedPrd)
- {
- bikeSpeedCnt = 0;
- }
- }
- }
-
- /* Timer */
- timerCnt ++ ;
- if(timerCnt >= timerPrd)
- {
- timerCnt = 0;
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP] = 1;
- }
- /* Capture: rising edge trigger*/
- if(bikeSpeedSignal - bikeSpeedSignalLast == -1)
- {
- testCh3CapValue[TIMER1] = timerCnt;
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH3] = 1;
- }
- bikeSpeedSignalLast = bikeSpeedSignal;
- /* Interrupt: update and capture */
- if(testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP])
- {
- bikespeed_voBikeSpeedCal(1);
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP] = 0;
- }
- else if(testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH3])
- {
- bikespeed_voBikeSpeedCal(3);
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH3] = 0;
- }
- //UdpScope::Send(0, bikespeed_stFreGetOut.uwFrequencyPu);
- }
- double bikeSpeedFreqPu = (double)TIM1CLK_KHZ * 1000 * 1048576 / bikeSpeedPrd / FBASE / bikespeed_stFreGetCof.uwNumbersPulses; // Q20
- if(bikeSpeedFreqPu > bikespeed_stFreGetCof.uwMaxBikeSpeedFre || bikespeed_stFreGetOut.uwCaputureOverflowCnt > bikespeed_stFreGetOut.uwCaputureOverflowMinCntTest)
- {
- EXPECT_NEAR(bikespeed_stFreGetOut.uwFrequencyPu, 0, 0.1);
- }
- else
- {
- EXPECT_NEAR(bikespeed_stFreGetOut.uwFrequencyPu, bikeSpeedFreqPu, 2);
- }
- }
- INSTANTIATE_TEST_SUITE_P(DiffBikeSpeedPeriod, BikeSpeedTest1,
- ::testing::Values(0, 500, 3000, 18000, 100000,10000000));
- TEST_F(BikeSpeedTest, FreCal2)
- {
- /* Coef Cal */
- bikespeed_voBikeSpeedCof();
- bikespeed_stFreGetCof.uwNumbersPulses = BIKESPEED_NUMBERS_PULSES;
- /* Test conditions */
- bikespeed_stFreGetOut.bikespeed_fsm = BIKESPEED_WORK;
- bikespeed_stFreGetOut.uwCaputureNumCnt = 1;
- bikespeed_stFreGetOut.uwCaputure1Cnt = 0;
- bikespeed_stFreGetOut.uwCaputureOverflowCnt = 3;
- double overflowCnt = bikespeed_stFreGetOut.uwCaputureOverflowCnt;
- double cap1Cnt = bikespeed_stFreGetOut.uwCaputure1Cnt;
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP] = 1;
- testCh3CapValue[TIMER1] = 17900;
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH3] = 1;
- /* Interrupt: update and capture */
- if(testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP])
- {
- bikespeed_voBikeSpeedCal(1);
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP] = 0;
- }
- else if(testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH3])
- {
- bikespeed_voBikeSpeedCal(3);
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH3] = 0;
- }
- double bikeSpeedFreqPu = overflowCnt * 18000 + bikespeed_stFreGetOut.uwCaputure2Cnt - cap1Cnt;
- bikeSpeedFreqPu = (double)TIM1CLK_KHZ * 1000 * 1048576 / bikeSpeedFreqPu / FBASE / bikespeed_stFreGetCof.uwNumbersPulses; // Q20
- if(bikeSpeedFreqPu > bikespeed_stFreGetCof.uwMaxBikeSpeedFre || bikespeed_stFreGetOut.uwCaputureOverflowCnt > bikespeed_stFreGetOut.uwCaputureOverflowMinCnt)
- {
- EXPECT_NEAR(bikespeed_stFreGetOut.uwFrequencyPu, 0, 0.1);
- }
- else
- {
- EXPECT_NEAR(bikespeed_stFreGetOut.uwFrequencyPu, bikeSpeedFreqPu, 2);
- }
- }
|