瀏覽代碼

增加调试信息

dd 5 月之前
父節點
當前提交
2e3de92423

+ 1 - 0
1.FrameLayer/Include/TimeTask_Event.h

@@ -57,6 +57,7 @@ typedef enum
  ****************************************/
 extern _op_ Op[proc_cnt];
 extern BOOL event_blCurrentAssFlag;
+extern ASS_MODE event_enMode;
 /***************************************
  *
  *          Function  Definations

+ 1 - 6
1.FrameLayer/Source/TimeTask_Event.c

@@ -196,16 +196,11 @@ void Event_10ms(void)
         if(cp_stFlg.RotateDirectionSelect == ForwardRotate)
         {
             uart_slSpdRefRpm = ((SLONG)MC_MotorSPD_rpm_Percent * cp_stMotorPara.swRSpeedRpm) / 100;
-//            uart_slSpdRefRpm = 5500;
-//            uart_slSpdRefRpm = Signal_detect();
         }
         else if(cp_stFlg.RotateDirectionSelect == BackwardRotate)
         {
             uart_slSpdRefRpm =  -((SLONG)MC_MotorSPD_rpm_Percent * cp_stMotorPara.swRSpeedRpm) / 100;
-//            uart_slSpdRefRpm = -5500;
-//            uart_slSpdRefRpm = -Signal_detect();
         }
-       //uart_slSpdRefRpm = - ((SLONG)bikethrottle_stBikeThrottleOut.uwThrottlePercent* 5750)/1000;  
         if(abs(uart_slSpdRefRpm) < 100)
         {
           uart_slSpdRefRpm = 0;
@@ -390,7 +385,7 @@ void  Event_200ms(void)
     //bikelight_voGetBikeLightError(adc_stUpOut.uwU6VPu);
     //bikespeed_voGetBikeSpeedPwrError(adc_stUpOut.uwU5VPu);
 
-    if( (switch_flg.SysFault_Flag == TRUE) &&(MC_WorkMode == 1))
+    if(switch_flg.SysFault_Flag == TRUE)
     {
          SendData(&UART_TxBuff_Struct_OBC, ID_MC_BC, MODE_REPORT, 0x1104, (uint8_t *)&MC_ErrorCode.Code);
     }

+ 24 - 1
3.BasicFunction/Include/canAppl.h

@@ -91,6 +91,29 @@ typedef struct
 
 } MC_RunInfo_Struct_t;
 
+/**
+ * @brief 电机调试信息,占用空间32bytes
+ *
+ */
+typedef struct
+{
+    uint8_t SysFSM1;                    //系统功能状态机1,系统状态机
+    uint8_t SysFSM2;                    //系统功能状态机2,二层状态机
+    uint8_t SysFSM3;                    //系统功能状态机3,电机状态机
+    uint8_t SysFSM4;                    //系统功能状态机4,助力状态机
+    int16_t IdRef;                      //D轴参考电流
+    int16_t IqRef;                      //Q轴参考电流
+    int16_t UdRef;                      //D轴参考电压
+    int16_t UqRef;                      //Q轴参考电压
+    uint16_t PedalTorquePer;            //踩踏瞬时力矩
+    uint16_t PedalTorqueAvg;            //踩踏时域滤波力矩
+    uint16_t PedalTorqueByCad;          //踩踏踏频滤波力矩
+    int16_t IdFdb;                      //D轴反馈电流
+    int16_t IqFdb;                      //Q轴反馈电流
+    uint16_t AssistOut;                 //助力输出值
+    uint8_t RS[8];
+}MC_DebugInfo_Struct_t;
+
 /**
  * @brief 电机故障码
  *
@@ -689,6 +712,7 @@ typedef struct
  *
  ****************************************/
 extern MC_RunInfo_Struct_t              MC_RunInfo;
+extern MC_DebugInfo_Struct_t            MC_DebugInfo;
 extern MC_ErrorCode_Struct_t            MC_ErrorCode;
 extern MC_ErrorCode_CNT_RECORD_Struct_t MC_ErrorCntRecord;
 extern MC_VerInfo_Struct_t              MC_VerInfo;
