Explorar o código

限速单位改为0.1km/h,测试OK。

dd hai 3 meses
pai
achega
d3da465eca

+ 1 - 5
1.FrameLayer/Source/TimeTask_Event.c

@@ -20,7 +20,6 @@
 #include "flash_master.h"
 #include "queue.h"
 #include "spdctrmode.h"
-//#include "at32f421.h"//#include "stm32f10x.h"
 #include "string.h"
 #include "syspar.h"
 #include "user.h"
@@ -28,9 +27,6 @@
 #include "MosResCalib.h"
 #include "bikespeed.h"
 #include "UserGpio_Config.h"
-//#include "asr.h"
-
-//#include "STLmain.h"
 
 /******************************
  *
@@ -105,7 +101,7 @@ void  Event_1ms(void)
 
     /* 转把根据车速限制功率 */
     #if 0
-    ThrottlePowerLimitCal((ass_stCadAssParaPro.uwAssitMode == 7), MC_RunInfo.BikeSpeed, (ass_ParaCong.uwThrottleMaxSpdKmH - 5) * 10,
+    ThrottlePowerLimitCal((ass_stCadAssParaPro.uwAssitMode == 7), MC_RunInfo.BikeSpeed, (ass_ParaCong.uwThrottleMaxSpdKmH - 50),
                           scm_stMotoPwrInLpf.slY.sw.hi, pwr_stPwrLimOut2.swMotorPwrLimitActualPu, &Throttle_PowerLimit_K);
     #endif
     /* 电池电量限电流 */

+ 2 - 2
3.BasicFunction/Source/AssistCurve.c

@@ -341,9 +341,9 @@ void AssitCoefInit(void)
     //    ass_CurLimCoef.uwBikeSpdThresHold2 =
     //        ((SQWORD)10000 << 30) * ass_ParaSet.uwAssistLimitBikeSpdStop / ((SQWORD)36 * 3216 * ass_ParaCong.uwWheelPerimeter * FBASE);
     ass_CurLimCoef.uwBikeSpdThresHold1 = ((SQWORD)1000 << 20) * (ass_ParaSet.uwAssistLimitBikeSpdStart + ass_ParaCong.swDeltaBikeSpeedLimit) /
-                                         ((SQWORD)36 * (ass_ParaCong.uwWheelPerimeter + ass_ParaCong.swDeltPerimeter) * FBASE); // Q20    3216 = Q10(3.1415926)
+                                         ((SQWORD)360 * (ass_ParaCong.uwWheelPerimeter + ass_ParaCong.swDeltPerimeter) * FBASE); // Q20    3216 = Q10(3.1415926)
     ass_CurLimCoef.uwBikeSpdThresHold2 = ((SQWORD)1000 << 20) * (ass_ParaSet.uwAssistLimitBikeSpdStop + ass_ParaCong.swDeltaBikeSpeedLimit) /
-                                         ((SQWORD)36 * (ass_ParaCong.uwWheelPerimeter + ass_ParaCong.swDeltPerimeter) * FBASE); // Q20    3216 = Q10(3.1415926)
+                                         ((SQWORD)360 * (ass_ParaCong.uwWheelPerimeter + ass_ParaCong.swDeltPerimeter) * FBASE); // Q20    3216 = Q10(3.1415926)
     ass_CurLimCoef.ulBikeSpdDeltInv = (1 << 20) / (ass_CurLimCoef.uwBikeSpdThresHold2 - ass_CurLimCoef.uwBikeSpdThresHold1); 
     
     /*设置转矩电流标定系数*/

+ 3 - 3
3.BasicFunction/Source/BikeRatioCal.c

@@ -53,15 +53,15 @@ void BikeRatioCal_Process(UWORD MotorSpeed, UWORD Cadence, UWORD BikeSpeedRpm, U
             //计算传动比 Q10
             p_Bike_RatioCal->RatioPer = (Speed_B << 10) / Speed_F;
             //限制计算结果
-            p_Bike_RatioCal->RatioPer = (p_Bike_RatioCal->RatioPer < 400) ? 400 : ((p_Bike_RatioCal->RatioPer > 1500) ? 1500 : p_Bike_RatioCal->RatioPer);
+            p_Bike_RatioCal->RatioPer = (p_Bike_RatioCal->RatioPer < 400) ? 400 : ((p_Bike_RatioCal->RatioPer > 2048) ? 2048 : p_Bike_RatioCal->RatioPer);
         }
         //计算结果滤波
-        p_Bike_RatioCal->RatioFltSum += ((p_Bike_RatioCal->RatioPer << 10) - p_Bike_RatioCal->RatioFltSum) >> 8;
+        p_Bike_RatioCal->RatioFltSum += ((p_Bike_RatioCal->RatioPer << 10) - p_Bike_RatioCal->RatioFltSum) >> 4;
         p_Bike_RatioCal->RatioFlt = p_Bike_RatioCal->RatioFltSum >> 10;
         //目标值
         if((p_Bike_RatioCal->RatioResult + 5) > p_Bike_RatioCal->RatioFlt)
             p_Bike_RatioCal->RatioResult -= 5;
         else if((p_Bike_RatioCal->RatioResult + 10) < p_Bike_RatioCal->RatioFlt)
-            p_Bike_RatioCal->RatioResult += 10;
+            p_Bike_RatioCal->RatioResult += 20;
     }
 }

