avery 6 luni în urmă
părinte
comite
2eebb0c106

+ 1 - 6
KeilC51/Fortior.uvopt

@@ -165,12 +165,7 @@
         <Ww>
         <Ww>
           <count>4</count>
           <count>4</count>
           <WinNumber>1</WinNumber>
           <WinNumber>1</WinNumber>
-          <ItemText>mcCurOffset,0x0A</ItemText>
-        </Ww>
-        <Ww>
-          <count>5</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>mcSpeedRamp,0x0A</ItemText>
+          <ItemText>currOffset,0x0A</ItemText>
         </Ww>
         </Ww>
       </WatchWindow1>
       </WatchWindow1>
       <WatchWindow2>
       <WatchWindow2>

+ 2 - 69
User/Function/AddFunction.c

@@ -45,40 +45,6 @@ void Speed_response(void)
     
     
     if ((mcState == mcRun) || (mcState == mcStop))
     if ((mcState == mcRun) || (mcState == mcStop))
     {
     {
-        #if 0
-    
-        if (mcFocCtrl.RunStateCnt < MotorStartHoldTime)                                                 // MotorStartHoldTime目标转速为启动转速
-        {
-            mcSpeedRamp.IncValue    = SpeedRampStartInc;
-            mcFocCtrl.RunStateCnt++;
-            
-            if (isCtrlPowOn)
-            {
-                motorControl.TargetRef = Motor_Start_Hold_Speed;                    //上油时间内维持上油转速
-            }
-            else
-            {
-                motorControl.TargetRef = 0;
-                mcSpeedRamp.DecValue = Motor_Speed_Dec1;
-            }
-        }
-        else                                                                                                                            //如果达到上油转速后,将起动速度环增量变为运行速度环增量
-        {
-            Current_Speed_PI();
-            mcSpeedRamp.IncValue = Motor_Speed_Inc;
-            
-            if ((!isCtrlPowOn) || (motorControl.TargetRef == 0))
-            {
-                mcSpeedRamp.DecValue = Motor_Speed_Dec1;
-            }
-            else
-            {
-                mcSpeedRamp.DecValue = Motor_Speed_Dec;
-            }
-        }
-        
-        #endif
-        
         switch (mcFocCtrl.CtrlMode)
         switch (mcFocCtrl.CtrlMode)
         {
         {
             case 0:
             case 0:
@@ -94,8 +60,7 @@ void Speed_response(void)
                         #if (LOOP_MODE == SPEED_CONTROL_MODE)
                         #if (LOOP_MODE == SPEED_CONTROL_MODE)
                         mcSpeedRamp.ActualValue = motorControl.ActualSpeed + _Q15(150 / MOTOR_SPEED_BASE);
                         mcSpeedRamp.ActualValue = motorControl.ActualSpeed + _Q15(150 / MOTOR_SPEED_BASE);
                         #endif
                         #endif
-                        mcFocCtrl.LoopTime = SPEED_LOOP_TIME;
-                        mcFocCtrl.IND_DEC_LoopTime = SPEED_INC_DEC_TIME;
+                        mcFocCtrl.LoopTime = 1;
                         PI0_UKH = mcFocCtrl.mcIqref;
                         PI0_UKH = mcFocCtrl.mcIqref;
                         mcFocCtrl.IsRef = mcFocCtrl.mcIqref;
                         mcFocCtrl.IsRef = mcFocCtrl.mcIqref;
                     }
                     }
@@ -106,21 +71,13 @@ void Speed_response(void)
             case 1:
             case 1:
             {
             {
                 mcFocCtrl.LoopTime++;
                 mcFocCtrl.LoopTime++;
-                mcFocCtrl.IND_DEC_LoopTime++;
                 
                 
-//                if (mcFocCtrl.IND_DEC_LoopTime > SPEED_INC_DEC_TIME)
-//                {
-//                    mcSpeedRamp.TargetValue = motorControl.TargetRef;
-//                    mc_ramp(&mcSpeedRamp);
-//                    mcFocCtrl.IND_DEC_LoopTime = 0;
-//                }
-                mcSpeedRamp.ActualValue = motorControl.TargetRef;
                 if (mcFocCtrl.LoopTime > SPEED_LOOP_TIME)
                 if (mcFocCtrl.LoopTime > SPEED_LOOP_TIME)
                 {
                 {
                     #if (OUT_LOOP_CONTROL)
                     #if (OUT_LOOP_CONTROL)
                     {
                     {
                         #if (LOOP_MODE == SPEED_CONTROL_MODE)
                         #if (LOOP_MODE == SPEED_CONTROL_MODE)
-                        FOC_IQREF = HW_Zero_Calc(mcSpeedRamp.ActualValue - motorControl.ActualSpeed);
+                        FOC_IQREF = HW_Zero_Calc(motorControl.TargetRef - motorControl.ActualSpeed);
                         #endif
                         #endif
                         
                         
                     }
                     }
@@ -138,30 +95,6 @@ void Speed_response(void)
 }
 }
 
 
 
 
-/*角度补偿清零*/
-void STT_FOC_THECOMP_CLEAR(void)
-{
-    mcFocCtrl.foc_comp_temp = mcFocCtrl.STT_FOC_THECOMP;
-    
-    if (mcFocCtrl.foc_comp_temp < 0)
-    {
-        mcFocCtrl.foc_comp_temp++;
-        mcFocCtrl.STT_FOC_THECOMP    =  mcFocCtrl.foc_comp_temp;
-    }
-    else if (mcFocCtrl.foc_comp_temp > 0)
-    {
-        mcFocCtrl.foc_comp_temp--;
-        mcFocCtrl.STT_FOC_THECOMP    =  mcFocCtrl.foc_comp_temp;
-    }
-    else
-    {
-        mcFocCtrl.foc_comp_temp = 0;
-        mcFocCtrl.STT_FOC_THECOMP       = 0;
-    }
-    
-    FOC_THECOMP = mcFocCtrl.STT_FOC_THECOMP;
-}
-
 /*---------------------------------------------------------------------------*/
 /*---------------------------------------------------------------------------*/
 /*  Name     :   void mc_ramp(void)
 /*  Name     :   void mc_ramp(void)
     /* Input    :   hTarget,MC_RAMP *hSpeedramp
     /* Input    :   hTarget,MC_RAMP *hSpeedramp

+ 98 - 116
User/Function/FocControlFunction.c

@@ -21,9 +21,7 @@ void FOC_Init(void)
     FOC_RTHEACC     = 0;
     FOC_RTHEACC     = 0;
     FOC__RTHESTEP   = 0;
     FOC__RTHESTEP   = 0;
     FOC_RTHECNT     = 0;
     FOC_RTHECNT     = 0;
-    // FOC_THECOMP     = Start_FOC_THECOMP;                      // SMO 估算补偿角
     FOC_THECOR      = 0x02;                                 // 误差角度补偿
     FOC_THECOR      = 0x02;                                 // 误差角度补偿
-    mcFocCtrl.STT_FOC_THECOMP = Start_FOC_THECOMP;
     // 电流环参数配置
     // 电流环参数配置
     FOC_DKP = DQKP;
     FOC_DKP = DQKP;
     FOC_DKI = DQKI;
     FOC_DKI = DQKI;
@@ -38,16 +36,22 @@ void FOC_Init(void)
     SetBit(FOC_CR0, ESCMS);
     SetBit(FOC_CR0, ESCMS);
     // 估算器配置
     // 估算器配置
     #if (EstimateAlgorithm == SMO)
     #if (EstimateAlgorithm == SMO)
-    ClrBit(FOC_CR2, ESEL);
-    ClrBit(FOC_CR3, MFP_EN);
+    {
+        ClrBit(FOC_CR2, ESEL);
+        ClrBit(FOC_CR3, MFP_EN);
+    }
     #elif (EstimateAlgorithm == AO)
     #elif (EstimateAlgorithm == AO)
-    SetBit(FOC_CR3, MFP_EN);
-    ClrBit(FOC_CR2, ESEL);
+    {
+        SetBit(FOC_CR3, MFP_EN);
+        ClrBit(FOC_CR2, ESEL);
+    }
     #elif (EstimateAlgorithm == PLL)
     #elif (EstimateAlgorithm == PLL)
-    ClrBit(FOC_CR3, MFP_EN);
-    SetBit(FOC_CR2, ESEL);
-    FOC_KSLIDE    = OBSE_PLLKP_GAIN1;
-    FOC_EKLPFMIN  = OBSE_PLLKI_GAIN1;
+    {
+        ClrBit(FOC_CR3, MFP_EN);
+        SetBit(FOC_CR2, ESEL);
+        FOC_KSLIDE    = OBSE_PLLKP_GAIN1;
+        FOC_EKLPFMIN  = OBSE_PLLKI_GAIN1;
+    }
     #endif
     #endif
     FOC_EK1         = OBS_K1T;
     FOC_EK1         = OBS_K1T;
     FOC_EK2         = OBS_K2T;
     FOC_EK2         = OBS_K2T;
@@ -75,12 +79,8 @@ void FOC_Init(void)
         SetReg(FOC_CR1, CSM0 | CSM1, 0x00);
         SetReg(FOC_CR1, CSM0 | CSM1, 0x00);
         FOC_TSMIN  = PWM_TS_LOAD;                           // 最小采样窗口
         FOC_TSMIN  = PWM_TS_LOAD;                           // 最小采样窗口
         FOC_TRGDLY = 0x3B;                                  // 采样时刻在中点,一般考虑开关噪声影响,会设置延迟;3B
         FOC_TRGDLY = 0x3B;                                  // 采样时刻在中点,一般考虑开关噪声影响,会设置延迟;3B
-        // SVPWM 配置
-        #if (SVPMW_Mode == SVPWM_7_Segment)
-        ClrBit(FOC_CR2, F5SEG);
-        #elif (SVPMW_Mode == SVPWM_5_Segment)
-        SetBit(FOC_CR2, F5SEG);
-        #endif
+        SetReg(FOC_CR2, CSOC0 | CSOC1, 0x00);
+        FOC_CSO = mcCurOffset.Iw_busOffset;
     }
     }
     // 双电阻采样,可设置死区补偿值,在下降沿结束前开始采样Ia,配置81
     // 双电阻采样,可设置死区补偿值,在下降沿结束前开始采样Ia,配置81
     #elif (Shunt_Resistor_Mode == Double_Resistor)
     #elif (Shunt_Resistor_Mode == Double_Resistor)
@@ -90,12 +90,10 @@ void FOC_Init(void)
         FOC_TRGDLY = 0x05;                         // ADC采样的时刻,采样时刻在计数器零点附近,83为下降沿结束前3个clock采样Ia,与单电阻不同
         FOC_TRGDLY = 0x05;                         // ADC采样的时刻,采样时刻在计数器零点附近,83为下降沿结束前3个clock采样Ia,与单电阻不同
         // 01为上升沿开始后第一个clock开始采样。根据实际情况调整。
         // 01为上升沿开始后第一个clock开始采样。根据实际情况调整。
         FOC_TBLO = PWM_DLOWL_TIME;                 //下桥臂最小脉冲,保证采样
         FOC_TBLO = PWM_DLOWL_TIME;                 //下桥臂最小脉冲,保证采样
-        // SVPWM 配置
-        #if (SVPMW_Mode == SVPWM_7_Segment)
-        ClrBit(FOC_CR2, F5SEG);
-        #elif (SVPMW_Mode == SVPWM_5_Segment)
-        SetBit(FOC_CR2, F5SEG);
-        #endif
+        SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC0);
+        FOC_CSO  = mcCurOffset.IuOffset;
+        SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC1);
+        FOC_CSO  = mcCurOffset.IvOffset;
         // 采样配置
         // 采样配置
         #if (DouRes_Sample_Mode == DouRes_1_Cycle)
         #if (DouRes_Sample_Mode == DouRes_1_Cycle)
         ClrBit(FOC_CR2, DSS);
         ClrBit(FOC_CR2, DSS);
@@ -111,45 +109,25 @@ void FOC_Init(void)
         FOC_TRGDLY = 0x08;        // ADC采样的时刻,采样时刻在计数器零点附近,83为下降沿结束前3个clock采样Ia,与单电阻不同。
         FOC_TRGDLY = 0x08;        // ADC采样的时刻,采样时刻在计数器零点附近,83为下降沿结束前3个clock采样Ia,与单电阻不同。
         // 01为上升沿开始后第一个clock开始采样。根据实际情况调整。
         // 01为上升沿开始后第一个clock开始采样。根据实际情况调整。
         FOC_TBLO = PWM_OVERMODULE_TIME;  // 过调制电流采样处理的TB脉宽
         FOC_TBLO = PWM_OVERMODULE_TIME;  // 过调制电流采样处理的TB脉宽
-        // SVPWM 配置
-        #if (SVPMW_Mode == SVPWM_7_Segment)
-        ClrBit(FOC_CR2, F5SEG);
-        #elif (SVPMW_Mode == SVPWM_5_Segment)
-        SetBit(FOC_CR2, F5SEG);
-        #endif
         // 采样配置
         // 采样配置
         #if (DouRes_Sample_Mode == DouRes_1_Cycle)
         #if (DouRes_Sample_Mode == DouRes_1_Cycle)
         ClrBit(FOC_CR2, DSS);
         ClrBit(FOC_CR2, DSS);
         #elif (DouRes_Sample_Mode == DouRes_2_Cycle)
         #elif (DouRes_Sample_Mode == DouRes_2_Cycle)
         SetBit(FOC_CR2, DSS);
         SetBit(FOC_CR2, DSS);
         #endif
         #endif
+        SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC0);
+        FOC_CSO = mcCurOffset.IuOffset;
+        SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC1);
+        FOC_CSO = mcCurOffset.IvOffset;
+        SetReg(FOC_CR2, CSOC0 | CSOC1, 0x00);
+        FOC_CSO = mcCurOffset.Iw_busOffset;
     }
     }
     #endif
     #endif
-    // 写入电流偏置
-    #if (CalibENDIS)
-    {
-        if (mcCurOffset.OffsetFlag)
-        {
-            #if (Shunt_Resistor_Mode == Single_Resistor)
-            SetReg(FOC_CR2, CSOC0 | CSOC1, 0x00);
-            FOC_CSO = mcCurOffset.Iw_busOffset;
-            #elif (Shunt_Resistor_Mode == Double_Resistor)
-            SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC0);
-            FOC_CSO  = mcCurOffset.IuOffset;
-            SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC1);
-            FOC_CSO  = mcCurOffset.IvOffset;
-            #elif (Shunt_Resistor_Mode == Three_Resistor)
-            {
-                SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC0);
-                FOC_CSO = mcCurOffset.IuOffset;
-                SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC1);
-                FOC_CSO = mcCurOffset.IvOffset;
-                SetReg(FOC_CR2, CSOC0 | CSOC1, 0x00);
-                FOC_CSO = mcCurOffset.Iw_busOffset;
-            }
-            #endif
-        }
-    }
+    // SVPWM 配置
+    #if (SVPMW_Mode == SVPWM_7_Segment)
+    ClrBit(FOC_CR2, F5SEG);
+    #elif (SVPMW_Mode == SVPWM_5_Segment)
+    SetBit(FOC_CR2, F5SEG);
     #endif
     #endif
     SetBit(DRV_CR, DRVEN);
     SetBit(DRV_CR, DRVEN);
     SetBit(DRV_CR, OCS);
     SetBit(DRV_CR, OCS);
@@ -166,28 +144,28 @@ void Motor_Align(void)
     if (McStaSet.SetFlag.AlignSetFlag == 0)
     if (McStaSet.SetFlag.AlignSetFlag == 0)
     {
     {
         McStaSet.SetFlag.AlignSetFlag = 1;
         McStaSet.SetFlag.AlignSetFlag = 1;
-            // FOC初始化
-            FOC_Init();
-            // 配置预定位的电流、KP、KI
-            FOC_IDREF = 0;
-            FOC_IQREF = 0;
-            FOC_DKP   = DQKP_Alignment;
-            FOC_DKI   = DQKI_Alignment;
-            FOC_QKP   = DQKP_Alignment;
-            FOC_QKI   = DQKI_Alignment;
-            FOC_EKP   = OBSW_KP_GAIN;
-            FOC_EKI   = OBSW_KI_GAIN;
-            // 配置预定位角度
-            #if (EstimateAlgorithm == SMO)
-            FOC__ETHETA   = FOC__THETA - 4836;
-            #elif (EstimateAlgorithm == PLL)
-            FOC__ETHETA   = FOC__THETA;
-            #endif
-            DRV_CMR |= 0x03F;
-            MOE = 1;
+        // FOC初始化
+        FOC_Init();
+        // 配置预定位的电流、KP、KI
+        FOC_IDREF = 0;
+        FOC_IQREF = 0;
+        FOC_DKP   = DQKP_Alignment;
+        FOC_DKI   = DQKI_Alignment;
+        FOC_QKP   = DQKP_Alignment;
+        FOC_QKI   = DQKI_Alignment;
+        FOC_EKP   = OBSW_KP_GAIN;
+        FOC_EKI   = OBSW_KI_GAIN;
+        // 配置预定位角度
+        #if (EstimateAlgorithm == SMO)
+        FOC__ETHETA   = FOC__THETA - 4836;
+        #elif (EstimateAlgorithm == PLL)
+        FOC__ETHETA   = FOC__THETA;
+        #endif
+        DRV_CMR |= 0x03F;
+        MOE = 1;
     }
     }
     
     
-    if (mcFocCtrl.State_Count > (AlignmentHoldTime1 + AlignmentHoldTime2)) 
+    if (mcFocCtrl.State_Count > (AlignmentHoldTime1 + AlignmentHoldTime2))
     {
     {
         mcFocCtrl.CurrentAlignStatus = 0;
         mcFocCtrl.CurrentAlignStatus = 0;
         FOC__THETA = Align_Angle1;
         FOC__THETA = Align_Angle1;
@@ -227,7 +205,7 @@ void Motor_Open(void)
     FOC__ETHETA = FOC__THETA;
     FOC__ETHETA = FOC__THETA;
     #endif
     #endif
     FOC__EOME = 0;
     FOC__EOME = 0;
-	// 配置参数
+    // 配置参数
     FOC_IDREF = 0;
     FOC_IDREF = 0;
     FOC_DKP = DQKPStart;
     FOC_DKP = DQKPStart;
     FOC_DKI = DQKIStart;
     FOC_DKI = DQKIStart;
@@ -237,59 +215,63 @@ void Motor_Open(void)
     FOC_EKI = OBSW_KI_GAIN;
     FOC_EKI = OBSW_KI_GAIN;
     /// 启动方式选择
     /// 启动方式选择
     #if (Open_Start_Mode == Omega_Start)
     #if (Open_Start_Mode == Omega_Start)
-    FOC_EFREQACC  = Motor_OMEGA_RAMP_ACC;
-    FOC_EFREQMIN  = MOTOR_OMEGA_ACC_MIN;
-    FOC_EFREQHOLD = MOTOR_OMEGA_ACC_END;
-    SetReg(FOC_CR1, EFAE | RFAE | ANGM, EFAE | ANGM);
-    #if  (IFFDebugg)
     {
     {
-        // 估算器禁止输出
-        ClrBit(FOC_CR1, EFAE);                      // 禁止估算器强制输出
-        ClrBit(FOC_CR1, RFAE);                      // 使能强拉
-        ClrBit(FOC_CR1, ANGM);                      // 禁止估算器输出
+        FOC_EFREQACC  = MOTOR_OMEGA_RAMP_ACC;
+        FOC_EFREQMIN  = MOTOR_OMEGA_ACC_MIN;
+        FOC_EFREQHOLD = MOTOR_OMEGA_ACC_END;
+        SetReg(FOC_CR1, EFAE | RFAE | ANGM, EFAE | ANGM);
+        #if  (IFFDebugg)
+        {
+            // 估算器禁止输出
+            ClrBit(FOC_CR1, EFAE);                      // 禁止估算器强制输出
+            ClrBit(FOC_CR1, RFAE);                      // 使能强拉
+            ClrBit(FOC_CR1, ANGM);                      // 禁止估算器输出
+        }
+        #endif
+		// 切入启动
+        mcFocCtrl.State_Count = 1200;
+        mcState = mcRun;
     }
     }
-    #endif
     #elif (Open_Start_Mode == Open_Start)
     #elif (Open_Start_Mode == Open_Start)
-    FOC_RTHEACC = MOTOR_OPEN_ACC;
-    FOC__RTHESTEP = MOTOR_OPEN_ACC_MIN;
-    FOC_RTHECNT = MOTOR_OPEN_ACC_CNT;
-    SetReg(FOC_CR1, EFAE | RFAE | ANGM, RFAE);
-    #elif (Open_Start_Mode == Open_Omega_Start)
-    FOC_RTHEACC   = MOTOR_OPEN_ACC;
-    FOC__RTHESTEP = MOTOR_OPEN_ACC_MIN;
-    FOC_RTHECNT   = MOTOR_OPEN_ACC_CNT;
-    FOC_EFREQACC  = Motor_OMEGA_RAMP_ACC;
-    FOC_EFREQMIN  = MOTOR_OMEGA_ACC_MIN;
-    FOC_EFREQHOLD = MOTOR_OMEGA_ACC_END;
-    SetReg(FOC_CR1, EFAE | RFAE | ANGM, EFAE | RFAE | ANGM);
-    #endif
-    // 不同启动方式下,切换到MCRUN状态
-    #if (Open_Start_Mode == Open_Start)
-    
-    if (OpenRampCycles < (MOTOR_OPEN_ACC_CYCLE - 1))
     {
     {
-        if (!ReadBit(FOC_CR1, RFAE))
+        FOC_RTHEACC = MOTOR_OPEN_ACC;
+        FOC__RTHESTEP = MOTOR_OPEN_ACC_MIN;
+        FOC_RTHECNT = MOTOR_OPEN_ACC_CNT;
+        SetReg(FOC_CR1, EFAE | RFAE | ANGM, RFAE);
+    
+		// 切入启动
+        if (OpenRampCycles < (MOTOR_OPEN_ACC_CYCLE - 1))
         {
         {
-            SetBit(FOC_CR1, RFAE);
-            OpenRampCycles++;
+            if (!ReadBit(FOC_CR1, RFAE))
+            {
+                SetBit(FOC_CR1, RFAE);
+                OpenRampCycles++;
+            }
+        }
+        else
+        {
+            mcFocCtrl.State_Count = 2;
+            mcState = mcRun;
         }
         }
+    
+        FOC_EKP = OBSW_KP_GAIN_RUN4;
+        FOC_EKI = OBSW_KI_GAIN_RUN4;
     }
     }
-    else
+    #elif (Open_Start_Mode == Open_Omega_Start)
     {
     {
-        mcFocCtrl.State_Count = 2;
+        FOC_RTHEACC   = MOTOR_OPEN_ACC;
+        FOC__RTHESTEP = MOTOR_OPEN_ACC_MIN;
+        FOC_RTHECNT   = MOTOR_OPEN_ACC_CNT;
+        FOC_EFREQACC  = Motor_OMEGA_RAMP_ACC;
+        FOC_EFREQMIN  = MOTOR_OMEGA_ACC_MIN;
+        FOC_EFREQHOLD = MOTOR_OMEGA_ACC_END;
+        SetReg(FOC_CR1, EFAE | RFAE | ANGM, EFAE | RFAE | ANGM);
+		// 切入启动
+        mcFocCtrl.State_Count = 2600;
         mcState = mcRun;
         mcState = mcRun;
     }
     }
-    
-    FOC_EKP = OBSW_KP_GAIN_RUN4;
-    FOC_EKI = OBSW_KI_GAIN_RUN4;
-    #elif (Open_Start_Mode == Open_Omega_Start)
-    mcFocCtrl.State_Count = 2600;
-    mcState = mcRun;
-    #elif (Open_Start_Mode == Omega_Start)
-    mcFocCtrl.State_Count = 1200;
-    mcState = mcRun;
     #endif
     #endif
-	// Q轴启动电流
+    // Q轴启动电流
     FOC_IQREF = IQ_Start_CURRENT ;
     FOC_IQREF = IQ_Start_CURRENT ;
 }
 }
 
 

+ 0 - 4
User/include/AddFunction.h

@@ -36,11 +36,8 @@ typedef struct
     uint16 IDQFlt;
     uint16 IDQFlt;
     uint16 RunStateCnt;	// 运行状态计数
     uint16 RunStateCnt;	// 运行状态计数
     uint16 LoopTime;	// 外环时间
     uint16 LoopTime;	// 外环时间
-    uint16 IND_DEC_LoopTime;	// 外环时间
     uint16 ChargeStep;	// 预充电的步骤
     uint16 ChargeStep;	// 预充电的步骤
     uint16 State_Count;	// 电机各个状态的时间计数
     uint16 State_Count;	// 电机各个状态的时间计数
-    int16  foc_comp_temp;
-    int16  STT_FOC_THECOMP;
     uint8  CurrentAlignStatus;
     uint8  CurrentAlignStatus;
 } FOCCTRL;
 } FOCCTRL;
 
 
@@ -62,7 +59,6 @@ extern void   Fault_Detection(void);
 extern void   PFCFault_Detection(void);
 extern void   PFCFault_Detection(void);
 extern void   Speed_response(void);
 extern void   Speed_response(void);
 extern void   mc_ramp(MCRAMP * hSpeedramp);
 extern void   mc_ramp(MCRAMP * hSpeedramp);
-extern void   STT_FOC_THECOMP_CLEAR(void);
 extern void   FaultProcess(void);
 extern void   FaultProcess(void);
 extern uint32 Abs_F32(int32 value);
 extern uint32 Abs_F32(int32 value);
 extern void   StarRampDealwith(void);
 extern void   StarRampDealwith(void);

+ 1 - 2
User/include/Customer.h

@@ -83,7 +83,6 @@
 #define ID_Start_CURRENT               I_Value(0.0)                            // (A) D轴启动电流
 #define ID_Start_CURRENT               I_Value(0.0)                            // (A) D轴启动电流
 #define IQ_Start_CURRENT               I_Value(2.0)                            // (A) Q轴启动电流
 #define IQ_Start_CURRENT               I_Value(2.0)                            // (A) Q轴启动电流
 
 
-#define Start_FOC_THECOMP              _Q15(10.0/180.0)                        //启动补偿角度
 
 
 /*************Omega启动的参数***************/
 /*************Omega启动的参数***************/
 #define ATO_BW                         (100.0)                               // 观测器带宽的滤波值,经典值为1.0-200.0
 #define ATO_BW                         (100.0)                               // 观测器带宽的滤波值,经典值为1.0-200.0
@@ -100,7 +99,7 @@
 #define MOTOR_OPEN_ACC_CYCLE           (100)                                    // 强拖启动循环拖动的次数
 #define MOTOR_OPEN_ACC_CYCLE           (100)                                    // 强拖启动循环拖动的次数
 
 
 //OMEGA启动参数
 //OMEGA启动参数
-#define Motor_OMEGA_RAMP_ACC            (300.0)                                 // omega启动的增量   12
+#define MOTOR_OMEGA_RAMP_ACC            (300.0)                                 // omega启动的增量   12
 #define MOTOR_OMEGA_ACC_MIN             _Q15(200.0 / MOTOR_SPEED_BASE)          // (RPM) omega启动的最小切换转速
 #define MOTOR_OMEGA_ACC_MIN             _Q15(200.0 / MOTOR_SPEED_BASE)          // (RPM) omega启动的最小切换转速
 #define MOTOR_OMEGA_ACC_END             _Q15(400.0 / MOTOR_SPEED_BASE)          // (RPM) omega启动的限制转速
 #define MOTOR_OMEGA_ACC_END             _Q15(400.0 / MOTOR_SPEED_BASE)          // (RPM) omega启动的限制转速
 
 

+ 21 - 0
User/include/Definition.h

@@ -245,6 +245,27 @@ typedef struct
 
 
 extern Motor_Control_t motorControl;
 extern Motor_Control_t motorControl;
 
 
+typedef struct
+{
+    enum
+    {
+        CALIB_INIT,
+        GET_OFFSET,
+        OFFSET_READY
+    } OffsetCalib;
+    // U相
+    int16_t IuOffset;
+    int32_t IuOffsetSum;
+    // V相
+    int16_t IvOffset;
+    int32_t IvOffsetSum;
+    // W相
+    int16_t IwBusOffset;
+    int32_t IwBusOffsetSum;
+    int16_t OffsetCount;
+} Curr_Offset_t;
+
+extern Curr_Offset_t xdata currOffset;
 
 
 // ------------------------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------------------------
 // 5.硬件初始化与调用声明
 // 5.硬件初始化与调用声明