|
@@ -19,7 +19,7 @@ const uint16_t HallAngle_Data[8] =
|
|
|
};
|
|
|
|
|
|
//全局变量定义
|
|
|
-MC_HallSensorData_Struct_t MC_HallSensorData = {0, 0, 0, 0, TRUE, TRUE};
|
|
|
+MC_HallSensorData_Struct_t MC_HallSensorData = {0, 0, 0, 0, TRUE, TRUE, 0};
|
|
|
|
|
|
/**************************局部函数定义*************************/
|
|
|
|
|
@@ -108,6 +108,8 @@ void HallSensor_Process(void)
|
|
|
{
|
|
|
MC_HallSensorData.IsStopFlag = TRUE;
|
|
|
HallSensorTrigCnt = 0;
|
|
|
+ MC_HallSensorData.motorspeed = 0;
|
|
|
+ MC_HallSensorData.motorspeed_RCFlt = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -132,6 +134,10 @@ void HallSensor_Process(void)
|
|
|
MC_HallSensorData.Delta_Angle = 1;
|
|
|
}
|
|
|
HallSensorAngleCnt++;
|
|
|
+ if(HallSensorAngleCnt>2)
|
|
|
+ {
|
|
|
+ MC_HallSensorData.motorspeed = 18750/MC_HallSensorData.PWM_NumCnt;
|
|
|
+ }
|
|
|
if(HallSensorAngleCnt < 15)
|
|
|
{
|
|
|
MC_HallSensorData.SVM_Angle = HallAngle_Data[MC_HallSensorStatus.HallGropuStatus] + (ANGLE_60D >> 1);
|
|
@@ -165,7 +171,7 @@ int16_t MotorSpeedCal(uint16_t SVM_Angle, TrueOrFalse_Flag_Struct_t IsStopFlag)
|
|
|
static uint8_t PreCnt = 0;
|
|
|
static uint16_t SVM_Angle_Old = 0;
|
|
|
int32_t AngleStep = 0;
|
|
|
- static int32_t FreqMotorFlt = 0;
|
|
|
+ static int32_t FreqMotorFlt = 0, motrospeedFltSum=0;
|
|
|
int16_t FreqMotor = 0;
|
|
|
static int16_t Result = 0;
|
|
|
|
|
@@ -187,6 +193,9 @@ int16_t MotorSpeedCal(uint16_t SVM_Angle, TrueOrFalse_Flag_Struct_t IsStopFlag)
|
|
|
FreqMotorFlt += (AngleStep - FreqMotorFlt) >> 8;
|
|
|
FreqMotor = FreqMotorFlt >> 16;
|
|
|
Result = 60 * FreqMotor >> 3;// 8n=60*f/p
|
|
|
+
|
|
|
+ motrospeedFltSum += ((MC_HallSensorData.motorspeed<<10) - motrospeedFltSum)>>5;
|
|
|
+ MC_HallSensorData.motorspeed_RCFlt = motrospeedFltSum>>10;
|
|
|
}
|
|
|
|
|
|
if(IsStopFlag == TRUE)
|