+ 15 - 17
3.BasicFunction/Source/CadAssist.c

@@ -275,7 +275,7 @@ void ass_voParameterInit(void)
     ass_stCadAssCoef.uwFluxPu = ((ULONG)M_FLUX_WB << 12) / ((ULONG)VBASE * 1000000 / ((ULONG) 2 * 31416 * FBASE / 1000)); 
     ass_stCadAssCoef.swKmhToMSpdPu = 889L*(SLONG)ass_stCadAssCoef.uwMotorPoles*(SLONG)ass_stCadAssCoef.uwMechRationMotor/((SLONG)ass_stCadAssCoef.uwWheelCircumferenceCm * (SLONG)FBASE);
     ass_stCadAssCoef.slBSpdPuToMSpdPu = ((SLONG)ass_stCadAssCoef.uwMechRationMotor * ass_stCadAssCoef.uwMotorPoles); 
-    ass_stCadAssCoef.swMSpdpuLimit = (SWORD)((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)(ass_stCadAssCoef.uwAssistMaxBikeSpeed + ASS_SPD_LIMIT_ERR)  >> 4);
+    ass_stCadAssCoef.swMSpdpuLimit = (SWORD)(((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)(ass_stCadAssCoef.uwAssistMaxBikeSpeed + ASS_SPD_LIMIT_ERR)  >> 4) / 10);
     ass_stCadAssCoef.swAssistSectionComp = _IQ14(1.0/3.0);
     
     /** Module Input Parameter Initial */
@@ -336,13 +336,13 @@ void ass_voAssistCoefCal(void)
     /** Bike and assist parameter config */
     ass_stCadAssCoef.uwWheelCircumferenceCm = ass_ParaCong.uwWheelPerimeter + ass_ParaCong.swDeltPerimeter; 
     ass_stCadAssCoef.uwMechRationMotor = ass_ParaCong.uwMechRationMotor;
-    ass_stCadAssCoef.uwAssistMaxBikeSpeed = ((ass_ParaSet.uwAssistLimitBikeSpdStart+ass_ParaCong.swDeltaBikeSpeedLimit)<<4) + 8; // 骑行助力限速
-    ass_stCadAssCoef.uwThrottleMaxBikeSpeed = ((ass_ParaCong.uwThrottleMaxSpdKmH+ass_ParaCong.swDeltaBikeSpeedLimit)<<4) + 8;
-    ass_stCadAssCoef.uwCartMaxBikeSpeed = (ass_ParaCong.uwCartSpdKmH<<4) + 2;
+    ass_stCadAssCoef.uwAssistMaxBikeSpeed = ((ass_ParaSet.uwAssistLimitBikeSpdStart + ass_ParaCong.swDeltaBikeSpeedLimit) << 4) + 80; // 骑行助力限速
+    ass_stCadAssCoef.uwThrottleMaxBikeSpeed = ((ass_ParaCong.uwThrottleMaxSpdKmH + ass_ParaCong.swDeltaBikeSpeedLimit) << 4) + 80;
+    ass_stCadAssCoef.uwCartMaxBikeSpeed = (ass_ParaCong.uwCartSpdKmH << 4) + 20;
     if(cp_stFlg.RunModelSelect == TorqAssist)
     {
         cadence_stFreGetCof.uwNumbersPulses = cadence_stFreGetCof.uwTorque_NumbersPulses;
-     }
+    }
     else
     {
         cadence_stFreGetCof.uwNumbersPulses=cadence_stFreGetCof.uwCad_NumbersPulses;
@@ -359,11 +359,9 @@ void ass_voAssistCoefCal(void)
     ass_stCadAssCoef.slBSpdPuToMSpdPu = ((SLONG)ass_stCadAssCoef.uwMechRationMotor * ass_stCadAssCoef.uwMotorPoles);  
     
     /** Motor Max Speed calculate according to bike speed limit */
-
-
-    tmp_slAssistSpdLimit = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG) ass_stCadAssCoef.uwThrottleMaxBikeSpeed + ASS_SPD_LIMIT_ERR)  >> 4) / 10;
+    tmp_slAssistSpdLimit = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG) ass_stCadAssCoef.uwThrottleMaxBikeSpeed + ASS_SPD_LIMIT_ERR) >> 4) / 10;
     ass_stCadAssCoef.swThrottleMaxspd= (SWORD)tmp_slAssistSpdLimit;
