3 Commits fa5d17a77c ... 1ecd9d3466

Tác giả SHA1 Thông báo Ngày
  CN\houcf5 1ecd9d3466 1.暂时关闭uart的BMS通讯接口 3 tháng trước cách đây
  CN\zhouxiong9 6c3fbd09b1 明睿定制5S协议,1)故障码定制,2)限速+20;3)档位pwm定制。 3 tháng trước cách đây
  CN\houcf5 3b87e2074f 解决高温下关机后3.3V无法下电问题,强制检测端口输出低电平防止电源EN使能 3 tháng trước cách đây

+ 1 - 1
1.FrameLayer/Source/app.c

@@ -110,7 +110,7 @@ void AppLoop()
     //ReadFrame_Poll2();
   //  uart_voMainDec();
     UsartRx_Process(&UART_RxBuff_Struct_OBC, &UART_TxBuff_Struct_OBC, &stUSART_FrameBuf_OBC);
-    UsartRx_Process(&UART_RxBuff_Struct_BMS, &UART_TxBuff_Struct_BMS, &stUSART_FrameBuf_BMS);
+    //UsartRx_Process(&UART_RxBuff_Struct_BMS, &UART_TxBuff_Struct_BMS, &stUSART_FrameBuf_BMS);
     
     TimingTaskLoopServer();
      ReceiveCmdHandle();

+ 2 - 1
2.MotorDrive/Include/alarm.h

@@ -120,7 +120,7 @@ typedef union
         UWORD Throttle : 1;   // 3
         UWORD PCBNTC : 1;     // 4
         UWORD MotorNTC : 1;   // 5
-        UWORD Rsvd1 : 1;      // 6
+        UWORD Brake : 1;      // 6
         UWORD Rsvd2 : 1;      // 7
         UWORD Rsvd3 : 1;      // 8
         UWORD Rsvd4 : 1;      // 9
@@ -204,6 +204,7 @@ typedef struct
     UWORD uwThrottleFlt;
     UWORD uwPCBNTCFlt;
     UWORD uwMotorNTCFlt;
+    UWORD uwBrakeFlt;
 } ALM_DETECT_COUNT;
 
 typedef enum

+ 16 - 1
2.MotorDrive/Source/alarm.c

@@ -129,6 +129,7 @@ void alm_voInit(void)
     alm_stDecCt.uwThrottleFlt = 0;
     alm_stDecCt.uwPCBNTCFlt = 0;
     alm_stDecCt.uwMotorNTCFlt = 0;
+    alm_stDecCt.uwBrakeFlt = 0;
 
     /* Private variables init */
     alm_pvt_blIPMOTReCheckFlg = FALSE;
@@ -1467,7 +1468,21 @@ void alm_voDetec200MS(const ALM_BIKE_IN *in, const ALM_DETEC200MS_COF *coef)
         {
             alm_stDecCt.uwMotorNTCFlt = 0;
         }
-    }  
+    }
+
+    /*1)上电后检测到刹车有效则判定刹车故障,持续检测到刹车无效则退出刹车故障,此后不再检测;2)上电检测到刹车无效,则此后不再检测刹车故障*/
+    if(alm_stDecCt.uwBrakeFlt < 1)
+    {
+        if(BikeBrake_blGetstate() == TRUE)
+        {
+            alm_unBikeCode.bit.Brake = 1;
+        }
+        else
+        {
+            alm_unBikeCode.bit.Brake = 0;
+            alm_stDecCt.uwBrakeFlt = 1;
+        }
+    }
 }
 
 /***************************************************************

+ 1 - 0
3.BasicFunction/Include/Customization.h

@@ -13,5 +13,6 @@
 *=======================================================================*/
 #define TORG4BBTORQU_ENABLE                     0   //0-标准程序,1-塔基传感器定制
 #define HEYBIKEXINSIWEI_ENABLE                  0   //0-标准程序,1-heybike-新思维定制
+#define MINGRUI_ENABLE                          0   //0-标准程序,1-h明睿Ebike定制
 
 #endif /* 3_BASICFUNCTION_INCLUDE_CUSTOMIZATION_H_ */

+ 2 - 0
3.BasicFunction/Include/power.h

