Răsfoiți Sursa

速度模式默认为电机转速限制,增加车速限制,通过宏定义选择。

dd 2 luni în urmă
părinte
comite
efa2edaec7

+ 9 - 2
1.FrameLayer/Source/TimeTask_Event.c

@@ -132,13 +132,20 @@ void  Event_1ms(void)
         /* 根据踏频脉冲对力矩信号进行滑动平均处理 */
         event_voTorqMovAve();
 
-#if 0 //加档后转动中轴即自启动
-        ass_CalIn.uwcadancelast =  750;  //60rpm
+#if 0   //加档后转动中轴即自启动
+        ass_CalIn.uwcadancelast = 750;   //60rpm
         ass_CalIn.uwcadance = 750;
         ass_CalIn.uwcadancePer = 750;
         ass_CalIn.uwtorque = 5461;       //30Nm
         ass_CalIn.uwtorquelpf = 5461;
         ass_CalIn.uwtorquePer = 5461;
+#elif 0//转把模拟力矩信号
+        ass_CalIn.uwcadancelast = 750;   //60rpm
+        ass_CalIn.uwcadance = 750;
+        ass_CalIn.uwcadancePer = 750;
+        ass_CalIn.uwtorque = ((ULONG)bikethrottle_stBikeThrottleOut.uwThrottlePercent << 14) / 100;       //30Nm
+        ass_CalIn.uwtorquelpf = ((ULONG)bikethrottle_stBikeThrottleOut.uwThrottlePercent << 14) / 100;       //30Nm
+        ass_CalIn.uwtorquePer = ((ULONG)bikethrottle_stBikeThrottleOut.uwThrottlePercent << 14) / 100;       //30Nm
 #endif
 
         /* 力矩中轴助力控制 */

+ 4 - 4
3.BasicFunction/Include/CadAssist.h

@@ -308,21 +308,21 @@ typedef struct
     // Bike info
     UWORD uwWheelCircumferenceCm;       /**< Unit: 1cm. Bike Wheel Perimeter. */   
     UWORD uwMechRationMotor;            /**< Q10. Motor To Bike Wheel Ratio */   
-    UWORD uwAssistMaxBikeSpeed;         /**< Q4. Base 1Km/h. Assist Max Bike Speed */
-    UWORD uwThrottleMaxBikeSpeed;       /**< Q4. Base 1Km/h. Throttle Max Bike Speed */
-    UWORD uwCartMaxBikeSpeed;           /**< Q4. Base 1Km/h. Cart Bike Speed */
+    UWORD uwAssistMaxBikeSpeed;         /**< Q4. Base 0.1Km/h. Assist Max Bike Speed */
+    UWORD uwThrottleMaxBikeSpeed;       /**< Q4. Base 0.1Km/h. Throttle Max Bike Speed */
+    UWORD uwCartMaxBikeSpeed;           /**< Q4. Base 0.1Km/h. Cart Bike Speed */
     UWORD uwMaxCadRpm;                  /**< Set Max Cadence Freqency Unit Rpm */
     UWORD uwCadencePulses;              /**< Cadence Pulses for 1 Cycle */
     UWORD uwFluxPu;                     /**< Q12. Motor Rotor Flux */
     
     // Drive info
     UWORD uwMotorPoles;                 /**< Motor Pole Pairs*/
-    
     UWORD uwCofCurMaxPu;                /**< Q14. Max Assist Current */
     
     SWORD swKmhToMSpdPu;                /**< Q15.1km/h to Unit motorspd pu */
     SLONG slBSpdPuToMSpdPu;             /**< Q10.Transform form Bike speed pu(Q20) to motor speed pu(Q15) */
     SWORD swMSpdpuLimit;                /**< Q15.Assist Max Speed.Calculate By ASS_SPD_LIMIT */