-    tmp_slAssistSpdLimit = ((SWORD)((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed + ASS_SPD_LIMIT_ERR)  >> 4)) / 10;
+    tmp_slAssistSpdLimit = ((SWORD)((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed + ASS_SPD_LIMIT_ERR) >> 4)) / 10;
     ass_stCadAssCoef.swAssistMaxSpd=(SWORD)tmp_slAssistSpdLimit;
 
    #if(THROTTLEGEAR !=0)
@@ -381,9 +379,9 @@ void ass_voAssistCoefCal(void)
     CadAssistSped.uwGearFour =(UWORD)(  ass_stCadAssCoef.uwThrottleMaxBikeSpeed  *CAD_FOUR_SPEED_PERCENT/100  );
     CadAssistSped.uwGearFive =(UWORD)(  ass_stCadAssCoef.uwThrottleMaxBikeSpeed  *CAD_FIVE_SPEED_PERCENT/100 );//
 #endif
-    if(ass_ParaSet.uwAssistLimitBikeSpdStart >= 25)
+    if(ass_ParaSet.uwAssistLimitBikeSpdStart >= 250) //没用到
     {
-        ass_stCadAssCoef.swAssistSectionComp = ((25L<<14)/(3L*ass_ParaSet.uwAssistLimitBikeSpdStart));
+        ass_stCadAssCoef.swAssistSectionComp = ((250L << 14) / (3L * ass_ParaSet.uwAssistLimitBikeSpdStart));
     }
     else
     {
@@ -1155,14 +1153,14 @@ void ass_voAssistCmdDeal(void)
  */
 void ass_voAssMaxCurCal(void)
 {
-    /** Local variable */
-    /** Calculate the Speed use for speed limit */
+    /* Local variable */
+    /* Calculate the Speed use for speed limit */
     SLONG tmp_slMotorSpd = (SLONG)ass_stCadAssParaIn.swSpdFbkPu * (SLONG)ass_stCadAssParaIn.swDirection;
-    /** Calculate the err of current speed and limit speed */
+    /* Calculate the err of current speed and limit speed */
     SLONG tmp_slSpdLimitErr = tmp_slMotorSpd - ((SLONG)ass_stCadAssCoef.swMSpdpuLimit - (((SLONG)ass_stCadAssCoef.swKmhToMSpdPu * ASS_SPD_LIMIT_ERR >> 4) / 10));
     SLONG tmp_slSpdLimitCoef = 0;
     
-    /** Calculate the q axis current limit by speed limit */
+    /* Calculate the q axis current limit by speed limit */
     if (tmp_slSpdLimitErr <= 0)
     {
         ass_stCadAssParaPro.swCurrentMaxPu = ass_stCadAssCoef.uwCofCurMaxPu;
@@ -1179,7 +1177,7 @@ void ass_voAssMaxCurCal(void)
         ass_stCadAssParaPro.swCurrentMaxPu = 0;     /**< Q14 */
     }
     
-    /** Calculate the min value of speed limit,flux limit,power limit and Bms limit. Q14 */
+    /* Calculate the min value of speed limit,flux limit,power limit and Bms limit. Q14 */
     ass_stCadAssParaPro.swCurrentMaxPu = (ass_stCadAssParaPro.swCurrentMaxPu < ass_stCadAssParaIn.swPwrIqLimitPu) ? ass_stCadAssParaPro.swCurrentMaxPu : ass_stCadAssParaIn.swPwrIqLimitPu;
     ass_stCadAssParaPro.swCurrentMaxPu = (ass_stCadAssParaPro.swCurrentMaxPu < ass_stCadAssParaIn.swFlxIqLimitPu) ? ass_stCadAssParaPro.swCurrentMaxPu : ass_stCadAssParaIn.swFlxIqLimitPu;
     ass_stCadAssParaPro.swCurrentMaxPu = (ass_stCadAssParaPro.swCurrentMaxPu < ass_stCadAssParaIn.uwBmsIqLimitPu) ? ass_stCadAssParaPro.swCurrentMaxPu : ass_stCadAssParaIn.uwBmsIqLimitPu; 
@@ -1610,7 +1608,7 @@ void ass_voAssistFunc(void)
     ass_stCadAssParaPro.swSpdFbkPuRec[((ass_stCadAssParaPro.uw1msCnt)%10)] = ass_stCadAssParaIn.swSpdFbkPu;
     ass_stCadAssParaPro.swSpdFbkPuAcc = (SWORD)((SLONG)ass_stCadAssParaIn.swSpdFbkPu - (SLONG)ass_stCadAssParaPro.swSpdFbkPuRec[((ass_stCadAssParaPro.uw1msCnt + 1)%10)]);
     
-    ass_voAssMaxCurCal(); 
+    ass_voAssMaxCurCal();
     ass_voAssInitVoltageCal();
     
     //Calculate the Assist Current

+ 2 - 2
3.BasicFunction/Source/canAppl.c

@@ -334,8 +334,8 @@ void Can_voMC_Run_1ms(void)
 
     if(++time_s>60000)
     {
-    cp_stHistoryPara.ulUsedTime++;
-    time_s=0;
+        cp_stHistoryPara.ulUsedTime++;
+        time_s=0;
     }
     // Error Cnt record and Error Display Set
     MC_ErrorCntRecord.ulAlamCntTimeCnt_1ms ++;

+ 4 - 4
3.BasicFunction/Source/usart.c

@@ -595,7 +595,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
         case 0x1A00: //按小牙盘原协议返回控制参数1
         {
             MC_ConfigParam1_Struct_t MC_ConfigParam1;
-            MC_ConfigParam1.GasCtrlMode_Param = MC_UpcInfo.stBikeInfo.uwThrottleMaxSpdKmH;
+            MC_ConfigParam1.GasCtrlMode_Param = (MC_UpcInfo.stBikeInfo.uwThrottleMaxSpdKmH == 0) ? 0x55 : 0xAA;
             MC_ConfigParam1.StarModel = MC_UpcInfo.stBikeInfo.uwStartMode;
             MC_ConfigParam1.StopTime = 100;
             MC_ConfigParam1.SpeedLimit = MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStart;
@@ -605,9 +605,9 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             MC_ConfigParam1.CurrentLimit = MC_UpcInfo.stTestParaInfo.uwPwrLimit / MC_UpcInfo.stMotorInfo.uwRVolV;
             MC_ConfigParam1.TempTH_Alarm = MC_UpcInfo.stMContorlInfo.uwPwrLimitStartCe;
             MC_ConfigParam1.TempTH_Protect = MC_UpcInfo.stMContorlInfo.uwAlamOverHeatCe;
-            MC_ConfigParam1.NoPBU_Flag = MC_UpcInfo.stBikeInfo2.uwNoneOBCEnable;
+            MC_ConfigParam1.NoPBU_Flag = (MC_UpcInfo.stBikeInfo2.uwNoneOBCEnable == 0xAA) ? 0xAA : 0x55;;
             MC_ConfigParam1.WheelSize = MC_UpcInfo.stBikeInfo.uwWheelPerimeter;
-            MC_ConfigParam1.SerialNum = 1;
+            MC_ConfigParam1.SerialNum = MC_UpcInfo.stTestParaInfo.RunModelSelect;
             MC_ConfigParam1.UserAdjParam1_ECO.Assist_K_GAIN = 100;
             MC_ConfigParam1.UserAdjParam1_ECO.StarModel_GAIN = 100;
             MC_ConfigParam1.UserAdjParam1_NORM.Assist_K_GAIN = 100;
@@ -638,7 +638,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             MC_MotorParam.Coil_Lq = MC_UpcInfo.stMotorInfo.uwLquH;
             MC_MotorParam.Coil_Ld = MC_UpcInfo.stMotorInfo.uwLduH;
             MC_MotorParam.Back_EMF = (MC_UpcInfo.stMotorInfo.uwFluxmWb * MC_UpcInfo.stMotorInfo.uwPolePairs * 5940) >> 15; //Emf(@1000rpm) = Flux * 2 * 3.14 * 1000 * p / 60 * 1.732
-            MC_MotorParam.Rate_Voltage = MC_UpcInfo.stMotorInfo.uwRVolV;
+            MC_MotorParam.Rate_Voltage = MC_UpcInfo.stMotorInfo.uwRVolV / 10;
             MC_MotorParam.Pole = MC_UpcInfo.stMotorInfo.uwPolePairs;
             MC_MotorParam.RS[0] = 0;
             MC_MotorParam.RS[1] = 0;