123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406 |
- /**
- * @file Power.c
- * @author Wang, Zhiyu(wangzy49@midea.com)
- * @brief Power of ebike
- * @version 0.1
- * @date 2021-09-29
- *
- * @copyright Copyright (c) 2021
- *
- */
- /************************************************************************
- Beginning of File, do not put anything above here except notes
- Compiler Directives:
- *************************************************************************/
- #include "syspar.h"
- #include "typedefine.h"
- #include "mathtool.h"
- //#include "at32f421.h"//#include "stm32f10x.h"
- #include "power.h"
- #include "AssistCurve.h"
- #include "bikeinformation.h"
- //#include "api.h"
- #include "board_config.h"
- #include "FSM_2nd.h"
- #include "usart.h"
- #include "UserGpio_Config.h"
- /******************************
- *
- * Parameter
- *
- ******************************/
- POWER_OUT power_stPowStateOut = POWER_OUT_DEFAULT;
- static POWER_COF power_stPowStateCof = POWER_COF_DEFAULT;
- void Power_KeyChangeHandle(void);
- /***************************************************************
- Function: power_voPowerInit;
- Description: cadence frequency get initialization
- Call by: functions in main loop;
- Input Variables: N/A
- Output/Return Variables: N/A
- Subroutine Call: N/A;
- Reference: N/A
- ****************************************************************/
- void power_voPowerInit(void)
- {
- power_stPowStateOut.powerstate = POWER_START;
- power_stPowStateOut.blPowerShutdownFlg = FALSE;
- power_stPowStateOut.blPowerStartupFlg = FALSE;
- power_stPowStateOut.uwPowerOn2OffCnt = 0;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- power_stPowStateOut.uwPowerStartupCnt = 0;
- power_stPowStateOut.uwPowerKeySta =0;
- power_stPowStateOut.uwPowerKeyMode =0;
- UWORD uwStartUpTime,uwShutDownTime;
- uwStartUpTime = (ass_ParaCong.uwAutoPowerOffTime & 0xF000)>>12;
- // uwStartUpTime = 2;
- uwShutDownTime = (ass_ParaCong.uwAutoPowerOffTime & 0x0F00)>>8;
- if(uwStartUpTime != 0)
- {
- power_stPowStateCof.uwPowerStartTouchTimeCnt = uwStartUpTime * 200 / POWER_START_TIMERUNIT;
- }
- else
- {
- power_stPowStateCof.uwPowerStartTouchTimeCnt = POWER_START_TOUCHING_TIME / POWER_START_TIMERUNIT;
- }
- if(uwShutDownTime != 0)
- {
- power_stPowStateCof.uwPowerShutTouchTimeCnt = uwShutDownTime * 200 / POWER_SHUT_TIMERUNIT;
- }
- else
- {
- power_stPowStateCof.uwPowerShutTouchTimeCnt = POWER_SHUT_TOUCHING_TIME / POWER_SHUT_TIMERUNIT;
- }
- power_stPowStateCof.uwPowerStartEndCnt = POWER_START_FULLYON_TIME / POWER_START_TIMERUNIT;
- power_stPowStateCof.uwPowerShutEndCnt = POWER_SHUT_FULLYOFF_TIME / POWER_SHUT_TIMERUNIT;
- power_stPowStateCof.uwPowerOn2OffTimeCnt = POWER_ON2OFF_TIME / POWER_SHUT_TIMERUNIT;
-
- }
- /***************************************************************
- Function: power_voPowerManagement;
- Description: cadence frequency get initialization
- Call by: functions in main loop;
- Input Variables: N/A
- Output/Return Variables: N/A
- Subroutine Call: N/A;
- Reference: N/A
- ****************************************************************/
- void power_voPowerManagement( _Bool ParaSaveEEFlg, _Bool PowerSleepFlg)
- {
- #if(BIKE_OXFORD_EN!=0)
- if (power_stPowStateOut.powerstate == POWER_START && GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_12) != 0)
- {
- power_stPowStateOut.uwPowerStartupCnt++;
- if (power_stPowStateOut.uwPowerStartupCnt == power_stPowStateCof.uwPowerStartTouchTimeCnt)
- {
- cp_stHistoryPara.uwOpenTimes++;
- GPIO_SetBits(POWER_LOCK_PORT,POWER_LOCK_PIN);// iGpio_Write(HW_GPIO_POWERLOCK_PIN,ApiGpio_HighLevel);
- power_stPowStateOut.powerstate = POWER_ON;
- power_stPowStateOut.uwPowerStartupCnt = 0;
- }
- }
- else if (power_stPowStateOut.powerstate == POWER_ON)
- {
- power_stPowStateOut.uwPowerStartupCnt++;
- if (power_stPowStateOut.uwPowerStartupCnt == power_stPowStateCof.uwPowerStartEndCnt)
- {
- power_stPowStateOut.powerstate = POWER_ON_END;
- power_stPowStateOut.blPowerStartupFlg = TRUE;
- power_stPowStateOut.uwPowerStartupCnt = 0;
- power_stPowStateOut.uwPowerOn2OffCnt = 0;
- }
- }
- /////////////////////////////////////////////////////// off /////////////////////////////////////////////
- // if ( (GPIO_ReadInputDataBit(POWER_SWSTATE_PORT, POWER_SWSTATE_PIN) == RESET))
- if(( GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_12) == 0)&&(power_stPowStateOut.powerstate == POWER_ON_END))
- {
- power_stPowStateOut.uwPowerShutdnCnt++;
- if (power_stPowStateOut.uwPowerShutdnCnt >= power_stPowStateCof.uwPowerShutTouchTimeCnt)
- {
- power_stPowStateOut.powerstate = POWER_OFF;
- cp_stFlg.ParaHistorySaveEEFinishFlg = FALSE;
- power_stPowStateOut.blPowerStartupFlg = FALSE;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- }
- }
- else if (power_stPowStateOut.powerstate == POWER_OFF)
- {
- power_stPowStateOut.uwPowerShutdnCnt++;
- if (power_stPowStateOut.uwPowerShutdnCnt >= power_stPowStateCof.uwPowerShutEndCnt && cp_stFlg.ParaHistorySaveEEFinishFlg == TRUE && ParaSaveEEFlg == FALSE)
- {
- power_stPowStateOut.powerstate = POWER_OFF_END;
- power_stPowStateOut.blPowerShutdownFlg = TRUE;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- GPIO_ResetBits(POWER_LOCK_PORT,POWER_LOCK_PIN);// iGpio_Write(HW_GPIO_POWERLOCK_PIN,ApiGpio_LowLevel);
- }
- }
- else
- {
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- }
- // if (power_stPowStateOut.powerstate == POWER_ON_END && GPIO_ReadInputDataBit(POWER_SWSTATE_PORT, POWER_SWSTATE_PIN) == RESET)
- // {
- // power_stPowStateOut.powerstate = POWER_ON_END;
- // power_stPowStateOut.uwPowerStartupCnt = 0;
- // power_stPowStateOut.uwPowerShutdnCnt = 0;
- // }
- #else
- if((adc_stUpOut.uwPoweAdcrLpfPu < NULL_KEYMAXVOL)&&(adc_stUpOut.uwPoweAdcrLpfPu > NULL_KEYMINVOL))
- {
- power_stPowStateOut.uwPowerKeySta=0;
- if(power_stPowStateCof.uwPowerModeTime>0)
- power_stPowStateCof.uwPowerModeTime--;
- }
- else if(adc_stUpOut.uwPoweAdcrLpfPu > High_KEYVOL)
- {
- if(power_stPowStateCof.uwPowerModeTime<10)
- {
- power_stPowStateCof.uwPowerModeTime++;
- }
- else
- {
- power_stPowStateOut.uwPowerKeySta=1;
- if(power_stPowStateOut.powerstate == POWER_START)
- {
- power_stPowStateOut.uwPowerKeyMode=1;
- }
- }
- }
- else if(adc_stUpOut.uwPoweAdcrLpfPu < LOW_KEYVOL)
- {
- if(++power_stPowStateCof.uwPowerModeTime<10)
- {
- power_stPowStateCof.uwPowerModeTime++;
- }
- else
- {
- power_stPowStateOut.uwPowerKeySta=1;
- if(power_stPowStateOut.powerstate == POWER_START)
- {
- power_stPowStateOut.uwPowerKeyMode=2;
- }
- }
- }
- ////////////////////////////////////////////////// on and standby ////////////////
- if( power_stPowStateOut.uwPowerKeyMode ==1)
- {
- if (((power_stPowStateOut.powerstate == POWER_START)||(power_stPowStateOut.powerstate == POWER_OFF_END))
- && power_stPowStateOut.uwPowerKeySta != 0)
- // if (power_stPowStateOut.powerstate == POWER_START )
- {
- power_stPowStateOut.uwPowerStartupCnt++;
- if (power_stPowStateOut.uwPowerStartupCnt == power_stPowStateCof.uwPowerStartTouchTimeCnt)
- {
- cp_stHistoryPara.uwOpenTimes++;
- Set_POWER_LOCK_PORT();// GPIO_SetBits(POWER_LOCK_PORT,POWER_LOCK_PIN);//iGpio_Write(HW_GPIO_POWERLOCK_PIN,ApiGpio_HighLevel);
- power_stPowStateOut.powerstate = POWER_ON;
- power_stPowStateOut.uwPowerStartupCnt = 0;
- }
- }
- else if (power_stPowStateOut.powerstate == POWER_ON)
- {
- power_stPowStateOut.uwPowerStartupCnt++;
- if (power_stPowStateOut.uwPowerStartupCnt == power_stPowStateCof.uwPowerStartEndCnt)
- {
- power_stPowStateOut.powerstate = POWER_ON_END;
- power_stPowStateOut.blPowerStartupFlg = TRUE;
- power_stPowStateOut.uwPowerStartupCnt = 0;
- power_stPowStateOut.uwPowerOn2OffCnt = 0;
- }
- }
- else
- {
- power_stPowStateOut.uwPowerStartupCnt = 0;
- }
- /////////////////////////////////////////////////////// off /////////////////////////////////////////////
- if ((power_stPowStateOut.powerstate == POWER_ON_END) && (power_stPowStateOut.uwPowerKeySta == 0 /* || PowerSleepFlg == TRUE*/))
- {
- power_stPowStateOut.uwPowerShutdnCnt++;
- if (power_stPowStateOut.uwPowerShutdnCnt >= power_stPowStateCof.uwPowerShutTouchTimeCnt)
- {
- power_stPowStateOut.powerstate = POWER_OFF;
- // if(adc_stUpOut.uwVdcLpfPu> POWERMINVOLT)
- {
- cp_stFlg.ParaHistorySaveEEFinishFlg = FALSE;
- }
- power_stPowStateOut.blPowerStartupFlg = FALSE;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- //SendData(ID_MC_BC, MODE_REPORT, 0x1808, (uint8_t *)"SHUTDOWN");
- }
- }
- else if (power_stPowStateOut.powerstate == POWER_OFF)
- {
- power_stPowStateOut.uwPowerShutdnCnt++;
- if ((power_stPowStateOut.uwPowerShutdnCnt >= POWER_SHUT_STOPDELAY_TIME)||(FSM2nd_Run_state.state == Exit))
- {
- power_stPowStateOut.powerstate = POWER_OFF_END;
- // if(adc_stUpOut.uwVdcLpfPu> POWERMINVOLT)
- {
- cp_stFlg.ParaHistorySaveEEFinishFlg = FALSE;
- }
- power_stPowStateOut.blPowerStartupFlg = FALSE;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- }
- }
- else if(power_stPowStateOut.powerstate == POWER_OFF_END)
- {
- power_stPowStateOut.uwPowerShutdnCnt++;
- if ((power_stPowStateOut.uwPowerShutdnCnt >= power_stPowStateCof.uwPowerShutEndCnt)
- && (cp_stFlg.ParaHistorySaveEEFinishFlg == TRUE)
- && (ParaSaveEEFlg == FALSE))
- {
- power_stPowStateOut.blPowerShutdownFlg = TRUE;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- Reset_POWER_LOCK_PORT();
- DL_WWDT_disablePower(WWDT0_INST);
- NVIC_SystemReset();
- //Power_KeyChangeHandle();
- }
- }
- else
- {
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- }
- }
- ////////////////////////////--------------------------uwPowerKeyMode 2-------- ///////////////////////////////////////////////////////
- else if(power_stPowStateOut.uwPowerKeyMode==2)
- {
- if (power_stPowStateOut.powerstate == POWER_START && power_stPowStateOut.uwPowerKeySta != 0)
- {
- power_stPowStateOut.uwPowerStartupCnt++;
- if (power_stPowStateOut.uwPowerStartupCnt == power_stPowStateCof.uwPowerStartTouchTimeCnt)
- {
- cp_stHistoryPara.uwOpenTimes++;
- Set_POWER_LOCK_PORT();
- power_stPowStateOut.powerstate = POWER_ON;
- power_stPowStateOut.uwPowerStartupCnt = 0;
- }
- }
- else if (power_stPowStateOut.powerstate == POWER_ON)
- {
- power_stPowStateOut.uwPowerStartupCnt++;
- if (power_stPowStateOut.uwPowerStartupCnt == power_stPowStateCof.uwPowerStartEndCnt)
- {
- power_stPowStateOut.powerstate = POWER_ON_END;
- power_stPowStateOut.blPowerStartupFlg = TRUE;
- power_stPowStateOut.uwPowerStartupCnt = 0;
- power_stPowStateOut.uwPowerOn2OffCnt = 0;
- }
- }
- else if (power_stPowStateOut.powerstate == POWER_ON_END)
- {
- if ((power_stPowStateOut.uwPowerOn2OffCnt < power_stPowStateCof.uwPowerOn2OffTimeCnt) && (power_stPowStateOut.uwPowerKeySta == 0))
- {
- power_stPowStateOut.uwPowerOn2OffCnt++;
- }
- }
- else
- {
- power_stPowStateOut.uwPowerStartupCnt = 0;
- }
- /////////////////////////////////////////////////////// off /////////////////////////////////////////////
- if (((power_stPowStateOut.powerstate == POWER_ON_END) )
- && (power_stPowStateOut.uwPowerOn2OffCnt == power_stPowStateCof.uwPowerOn2OffTimeCnt)
- &&((power_stPowStateOut.uwPowerKeySta != 0) || (PowerSleepFlg == TRUE)))
- {
- power_stPowStateOut.uwPowerShutdnCnt++;
- if (power_stPowStateOut.uwPowerShutdnCnt >= power_stPowStateCof.uwPowerShutTouchTimeCnt)
- {
- power_stPowStateOut.powerstate = POWER_OFF;
- cp_stFlg.ParaHistorySaveEEFinishFlg = FALSE;
- power_stPowStateOut.blPowerStartupFlg = FALSE;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- power_stPowStateOut.uwPOwerForceShutdnCnt=0;
- // SendData(ID_MC_BC, MODE_REPORT, 0x1808, (uint8_t *)"SHUTDOWN");
- }
- }
- else if (power_stPowStateOut.powerstate == POWER_OFF)
- {
- power_stPowStateOut.uwPowerShutdnCnt++;
- if ((power_stPowStateOut.uwPowerShutdnCnt >= POWER_SHUT_STOPDELAY_TIME)||(FSM2nd_Run_state.state == Exit))
- {
- power_stPowStateOut.powerstate = POWER_OFF_END;
- cp_stFlg.ParaHistorySaveEEFinishFlg = FALSE;
- power_stPowStateOut.blPowerStartupFlg = FALSE;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- power_stPowStateOut.uwPOwerForceShutdnCnt=0;
- }
- }
- else if(power_stPowStateOut.powerstate == POWER_OFF_END)
- {
- power_stPowStateOut.uwPowerShutdnCnt++;
- if (power_stPowStateOut.uwPowerShutdnCnt >= power_stPowStateCof.uwPowerShutEndCnt && cp_stFlg.ParaHistorySaveEEFinishFlg == TRUE && ParaSaveEEFlg == FALSE)
- {
- power_stPowStateOut.blPowerShutdownFlg = TRUE;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- Reset_POWER_LOCK_PORT();
- Power_KeyChangeHandle();
- }
- if(power_stPowStateOut.uwPowerKeySta != 0)
- {
- if(++power_stPowStateOut.uwPOwerForceShutdnCnt>(power_stPowStateCof.uwPowerShutEndCnt+50))
- {
- power_stPowStateOut.blPowerShutdownFlg = TRUE;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- Reset_POWER_LOCK_PORT();
- Power_KeyChangeHandle();
- }
- }
- else
- {
- power_stPowStateOut.uwPOwerForceShutdnCnt=0;
- }
- }
- else
- {
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- power_stPowStateOut.uwPOwerForceShutdnCnt=0;
- }
- if ((power_stPowStateOut.powerstate == POWER_ON_END && (power_stPowStateOut.uwPowerKeySta == 0)&&(PowerSleepFlg == FALSE)))
- {
- power_stPowStateOut.powerstate = POWER_ON_END;
- power_stPowStateOut.uwPowerStartupCnt = 0;
- power_stPowStateOut.uwPowerShutdnCnt = 0;
- }
- }
- #endif
- }
- void Power_KeyChangeHandle(void)
- {
- static UWORD uWPtime=0;
- if(uWPtime<=5000)
- {
- uWPtime++;
- DL_GPIO_initDigitalOutput(IOMUX_PINCM60);
- DL_GPIO_clearPins(GPIOA,DL_GPIO_PIN_27);
- DL_GPIO_enableOutput(GPIOA, DL_GPIO_PIN_27);
- DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_27);
- }
- else
- {
- if(uWPtime<5002)
- {
- uWPtime=5005;
- SYSCFG_DL_ADC12_0_init();
- }
- }
- }
- /*************************************************************************
- End of this File (EOF)!
- Do not put anything after this part!
- *************************************************************************/
|