@@ -84,6 +84,8 @@ typedef struct
     UWORD       uwPOwerForceShutdnCnt;   // Cnt of Shutdown
     UWORD       uwPowerKeySta;   // key sta
     UWORD       uwPowerKeyMode;   //key high or low
+    UWORD       uwPowershutDownSta;   // power sta
+    UWORD       uwNulltime;
     BOOL        blPowerStartupFlg;  // Flg of Startup
     BOOL        blPowerShutdownFlg; // Flg of Shutdown
     POWER_STATE powerstate;

+ 1 - 1
3.BasicFunction/Include/usart.h

@@ -82,7 +82,7 @@ typedef _Bool  BOOL;
 
 #define UART_BUFF_SIZE			512//256
 #define FRAME_SIZE                      8
-#define FRAMETIMEOUT_Count              20       //ms
+#define FRAMETIMEOUT_Count              10//20       //ms
     
 #define UARTFRAME_BEGIN (UBYTE)0x3A
 #define UARTFRAME_END1 (UBYTE)0x0D

+ 40 - 11
3.BasicFunction/Source/power.c

@@ -203,7 +203,7 @@ void power_voPowerManagement( _Bool ParaSaveEEFlg, _Bool PowerSleepFlg)
     //////////////////////////////////////////////////     on and standby  ////////////////
 if( power_stPowStateOut.uwPowerKeyMode ==1)
 {
-    if (((power_stPowStateOut.powerstate == POWER_START)||(power_stPowStateOut.powerstate == POWER_OFF_END))
+    if (((power_stPowStateOut.powerstate == POWER_START)||(power_stPowStateOut.blPowerShutdownFlg==TRUE) )
             && power_stPowStateOut.uwPowerKeySta != 0)
    //  if (power_stPowStateOut.powerstate == POWER_START  )
     {
@@ -225,6 +225,7 @@ if( power_stPowStateOut.uwPowerKeyMode ==1)
             power_stPowStateOut.blPowerStartupFlg = TRUE;
             power_stPowStateOut.uwPowerStartupCnt = 0;
             power_stPowStateOut.uwPowerOn2OffCnt = 0;
+            power_stPowStateOut.blPowerShutdownFlg = FALSE;
         }
     }
   else
@@ -269,12 +270,13 @@ if( power_stPowStateOut.uwPowerKeyMode ==1)
             && (cp_stFlg.ParaHistorySaveEEFinishFlg == TRUE)
             && (ParaSaveEEFlg == FALSE))
         {
-            power_stPowStateOut.blPowerShutdownFlg = TRUE;
+
             power_stPowStateOut.uwPowerShutdnCnt = 0;
          Reset_POWER_LOCK_PORT();//  GPIO_ResetBits(POWER_LOCK_PORT,POWER_LOCK_PIN);//  iGpio_Write(HW_GPIO_POWERLOCK_PIN,ApiGpio_LowLevel);
-         DL_WWDT_disablePower(WWDT0_INST);
-         NVIC_SystemReset();
+        // DL_WWDT_disablePower(WWDT0_INST);
+        // NVIC_SystemReset();
          //Power_KeyChangeHandle();
+         power_stPowStateOut.uwPowershutDownSta=1;
         }
     }
     else
@@ -305,6 +307,7 @@ else if(power_stPowStateOut.uwPowerKeyMode==2)
               power_stPowStateOut.blPowerStartupFlg = TRUE;
               power_stPowStateOut.uwPowerStartupCnt = 0;
               power_stPowStateOut.uwPowerOn2OffCnt = 0;
+              power_stPowStateOut.blPowerShutdownFlg = FALSE;
           }
       }
       else if (power_stPowStateOut.powerstate == POWER_ON_END)
@@ -352,19 +355,22 @@ else if(power_stPowStateOut.uwPowerKeyMode==2)
           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();
+             // Power_KeyChangeHandle();
+              if(power_stPowStateOut.uwPowerKeySta==0) //松开按键
+               power_stPowStateOut.uwPowershutDownSta=1;
           }
           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();
+                  // Power_KeyChangeHandle();
+
               }
           }
           else
@@ -385,6 +391,25 @@ else if(power_stPowStateOut.uwPowerKeyMode==2)
           power_stPowStateOut.uwPowerShutdnCnt = 0;
       }
 
