avery 7 月之前
父节点
当前提交
ad4b8b3c35

+ 5 - 0
KeilC51/Fortior.uvopt

@@ -162,6 +162,11 @@
           <WinNumber>1</WinNumber>
           <ItemText>mcState</ItemText>
         </Ww>
+        <Ww>
+          <count>4</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>mcFocCtrl,0x0A</ItemText>
+        </Ww>
       </WatchWindow1>
       <WatchWindow2>
         <Ww>

+ 1 - 0
User/Application/Control.c

@@ -20,6 +20,7 @@ void Get_Target_Ref(void)
         isCtrlPowOn = true;
         motorControl.TargetRef = TARGET_SPEED_SET;
         motorControl.QOutRef = I_Value(1.0);
+        motorControl.QOutRef = I_Value(4.0);
         #elif (CONTROL_MODE == UARTMODE)
         #endif
     }

+ 13 - 31
User/Function/AddFunction.c

@@ -45,6 +45,8 @@ void Speed_response(void)
     
     if ((mcState == mcRun) || (mcState == mcStop))
     {
+        #if 0
+    
         if (mcFocCtrl.RunStateCnt < MotorStartHoldTime)                                                 // MotorStartHoldTime目标转速为启动转速
         {
             mcSpeedRamp.IncValue    = SpeedRampStartInc;
@@ -75,17 +77,17 @@ void Speed_response(void)
             }
         }
         
+        #endif
+        
         switch (mcFocCtrl.CtrlMode)
         {
             case 0:
             {
                 if (motorControl.ActualSpeed > MOTOR_LOOP_RPM)
                 {
-                    if (Start_CNT < 15)
-                    {
-                        Start_CNT ++;
-                    }
-                    else
+                    Start_CNT ++;
+                    
+                    if (Start_CNT > 15)
                     {
                         mcFocCtrl.CtrlMode = 1;
                         Start_CNT = 0;
@@ -95,7 +97,7 @@ void Speed_response(void)
                         mcFocCtrl.LoopTime = SPEED_LOOP_TIME;
                         mcFocCtrl.IND_DEC_LoopTime = SPEED_INC_DEC_TIME;
                         PI0_UKH = mcFocCtrl.mcIqref;
-                        mcFocCtrl.IsRef    = mcFocCtrl.mcIqref;
+                        mcFocCtrl.IsRef = mcFocCtrl.mcIqref;
                     }
                 }
             }
@@ -125,26 +127,14 @@ void Speed_response(void)
                     }
                     #else
                     {
-                        mcFocCtrl.mcIqref = FOC_IQREF;
-                    
-                        if (FOC_IQREF < motorControl.QOutRef)
-                        {
-                            mcFocCtrl.mcIqref += QOUTINC;
+                        motorControl.ActualQOutValue = FOC_IQREF;
                     
-                            if (mcFocCtrl.mcIqref > motorControl.QOutRef)
-                            { mcFocCtrl.mcIqref = motorControl.QOutRef; }
-                    
-                            FOC_IQREF = mcFocCtrl.mcIqref;
-                        }
+                        if (motorControl.ActualQOutValue < motorControl.QOutRef)
+                        { motorControl.ActualQOutValue += QOUTINC; }
                         else if (FOC_IQREF > motorControl.QOutRef)
-                        {
-                            mcFocCtrl.mcIqref -= QOUTINC;
-                    
-                            if (mcFocCtrl.mcIqref < motorControl.QOutRef)
-                            { mcFocCtrl.mcIqref = motorControl.QOutRef; }
+                        { motorControl.ActualQOutValue -= QOUTINC; }
                     
-                            FOC_IQREF = mcFocCtrl.mcIqref;
-                        }
+                        FOC_IQREF = motorControl.ActualQOutValue;
                     }
                     #endif
                     mcFocCtrl.LoopTime = 0;
