Selaa lähdekoodia

更新

1.格式处理
2.添加相关测试代码
avery 7 kuukautta sitten
vanhempi
commit
c814575342

+ 10 - 0
KeilC51/Fortior.uvopt

@@ -157,6 +157,16 @@
           <WinNumber>1</WinNumber>
           <ItemText>motorControl,0x0A</ItemText>
         </Ww>
+        <Ww>
+          <count>3</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>mcFaultSource</ItemText>
+        </Ww>
+        <Ww>
+          <count>4</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>mcState</ItemText>
+        </Ww>
       </WatchWindow1>
       <WatchWindow2>
         <Ww>

+ 9 - 5
User/Application/Control.c

@@ -14,9 +14,13 @@
 */
 void Get_Target_Ref(void)
 {
-    #if (CONTROL_MODE == NONEMODE)
-    isCtrlPowOn = true;
-    motorControl.TargetRef = TARGET_SPEED_SET;
-    #elif (CONTROL_MODE == UARTMODE)
-    #endif
+    if (powerControl.PowerSate == POWER_RUN)
+    {
+        #if (CONTROL_MODE == NONEMODE)
+        isCtrlPowOn = true;
+        motorControl.TargetRef = TARGET_SPEED_SET;
+        mcFocCtrl.QoutValue = I_Value(1.0);
+        #elif (CONTROL_MODE == UARTMODE)
+        #endif
+    }
 }

+ 0 - 1
User/Application/main.c

@@ -58,7 +58,6 @@ void SoftwareInit(void)
     memset(&mcProtectTime, 0, sizeof(ProtectVarible));    // ProtectVarible保护次数清零
     /***********过流保护**************/
     memset(&mcCurVarible, 0, sizeof(CurrentVarible));     // 电流保护的变量清零
-    memset(&PFCFaultDect, 0, sizeof(PFCFaultVarible));
     memset(&ConTrolCmd, 0, sizeof(CONTROLCMDD));
     /*****电机状态机时序变量***********/
     McStaSet.SetMode = 0;

+ 2 - 1
User/Function/AddFunction.c

@@ -131,12 +131,13 @@ void Speed_response(void)
             
             case 1:
             {
-                // IsLimit_Over_deal();
+                IsLimit_Over_deal();
                 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;
                 }

+ 2 - 4
User/Function/FiledWeaken.c

@@ -12,10 +12,8 @@ void  FiledWeakenControl(int16 Ud, int16 Uq, uint16 Dcbusk, int16 Is)
     SMDU_RunBlock(1, 5);
     mcFieldWeaken.FieldWeakenActualUS_Q15 = SCAT1_RES1;
     mcFieldWeaken.FieldWeakenActualDcbus_Q15 = Dcbusk;
-	
-	// 计算弱磁角度
-	mcFieldWeaken.FieldWeakenIsTheta = HW_One_Calc(mcFieldWeaken.FieldWeakenActualDcbus_Q15 -  mcFieldWeaken.FieldWeakenActualUS_Q15);
-	
+    // 计算弱磁角度
+    mcFieldWeaken.FieldWeakenIsTheta = HW_One_Calc(mcFieldWeaken.FieldWeakenActualDcbus_Q15 -  mcFieldWeaken.FieldWeakenActualUS_Q15);
     //获取D轴电流和Q轴电流参考值。
     SCAT1_COS = Is;
     SCAT1_THE = mcFieldWeaken.FieldWeakenIsTheta;

+ 2 - 2
User/Function/FocControl.c

@@ -34,7 +34,7 @@ void Motor_Control_State(void)
                 MOE = 0;
                 SetBit(ADC_MASK, CH1EN | CH0EN);
                 mcCurOffset.OffsetCount = 0;
-                mcCurOffset.OffsetFlag = 0;                  // 开始电流采集
+                mcCurOffset.OffsetFlag = 0;
             }
             
             if (mcCurOffset.OffsetFlag && isCtrlPowOn)
@@ -81,7 +81,7 @@ void Motor_Control_State(void)
             {
                 MOE = 0;                   // 关闭输出
                 mcState = mcAlign;
-                mcFocCtrl.State_Count     = Align_Time;
+                mcFocCtrl.State_Count = Align_Time;
             }
             
             break;