@@ -711,7 +735,6 @@ extern ULONG ulOBC_ComTimeOutCount;
 extern ULONG ulBMS_ComTimeOutCount;
 extern uint8_t MC_MotorSPD_rpm_Percent;
 extern uint8_t MC_WorkMode;
-extern uint8_t MC_BC_COM;
 extern BOOL blBMSCommFault;
 
 extern UWORD LightSwitch;

+ 54 - 76
3.BasicFunction/Source/canAppl.c

@@ -28,6 +28,7 @@
 #include "bikeinformation.h"
 #include "FSM_1st.h"
 #include "FSM_2nd.h"
+#include "TimeTask_Event.h"
 /******************************
  *
  *  Parameter
@@ -35,6 +36,7 @@
  ******************************/
 typedef _Bool  BOOL;
 MC_RunInfo_Struct_t              MC_RunInfo;
+MC_DebugInfo_Struct_t            MC_DebugInfo;
 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;
@@ -58,7 +60,6 @@ ULONG                      ulOBC_ComTimeOutCount = 0;
 ULONG                      ulBMS_ComTimeOutCount = 0;
 uint8_t                    MC_MotorSPD_rpm_Percent = 0;
 uint8_t                    MC_WorkMode;
-uint8_t                    MC_BC_COM = 1;
 LPF_OUT                    BMS_swCurIdcLpf;
   BOOL  blBMSCommFault = FALSE;
 static UWORD uwRemainDistanceCal;
@@ -751,37 +752,18 @@ void Can_voMC_Run_200ms(void)
         blBMSCommFault = FALSE;       // communication normal
     }
     
+    //温度最值记录
     Can_MaxMinTempHistory();
+
+    //挡位切换
     Can_GearSt_switch();
     SizeMCUP = sizeof(MC_UpcInfo.stAssistInfo);
-    if (MC_BC_COM == 0)
-    {
-        MC_RunInfoToCDL.Torque = ((ULONG)maf_torque.value * TORQUEBASE / 10) >> 14;           // 0.1 Nm
-        MC_RunInfoToCDL.CadenceDir = (MC_CadenceDir_Struct_t)cadence_stFreGetOut.cadence_dir; // 踩踏方向 0-正,1-反,2-停止,
-        MC_RunInfoToCDL.Cadence = (cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwVbRpm) >> 20; // rpm
-        MC_RunInfoToCDL.GearSt = MC_ControlCode.GearSt;
-        MC_RunInfoToCDL.T_PCB = adc_stUpOut.PCBTemp + 40;
-        MC_RunInfoToCDL.T_Coil = adc_stUpOut.PCBTemp + 40;
-        MC_RunInfoToCDL.BusVoltage = ((ULONG)adc_stUpOut.uwVdcLpfPu * cof_uwUbVt * 100) >> 14;                                        // 1mV
-        //        MC_RunInfoToCDL.BusCurrent = (((ULONG)scm_stMotoPwrInLpf.slY.sw.hi << 13) / adc_stUpOut.uwVdcLpfPu * cof_uwIbAp * 100) >> 14; // 1mA
-        MC_RunInfoToCDL.BusCurrent = ((ULONG)adc_stUpOut.uwIbusAvgLpfPu) * cof_uwIbAp * 10 >> 14; ///>母线电流 1mA,地址偏移8
-        MC_RunInfoToCDL.MotorSpeed = (SLONG)scm_stSpdFbkLpf.slY.sw.hi * cof_uwVbRpm >> 15;
-        //        MC_RunInfoToCDL.BikeSpeed =
-        //            (((SQWORD)bikespeed_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * ass_ParaCong.uwWheelPerimeter * 3216 * 36 >> 15) * 1050) >>
-        //            35; // 600 0.1cm  3216 = Q10(3.1415926)  105 = Q20(1/10000)    0.1 km/h;
-        //
-        MC_RunInfoToCDL.BikeSpeed =
-            (((SQWORD)bikespeed_stFreGetOut.uwLPFFrequencyPu * FBASE * ass_ParaCong.uwWheelPerimeter * 36 >> 20) * 1048 * 10) >> 20;
-//        MC_RunInfoToCDL.BikeSpeed =  MC_RunInfoToCDL.MotorSpeed /10;
-        MC_RunInfoToCDL.IqCurrent = ((SLONG)scm_swIqRefPu * cof_uwIbAp * 100) >> 14;
-        MC_RunInfoToCDL.AlarmCode = MC_ErrorCode.Code & 0x00FF;
-        //SendData(ID_MC_TO_CDL, MODE_REPORT, 0xF112, (uint8_t *)&MC_RunInfoToCDL.Torque);
-    }
 