+ }
+//--------------------------解决开机异常------
+if((power_stPowStateOut.powerstate == POWER_START) && (power_stPowStateOut.uwPowerKeySta == 0)) //供电下没有按下开机键
+{
+   if(++power_stPowStateOut.uwNulltime>500)
+   {
+       power_stPowStateOut.uwNulltime=0;
+       power_stPowStateOut.uwPowershutDownSta=1;
+   }
+
+}
+else
+{
+    power_stPowStateOut.uwNulltime=0;
+}
+
+if(power_stPowStateOut.uwPowershutDownSta!=0)
+{
+    Power_KeyChangeHandle();
 }
 
 
@@ -394,7 +419,7 @@ void Power_KeyChangeHandle(void)
 {
 static  UWORD uWPtime=0;
 
-if(uWPtime<=5000)
+if(uWPtime<=200)
 {
     uWPtime++;
    DL_GPIO_initDigitalOutput(IOMUX_PINCM60);
@@ -404,10 +429,14 @@ if(uWPtime<=5000)
 }
 else
 {
- if(uWPtime<5002)
+ //if(uWPtime<50)
  {
-     uWPtime=5005;
+     uWPtime=0;
      SYSCFG_DL_ADC12_0_init();
+     DL_WWDT_disablePower(WWDT0_INST);
+     NVIC_SystemReset();
+     power_stPowStateOut.uwPowershutDownSta=0;
+     power_stPowStateOut.blPowerShutdownFlg = TRUE;
  }
 
 }

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

@@ -171,7 +171,7 @@ void J_USART_DataProcess(USART_Buf_TypeDef* ptUartTx, UBYTE* Data)
     MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch; //大灯状态更新
     ulOBC_ComTimeOutCount = cp_ulSystickCnt;
     
-    //J_OBCSetPara();//参数更新
+    //J_OBCSetPara(J_stOBC2MCInfo.stSetInfo);//参数更新
     
     J_SendData_OBC(ptUartTx,Data[3]);
 }
@@ -234,10 +234,10 @@ void J_SendData_OBC(USART_Buf_TypeDef* ptUartTx, UBYTE checkAdjust)
     {
         errorCode = 0x24;//电机霍尔异常
     }
-    /*else if(0)
+    else if(1 == alm_unBikeCode.bit.Brake)
     {
         errorCode = 0x25;//刹车异常
-    }*/
+    }
     
     databuf[0] = 0x46;//'F'
     databuf[1] = Vlot;

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

