Browse Source

feat: 区分48V与36V相关参数

CN\guohui27 2 năm trước cách đây
mục cha
commit
e3421762fe

+ 2 - 2
User project/1.FrameLayer/Source/TimeTask_Event.c

@@ -400,11 +400,11 @@ void  Event_200ms(void)
 {
     SWORD sign;
 
-    if (MOTOR_ID_SEL == MOTOR_WELLING_MTB)
+    if(cp_stFlg.RotateDirectionSelect == ForwardRotate)
     {
         sign = 1;
     }
-    else if(MOTOR_ID_SEL == MOTOR_WELLING_CITY)
+    else if(cp_stFlg.RotateDirectionSelect == BackwardRotate)
     {
         sign = -1;
     }

+ 1 - 0
User project/3.BasicFunction/Include/canAppl.h

@@ -630,6 +630,7 @@ extern MC_RunInfo_Struct_t              MC_RunInfo;
 extern MC_ErrorCode_Struct_t            MC_ErrorCode;
 extern MC_ErrorCode_CNT_RECORD_Struct_t MC_ErrorCntRecord;
 extern MC_VerInfo_Struct_t              MC_VerInfo;
+extern char                             Firmware_Special[32];//软件版本标识,包含客户定制化信息
 extern MC_MacInfo_Struct_t              MC_MacInfo;
 extern MC_RideLog_Struct_t              MC_RideLog;
 extern BMS_RunInfo_Struct_t             BMS_RunInfo;

+ 32 - 32
User project/3.BasicFunction/Source/Temp.c

@@ -120,7 +120,7 @@ void TempInit(void)
 {
     UWORD i = 0;
 
-    if(MOTOR_ID_SEL == MOTOR_WELLING_MTB)
+    if((MOTOR_ID_SEL == MOTOR_WELLING_MTB_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_MTB_48V))
     {
       for(i = 0 ; i < PCB_TEMP_NUM ;i ++)
       {
@@ -128,7 +128,7 @@ void TempInit(void)
       }
     }
 
-    if(MOTOR_ID_SEL == MOTOR_WELLING_CITY)
+    else if((MOTOR_ID_SEL == MOTOR_WELLING_CITY_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_CITY_48V))
     {
       for(i = 0 ; i < PCB_TEMP_NUM ;i ++)
       {
@@ -142,10 +142,10 @@ void TempInit(void)
     }  
     
            
-    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
-    }
+//    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
+//    }
 
 }
 
@@ -276,32 +276,32 @@ void PcbTempCal(SWORD PcbR)
  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;
-}
+//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)!

+ 2 - 0
User project/3.BasicFunction/Source/can.c

@@ -456,6 +456,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t *Data)
         case 0x3900: //返回电机版本信息
         {
             SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t *)MC_VerInfo.Mode);
+            SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
             break;
         }
         case 0x3A02: //OBC按键状态
@@ -485,6 +486,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t *Data)
         case 0x1200: //查询电机版本信息
         {
             SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t *)MC_VerInfo.Mode);
+            SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
             break;
         }
         case 0x1300: //查询自定义字符串1

+ 20 - 2
User project/3.BasicFunction/Source/canAppl.c

@@ -22,6 +22,7 @@
 #include "AssistCurve.h"
 #include "hwsetup.h"
 #include "spi_master.h"