-    MC_RunInfo.BikeSpeed = cp_stBikeRunInfoPara.BikeSpeedKmH;                         ///>车速 0.1km/h,地址偏移0
+    //更新电机运行信息
+    MC_RunInfo.BikeSpeed = cp_stBikeRunInfoPara.BikeSpeedKmH;                                   //车速 0.1km/h,地址偏移0
     if(cp_stFlg.ThetaGetModelSelect == ANG_SWITCHHALL)
     {
-        MC_RunInfo.MotorSpeed = (SLONG)abs(switchhall_stOut.swLowSpdLpfPu) * cof_uwVbRpm >> 15;          ///>输出转速 1rpm,地址偏移2 if(scm_swMotorPwrInLpfWt > 5000)
+        MC_RunInfo.MotorSpeed = (SLONG)abs(switchhall_stOut.swLowSpdLpfPu) * cof_uwVbRpm >> 15; //电机输出转速 1rpm,地址偏移2 if(scm_swMotorPwrInLpfWt > 5000)
     }
     else
     {
@@ -789,56 +771,41 @@ void Can_voMC_Run_200ms(void)
     } 
     if(scm_swMotorPwrInLpfWt > 5000)
     {
-      scm_swMotorPwrInLpfWt = 5000;
+        scm_swMotorPwrInLpfWt = 5000;
     }
     if(scm_swMotorPwrInLpfWt < 0 )
     {
-      scm_swMotorPwrInLpfWt = 0;
+        scm_swMotorPwrInLpfWt = 0;
     }
     if(hw_blPWMOnFlg == FALSE)
     {
-      scm_swMotorPwrInLpfWt = 0;
-
+        scm_swMotorPwrInLpfWt = 0;
     }
     else
     {
     }
     Power_Cal();
-    MC_RunInfo.Power= Powercal.PowerPoit;
-    //MC_RunInfo.Power = scm_swMotorPwrInLpfWt / 10;                                    ///>电功率 1W,地址偏移4
-    MC_RunInfo.BusVoltage = ((ULONG)adc_stUpOut.uwVdcLpfPu * cof_uwUbVt * 100) >> 14; ///>母线电压 1mV,地址偏移6
-    //   MC_RunInfo.BusVoltage = ((ULONG)(adc_stUpOut.uwVdcLpfPu + BMS_VoltEstimat.uwVdcCompPu) * cof_uwUbVt * 100) >> 14; ///>母线电压 1mV,地址偏移6
-
-//    if (scm_stMotoPwrInLpf.slY.sw.hi < 10)
-//    {
-//        TempPower = 0;
-//    }
-//    else
-//    {
-//        TempPower = scm_stMotoPwrInLpf.slY.sw.hi;
-//    }
-//    MC_RunInfo.BusCurrent = (((ULONG)TempPower << 13) / adc_stUpOut.uwVdcLpfPu) * cof_uwIbAp * 100 >> 14; ///>母线电流 1mA,地址偏移8
-    MC_RunInfo.BusCurrent = ((ULONG)adc_stUpOut.uwIbusAvgLpfPu) * cof_uwIbAp * 10 >> 14; ///14 >母线电流 1mA,地址偏移8
-    MC_RunInfo.Cadence = (cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * 60) >> 20;                  ///>踏频 1rpm,地址偏移10
-    MC_RunInfo.Torque = ((ULONG)torsensor_stTorSensorOut.uwTorquePu * cof_uwTorqNm / 10) >> 14;        ///>踩踏力矩 1Nm,地址偏移11
-    MC_RunInfo.CadenceDir = (MC_CadenceDir_Struct_t)cadence_stFreGetOut.cadence_dir; ///>踩踏方向 0-正,1-反,2-停止,地址偏移12
-    MC_RunInfo.GearSt = MC_ControlCode.GearSt;                                       ///>助力档位,地址偏移13
-    MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch;                             ///>灯开关 0xF0-关,0xF1-开,地址偏移14
-    MC_RunInfo.TorqueReg = torsensor_stTorSensorOut.uwTorqueReg;
-    MC_RunInfo.SOC = Can_SOC_Cal();                                                                   ///>剩余电量 1%,地址偏移15
+    MC_RunInfo.Power= Powercal.PowerPoit;                                                //功率
+    MC_RunInfo.BusVoltage = ((ULONG)adc_stUpOut.uwVdcLpfPu * cof_uwUbVt * 100) >> 14;    //母线电压 1mV,地址偏移6
+    MC_RunInfo.BusCurrent = ((ULONG)adc_stUpOut.uwIbusAvgLpfPu) * cof_uwIbAp * 10 >> 14; //母线电流 1mA,地址偏移8
+    MC_RunInfo.Cadence = (cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * 60) >> 20; //踏频 1rpm,地址偏移10
+    MC_RunInfo.Torque = ((ULONG)torsensor_stTorSensorOut.uwTorquePu * cof_uwTorqNm / 10) >> 14;        //踩踏力矩 1Nm,地址偏移11
+    MC_RunInfo.CadenceDir = (MC_CadenceDir_Struct_t)cadence_stFreGetOut.cadence_dir;     //踩踏方向 0-正,1-反,2-停止,地址偏移12
+    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
     if(hw_blPWMOnFlg == FALSE)