@@ -225,14 +215,6 @@ void StarRampDealwith(void)
 {
     if ((mcState == mcRun) || (mcState == mcStart))
     {
-        if ((mcFocCtrl.CtrlMode == 0) || (mcFocCtrl.State_Count > 10))
-        {
-            if (mcFocCtrl.iiqq <= IQ_Start_CURRENT2)
-            {mcFocCtrl.iiqq = mcFocCtrl.iiqq + 2;}
-            
-            FOC_IQREF = mcFocCtrl.iiqq;
-        }
-        
         if (mcFocCtrl.State_Count == 1200) //2300
         {
             FOC_EKP = OBSW_KP_GAIN_RUN;              // 估算器里的PI的KP

+ 19 - 21
User/Function/FocControlFunction.c

@@ -218,9 +218,9 @@ void Motor_Align(void)
 void Motor_Open(void)
 {
     static uint8 OpenRampCycles;
-    FOC_Init();
+    // FOC_Init();
     // 启动角度
-    FOC__THETA = _Q15((float)0.0 / 180.0);
+    // FOC__THETA = _Q15((float)0.0 / 180.0);
     #if ((EstimateAlgorithm == SMO)||(EstimateAlgorithm == AO))
     FOC__ETHETA = FOC__THETA - 4836;    //SMO估算角度延迟
     #elif (EstimateAlgorithm == PLL)
@@ -228,29 +228,27 @@ void Motor_Open(void)
     #endif
     FOC__EOME = 0;
 	// 配置参数
-    FOC_IDREF = ID_Start_CURRENT;                         // D轴启动电流
-    mcFocCtrl.mcIqref = IQ_Start_CURRENT;                 // Q轴启动电流
-    mcFocCtrl.iiqq = IQ_Start_CURRENT;
-    FOC_DKP  = DQKPStart;
-    FOC_DKI  = DQKIStart;
-    FOC_QKP  = DQKPStart;
-    FOC_QKI  = DQKIStart;
-    FOC_EKP  = OBSW_KP_GAIN;
-    FOC_EKI  = OBSW_KI_GAIN;
+    FOC_IDREF = 0;
+    FOC_DKP = DQKPStart;
+    FOC_DKI = DQKIStart;
+    FOC_QKP = DQKPStart;
+    FOC_QKI = DQKIStart;
+    FOC_EKP = OBSW_KP_GAIN;
+    FOC_EKI = OBSW_KI_GAIN;
     /// 启动方式选择
-    #if (Open_Start_Mode == Omega_Start)              // Omega 启动
+    #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==1)
-    {
-        // 估算器禁止输出
-        ClrBit(FOC_CR1, EFAE);                      // 禁止估算器强制输出
-        ClrBit(FOC_CR1, RFAE);                      // 使能强拉
-        ClrBit(FOC_CR1, ANGM);                      // 禁止估算器输出
-    }
-    #endif
+//    #if  (IFFDebugg)
+//    {
+//        // 估算器禁止输出
+//        ClrBit(FOC_CR1, EFAE);                      // 禁止估算器强制输出
+//        ClrBit(FOC_CR1, RFAE);                      // 使能强拉
+//        ClrBit(FOC_CR1, ANGM);                      // 禁止估算器输出
+//    }
+//    #endif
     #elif (Open_Start_Mode == Open_Start)
     FOC_RTHEACC = MOTOR_OPEN_ACC;
     FOC__RTHESTEP = MOTOR_OPEN_ACC_MIN;
@@ -292,7 +290,7 @@ void Motor_Open(void)
     mcState = mcRun;
     #endif
 	// Q轴启动电流
-    FOC_IQREF = mcFocCtrl.mcIqref; 
+    FOC_IQREF = IQ_Start_CURRENT ;
 }
 
 

+ 0 - 1
User/include/AddFunction.h

@@ -39,7 +39,6 @@ typedef struct
     uint16 IND_DEC_LoopTime;	// 外环时间
     uint16 ChargeStep;	// 预充电的步骤
     uint16 State_Count;	// 电机各个状态的时间计数
-    uint16 iiqq;	// 电机各个状态的时间计数
     int16  foc_comp_temp;
     int16  STT_FOC_THECOMP;
     uint8  CurrentAlignStatus;

+ 1 - 5
User/include/Customer.h

@@ -81,8 +81,7 @@
 
 // 启动电流
 #define ID_Start_CURRENT               I_Value(0.0)                            // (A) D轴启动电流
-#define IQ_Start_CURRENT               I_Value(2.0)                            // (A) Q轴启动电流
-#define IQ_Start_CURRENT2              I_Value(2.0)                            // (A) Q轴启动电流
+#define IQ_Start_CURRENT               I_Value(4.0)                            // (A) Q轴启动电流
 
 #define Start_FOC_THECOMP              _Q15(10.0/180.0)                        //启动补偿角度
 
@@ -191,8 +190,6 @@
 #define CONTROL_MODE                    (NONEMODE)
 
 
-
-
 #define StopBrakeFlag                  (0)
 #define StopWaitTime                   (2000)                                  // (ms) 刹车等待时间
 
@@ -205,7 +202,6 @@
 
 
 #define IFFDebugg                      (0)            //  强拖测试模式 
-#define IF_I_Value                     I_Value(10.0)   //  强拖测试电流
 
 
 #define VoltageCompensationEn           (0)//电压补偿使能位

+ 5 - 4
User/include/Definition.h

@@ -110,10 +110,10 @@
 #define PWM_LEVEL_MODE                  (HIGH_LEVEL)
 
 // DQ轴最大限幅值
-#define DOUTMAX                         _Q15(0.2)
-#define DOUTMIN                         _Q15(-0.2)
-#define QOUTMAX                         _Q15(0.2)
-#define QOUTMIN                         _Q15(-0.2)
+#define DOUTMAX                         _Q15(0.99)
+#define DOUTMIN                         _Q15(-0.99)
+#define QOUTMAX                         _Q15(0.99)
+#define QOUTMIN                         _Q15(-0.99)
 
 
 
@@ -230,6 +230,7 @@ typedef struct
     int16_t TargetRef;
     int16_t ActualRef;
     int16_t ActualSpeed;
+    int16_t ActualQOutValue;
     int16_t QOutRef;
     
     int16_t IQRef;