@@ -156,7 +156,7 @@ void Bafang_USART_RxData_Process(USART_Buf_TypeDef* ptUartTx, UBYTE* buf, UWORD
             } 
             case 0x11:  //读电池容量
             {
-                Bafang_SendData_BMS(&UART_TxBuff_Struct_BMS, 0x16, 0x0D, 0x01);
+                //Bafang_SendData_BMS(&UART_TxBuff_Struct_BMS, 0x16, 0x0D, 0x01);
                 if(blBMSCommFault == TRUE)
                 {
                     databuf[0] = MC_RunInfo.SOC;
@@ -410,7 +410,7 @@ void Bafang_USART_RxData_Process(USART_Buf_TypeDef* ptUartTx, UBYTE* buf, UWORD
 ****************************************************************/
 void Bafang_SendData_BMS(USART_Buf_TypeDef* ptUartTx, UBYTE Addr, UBYTE Cmd, UBYTE Length)
 {
-#if (SIMULATION == 1)
+#if 0// (SIMULATION == 1)
   return;
 #else
     UBYTE databuf[255] = {0};

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

@@ -243,10 +243,10 @@ void Lanfeng_SendData_OBC(USART_Buf_TypeDef* ptUartTx, UBYTE Cmd)
         {
             databuf[5] |= 0x04;//电机霍尔异常
         }
-        /*else if(0)
+        else if(1 == alm_unBikeCode.bit.Brake)
         {
             databuf[5] |= 0x05;//刹车异常
-        }*/
+        }
         else if(1 == MC_ErrorCode.ERROR_Bit.Protect_UnderVoltage)
         {
             databuf[5] |= 0x06;//欠压

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

@@ -318,10 +318,10 @@ void Lanfeng9_SendData_OBC(USART_Buf_TypeDef* ptUartTx, UBYTE FrameBegin)
         {
             databuf[5] = 0x04;//电机霍尔异常
         }
-        /*else if(0)
+        else if(1 == alm_unBikeCode.bit.Brake)
         {
             databuf[5] = 0x05;//刹车异常
-        }*/
+        }
         else if(1 == MC_ErrorCode.ERROR_Bit.Protect_UnderVoltage)
         {
             databuf[5] = 0x06;//欠压

+ 105 - 5
3.BasicFunction/Source/usart.c

@@ -198,7 +198,92 @@ void KM5S_USART_RxData_Process(USART_Buf_TypeDef* ptUartTx, UBYTE* buf, UWORD da
         }
     }
 }
-
+void KM5S_MingruiTxErrorCodeUpdata(void)
+{
+#if(MINGRUI_ENABLE == 1)
+    if(1 == MC_ErrorCode.ERROR_Bit.Protect_OverVoltage)
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x26;//过压保护
+    }
+    else if(1 == MC_ErrorCode.ERROR_Bit.Protect_UnderVoltage)
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x11;//欠压保护
+    }
+    else if(1 == MC_ErrorCode.ERROR_Bit.Protect_LockRotor)
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x29;//电机堵转保护
+    }
+    else if((1 == MC_ErrorCode.ERROR_Bit.Protect_OverTemp) || (1 == MC_ErrorCode.ERROR_Bit.Protect_MotorOverTemp))
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x13;//控制器或电机过温
+    }
+    /*else if(0)
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x17;//飞车保护
+    }*/
+    else if(1 == MC_ErrorCode.ERROR_Bit.Fault_CadenceSensor)
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x18;//踏频传感器故障
+    }
+    else if(1 == MC_ErrorCode.ERROR_Bit.Fault_BikeSpdSensor)
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x19;//电机测速传感器故障
+    }
+    else if(1 == MC_ErrorCode.ERROR_Bit.Protect_OverCurrent)
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x21;//控制器过流
+    }
+    else if(1 == MC_ErrorCode.ERROR_Bit.Fault_Throttle)
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x22;//转把故障
+    }
+    else if(1 == MC_ErrorCode.ERROR_Bit.Fault_HallSensor)
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x24;//电机霍尔故障
+    }
+    else if(1 == alm_unBikeCode.bit.Brake)
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x25;//刹车异常
+    }
+    else
+    {
+        stMC2OBC_RRunInfo.ErrorCode = 0x00;
+    }
+#endif
+}
+void KM5S_MingruiRxGearStUpdata(void)
+{
+#if(MINGRUI_ENABLE == 1)
+    if(stOBC_RunInfo.ucWalk == 1)
+    {
+        MC_ControlCode.GearSt = MC_GearSt_WALK;
+    }
+    else if(stOBC_RunInfo.ucPWM == 0x11)
+    {
+        MC_ControlCode.GearSt = MC_GearSt_Torque_ECO;
+    }
+    else if(stOBC_RunInfo.ucPWM == 0x22)
+    {
+        MC_ControlCode.GearSt = MC_GearSt_Torque_NORM;
+    }
+    else if(stOBC_RunInfo.ucPWM == 0x33)
+    {
+        MC_ControlCode.GearSt = MC_GearSt_Torque_SPORT;
+    }
+    else if(stOBC_RunInfo.ucPWM == 0x44)
+    {
+        MC_ControlCode.GearSt = MC_GearSt_Torque_TURBO;
+    }
+    else if(stOBC_RunInfo.ucPWM == 0x55)
+    {
+        MC_ControlCode.GearSt = MC_GearSt_SMART;
+    }
+    else
+    {
+        MC_ControlCode.GearSt = MC_GearSt_OFF;
+    }
+#endif
+}
 void KM5S_USART_DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD Addr, UBYTE Mode, UBYTE Length, UBYTE* Data)
 {
     UWORD uwCmd,uwID;
@@ -257,6 +342,7 @@ void KM5S_USART_DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD Addr, UBYTE Mode,
                   MC_ControlCode.GearSt = MC_GearSt_SMART;
             }
 