-       {
+    {
         MC_RunInfo.BusCurrent=0;
-       }
-   // MC_RunInfo.ODO_Km = MC_RideLog.ODO_Km / 10;                                      ///>总里程 1km,地址偏移18
+    }
     Can_Trip_Cal();
-
     if (cp_stBikeRunInfoPara.blGearStUpdate)
     {  
         if(cp_stBikeRunInfoPara.uwBikeGear > 0 &&(cp_stBikeRunInfoPara.uwBikeGear <=5))
         {
             MC_RunInfo.PowerPerKm =
-              *(&cp_stHistoryPara.uwG1AvgPwrConsumption + (cp_stBikeRunInfoPara.uwBikeGear - 1)) / 10; //>平均功耗 0.01Ah/km ,地址偏移20
+              *(&cp_stHistoryPara.uwG1AvgPwrConsumption + (cp_stBikeRunInfoPara.uwBikeGear - 1)) / 10; //平均功耗 0.01Ah/km ,地址偏移20
             uwRemainDistanceCal = BMS_RunInfo.RC / MC_RunInfo.PowerPerKm / 10;
         }
         else
@@ -846,7 +813,6 @@ void Can_voMC_Run_200ms(void)
             MC_RunInfo.PowerPerKm = 0;
             uwRemainDistanceCal = 0xffff;                           //invalid value
         }
-        
         cp_stBikeRunInfoPara.BMSRestChargeLast = BMS_RunInfo.RC;
         cp_stBikeRunInfoPara.uwPowerPerKm = 0;
         cp_stBikeRunInfoPara.uwAvePowerPerKm = 0;
@@ -855,7 +821,6 @@ void Can_voMC_Run_200ms(void)
         cp_stBikeRunInfoPara.uwAvePowerCNT = 0;
         cp_stBikeRunInfoPara.uwCruisDis = 0;
     }