+#include "user.h"
 /******************************
  *
  *  Parameter
@@ -31,6 +32,7 @@ MC_RunInfo_Struct_t              MC_RunInfo;
 MC_ErrorCode_Struct_t            MC_ErrorCode = CAN_MC_ALARMCODE_DEFAULT;
 MC_ErrorCode_CNT_RECORD_Struct_t MC_ErrorCntRecord = CAN_MC_ALARMCODE_CNT_RECORD_DEFAULT;
 MC_VerInfo_Struct_t              MC_VerInfo;
+char                             Firmware_Special[32];
 MC_MacInfo_Struct_t              MC_MacInfo;
 MC_RideLog_Struct_t              MC_RideLog;
 BMS_RunInfo_Struct_t             BMS_RunInfo;
@@ -202,9 +204,20 @@ void  Can_voInitMC_Run(void)
 {
     flash_voRead();
     // Hardware version
-    strncpy(MC_VerInfo.HW_Version, (char *)"TTKZ018..", 9);
+    if (MOTOR_ID_SEL == MOTOR_WELLING_CITY_36V) 
+        strncpy(MC_VerInfo.HW_Version, (char *)"CITY-36V.       ", 16);
+    else if (MOTOR_ID_SEL == MOTOR_WELLING_CITY_48V)
+        strncpy(MC_VerInfo.HW_Version, (char *)"CITY-48V.       ", 16);
+    else if (MOTOR_ID_SEL == MOTOR_WELLING_MTB_36V)
+        strncpy(MC_VerInfo.HW_Version, (char *)"MTB-36V.        ", 16);
+    else if (MOTOR_ID_SEL == MOTOR_WELLING_MTB_48V)
+        strncpy(MC_VerInfo.HW_Version, (char *)"MTB-48V.        ", 16);
+    else
+        strncpy(MC_VerInfo.HW_Version, (char *)"TEST.           ", 16);
     // Software version
-    strncpy(MC_VerInfo.FW_Version, (char *)"V0r1r0_20221121.", 16);
+    strncpy(MC_VerInfo.FW_Version, (char *)"V0r1r9_20230531.", 16);
+    // Firmware Special Info
+    strncpy(Firmware_Special, (char*)"TC00000-MC00000-V0r0.           ", 32);
     // Model name
     memcpy(MC_VerInfo.Mode, flash_stPara.ubMotorVersion, sizeof(flash_stPara.ubMotorVersion));
     // SN
@@ -708,8 +721,13 @@ void Can_RemainTrip_Cal(void)
     }
 }
 
+#if ((MOTOR_ID_SEL == MOTOR_WELLING_CITY_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_MTB_36V))
 SLONG slBMSMaxVol = 42000;
 SLONG slBMSMinVol = 32000;
+#elif ((MOTOR_ID_SEL == MOTOR_WELLING_CITY_48V) || (MOTOR_ID_SEL == MOTOR_WELLING_MTB_48V))
+SLONG slBMSMaxVol = 54600;
+SLONG slBMSMinVol = 41600;
+#endif
 SWORD SOC_Cnt, SOC_Value, SOC_MIN;
 SLONG SOC_Sum;
 BOOL  blSOCfirstSet = FALSE;

+ 90 - 20
User project/4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/user.h

@@ -38,15 +38,18 @@ Update Time
 /*======================================================================*
    Motor Number Selection
 *=======================================================================*/
-#define MOTOR_WELLING_CITY 0x20
-#define MOTOR_WELLING_MTB 0x21
-#define MOTOR_ID_SEL           MOTOR_WELLING_CITY //
+#define MOTOR_WELLING_CITY_36V    0x20
+#define MOTOR_WELLING_MTB_36V     0x21
+#define MOTOR_WELLING_CITY_48V    0x30
+#define MOTOR_WELLING_MTB_48V     0x31
+
+#define MOTOR_ID_SEL              MOTOR_WELLING_CITY_36V
 
 
 /*======================================================================*
     Motor Parameters
 *=======================================================================*/
-#if (MOTOR_ID_SEL == MOTOR_WELLING_MTB)
+#if (MOTOR_ID_SEL == MOTOR_WELLING_MTB_36V)
 #define M_POLE_PAIRS        7       // unit:Null,Pole pairs
 #define M_RS_OHM            170     // unit: 0.1mOhm, Phase resistance
 #define M_MATERIAL          Al      // unit:Null
