Selaa lähdekoodia

1.定制协议仪表允许修改骑行限速;2.协议定制ODO清除,允许50km内5次清除;3.转把+踩踏限速按照仪表设置的限速。

Ye Jin 4 kuukautta sitten
vanhempi
sitoutus
dda31dbd7f

+ 2 - 0
User project/3.BasicFunction/Include/Customization.h

@@ -24,4 +24,6 @@
 /*华耀定制需求:1、转把》6km/h 启动,2、转把定速巡航功能,稳住8S 时 可定速度,3.转把限速不超过25km/h,4、仪表自动关机10分钟,5、电机转矩配置  75Nm  功率500w*/
 #define HUAYAO_ENABLE                    0   //0-标准程序,1-华耀定制,需要同步打开THOTTLECRUISE_EN和THOTTLE_STARTRUNATSPEED,关闭THROTTLEGEAR_ENABLE
 
+#define WEITUER_ENABLE                    0   //0-标准程序,1-伟图尔定制
+
 #endif /* 3_BASICFUNCTION_INCLUDE_CUSTOMIZATION_H_ */

+ 30 - 0
User project/3.BasicFunction/Source/bikespeed.c

@@ -121,6 +121,36 @@ void bikespeed_voSetThrottleMaxSpd(UWORD uwBikeGear)
         bikespeed_stSpdLimCoef.uwBikeSpdThresHold2 = uwBikeSpdThresHold2;
         bikespeed_stSpdLimCoef.ulBikeSpdDeltInv = ((SQWORD)1 << 20) / (bikespeed_stSpdLimCoef.uwBikeSpdThresHold2 - bikespeed_stSpdLimCoef.uwBikeSpdThresHold1); // Q20;
     }
