Sfoglia il codice sorgente

协议更新;塔基力矩传感器增加后飞轮转速,以塔基力矩传感器后飞轮转速计算车速和里程

Ye Jin 5 mesi fa
parent
commit
09c5f0c462

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

@@ -210,7 +210,7 @@ void Event_10ms(void)
           uart_slSpdRefRpm = 0;
         }
     }
-    
+
     if(bikespeed_stFreGetOut.uwBikeSpeedStopFlag!=0)
     {
         bikespeed_stFreGetOut.DECvnt=20;
@@ -719,7 +719,9 @@ void StartSelectAssistMode(void)
 ****************************************************************/
 void BOKESPEED_Handler(void)
 {
-
+#if TORG4BBTORQU_ENABLE
+    bikespeed_stFreGetOut.uwLPFFrequencyPu = (UWORD)((((stTORG4BBInfo.uwFlyWheelSpeed<<20)*6/1000/FBASE)<<20)/36/1048/10);
+#else
   /* add user code begin TMR16_GLOBAL_IRQ 0 */
 //Bike Speed
    UWORD uwIntSource = 0;
@@ -745,7 +747,7 @@ void BOKESPEED_Handler(void)
                bikespeed_voBikeSpeedCal(uwIntSource);
            }
       }
-
+#endif
 }
 /***************************************************************
  Function: TAPIN_Handler;

+ 5 - 0
2.MotorDrive/Source/adc.c

@@ -34,6 +34,7 @@ Revising History (ECL of this file):
 #include "UserGpio_Config.h"
 #include "MosResCalib.h"
 #include "hwsetup.h"
+#include "uart_TORG4BBSensor.h"
 
  extern uint16_t gAdcResult0[8];
 /************************************************************************
@@ -381,6 +382,9 @@ void adc_voSampleUp(ADC_COF *cof, ADC_UP_OUT *out)
     #endif
         break;
         case 1:		//MOTOR_TEMP
+#if TORG4BBTORQU_ENABLE
+            out->MotorTemp = TORG4BB_Get_Temp();
+#else
            if( out->MotorTempReg>1241)//1241-1V if(Get_MOTTEMP_PORT()!=0)//(iGpio_Read(HW_GPIO_MOTTEMP_PIN) != 0)
             {	
                 if(ulDelayTimes++ > 30000)					/* prevent overflow */
@@ -409,6 +413,7 @@ void adc_voSampleUp(ADC_COF *cof, ADC_UP_OUT *out)
             {
                 ulDelayTimes = 0;	
             }
+#endif
             ubTempCalType = 0;
         break;
     }

+ 10 - 6
3.BasicFunction/Include/uart_TORG4BBSensor.h

@@ -41,19 +41,22 @@
 /* Includes ------------------------------------------------------------------*/
 #include "usart.h"
 
+#define TORG4BBTORQU_ENABLE                     1
 #define TORG4BBCADENCE_LPF_GAIN                 80
 #define TORG4BBTORQUE_TIMEOUT_UNIT               10  //ms
 #define TORG4BBTORQUE_TIMEOUT_TIME               100  //ms
+#define TORG4BBTORQUE_NUMBERS_PULSES             9  //一周9个磁石
 /* Define to variables declare---------------------------------------------------*/
 //先发送低位后高位
 typedef struct
 {
-    UBYTE ucTemp;//温度
+    SWORD swTemp;//温度
     UWORD uwTorqueReg;//力矩
-    UWORD uwTorqueRegLast;//力矩
-    UBYTE ucForwardCnt; //踏频速度
-    UBYTE ucForwardCntLast; //踏频速度
-    UWORD uwMotorSpeed;//电机转速
+    UWORD uwTorqueRegLast;//力矩last
+    UBYTE ucForwardCnt; //踏频脉冲
+    UBYTE ucForwardCntLast; //踏频脉冲last
+    UWORD uwFlyWheelSpeedCnt;//后飞轮电机转速Cnt
+    UWORD uwFlyWheelSpeed;//后飞轮转速rpm
 } TORG4BBInfo_Struct_t;
 
 typedef struct
@@ -70,13 +73,14 @@ typedef struct
 } TORG4BB_OUT;
 
 /* Public variables declare---------------------------------------------------*/
-
+extern TORG4BBInfo_Struct_t stTORG4BBInfo;
 /*Private function declare---------------------------------------------------*/
 void TORG4BB_Init(void);
 void TORG4BB_USART_DataProcess(USART_Buf_TypeDef* ptUartTx, UBYTE* Data);
 void TORG4BB_USART_RxData_Process(USART_Buf_TypeDef* ptUartTx, UBYTE* buf, UWORD dataCount);
 void TORG4BB_Torque_Handler(void);
 uint32_t TORG4BB_Get_CAD_PORT(void);