+ 3 - 9
User/Function/FocControlFunction.c

@@ -273,20 +273,14 @@ void Motor_Align(void)
 void Motor_Open(void)
 {
     static uint8 OpenRampCycles;
-    
-    if (McStaSet.SetFlag.StartSetFlag == 0)
-    {
-        McStaSet.SetFlag.StartSetFlag = 1;
-    }
-    
     FOC_Init();
+    // 启动角度
     FOC__THETA = _Q15((float)0.0 / 180.0);
-    /*********PLL或SMO**********/
     #if ((EstimateAlgorithm == SMO)||(EstimateAlgorithm == AO))
     FOC__ETHETA = FOC__THETA - 4836;    //SMO估算角度延迟
     #elif (EstimateAlgorithm == PLL)
     FOC__ETHETA = FOC__THETA;
-    #endif //end    EstimateAlgorithm
+    #endif
     FOC__EOME = 0;
     /*启动电流、KP、KI、FOC_EKP、FOC_EKI*/
     FOC_IDREF = ID_Start_CURRENT;                         // D轴启动电流
@@ -352,7 +346,7 @@ void Motor_Open(void)
     /*********PLL或SMO**********/
     mcFocCtrl.State_Count = 1200;
     mcState   = mcRun;
-    #endif //end Open_Start_Mode
+    #endif
     FOC_IQREF = mcFocCtrl.mcIqref;                          // Q轴启动电流
 }
 

+ 0 - 2
User/Function/Protect.c

@@ -2,9 +2,7 @@
 #include <Myproject.h>
 
 FaultStateType     xdata   mcFaultSource;
-PFCFaultStateType  xdata   PFCFaultSource;
 FaultVarible       idata   mcFaultDect;
-PFCFaultVarible    idata   PFCFaultDect;
 ProtectVarible     xdata   mcProtectTime;
 
 /*****************************************************************************

+ 9 - 3
User/Hardware/ADC.c

@@ -1,7 +1,7 @@
 /**
  * @copyright None
  * @file      ADC.c
- * @author    Comment Vivre 
+ * @author    Comment Vivre
  * @date      2025-11-03
  * @brief     None
  */
@@ -76,7 +76,7 @@ void AMP_Init(void)
     // 增益为外部配置
     ClrBit(AMP_CR1, AMP0_GAIN2 | AMP0_GAIN1 | AMP0_GAIN0 | AMP_PH_GAIN2 | AMP_PH_GAIN1 | AMP_PH_GAIN0);
 }
-
+uint16_t uCurr, vCurr;
 /**
     @function     Get_ADC_Value
     @brief        读取ADC转换值
@@ -84,8 +84,9 @@ void AMP_Init(void)
 */
 void Get_ADC_Value(void)
 {
-    // 使能ADC的DCBUS采样 
+    // 使能ADC的DCBUS采样
     SetBit(ADC_CR, ADCBSY);
+    
     // 等待转换完成
     while (ReadBit(ADC_CR, ADCBSY));
     
@@ -94,4 +95,9 @@ void Get_ADC_Value(void)
     motorControl.ACBus    = LPF_Zero_Update(VACBUS_ADC, motorControl.ACBus, LPF_K(1.0));
     motorControl.IGBTTemp = LPF_Zero_Update(IGBT_NTC_ADC, motorControl.IGBTTemp, LPF_K(20.0));
     // 数据处理
+    // 测试
+    uCurr = ADC0_DR;
+    vCurr = ADC1_DR;
+    motorControl.uPhaseCurr = uCurr - mcCurOffset.IuOffset;
+    motorControl.vPhaseCurr = vCurr - mcCurOffset.IvOffset;
 }

+ 1 - 1
User/Hardware/GPIO.c