+            KM5S_MingruiRxGearStUpdata();
 
             if(stOBC_RunInfo.ucLightSwitch == 1)                           //大灯
             {
@@ -274,7 +360,7 @@ void KM5S_USART_DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD Addr, UBYTE Mode,
         }
         else if((Mode == 0x53) && (Length == 0x07))         //参数设置
         {
-//            KM5S_OBCSetPara(Data);
+            KM5S_OBCSetPara(Data);
             KM5S_SendData_OBC(ptUartTx, Mode, 0x05, stOBC_SetInfo.ucShakingCode);
         }
     }
@@ -1437,6 +1523,11 @@ void KM5S_OBCSetPara(UBYTE* Data)
     stOBC_SetInfo.ucSpeedLimiation = ((Data[10] & 0xF8)>>3) + 10;//km/h
     stOBC_SetInfo.ucWheelDiameterCode = (Data[10] & 0x07);
 
+#if(MINGRUI_ENABLE == 1)
+    stOBC_SetInfo.ucSpeedLimiation = ((Data[10] & 0xF8)>>3) + 20;//km/h
+#endif
+
+#if(0)
     /*低压保护阈值更新*/
     if(MC_UpcInfo.stMContorlInfo.uwAlamUVolV != (UWORD)(stOBC_SetInfo.uwUnderVoltageBase + stOBC_SetInfo.swUnderVoltageBias))
     {
@@ -1447,7 +1538,7 @@ void KM5S_OBCSetPara(UBYTE* Data)
         cp_stFlg.ParaMCInfoUpdateFlg = TRUE;
         cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
     }
-
+#endif
     /*功率限幅阈值更新*/
 //    #if (IPM_VOLTAGE_SEL == IPM_VOLTAGE_48V)
 //        UWORD uwVolt = 480;
@@ -1456,6 +1547,7 @@ void KM5S_OBCSetPara(UBYTE* Data)
 //    #else
 //        UWORD uwVolt = 360;
 //    #endif
+#if(0)
         UWORD uwVolt =cp_stMotorPara.swRUdcV;
     if(MC_UpcInfo.stTestParaInfo.uwPwrLimit != ((stOBC_SetInfo.ucCurrentLimiation*uwVolt>>1) + 500))
     {
@@ -1464,9 +1556,12 @@ void KM5S_OBCSetPara(UBYTE* Data)
         cp_stFlg.ParaSaveEEFlg = TRUE;
         cp_stFlg.ParaUpdateFlg = TRUE;
         cp_stFlg.TestParaInfoUpdateFlg = TRUE;
+        ]
         cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
     }
+#endif
 
+#if(0)
     /*限速阈值更新*/
     if(MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStart != stOBC_SetInfo.ucSpeedLimiation)
     {
@@ -1481,7 +1576,9 @@ void KM5S_OBCSetPara(UBYTE* Data)
         cp_stFlg.ParaBikeInfoUpdateFlg = TRUE;
         cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
     }
+#endif
 
+#if(0)
     /*轮径更新*/
     if(stOBC_SetInfo.ucWheelDiameterCode <= 5)
     {
@@ -1504,6 +1601,7 @@ void KM5S_OBCSetPara(UBYTE* Data)
         cp_stFlg.ParaBikeInfoUpdateFlg = TRUE;
         cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
     }
+#endif
 }
 
 void KM5S_SendData_OBC(USART_Buf_TypeDef* ptUartTx, UBYTE Mode, UBYTE Length, UBYTE checknum)
@@ -1551,15 +1649,17 @@ void KM5S_SendData_OBC(USART_Buf_TypeDef* ptUartTx, UBYTE Mode, UBYTE Length, UB
     {
         stMC2OBC_RRunInfo.ErrorCode = 0x24;//电机霍尔异常
     }
-    /*else if(0)
+    else if(1 == alm_unBikeCode.bit.Brake)
     {
         stMC2OBC_RRunInfo.ErrorCode = 0x25;//刹车异常
-    }*/
+    }
     else
     {
         stMC2OBC_RRunInfo.ErrorCode = 0x00;
     }
     
+    KM5S_MingruiTxErrorCodeUpdata();
+
     databuf[0] = UARTFRAME_BEGIN;
     databuf[1] = UARTADDR_OBC;
     databuf[2] = Mode;