123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- /**
- * @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 "typedefine.h"
- #include "Temp.h"
- /******************************
- *
- * Parameter
- *
- ******************************/
- SWORD tmp_CurCalibCoef[CURCALIBNUM] = {
- 1024, // 0-20
- 1024, // 20-30
- 1024, // 30-40
- 1024, // 40-50
- 1000, // 50-60
- 980, // 60-70
- 960, // 70-80
- 940, // 80-90
- };
- static SWORD PCB_swRTempTab[PCB_TEMP_NUM] = {
- 0, // 0.01kOnm IPM voltage at 0 C initial
- 0, // 0.01kOnm IPM voltage at 10 C
- 0, // 0.01kOnm IPM voltage at 20 C
- 0, // 0.01kOnm IPM voltage at 30 C
- 0, // 0.01kOnm IPM voltage at 40 C
- 0, //0.01kOnm IPM voltage at 50 C
- 0, // 0.01kOnm IPM voltage at 60 C
- 0, // 0.01kOnm IPM voltage at 70 C
- 0, // 0.01kOnm IPM voltage at 80 C
- 0, // 0.01kOnm IPM voltage at 90 C
- 0, // 0.01kOnm IPM voltage at 100 C
- 0, // 0.01kOnm IPM voltage at 110 C
- 0// 40 // 0.01kOnm IPM voltage at 120 C
- };
- static SWORD PCB_swRTempTab_CITY[PCB_TEMP_NUM] = {
- 3000, // 0.01kOnm IPM voltage at 0 C CITY
- 1900, // 0.01kOnm IPM voltage at 10 C
- 1200, // 0.01kOnm IPM voltage at 20 C
- 718, // 0.01kOnm IPM voltage at 30 C
- 436, // 0.01kOnm IPM voltage at 40 C
- 302, // 0.01kOnm IPM voltage at 50 C
- 211, // 0.01kOnm IPM voltage at 60 C
- 149, // 0.01kOnm IPM voltage at 70 C
- 107, // 0.01kOnm IPM voltage at 80 C
- 79, // 0.01kOnm IPM voltage at 90 C
- 59, // 0.01kOnm IPM voltage at 100 C
- 43, // 0.01kOnm IPM voltage at 110 C
- 33 // 0.01kOnm IPM voltage at 120 C
- };
- static SWORD PCB_swRTempTab_MTB[PCB_TEMP_NUM] = {
- 3000, // 0.01kOnm IPM voltage at 0 C MTB
- 1800, // 0.01kOnm IPM voltage at 10 C
- 1100, // 0.01kOnm IPM voltage at 20 C
- 661, // 0.01kOnm IPM voltage at 30 C
- 386, // 0.01kOnm IPM voltage at 40 C
- 280, //0.01kOnm IPM voltage at 50 C
- 190, // 0.01kOnm IPM voltage at 60 C
- 136, // 0.01kOnm IPM voltage at 70 C
- 95, // 0.01kOnm IPM voltage at 80 C
- 68, // 0.01kOnm IPM voltage at 90 C
- 51, // 0.01kOnm IPM voltage at 100 C
- 37, // 0.01kOnm IPM voltage at 110 C
- 27 // 0.01kOnm IPM voltage at 120 C
- };
- static SWORD PCB_swRTempCofTab[PCB_TEMP_NUM-1] = {
- 0,0,0,0,0,0,0,0,0,0,0,0
- };
- static volatile SWORD TorqTempReg[TORQ_TEMP_NUM]= {
- 3301, //-11 C
- 2690, //8 C
- 1802, //28 C
- 1368, //40 C
- 899, //55 C
- 580, //69 C
- 376 //85 C
- };
- static volatile SWORD TorqTemp[TORQ_TEMP_NUM]= {
- -1083, //unit: 0.01C
- 843,
- 2830,
- 3997,
- 5460,
- 6930,
- 8453
- };
- static volatile SWORD TorqTempCof[TORQ_TEMP_NUM-1]= {
- 0,0,0,0,0,0
- };
- /***************************************************************
- Function: TempInit;
- 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 TempInit(void)
- {
- UWORD i = 0;
- #if((MOTOR_ID_SEL == MOTOR_WELLING_MTB_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_MTB_48V))
- for(i = 0 ; i < PCB_TEMP_NUM ;i ++)
- {
- PCB_swRTempTab[i] = PCB_swRTempTab_MTB[i] ;
- }
- #elif((MOTOR_ID_SEL == MOTOR_WELLING_CITY_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_CITY_48V))
- for(i = 0 ; i < PCB_TEMP_NUM ;i ++)
- {
- PCB_swRTempTab[i] = PCB_swRTempTab_CITY[i] ;
- }
- #endif
-
- for (i = 0; i < (PCB_TEMP_NUM - 1); i++)
- {
- PCB_swRTempCofTab[i] = (SWORD)(((SLONG)10 << 10) / (PCB_swRTempTab[i] - PCB_swRTempTab[i+ 1])); //Q10
- }
-
-
- // for (i = 0; i < (TORQ_TEMP_NUM - 1); i++)
- // {
- // TorqTempCof[i] = (((SLONG)TorqTemp[i+1] - (SLONG)TorqTemp[i]) << 10) / (TorqTempReg[i] - TorqTempReg[i+1]) ; //Q10
- // }
- }
- /***************************************************************
- Function: PcbTempCal;
- Description: Calculation of Pcb Temp using PcbR
- Call by: functions in main loop;
- Input Variables: N/A
- Output/Return Variables: N/A
- Subroutine Call: N/A;
- Reference: N/A
- ****************************************************************/
- SWORD tmp_PcbTemp = 0;
- //void PcbTempCal(SWORD PcbR)
- //{
- // if (PcbR >= PCB_swRTempTab[temp_0])
- // {
- // tmp_PcbTemp = 0;
- // }
- // else if (PcbR < PCB_swRTempTab[temp_0] && PcbR >= PCB_swRTempTab[temp_20])
- // {
- // tmp_PcbTemp = 0 + (((PcbR - PCB_swRTempTab[temp_0]) * PCB_swRTempCofTab[temp_coef_0_20]) >> 10);
- // }
- // else if (PcbR < PCB_swRTempTab[temp_20] && PcbR >= PCB_swRTempTab[temp_40])
- // {
- // tmp_PcbTemp = 20 + (((PcbR - PCB_swRTempTab[temp_20]) * PCB_swRTempCofTab[temp_coef_20_40]) >> 10);
- // }
- // else if (PcbR < PCB_swRTempTab[temp_40] && PcbR >= PCB_swRTempTab[temp_60])
- // {
- // tmp_PcbTemp = 40 + (((PcbR - PCB_swRTempTab[temp_40]) * PCB_swRTempCofTab[temp_coef_40_60]) >> 10);
- // }
- // else if (PcbR < PCB_swRTempTab[temp_60] && PcbR >= PCB_swRTempTab[temp_80])
- // {
- // tmp_PcbTemp = 60 + (((PcbR - PCB_swRTempTab[temp_60]) * PCB_swRTempCofTab[temp_coef_60_80]) >> 10);
- // }
- // else if (PcbR < PCB_swRTempTab[temp_80] && PcbR >= PCB_swRTempTab[temp_100])
- // {
- // tmp_PcbTemp = 80 + (((PcbR - PCB_swRTempTab[temp_80]) * PCB_swRTempCofTab[temp_coef_80_100]) >> 10);
- // }
- // else if (PcbR < PCB_swRTempTab[temp_100])
- // {
- // tmp_PcbTemp = 100 +(((PcbR - PCB_swRTempTab[temp_100]) * PCB_swRTempCofTab[temp_coef_100_120]) >> 10);
- // }
- // else
- // {}
- //}
- static SWORD coeftest = 0 ;
- void PcbTempCal(SWORD PcbR)
- {
- if (PcbR >= PCB_swRTempTab[temp_0])
- {
- tmp_PcbTemp = 0;
- coeftest = 2 ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_10])
- {
- tmp_PcbTemp = 10 - (((PcbR - PCB_swRTempTab[temp_10]) * PCB_swRTempCofTab[temp_coef_0_10]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_0_10] ;
-
- }
- else if (PcbR >= PCB_swRTempTab[temp_20])
- {
- tmp_PcbTemp = 20 - (((PcbR - PCB_swRTempTab[temp_20]) * PCB_swRTempCofTab[temp_coef_10_20]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_10_20] ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_30])
- {
- tmp_PcbTemp = 30 - (((PcbR - PCB_swRTempTab[temp_30]) * PCB_swRTempCofTab[temp_coef_20_30]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_20_30] ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_40])
- {
- tmp_PcbTemp = 40 - (((PcbR - PCB_swRTempTab[temp_40]) * PCB_swRTempCofTab[temp_coef_30_40]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_30_40] ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_50])
- {
- tmp_PcbTemp = 50 - (((PcbR - PCB_swRTempTab[temp_50]) * PCB_swRTempCofTab[temp_coef_40_50]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_40_50] ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_60])
- {
- tmp_PcbTemp = 60 - (((PcbR - PCB_swRTempTab[temp_60]) * PCB_swRTempCofTab[temp_coef_50_60]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_50_60] ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_70])
- {
- tmp_PcbTemp = 70 - (((PcbR - PCB_swRTempTab[temp_70]) * PCB_swRTempCofTab[temp_coef_60_70]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_60_70] ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_80])
- {
- tmp_PcbTemp = 80 - (((PcbR - PCB_swRTempTab[temp_80]) * PCB_swRTempCofTab[temp_coef_70_80]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_70_80] ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_90])
- {
- tmp_PcbTemp = 90 - (((PcbR - PCB_swRTempTab[temp_90]) * PCB_swRTempCofTab[temp_coef_80_90]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_80_90] ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_100])
- {
- tmp_PcbTemp = 100 - (((PcbR - PCB_swRTempTab[temp_100]) * PCB_swRTempCofTab[temp_coef_90_100]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_90_100] ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_110])
- {
- tmp_PcbTemp = 110 - (((PcbR - PCB_swRTempTab[temp_110]) * PCB_swRTempCofTab[temp_coef_100_110]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_100_110] ;
- }
- else if (PcbR >= PCB_swRTempTab[temp_120])
- {
- tmp_PcbTemp = 120 - (((PcbR - PCB_swRTempTab[temp_120]) * PCB_swRTempCofTab[temp_coef_110_120]) >> 10);
- coeftest = PCB_swRTempCofTab[temp_coef_110_120] ;
- }
- else
- {
- tmp_PcbTemp = 130 ;
- coeftest = 1;
- }
- }
- /***************************************************************
- Function:
- Description:
- Call by:
- Input Variables: N/A
- Output/Return Variables: N/A
- Subroutine Call: N/A
- Reference: N/A
- ****************************************************************/
- //SWORD temp_swTorqTempCal(UWORD Reg)
- //{
- // SWORD Temp = 0,i = 0;
- //
- // if(Reg >= TorqTempReg[0])
- // {
- // Temp = TorqTemp[0];
- // }
- // else if(Reg < TorqTempReg[TORQ_TEMP_NUM - 1])
- // {
- // Temp = TorqTemp[TORQ_TEMP_NUM - 1];
- // }
- // else
- // {
- // for (i = 0; i < (TORQ_TEMP_NUM - 1); i++)
- // {
- // if(Reg >= TorqTempReg[i+1] && Reg < TorqTempReg[i])
- // {
- // Temp = TorqTemp[i] + ((SLONG)TorqTempCof[i] * (TorqTempReg[i] - Reg) >> 10); //Q10
- // break;
- // }
- // }
- // }
- //
- // return Temp;
- //}
-
- /*************************************************************************
- End of this File (EOF)!
- Do not put anything after this part!
- *************************************************************************/
|