@@ -182,7 +182,7 @@ void Power_In_Control(void)
         
         case POWER_RUN:
         {
-            #if 0
+            #if 1
         
             // 暂不释放复位
             if (mcFaultSource == FaultNoSource)

+ 23 - 26
User/include/Customer.h

@@ -3,14 +3,14 @@
 
 // ------------------------------------------------------------------------------------------------------------------
 // 1.电机相关参数: 电阻(Ω) DQ电感(H) 反电动势常数(V/RPM)  转向(CW/CCW) 基准转速(RPM) 极对数
-#define RS                             (0.5)
-#define LD                             (0.004)
-#define LQ                             (0.004)
-#define Ke                             (38.3)
+#define RS                             (6.4)
+#define LD                             (0.080)
+#define LQ                             (LD)
+#define Ke                             (0.0)
 #define Psi                            (float)(Ke * 207.84 / 1000.0 / 2.0 / 1.732 / Pole_Pairs / _2PI )
 #define IRMODE                         (CCW)
-#define MOTOR_SPEED_BASE               (12000.0)
-#define Pole_Pairs                     (2)
+#define MOTOR_SPEED_BASE               (9000.0)
+#define Pole_Pairs                     (3)
 
 
 #define ID_Limit                       I_Value(-Psi/LD/2)
@@ -67,30 +67,27 @@
 #define AlignTestMode                  (0)                                     // 预定位测试模式
 
 
-#define DQKP_Alignment                 _Q12(5.0)                               // 预定位的KP
-#define DQKI_Alignment                 _Q15(0.01)                              // 预定位的KI
+#define DQKP_Alignment					_Q12(2.0)
+#define DQKI_Alignment					_Q15(0.05)
 
-#define  IQ_Align_CURRENT               I_Value(0.0)                             /* (A)  D轴定位电流 */
-#define  ID_Align_CURRENT_Start         I_Value(15.0)                             /* (A)  Q轴定位初始电流 */
-#define  ID_Align_CURRENT_End           ID_Align_CURRENT_Start                             /* (A)  Q轴定位保持电流 */
+#define IQ_Align_CURRENT				I_Value(0.0)
+#define ID_Align_CURRENT_Start			I_Value(1.0)
+#define ID_Align_CURRENT_End			ID_Align_CURRENT_Start
 
-#define  Align_Angle1                   _Q15((float)0.0 / 180.0)                    /* 定位角度1,固定为 0 度  用于检测缺相 */
-#define  Align_Angle2                   _Q15((float)90.0 / 180.0)                   /* 定位角度2,二次预定位 */
-#define  Align_Start                    (Align_Angle2 - _Q15((float)30.0 / 180.0))  /* 启动角度 */
+#define Align_Angle1					_Q15((float)0.0 / 180.0)
+#define Align_Angle2					_Q15((float)90.0 / 180.0)
+#define Align_Start						(Align_Angle2 - _Q15((float)30.0 / 180.0))
 
-#define AlignmentRampTime               (500.0)                                  /* (ms) 预定位电流爬坡时间 */
-#define AlignmentHoldTime1              (500.0)                                  /* (ms) 预定位电流保持时间 */
-#define AlignmentHoldTime2              (500.0)                                  /* (ms) 预定位电流保持时间 */
+#define AlignmentRampTime               (500.0)
+#define AlignmentHoldTime1              (500.0)
+#define AlignmentHoldTime2              (500.0)
 #define Align_Time                      (AlignmentRampTime + AlignmentHoldTime1+AlignmentHoldTime2)
 
-/***启动电流****/
+// 启动电流
 #define ID_Start_CURRENT               I_Value(0.0)                            // (A) D轴启动电流
-#define IQ_Start_CURRENT               I_Value(25.0)                            // (A) Q轴启动电流
-#define IQ_Start_CURRENT2              I_Value(25.0)                            // (A) Q轴启动电流
+#define IQ_Start_CURRENT               I_Value(2.0)                            // (A) Q轴启动电流
+#define IQ_Start_CURRENT2              I_Value(2.0)                            // (A) Q轴启动电流
 
-/***运行电流****/
-#define ID_RUN_CURRENT                 I_Value(0.0)                            // (A) D轴运行电流
-#define IQ_RUN_CURRENT                 I_Value(1.5)                            // (A) Q轴运行电流
 #define Start_FOC_THECOMP              _Q15(10.0/180.0)                        //启动补偿角度
 
 /*************Omega启动的参数***************/
@@ -136,8 +133,8 @@
 /*******运行时的参数*****************/
 /*电流环参数设置值--------------------------------------------------------------*/
 /*启动*/
-#define DQKPStart                      _Q12(4.0)  //1.1                             
-#define DQKIStart                      _Q15(0.0081) //0.01                             
+#define DQKPStart                      _Q12(2.5)  //1.1                             
+#define DQKIStart                      _Q15(0.01) //0.01                             
 /*低速*/
 #define DQKP                           _Q12(2.0)  //带载时5.0                            
 #define DQKI                           _Q15(0.002)  //此值不能太大,大了后影响低速性能(与转矩补偿冲突) 
@@ -196,7 +193,7 @@
 
 
 
-#define OUT_LOOP_CONTROL				(1)
+#define OUT_LOOP_CONTROL				(0)
 #define LOOP_MODE						(SPEED_CONTROL_MODE)
 
 

+ 2 - 0
User/include/Definition.h

@@ -200,6 +200,8 @@ typedef struct
 	int16_t IQRef;
 	int16_t IDRef;
 	
+	int16_t uPhaseCurr;
+	int16_t vPhaseCurr;
 }Motor_Control_t;
 
 extern Motor_Control_t motorControl;