+    
+#if(WEITUER_ENABLE == 1)
+    static UBYTE SetMaxThrottleSpeddMode = 0;
+    
+    if(bikethrottle_stBikeThrottleOut.uwThrottlePercent > 200)
+    {
+        if(cadence_stFreGetOut.uwLPFFrequencyPu > 3750)             //15RPM*250Pu
+        {
+            if(SetMaxThrottleSpeddMode == 0)
+            {
+                SetMaxThrottleSpeddMode = 1;
+                
+                bikespeed_stSpdLimCoef.uwBikeSpdThresHold1 = (ass_stParaSet.uwAssistLimitBikeSpdStart - 2)*bikespeed_stFreGetCof.uwBikespeedKmh2Pu;
+                bikespeed_stSpdLimCoef.uwBikeSpdThresHold2 = ass_stParaSet.uwAssistLimitBikeSpdStart*bikespeed_stFreGetCof.uwBikespeedKmh2Pu;
+                bikespeed_stSpdLimCoef.ulBikeSpdDeltInv = ((SQWORD)1 << 20) / (bikespeed_stSpdLimCoef.uwBikeSpdThresHold2 - bikespeed_stSpdLimCoef.uwBikeSpdThresHold1); // Q20;
+            }
+        }
+        else if(cadence_stFreGetOut.uwLPFFrequencyPu <= 1250)       //5RPM*250Pu
+        {
+            if(SetMaxThrottleSpeddMode == 1)
+            {
+                SetMaxThrottleSpeddMode = 0;
+                
+                bikespeed_stSpdLimCoef.uwBikeSpdThresHold1 = (ass_stParaCong.uwThrottleMaxSpdKmH-2)*bikespeed_stFreGetCof.uwBikespeedKmh2Pu;
+                bikespeed_stSpdLimCoef.uwBikeSpdThresHold2 = ass_stParaCong.uwThrottleMaxSpdKmH*bikespeed_stFreGetCof.uwBikespeedKmh2Pu;
+                bikespeed_stSpdLimCoef.ulBikeSpdDeltInv = ((SQWORD)1 << 20) / (bikespeed_stSpdLimCoef.uwBikeSpdThresHold2 - bikespeed_stSpdLimCoef.uwBikeSpdThresHold1); // Q20;
+            }
+        }
+    }
+#endif
 }
 /***************************************************************
  Function: bikespeed_voBikeSpeedIdle;

+ 62 - 1
User project/3.BasicFunction/Source/can.c

@@ -485,6 +485,31 @@ void DataProcess(UWORD ID, UBYTE Mode, UWORD Cmd, UBYTE Data[]) /* parasoft-supp
         }
         case 0x3408: // OBC设置用户参数
         {
+          
+#if(WEITUER_ENABLE == 1)
+            OBC_SetCustomPara.DeltDiameter = (SBYTE)Data[0];
+            OBC_SetCustomPara.StartUpMod = Data[1];
+            
+            ass_stParaCong.swDeltPerimeter = OBC_SetCustomPara.DeltDiameter;
+            ass_stParaCong.uwStartMode = OBC_SetCustomPara.StartUpMod;
+            
+            MC_UpcInfo.stBikeInfo.uwSaveFlg = 1;
+            MC_UpcInfo.stBikeInfo.swWheelSizeAdjust = OBC_SetCustomPara.DeltDiameter;
+            MC_UpcInfo.stBikeInfo.uwStartMode = OBC_SetCustomPara.StartUpMod; 
+            
+            MC_UpcInfo.stAssistInfo.uwSaveFlg = 1;
+            MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStart = Data[2];
+            MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStop = Data[2]+2;
+            
+            cp_stFlg.ParaUpdateFlg = TRUE;
+            cp_stFlg.ParaBikeInfoUpdateFlg = TRUE;
+            cp_stFlg.ParaAInfoUpdateFlg = TRUE;
+            cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
+            cp_stFlg.ParaSaveEEFlg = TRUE;
+            GearBox_Init();
+            SendData(ID_MC_TO_PBU, MODE_REPORT, 0x5303, (UBYTE *)"ACK");
+            break;
+#endif
             OBC_SetCustomPara.DeltDiameter = (SBYTE)Data[0];
             OBC_SetCustomPara.StartUpMod = Data[1];
             OBC_SetCustomPara.AssistMod = Data[2];
@@ -556,7 +581,43 @@ void DataProcess(UWORD ID, UBYTE Mode, UWORD Cmd, UBYTE Data[]) /* parasoft-supp
                 cp_stHistoryPara.ulTripSum = 0;
                 cp_stHistoryPara.ulTripSumTime = 0;
                 cp_stHistoryPara.ulODOTime = cp_stHistoryPara.ulODOTime + (cp_stBikeRunInfoPara.ulRiTime >> 10) / 60;
-                cp_stBikeRunInfoPara.ulRiTime = 0;
+                cp_stBikeRunInfoPara.ulRiTime = 0;                
+            }
+            break;
+        }
+        case 0x3A05: // OBC清除ODO信息
+        {
+            if (strncmp("CLEAR", (char *)Data, DataLength) == 0)
+            {
+#if(WEITUER_ENABLE == 1)
+                if(strncmp("CLEAR_ODO", (char *)MC_RsASSCII.CustomASCII1, 9) != 0)
+                {
+                    strncpy(MC_RsASSCII.CustomASCII1, (char *)"CLEAR_ODO_0", 11);
+                    memcpy(flash_stPara.ubRsASSCII.CustomASCII1, MC_RsASSCII.CustomASCII1, sizeof(MC_RsASSCII.CustomASCII1));
+                }
+                
+                if(strncmp("CLEAR_ODO", (char *)MC_RsASSCII.CustomASCII1, 9) == 0)
+                {
+                    if((MC_RsASSCII.CustomASCII1[10] < 5) && (MC_RideLog.ODO_Km < 500))
+                    {
+                        MC_RsASSCII.CustomASCII1[10]++;
+                        memcpy(flash_stPara.ubRsASSCII.CustomASCII1, MC_RsASSCII.CustomASCII1, sizeof(MC_RsASSCII.CustomASCII1));
+            
+                        MC_RideLog.TRIP_Km = 0;
+                        MC_RideLog.TRIP_Time = 0;
+                        MC_RideLog.ODO_Km = 0;
+                        MC_RideLog.ODO_Time = 0;
+                
+                        cp_stHistoryPara.ulODOTrip = MC_RideLog.ODO_Km;
+                        cp_stHistoryPara.ulODOTime = MC_RideLog.ODO_Time;
+                        cp_stHistoryPara.ulTripSum = MC_RideLog.TRIP_Km;
+                        cp_stHistoryPara.ulTripSumTime = MC_RideLog.TRIP_Time;
+                        
+                        cp_stBikeRunInfoPara.ulRiTime = 0;
+                    }
+                }
+                SendData(ID_MC_TO_PBU, MODE_REPORT, 0x5303, (UBYTE *)"ACK");
+#endif                
             }
             break;
         }