@@ -62,7 +65,7 @@ Update Time
 #define M_LQ_TURN2_IQ_AP    700     // unit: 0.01A,
 #define M_LQ_TURN2_LQ_MH    11500   // unit: 0.01uH,Q axis inductance
 #define M_LQ_MIN_MH         11500   // unit: 0.01uH,Q axis inductance
-#define M_JD                500    // unit: 10-7Kg*m2, Rotational inertia
+#define M_JD                2500    // unit: 10-7Kg*m2, Rotational inertia
 #define M_MAGNETIC_MATERIAL Ferrite // unit:Null
 #define M_FLUX_WB           5360    // unit: 0.001mWb, Flux linkage
 #define M_ID_MAX_AP         0       //-25      // unit: 0.01A, Max d axis current
@@ -74,9 +77,37 @@ Update Time
 #define M_R_IRMS_A          2500    // unit: 0.01A, rate Irms
 #define M_R_UDC_v           360     // unit: 0.1V, rate Udc
 #define M_MAX_TOR_NM        30      // unit: 0.1Nm, Max tor
-#endif
 
-#if (MOTOR_ID_SEL == MOTOR_WELLING_CITY)
+#elif (MOTOR_ID_SEL == MOTOR_WELLING_MTB_48V)
+#define M_POLE_PAIRS        7       // unit:Null,Pole pairs
+#define M_RS_OHM            170     // unit: 0.1mOhm, Phase resistance
+#define M_MATERIAL          Al      // unit:Null
+#define M_LD_NOLOAD_MH      11000    // unit: 0.01uH, D axis inductance
+#define M_LQ_NOLOAD_MH      11500   // unit: 0.01uH, Q axis inductance
+#define M_LD_TURN1_ID_AP    5000    // unit: 0.01A,
+#define M_LD_TURN1_LD_MH    11000    // unit: 0.01uH,D axis inductance
+#define M_LD_TURN2_ID_AP    700     // unit: 0.01A,
+#define M_LD_TURN2_LD_MH    11000    // unit: 0.01uH,D axis inductance
+#define M_LD_MIN_MH         11000    // unit: 0.01uH,D axis inductance
+#define M_LQ_TURN1_IQ_AP    200     // unit: 0.01A,
+#define M_LQ_TURN1_LQ_MH    11500   // unit: 0.01uH,Q axis inductance
+#define M_LQ_TURN2_IQ_AP    700     // unit: 0.01A,
+#define M_LQ_TURN2_LQ_MH    11500   // unit: 0.01uH,Q axis inductance
+#define M_LQ_MIN_MH         11500   // unit: 0.01uH,Q axis inductance
+#define M_JD                2500    // unit: 10-7Kg*m2, Rotational inertia
+#define M_MAGNETIC_MATERIAL Ferrite // unit:Null
+#define M_FLUX_WB           5360    // unit: 0.001mWb, Flux linkage
+#define M_ID_MAX_AP         0       //-25      // unit: 0.01A, Max d axis current
+#define M_ID_MIN_AP         -300    // unit: 0.01A, Min d axis current
+#define M_IS_PEAK_MAX_AP    5500    // unit: 0.01A, Max phase current(below base speed)
+#define M_POWER_MAX_WT      600     // unit: W, Max power
+#define M_R_SPD_RPM         5000    // unit: r/min, rate spd
+#define M_R_PWR_WT          250     // unit: W, rate power
+#define M_R_IRMS_A          2500    // unit: 0.01A, rate Irms
+#define M_R_UDC_v           480     // unit: 0.1V, rate Udc
+#define M_MAX_TOR_NM        30      // unit: 0.1Nm, Max tor
+
+#elif (MOTOR_ID_SEL == MOTOR_WELLING_CITY_36V)
 #define M_POLE_PAIRS        7       // unit:Null,Pole pairs
 #define M_RS_OHM            150     // unit: 0.1mOhm, Phase resistance
 #define M_MATERIAL          Al      // unit:Null