+    SWORD swBikeSpeedLimit;             /**< Q4. Base 0.1km/h */
     SWORD swAssistSectionComp;          /**< Q14.Cadence Control Speed Section Compensation Coefficient */
     SWORD swAssistMaxSpd;
     SWORD swThrottleMaxspd;

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

@@ -580,7 +580,7 @@ void AssitCuvApplPerVolt(void)
     /* 计算当前时刻车速对应电机转速 */
     if(ass_CalIn.uwbikespeed < 95L)   //95 - 1Km/h
     {
-         tmp_slBikeSpd2MotSpd = (((SLONG)95L* ass_ParaCong.uwMechRationMotor >>10) * ass_ParaCong.uwMotorPoles) >> 5; // Q20-Q5= Q15 出力时电机转速计算
+         tmp_slBikeSpd2MotSpd = (((SLONG)95L* ass_ParaCong.uwMechRationMotor >> 10) * ass_ParaCong.uwMotorPoles) >> 5; // Q20-Q5= Q15 出力时电机转速计算
     }
     else
     {

+ 32 - 3
3.BasicFunction/Source/CadAssist.c

@@ -405,16 +405,25 @@ void ass_voParameterInput(void)
     if(MC_WorkMode == 1) //配置模式不限制电机最高转速
     {
         ass_stCadAssCoef.swMSpdpuLimit = (SLONG)(cp_stMotorPara.swRSpeedRpm << 15) / cof_uwVbRpm;
+        ass_stCadAssCoef.swBikeSpeedLimit = (ass_stCadAssCoef.uwThrottleMaxBikeSpeed > ass_stCadAssCoef.uwAssistMaxBikeSpeed) ?
+                                            ass_stCadAssCoef.uwThrottleMaxBikeSpeed : ass_stCadAssCoef.uwAssistMaxBikeSpeed;
     }
     else //运行模式
     {
         if( ass_stCadAssParaPro.uwAssitMode == 7) //转把模式限速
         {
-            ass_stCadAssCoef.swMSpdpuLimit =ass_stCadAssCoef.swThrottleMaxspd;
+            ass_stCadAssCoef.swMSpdpuLimit = ass_stCadAssCoef.swThrottleMaxspd;
+            ass_stCadAssCoef.swBikeSpeedLimit = ass_stCadAssCoef.uwThrottleMaxBikeSpeed + ASS_SPD_LIMIT_ERR;
         }
-        else //助力或Walk
+        if(ass_stCadAssParaPro.uwAssitMode == 6) //Walk限速
         {
-            ass_stCadAssCoef.swMSpdpuLimit =ass_stCadAssCoef.swAssistMaxSpd;
+            ass_stCadAssCoef.swMSpdpuLimit = ass_stCadAssCoef.uwCartMaxBikeSpeed;
+            ass_stCadAssCoef.swBikeSpeedLimit = ass_stCadAssCoef.uwCartMaxBikeSpeed + ASS_SPD_LIMIT_ERR;
+        }
+        else //助力
+        {
+            ass_stCadAssCoef.swMSpdpuLimit = ass_stCadAssCoef.swAssistMaxSpd;
+            ass_stCadAssCoef.swBikeSpeedLimit = ass_stCadAssCoef.uwAssistMaxBikeSpeed + ASS_SPD_LIMIT_ERR;
         }
     }
 
@@ -1153,6 +1162,7 @@ void ass_voAssistCmdDeal(void)
  */
 void ass_voAssMaxCurCal(void)
 {
+#if 0 //限制电机转速
     /* Local variable */
     /* Calculate the Speed use for speed limit */
     SLONG tmp_slMotorSpd = (SLONG)ass_stCadAssParaIn.swSpdFbkPu * (SLONG)ass_stCadAssParaIn.swDirection;
@@ -1176,6 +1186,25 @@ void ass_voAssMaxCurCal(void)
     {
         ass_stCadAssParaPro.swCurrentMaxPu = 0;     /**< Q14 */
     }
+#else 1 //限制车速
+    SLONG tmp_slBikeSpeed = (SLONG)cp_stBikeRunInfoPara.BikeSpeedKmH << 4; //Q4 0.1km/h
+    SLONG tmp_slBikeSpeedError = tmp_slBikeSpeed - ((SLONG)ass_stCadAssCoef.swBikeSpeedLimit - ASS_SPD_LIMIT_ERR); //提前限制电流
+    SLONG tmp_slBikeSpeedLimitCoef = 0;
+    if (tmp_slBikeSpeedError <= 0)
+    {
+        ass_stCadAssParaPro.swCurrentMaxPu = ass_stCadAssCoef.uwCofCurMaxPu;
+    }
+    else if(tmp_slBikeSpeedError < (SLONG)ASS_SPD_LIMIT_ERR)
+    {
+        tmp_slBikeSpeedLimitCoef = (tmp_slBikeSpeedError << 13) / ASS_SPD_LIMIT_ERR;
+        ass_stCadAssParaPro.swCurrentMaxPu = ((SLONG)ass_stCadAssCoef.uwCofCurMaxPu * (SLONG)(8192L - tmp_slBikeSpeedLimitCoef) >> 13);
+    }
+    else
+    {
+        ass_stCadAssParaPro.swCurrentMaxPu = 0;
+    }
+
+#endif
     
     /* 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;

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

@@ -825,7 +825,7 @@ void Can_voMC_Run_200ms(void)
     MC_RunInfo.GearSt = MC_ControlCode.GearSt;                                           //助力档位,地址偏移13
     MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch;                                 //灯开关 0xF0-关,0xF1-开,地址偏移14
     MC_RunInfo.TorqueReg = torsensor_stTorSensorOut.uwTorqueReg;                         //力矩Reg
-    MC_RunInfo.SOC = Can_SOC_Cal();                                                     //剩余电量 1%,地址偏移15
+    MC_RunInfo.SOC = Can_SOC_Cal();                                                      //剩余电量 1%,地址偏移15
     if(hw_blPWMOnFlg == FALSE)
     {
         MC_RunInfo.BusCurrent=0;

+ 2 - 2
4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/bikeinformation.h

@@ -82,10 +82,10 @@
 #endif
        
 
-#define ASS_CART_SPEED              50 *16                               /**< Q4. Base 0.1Km/h*/
+#define ASS_CART_SPEED              50 * 16                              /**< Q4. Base 0.1Km/h*/
 #define ASS_GEAR1_SPEED             130 * 16                             /**< Q4. Base 0.1Km/h*/
 #define ASS_THROT_SPEED_MIN         50 * 16                              /**< Q4. Base 0.1Km/h*/
-#define ASS_SPD_LIMIT_ERR           (UWORD)(25 *16)                      /**< Q4. Base 0.1Km/h*/
+#define ASS_SPD_LIMIT_ERR           (UWORD)(25 * 16)                     /**< Q4. Base 0.1Km/h*/
 
 #define BIKE_FRONTTEETH_NMB           38                                 // number
 #define BIKE_BACKTEETH_NMB            11                                 // number

+ 1 - 1
4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/syspar.h

@@ -63,7 +63,7 @@ Update Time
    0 - PA19和PA20做前灯DCDC控制时,不可仿真;
    1 - PA19和PA20作SWD调试接口时,前灯DCDC不可控制
 *=======================================================================*/
-#define  SIMULATION        0
+#define  SIMULATION        1
 /*======================================================================*
    //仪表协议选择
 // //0-5s,1-锂电2号,2-概念智慧, 3-八方,4-澜风2.6,无适配仪表,暂未使用, 5-J协议,6-澜风9.0

+ 1 - 1
4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/user.h

@@ -48,7 +48,7 @@ Update Time
 /*======================================================================*
     三力距标志
 *=======================================================================*/
-#define TORSENSOR3NUM  //三力矩标识
+//#define TORSENSOR3NUM  //三力矩标识
 
 /*======================================================================*
    Motor Number Selection