-
     if(blBMSCommFault == TRUE)
     {
         MC_RunInfo.RemainDistance = 0xeeee;             /* no bms info*/
@@ -864,33 +829,46 @@ void Can_voMC_Run_200ms(void)
     {
         MC_RunInfo.RemainDistance = uwRemainDistanceCal;
     }
-    
     MC_RunInfo.T_PCB = adc_stUpOut.PCBTemp + 40;                ///>PCB温度 +40℃,地址偏移21
     MC_RunInfo.T_Coil = adc_stUpOut.MotorTemp + 40;               ///>绕组温度 +40℃,地址偏移22
     MC_RunInfo.T_MCU = adc_stUpOut.PCBTemp + 40;                ///>MCU温度 +40℃,地址偏移23
     MC_RunInfo.Ride_Time = cp_stBikeRunInfoPara.ulRiTime >> 10; ///>开机后骑行时间 1s,地址偏移26
-
     MC_RunInfo.TorqueSensorData1=(UBYTE)(TorqueSensorRegFlt.SensorPer1 >> 4);
     MC_RunInfo.TorqueSensorData2=(UBYTE)(TorqueSensorRegFlt.SensorPer2 >> 4);
     MC_RunInfo.TorqueSensorData3=(UBYTE)(TorqueSensorRegFlt.SensorPer3 >> 4);
 
-    static UBYTE test1 = 0;
-    if(MC_WorkMode == 1)
+    //更新调试信息
+    MC_DebugInfo.SysFSM1 = FSM1st_Sys_state.state;                    //一层状态机
+    MC_DebugInfo.SysFSM2 = FSM2nd_Run_state.state;                    //二层状态机
+    MC_DebugInfo.SysFSM3 = curSpeed_state.state;                      //电流环状态机
+    MC_DebugInfo.SysFSM4 = event_enMode << 4;                         //助力模式
+    if(event_enMode == TorqAss)
+        MC_DebugInfo.SysFSM4 |= Ass_FSM;                              //力矩模式助力状态机
+    else if(event_enMode == SpdAss)
+        MC_DebugInfo.SysFSM4 |= ass_enCadAssStatus;                   //速度模式助力状态机
+    else
+        MC_DebugInfo.SysFSM4 |= 0xF;
+    MC_DebugInfo.IdRef = scm_swIdRefPu;                               //IdRef
+    MC_DebugInfo.IqRef = scm_swIqRefPu;                               //IqRef
+    MC_DebugInfo.UdRef = scm_swUdRefPu;                               //UdRef
+    MC_DebugInfo.UqRef = scm_swUqRefPu;                               //UqRef
+    MC_DebugInfo.PedalTorquePer = torsensor_stTorSensorOut.uwTorqueReg;        //力矩AD
+    MC_DebugInfo.PedalTorqueAvg = torsensor_stTorSensorOut.uwTorqueLPFPu;      //力矩滤波AD
+    MC_DebugInfo.PedalTorqueByCad = maf_torque.AverValue;             //力矩踏频滤波AD
+    MC_DebugInfo.IdFdb = scm_swIdFdbLpfPu;                            //IdFdb
+    MC_DebugInfo.IqFdb = scm_swIqFdbLpfPu;                            //IqFdb
+    MC_DebugInfo.AssistOut = uart_swTorqRefNm;                        //助力输出
+
+    //发送数据
+    if(MC_WorkMode == 1) //配置模式,定时发送运行信息
     {
-#if(UART_ID==3)
-        test1++;
-        if(test1>=5)
-#else
-    test1++;
-         if(test1>=2)
-#endif
-           {
-             test1=0;
-
-            SendData(&UART_TxBuff_Struct_OBC, ID_MC_BC, MODE_REPORT, 0x1020, (uint8_t *)&MC_RunInfo.BikeSpeed);
-           }
+        SendData(&UART_TxBuff_Struct_OBC, ID_MC_BC, MODE_REPORT, 0x1020, (uint8_t *)&MC_RunInfo.BikeSpeed);
+    }
+    else if(MC_WorkMode == 2) //调试模式,定时发送调试信息和运行信息
+    {
+        SendData(&UART_TxBuff_Struct_OBC, ID_MC_BC, MODE_REPORT, 0x1020, (uint8_t *)&MC_RunInfo.BikeSpeed);
+        SendData(&UART_TxBuff_Struct_OBC, ID_MC_BC, MODE_REPORT, 0xBA20, (uint8_t *)&MC_DebugInfo.SysFSM1);
     }
-
 }
 
 void Can_Trip_Cal(void)

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

@@ -586,11 +586,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
 
         case 0x1901: //写入电机工作模式
         {
-            MC_WorkMode = *Data; // 0-关闭定时发送,1-开启定时发送
-            if(*Data == 2)
-            {
-                MC_BC_COM = 1;
-            }
+            MC_WorkMode = *Data; // 0-运行模式,1-配置模式,2-调试模式
             break;
         }