@@ -92,7 +123,7 @@ Update Time
 #define M_LQ_TURN2_IQ_AP    700     // unit: 0.01A,
 #define M_LQ_TURN2_LQ_MH    10200   // unit: 0.01uH,Q axis inductance
 #define M_LQ_MIN_MH         10200   // unit: 0.01uH,Q axis inductance
-#define M_JD                300    // unit: 10-7Kg*m2, Rotational inertia
+#define M_JD                2500    // unit: 10-7Kg*m2, Rotational inertia
 #define M_MAGNETIC_MATERIAL Ferrite // unit:Null
 #define M_FLUX_WB           4800//5056    // unit: 0.001mWb, Flux linkage
 #define M_ID_MAX_AP         0       //-25      // unit: 0.01A, Max d axis current
@@ -104,8 +135,37 @@ Update Time
 #define M_R_IRMS_A          2500    // unit: 0.01A, rate Irms
 #define M_R_UDC_v           360     // unit: 0.1V, rate Udc
 #define M_MAX_TOR_NM        30      // unit: 0.1Nm, Max tor
-#endif
 
+#elif (MOTOR_ID_SEL == MOTOR_WELLING_CITY_48V)
+#define M_POLE_PAIRS        7       // unit:Null,Pole pairs
+#define M_RS_OHM            150     // unit: 0.1mOhm, Phase resistance
+#define M_MATERIAL          Al      // unit:Null
+#define M_LD_NOLOAD_MH      7650    // unit: 0.01uH, D axis inductance
+#define M_LQ_NOLOAD_MH      10200   // unit: 0.01uH, Q axis inductance
+#define M_LD_TURN1_ID_AP    5000    // unit: 0.01A,
+#define M_LD_TURN1_LD_MH    7650    // unit: 0.01uH,D axis inductance
+#define M_LD_TURN2_ID_AP    700     // unit: 0.01A,
+#define M_LD_TURN2_LD_MH    7650    // unit: 0.01uH,D axis inductance
+#define M_LD_MIN_MH         7650    // unit: 0.01uH,D axis inductance
+#define M_LQ_TURN1_IQ_AP    200     // unit: 0.01A,
+#define M_LQ_TURN1_LQ_MH    10200   // unit: 0.01uH,Q axis inductance
+#define M_LQ_TURN2_IQ_AP    700     // unit: 0.01A,
+#define M_LQ_TURN2_LQ_MH    10200   // unit: 0.01uH,Q axis inductance
+#define M_LQ_MIN_MH         10200   // unit: 0.01uH,Q axis inductance
+#define M_JD                2500    // unit: 10-7Kg*m2, Rotational inertia
+#define M_MAGNETIC_MATERIAL Ferrite // unit:Null
+#define M_FLUX_WB           4800//5056    // unit: 0.001mWb, Flux linkage
+#define M_ID_MAX_AP         0       //-25      // unit: 0.01A, Max d axis current
+#define M_ID_MIN_AP         -300    // unit: 0.01A, Min d axis current
+#define M_IS_PEAK_MAX_AP    5500    // unit: 0.01A, Max phase current(below base speed)
+#define M_POWER_MAX_WT      600     // unit: W, Max power
+#define M_R_SPD_RPM         5000    // unit: r/min, rate spd
+#define M_R_PWR_WT          250     // unit: W, rate power
+#define M_R_IRMS_A          2500    // unit: 0.01A, rate Irms
+#define M_R_UDC_v           480     // unit: 0.1V, rate Udc
+#define M_MAX_TOR_NM        30      // unit: 0.1Nm, Max tor
+
+#endif
 /*======================================================================*
    IPM Paremeters
 *=======================================================================*/
@@ -130,26 +190,36 @@ Update Time
 #define ALM_ROTOR_LOCK_TM     3    // unit: s, Time of duration(TBC)
 #define ALM_ROTOR_LOCK_IQ_ABS 4500 // unit: 0.01A, Threshold value
 #define ALM_ROTOR_LOCK_SPD    100  // unit: rpm, Threshold value