+ 6 - 30
User/include/Protect.h

@@ -1,7 +1,6 @@
 #ifndef __Protect_H_
 #define __Protect_H_
 
-#include "FU68xx_5.h"
 #include <Myproject.h>
 
 typedef enum
@@ -9,38 +8,17 @@ typedef enum
     FaultNoSource      = 0,                // 无故障
     FaultHardOVCurrent = 1,                // 硬件过流
     FaultSoftOVCurrent = 2,                // 软件过流
-    FaultUnderVoltage  = 3,                // 欠压保护 OK
-    FaultOverVoltage   = 4,                // 过压保护 OK
+    FaultUnderVoltage  = 3,                // 欠压保护
+    FaultOverVoltage   = 4,                // 过压保护
     FaultLossPhase     = 5,                // 缺相保护
     FaultStall         = 6,                // 堵转保护
-    FaultStart         = 7,                // 启动保护 NO
-    FaultPFC           = 8,                // PFC保护
-	  FaultIpmTemp       = 9,               // IPM温度保护 OK
-		Faultcummution     = 10,               // 通信保护
-	  FaultIbusOffset    = 11,               //pianzhi
-	  FaultGuanTempSensor    = 12,               //pianzhi
-	  FaultHuanTempSensor    = 13,               //pianzhi
-	  FaultshuruLoss     = 14,
+    FaultStart         = 7,                // 启动保护
+	FaultIpmTemp       = 9,                // IPM温度保护
+	FaultIbusOffset    = 11,               // pianzhi
+	FaultshuruLoss     = 14,
 	
 } FaultStateType;
-typedef enum
-{
-    PFCFaultNoSource       = 0,                // 无故障
-    PFCFaultHardOVCurrent  = 1,                // 硬件过流
-    PFCFaultOverVoltage    = 2,                // 过压保护
-	  PFCFaultIbusOffset     = 3,
-} PFCFaultStateType;
-
-typedef struct
-{
-    uint16  IbusOffsetRecoverCnt;     ///偏执电压保护恢复时间
-    uint16 OverVoltDetecCnt;           // 过压检测计数
-    uint16 UnderVoltDetecCnt;          // 欠压检测计数
-    uint16 VoltRecoverCnt;             // 过压恢复计数
-	  uint8  IbusOffsetProtectTimes;     //偏执电压保护次数
-	  uint16 CurrentGP03Count; 
 
-}PFCFaultVarible;
 
 typedef struct
 {
@@ -106,10 +84,8 @@ typedef struct
 }FaultVarible;
 
 extern FaultStateType     xdata    mcFaultSource;
-extern PFCFaultStateType  xdata    PFCFaultSource;
 extern ProtectVarible     xdata    mcProtectTime;
 extern FaultVarible       idata    mcFaultDect;
-extern PFCFaultVarible    idata    PFCFaultDect;
 
 
 extern void   Fault_OverUnderVoltage(void);