+SWORD TORG4BB_Get_Temp(void);
 
 #endif
 

+ 10 - 0
3.BasicFunction/Source/bikespeed.c

@@ -290,6 +290,15 @@ void bikespeed_voGetBikeSpeedPwrError(UWORD BikeSpeedPwrVolPu)
 ****************************************************************/
 void bikespeed_votempTripCal(void)
 {
+#if TORG4BBTORQU_ENABLE
+    static ULONG ulBikeSpeedCalTrip = 0;
+    ulBikeSpeedCalTrip = ulBikeSpeedCalTrip + stTORG4BBInfo.uwFlyWheelSpeed*(ass_ParaCong.uwWheelPerimeter + ass_ParaCong.swDeltPerimeter)/60;//(0.01cm/10ms)
+    if(ulBikeSpeedCalTrip > 1000000)
+    {
+        ulBikeSpeedCalTrip = 0;
+        bikespeed_stFreGetOut.blUpdateTripCntFlg = TRUE;
+    }
+#else
     UWORD Temptrip;
     Temptrip = (ULONG)(ass_ParaCong.uwWheelPerimeter + ass_ParaCong.swDeltPerimeter)* bikespeed_stFreGetOut.uwBikeForwardCnt /(200 * bikespeed_stFreGetCof.uwNumbersPulses); //219cm
     if (Temptrip > bikespeed_stFreGetCof.uwMinTriptoUpdate)
@@ -297,6 +306,7 @@ void bikespeed_votempTripCal(void)
         bikespeed_stFreGetOut.uwBikeForwardCnt = 0;
         bikespeed_stFreGetOut.blUpdateTripCntFlg = TRUE;
     }
+#endif
 } 
 
 /***************************************************************

+ 18 - 4
3.BasicFunction/Source/uart_TORG4BBSensor.c

@@ -86,10 +86,11 @@ void TORG4BB_USART_DataProcess(USART_Buf_TypeDef* ptUartTx, UBYTE* Data)
     stTORG4BBInfo.ucForwardCntLast = stTORG4BBInfo.ucForwardCnt;
     stTORG4BBInfo.uwTorqueRegLast = stTORG4BBInfo.uwTorqueReg;
 
-    stTORG4BBInfo.ucTemp = ((Data[1]>>2) + 71);
-    stTORG4BBInfo.uwTorqueReg = (((Data[1] & 0x03)<<8) + Data[2]);
+    stTORG4BBInfo.swTemp = (SWORD)(Data[1] - 30);
+    stTORG4BBInfo.uwTorqueReg = (((Data[4] & 0xC0)<<2) + Data[2]);
     stTORG4BBInfo.ucForwardCnt = Data[3] & 0x7F;
-    stTORG4BBInfo.uwMotorSpeed = (((Data[4] & 0x7F)<<8) + Data[5]);
+    stTORG4BBInfo.uwFlyWheelSpeedCnt = (((Data[4] & 0x1F)<<8) + Data[5]);
+    stTORG4BBInfo.uwFlyWheelSpeed = 30000/(stTORG4BBInfo.uwFlyWheelSpeedCnt*TORG4BBTORQUE_NUMBERS_PULSES);//rpm 1/(Cnt*0.2*TORG4BBTORQUE_NUMBERS_PULSES/1000/60)
 }
 /***************************************************************
  Function: TORG4BB_USART_RxData_Process;
@@ -107,7 +108,7 @@ void TORG4BB_USART_RxData_Process(USART_Buf_TypeDef* ptUartTx, UBYTE* buf, UWORD
     UWORD i;
     UBYTE checksum = 0;
     
-    if(dataCount == 7)
+    if(dataCount == 8)
     {
         if(buf[0] == 0xFF)//起始
         {
@@ -192,4 +193,17 @@ uint32_t TORG4BB_Get_CAD_PORT(void)
         return 0x0200;
     }
 }
+/***************************************************************
+ Function: TORG4BB_Get_Temp;
+ Description: Get TORG4BB temp
+ Call by:
+ Input Variables: N/A
+ Output/Return Variables: N/A
+ Subroutine Call: N/A;
+ Reference: N/A
+****************************************************************/
+SWORD TORG4BB_Get_Temp(void)
+{
+    return stTORG4BBInfo.swTemp;
+}
 /************************ (C) END OF FILE *********************************/