-/* Over voltage */
-//#define ALM_OVR_VLT_LVL1_VAL 460 // unit: 0.1V, Threshold value level1
-//#define ALM_OVR_VLT_LVL1_TM  2   // unit: s, Time of duration level1(TBS)
-//#define ALM_OVR_VLT_LVL2_VAL 470 // unit: 0.1V, Threshold value level2
-//#define ALM_OVR_VLT_LVL2_TM  100 // unit: ms, Time of duration level2(TBS)
-//#define ALM_OVR_VLT_LVL3_VAL 480 // unit: 0.1V, Threshold value level3
-//#define ALM_OVR_VLT_LVL3_TM  5   // unit: ms, Time of duration level3(TBS)
 
+#if ((MOTOR_ID_SEL == MOTOR_WELLING_CITY_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_MTB_36V))
+/* Over voltage */
 #define ALM_OVR_VLT_LVL1_VAL 550 // unit: 0.1V, Threshold value level1
 #define ALM_OVR_VLT_LVL1_TM  2   // unit: s, Time of duration level1(TBS)
-#define ALM_OVR_VLT_LVL2_VAL 550 // unit: 0.1V, Threshold value level2
+#define ALM_OVR_VLT_LVL2_VAL 560 // unit: 0.1V, Threshold value level2
 #define ALM_OVR_VLT_LVL2_TM  100 // unit: ms, Time of duration level2(TBS)
-#define ALM_OVR_VLT_LVL3_VAL 550 // unit: 0.1V, Threshold value level3
+#define ALM_OVR_VLT_LVL3_VAL 570 // unit: 0.1V, Threshold value level3
 #define ALM_OVR_VLT_LVL3_TM  5   // unit: ms, Time of duration level3(TBS)
-
 /* Under voltage */
 #define ALM_UNDR_VLT_LVL1_VAL 260 // unit: 0.1V, Threshold value level1
 #define ALM_UNDR_VLT_LVL1_TM  2   // unit: s, Time of duration level1(TBS)
-#define ALM_UNDR_VLT_LVL2_VAL 250 // unit: 0.1V, Threshold value level2
+#define ALM_UNDR_VLT_LVL2_VAL 240 // unit: 0.1V, Threshold value level2
 #define ALM_UNDR_VLT_LVL2_TM  2   // unit: ms, Time of duration level2(TBS)
+
+#elif ((MOTOR_ID_SEL == MOTOR_WELLING_CITY_48V) || (MOTOR_ID_SEL == MOTOR_WELLING_MTB_48V))
+/* Over voltage */
+#define ALM_OVR_VLT_LVL1_VAL 598 // unit: 0.1V, Threshold value level1
+#define ALM_OVR_VLT_LVL1_TM  2   // unit: s, Time of duration level1(TBS)
+#define ALM_OVR_VLT_LVL2_VAL 611 // unit: 0.1V, Threshold value level2
+#define ALM_OVR_VLT_LVL2_TM  100 // unit: ms, Time of duration level2(TBS)
+#define ALM_OVR_VLT_LVL3_VAL 624 // unit: 0.1V, Threshold value level3
+#define ALM_OVR_VLT_LVL3_TM  5   // unit: ms, Time of duration level3(TBS)
+/* Under voltage */
+#define ALM_UNDR_VLT_LVL1_VAL 364 // unit: 0.1V, Threshold value level1
+#define ALM_UNDR_VLT_LVL1_TM  2   // unit: s, Time of duration level1(TBS)
+#define ALM_UNDR_VLT_LVL2_VAL 338 // unit: 0.1V, Threshold value level2
+#define ALM_UNDR_VLT_LVL2_TM  2   // unit: ms, Time of duration level2(TBS)
+
+#endif
 /* Over speed */
 #define ALM_OVR_SPD_VAL 6000 // unit: rpm, Threshold value
 #define ALM_OVR_SPD_TM  100  // unit: ms, Time of duration(TBS)