avery 7 tháng trước cách đây
mục cha
commit
36fc6e70bf

+ 3 - 8
KeilC51/Fortior.uvopt

@@ -150,20 +150,15 @@
         <Ww>
           <count>1</count>
           <WinNumber>1</WinNumber>
-          <ItemText>McStaSet</ItemText>
-        </Ww>
-        <Ww>
-          <count>2</count>
-          <WinNumber>1</WinNumber>
           <ItemText>motorControl,0x0A</ItemText>
         </Ww>
         <Ww>
-          <count>3</count>
+          <count>2</count>
           <WinNumber>1</WinNumber>
           <ItemText>mcFaultSource</ItemText>
         </Ww>
         <Ww>
-          <count>4</count>
+          <count>3</count>
           <WinNumber>1</WinNumber>
           <ItemText>mcState</ItemText>
         </Ww>
@@ -354,7 +349,7 @@
       <GroupNumber>1</GroupNumber>
       <FileNumber>3</FileNumber>
       <FileType>1</FileType>
-      <tvExp>0</tvExp>
+      <tvExp>1</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\User\Application\Control.c</PathWithFileName>

+ 3 - 1
User/Application/Interrupt.c

@@ -64,6 +64,7 @@ void DRV_ISR(void) interrupt 3
     if (ReadBit(DRV_SR, DCIF))    // 比较中断
     {
         Fault_Overcurrent(); //软件过流保护
+		#if 0 
         #if (FiledWeakenCompEnable)
         {
             FiledWeakenControl(FOC__UD, FOC__UQ, udc.WeakenUsRef, mcFocCtrl.IsRef);
@@ -90,6 +91,7 @@ void DRV_ISR(void) interrupt 3
         #if (VoltageCompensationEn)
         VoltageCompensation();//电压补偿
         #endif
+		#endif
         DRV_SR = (DRV_SR | SYSTIF) & (~DCIF);
     }
 }
@@ -105,7 +107,7 @@ void SYStick_INT(void) interrupt 10
     {
         IsTick = true;
         
-        if (mcFocCtrl.State_Count > 0)
+        if (mcFocCtrl.State_Count)
         { mcFocCtrl.State_Count--; }
         
         DRV_SR = (DRV_SR | DCIF) & (~SYSTIF);// 清零标志位

+ 3 - 2
User/Application/main.c

@@ -59,11 +59,12 @@ void SoftwareInit(void)
     /*************外部控制环************/
     memset(&mcFocCtrl, 0, sizeof(FOCCTRL));             // mcFocCtrl变量清零
     mcFocCtrl.mcDcbus_chazhi = 32760;
-    /**************************电流偏置校准变量**********************/
-    memset(&mcCurOffset, 0, sizeof(CurrentOffset));    // mcCurOffset变量清零
+	// 电流校准变量初始化
+    memset(&mcCurOffset, 0, sizeof(CurrentOffset));
     mcCurOffset.IuOffsetSum = 16383;
     mcCurOffset.IvOffsetSum = 16383;
     mcCurOffset.Iw_busOffsetSum = 16383;
+	
     /*****速度环的响应***/
     memset(&mcSpeedRamp, 0, sizeof(MCRAMP));          // mcSpeedRamp变量清零
     mcSpeedRamp.IncValue = Motor_Speed_Inc;

+ 24 - 25
User/Function/FocControl.c

@@ -27,9 +27,9 @@ void Motor_Control_State(void)
     {
         case mcReady:
         {
-            if (McStaSet.SetFlag.CalibFlag == 0)
+            if (mcCurOffset.CalibFlag == 0)
             {
-                McStaSet.SetFlag.CalibFlag = 1;
+                mcCurOffset.CalibFlag = 1;
                 ClrBit(DRV_CR, FOCEN);
                 MOE = 0;
                 SetBit(ADC_MASK, CH1EN | CH0EN);
@@ -50,9 +50,9 @@ void Motor_Control_State(void)
         
         case mcInit:
         {
-            if ((mcFocCtrl.mcDcbusFlt > _Q15(Under_Protect_Voltage / HW_BOARD_VOLT_MAX)))
+            //if ((mcFocCtrl.mcDcbusFlt > _Q15(Under_Protect_Voltage / HW_BOARD_VOLT_MAX)))
             {
-                // 关闭软件电流采样的ADC  FOC模块会自动调用相应ADC 无需外部使能
+                // 关闭软件电流采样的ADC
                 ClrBit(ADC_MASK, CH1EN | CH0EN);
                 mcFaultSource = 0;
                 memset(&mcFaultDect, 0, sizeof(FaultVarible));
@@ -60,32 +60,27 @@ void Motor_Control_State(void)
                 mcFocCtrl.mcDcbus_chazhi = 32760;
                 McStaSet.SetMode = 0;
                 memset(&VoltageComp, 0, sizeof(VOLCOMP));
+                // PI控制器初始化
                 HW_Zero_PI_Init();
                 HW_One_PI_Init();
                 #if (FiledWeakenCompEnable)
                 memset(&mcFieldWeaken, 0, sizeof(FieldWeakeningTypeDef));
                 #endif
                 // 此模块不需要预充电
+                #if 0
                 mcState = mcCharge;
+                mcFocCtrl.ChargeStep = 0;
+                mcFocCtrl.State_Count = 0;
+                #else
+                mcState = mcAlign;
+                mcFocCtrl.State_Count = Align_Time;
+                #endif
             }
-            
             break;
         }
         
         case mcCharge:
         {
-            if ((mcFocCtrl.State_Count == 0) && (mcFocCtrl.ChargeStep !=5 ))
-            {
-                    mcFocCtrl.ChargeStep ++;
-                    mcFocCtrl.State_Count = 30;
-                #if (1)
-            
-                if (mcFocCtrl.ChargeStep == 4)
-                { mcFocCtrl.ChargeStep = 5; }
-                
-                #endif
-            }
-            
             switch (mcFocCtrl.ChargeStep)
             {
                 case 0:
@@ -125,17 +120,21 @@ void Motor_Control_State(void)
                 
                 case 4:
                 {
+                    #if (1)
+                    DRV_CMR |= 0x3F;
+                    #else
                     MOE = 0;
-                    mcState = mcCharge;
+                    mcState = mcAlign;
                     mcFocCtrl.State_Count = Align_Time;
+                    #endif
                     break;
                 }
-                
-                case 5:
-                {
-                    DRV_CMR |= 0x3F;
-                    break;
-                }
+            }
+            
+            if ((mcFocCtrl.State_Count == 0) && (mcFocCtrl.ChargeStep != 4 ))
+            {
+                mcFocCtrl.ChargeStep ++;
+                mcFocCtrl.State_Count = 30;
             }
             
             break;
@@ -253,5 +252,5 @@ void Tick_Task(void)
         motorControl.BackEMF = 0;
     }
     
-    StarRampDealwith();
+    // StarRampDealwith();
 }

+ 52 - 63
User/Function/FocControlFunction.c

@@ -2,12 +2,6 @@
 
 CurrentOffset xdata mcCurOffset;
 
-/*---------------------------------------------------------------------------*/
-/*  Name     :   void FOC_Init(void)
-    /* Input    :   NO
-    /* Output   :   NO
-    /* Description: mcInit状态下,对FOC的相关寄存器进行配置,先清理寄存器,后配置,最后使能
-    /*---------------------------------------------------------------------------*/
 void FOC_Init(void)
 {
     DRV_CMR = 0x0ABF;
@@ -172,52 +166,47 @@ void Motor_Align(void)
     if (McStaSet.SetFlag.AlignSetFlag == 0)
     {
         McStaSet.SetFlag.AlignSetFlag = 1;
-        /*FOC初始化*/
-        FOC_Init();
-        /*配置预定位的电流、KP、KI*/
-        FOC_IDREF = 0;//ID_Align_CURRENT;
-        FOC_IQREF = 0;//IQ_Align_CURRENT;
-        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;
-        //        /*配置预定位角度*/
-        //        FOC__THETA  = 0;//Align_Theta;
-        /*********PLL或SMO**********/
-        #if (EstimateAlgorithm == SMO)
-        FOC__ETHETA   = FOC__THETA - 4836;
-        #elif (EstimateAlgorithm == PLL)
-        FOC__ETHETA   = FOC__THETA;
-        #endif //end    EstimateAlgorithm
-        /*使能输出*/
-        DRV_CMR |= 0x0abF;      // U、V、W相上下互补输出 FTC6805
-        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)) /* Ramp 1s */
+    if (mcFocCtrl.State_Count > (AlignmentHoldTime1 + AlignmentHoldTime2)) 
     {
         mcFocCtrl.CurrentAlignStatus = 0;
-        FOC__THETA      = Align_Angle1;
-        FOC_IDREF       = ID_Align_CURRENT_End * (Align_Time - mcFocCtrl.State_Count) / AlignmentRampTime;
+        FOC__THETA = Align_Angle1;
+        FOC_IQREF = ID_Align_CURRENT_End * (Align_Time - mcFocCtrl.State_Count) / AlignmentRampTime;
     }
-    else if (mcFocCtrl.State_Count > AlignmentHoldTime2)             /* Hold 900ms*/
+    else if (mcFocCtrl.State_Count > AlignmentHoldTime2)
     {
         mcFocCtrl.CurrentAlignStatus = 1;
-        FOC__THETA      = Align_Angle1;
-        FOC_IDREF       = ID_Align_CURRENT_End;
+        FOC__THETA = Align_Angle1;
+        FOC_IQREF = ID_Align_CURRENT_End;
     }
-    else if (mcFocCtrl.State_Count > 0)             /* Hold */
+    else if (mcFocCtrl.State_Count > 0)
     {
         mcFocCtrl.CurrentAlignStatus = 2;
-        FOC__THETA      = Align_Angle2;
-        FOC_IDREF       = ID_Align_CURRENT_End;
+        FOC__THETA = Align_Angle2;
+        FOC_IQREF = ID_Align_CURRENT_End;
     }
     else
-    {
-        mcState = mcStart;
-    }
+    { mcState = mcStart; }
 }
 
 /*---------------------------------------------------------------------------*/
@@ -238,7 +227,7 @@ void Motor_Open(void)
     FOC__ETHETA = FOC__THETA;
     #endif
     FOC__EOME = 0;
-    /*启动电流、KP、KI、FOC_EKP、FOC_EKI*/
+	// 配置参数
     FOC_IDREF = ID_Start_CURRENT;                         // D轴启动电流
     mcFocCtrl.mcIqref = IQ_Start_CURRENT;                 // Q轴启动电流
     mcFocCtrl.iiqq = IQ_Start_CURRENT;
@@ -248,36 +237,36 @@ void Motor_Open(void)
     FOC_QKI  = DQKIStart;
     FOC_EKP  = OBSW_KP_GAIN;
     FOC_EKI  = OBSW_KI_GAIN;
-    /*启动方式选择*/
+    /// 启动方式选择
     #if (Open_Start_Mode == Omega_Start)              // Omega 启动
-    FOC_EFREQACC  = Motor_Omega_Ramp_ACC;
-    FOC_EFREQMIN  = Motor_Omega_Ramp_Min;
-    FOC_EFREQHOLD = Motor_Omega_Ramp_End;
+    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
     #elif (Open_Start_Mode == Open_Start)
-    FOC_RTHEACC      = Motor_Open_Ramp_ACC;      // 爬坡函数的初始加速度
-    FOC__RTHESTEP    = Motor_Open_Ramp_Min;      // 0.62 degree acce speed
-    FOC_RTHECNT      = MOTOR_OPEN_ACC_CNT;       // acce time
+    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_Ramp_ACC;         // 爬坡函数的初始加速度
-    FOC__RTHESTEP = Motor_Open_Ramp_Min;         // 0.62 degree acce speed
-    FOC_RTHECNT   = MOTOR_OPEN_ACC_CNT;          // acce time
-    FOC_EFREQACC  = Motor_Omega_Ramp_ACC;
-    FOC_EFREQMIN  = Motor_Omega_Ramp_Min;
-    FOC_EFREQHOLD = Motor_Omega_Ramp_End;
+    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 //end Open_Start_Mode
-    /*不同启动方式下,切换到MCRUN状态*/
-    #if (Open_Start_Mode == Open_Start)         //OPEN状态启动时拖动多次
+    #endif
+    // 不同启动方式下,切换到MCRUN状态
+    #if (Open_Start_Mode == Open_Start)
     
     if (OpenRampCycles < (MOTOR_OPEN_ACC_CYCLE - 1))
     {
@@ -293,17 +282,17 @@ void Motor_Open(void)
         mcState = mcRun;
     }
     
-    FOC_EKP = OBSW_KP_GAIN_RUN4;                            // 估算器里的PI的KP
-    FOC_EKI = OBSW_KI_GAIN_RUN4;                            // 估算器里的PI的KI
+    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)
-    /*********PLL或SMO**********/
     mcFocCtrl.State_Count = 1200;
-    mcState   = mcRun;
+    mcState = mcRun;
     #endif
-    FOC_IQREF = mcFocCtrl.mcIqref;                          // Q轴启动电流
+	// Q轴启动电流
+    FOC_IQREF = mcFocCtrl.mcIqref; 
 }
 
 

+ 1 - 1
User/Function/Protect.c

@@ -485,7 +485,7 @@ void IOffsetRecoverEnable()
         
         if ((mcFaultDect.IbusOffsetRecoverCnt) >= IbusOffsetRecoverTime)//IbusOffsetRecoverTime*1ms
         {
-            McStaSet.SetFlag.CalibFlag = 0;
+            mcCurOffset.CalibFlag = 0;
             mcFaultDect.IbusOffsetRecoverCnt = 0;
             mcProtectTime.IbusOffsetProtectTimes++;
             mcFaultSource = FaultNoSource;

+ 4 - 5
User/Hardware/DRIVER.c

@@ -18,7 +18,7 @@ void Driver_Init(void)
     DRV_ARR = PWM_VALUE_LOAD ;      // 载波频率的周期值
     DRV_DTR = PWM_LOAD_DEADTIME;    // 死区时间
     DRV_DR  = 0;
-    DRV_CMR = 0x0abf;              //UH/VH/WH UL/VL/WL 互补
+    DRV_CMR = 0x0A800;              //UH/VH/WH UL/VL/WL 互补
     DRV_OUT = 0x00;                //空闲电平,默认高电平有效
     // 驱动电平配置
     #if (PWM_LEVEL_MODE == HIGH_LEVEL)
@@ -39,12 +39,11 @@ void Driver_Init(void)
         00:不产生中断        01:上升方向
         10:下降方向         11:上升/下降方向
     *************************************************/
-    SetBit(DRV_SR, DCIM1);
-    ClrBit(DRV_SR, DCIM0);
+    SetReg(DRV_SR, DCIM0 | DCIM1, DCIM1);
     // 设置DRV计数器的比较匹配值,当DRV计数值与COMR相等时,根据DRV_SR寄存器的DCIM是否产生比较匹配事件
     DRV_COMR = (PWM_VALUE_LOAD >> 3);
-    SetBit(IP0, PDRV1);
-    SetBit(IP0, PDRV0);
+    // 优先级配置为最高
+    SetBit(IP0, PDRV1 | PDRV0);
     ClrBit(DRV_SR, DCIP);
     ClrBit(DRV_CR, FOCEN);
     // MESEL为0,ME模块工作在BLDC模式

+ 2 - 5
User/Hardware/GPIO.c

@@ -182,13 +182,10 @@ void Power_In_Control(void)
         
         case POWER_RUN:
         {
-            #if 0
-        
-            // 暂不释放复位
+			#if 1
             if (mcFaultSource == FaultNoSource)
             { PRE_DRIVER_RST = 1;  }
-            
-            #endif
+			#endif
         }
     }
 }

+ 14 - 6
User/Hardware/UART.c

@@ -86,13 +86,21 @@ void Dabug_Data_Update(void)
         *(_IO uint16_t xdata *)(&DebugDat +  4) = 0x3800;
         *(_IO uint16_t xdata *)(&DebugDat +  6) = (mcCurOffset.IuOffset >> 8) | (mcCurOffset.IuOffset << 8);
         *(_IO uint16_t xdata *)(&DebugDat +  8) = (mcCurOffset.IvOffset >> 8) | (mcCurOffset.IvOffset << 8);
-        #if 0
-        switch_temp = (uint16_t)motorControl.uPhaseCurr;
-        *(_IO uint16_t xdata *)(&DebugDat + 10) = (switch_temp >> 8) | (switch_temp << 8);
-        switch_temp = (uint16_t)motorControl.vPhaseCurr;
+        *(_IO uint16_t xdata *)(&DebugDat + 10) = (motorControl.DCBus >> 8) | (motorControl.DCBus << 8);
+        switch_temp = (uint16_t)FOC__ID;
         *(_IO uint16_t xdata *)(&DebugDat + 12) = (switch_temp >> 8) | (switch_temp << 8);
-        #endif
-        *(_IO uint16_t xdata *)(&DebugDat + 14) = (motorControl.DCBus >> 8) | (motorControl.DCBus << 8);
+        switch_temp = (uint16_t)FOC__IQ;
+        *(_IO uint16_t xdata *)(&DebugDat + 14) = (switch_temp >> 8) | (switch_temp << 8);
+        switch_temp = (uint16_t)FOC__IA;
+        *(_IO uint16_t xdata *)(&DebugDat + 16) = (switch_temp >> 8) | (switch_temp << 8);
+        switch_temp = (uint16_t)FOC__IB;
+        *(_IO uint16_t xdata *)(&DebugDat + 18) = (switch_temp >> 8) | (switch_temp << 8);
+        switch_temp = (uint16_t)FOC__IC;
+        *(_IO uint16_t xdata *)(&DebugDat + 20) = (switch_temp >> 8) | (switch_temp << 8);
+        switch_temp = (uint16_t)FOC_IDREF;
+        *(_IO uint16_t xdata *)(&DebugDat + 22) = (switch_temp >> 8) | (switch_temp << 8);
+        switch_temp = (uint16_t)FOC_IQREF;
+        *(_IO uint16_t xdata *)(&DebugDat + 24) = (switch_temp >> 8) | (switch_temp << 8);
         flen = DebugDat[4] + DebugDat[5] * 256;
         
         // 计算校验

+ 40 - 49
User/include/Customer.h

@@ -16,7 +16,7 @@
 #define ID_Limit                       I_Value(-Psi/LD/2)
 
 // ------------------------------------------------------------------------------------------------------------------
-// 2.硬件相关:载波频率(KHz) 死区(us) 单电阻最小窗口(us) 驱动电平 基准电压(V) 
+// 2.硬件相关:载波频率(KHz) 死区(us) 单电阻最小窗口(us) 驱动电平 基准电压(V)
 #define PWM_FREQUENCY                  (5.0)
 #define PWM_DEADTIME                   (5.0)
 #define MIN_WIND_TIME                  (5.9)
@@ -30,16 +30,12 @@
 // ------------------------------------------------------------------------------------------------------------------
 // 3.其他
 
-
-
 #define HW_RSHUNT                      (0.04)                                  // (Ω)  采样电阻
 
 
 #define RV1                            (940.0)                                  // (kΩ) 母线电压分压电阻1
 #define RV2                            (940.0)                                  // (kΩ) 母线电压分压电阻2
 #define RV3                            (0.3)                                    // (kΩ) 母线电压分压电阻3
-#define VC1                            (1.0)                                    // 电压补偿系数
-#define RV                             ((RV1 + RV2 + RV3) / RV3)                // 分压比
 
 
 #define RL1                            (450.0)                                  // (kΩ) 母线电压分压电阻1
@@ -51,12 +47,12 @@
 #define Udcmax_ms                      (20.0* PWM_FREQUENCY )                       //  60*ms读取一次UDC最大值和最小值         
 
 
-/*预充电设置值-------------------------------------------------------------------*/
+// 预充电设置值
 #define Charge_Time                    (100) //30                              // (ms) 预充电时间,单位:ms
 #define Calib_Duty                     (0.1)                                   // 预充电占空比
 
 
-/*正常运行时估算算法的参数设置值-------------------------------------------------*/
+// 正常运行时估算算法的参数设置值
 #define OBS_KSLIDE                     _Q15(0.85)  //0.65                     // SMO算法里的滑膜增益值
 #define E_BW1                          (80.0)                                 // PLL算法里的反电动势滤波值
 #define E_BW2                          (80.0)                                 // PLL算法里的反电动势滤波值
@@ -67,16 +63,16 @@
 #define AlignTestMode                  (0)                                     // 预定位测试模式
 
 
-#define DQKP_Alignment					_Q12(2.0)
-#define DQKI_Alignment					_Q15(0.05)
+#define DQKP_Alignment                  _Q12(2.0)
+#define DQKI_Alignment                  _Q15(0.05)
 
-#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 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)
-#define Align_Angle2					_Q15((float)90.0 / 180.0)
-#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)
 #define AlignmentHoldTime1              (500.0)
@@ -98,39 +94,36 @@
 #define ATO_BW_RUN3                    (160.0)
 #define ATO_BW_RUN4                    (190.0)
 
-
-#define SPD_BW                         (25.0)                                   // 速度带宽的滤波值,经典值为5.0-40.0
-#define ATT_COEF                       (0.95)                                  // 无需改动
-/*转速参数值-------------------------------------------------------------------*/
-/* motor start speed value */
 //open 算法启动参数
-#define MOTOR_OPEN_ACC                 (1.0)  //30.0                                // 强拖启动的增量(每载波周期加一次)
-#define MOTOR_OPEN_ACC_MIN             (100.0)    //20.0                           // 强拖启动的初始速度
-#define MOTOR_OPEN_ACC_CNT             (250.0)     //100.0                    // 强拖启动的执行次数(MOTOR_OPEN_ACC_CNT*256)
-#define MOTOR_OPEN_ACC_CYCLE           (100)           //5             // 强拖启动循环拖动的次数
+#define MOTOR_OPEN_ACC                 _Q15(1.0 / MOTOR_SPEED_BASE)             // 强拖启动的增量(每载波周期加一次)
+#define MOTOR_OPEN_ACC_MIN             _Q15(100.0 / MOTOR_SPEED_BASE)           // 强拖启动的初始速度
+#define MOTOR_OPEN_ACC_CNT             (250.0)                                  // 强拖启动的执行次数(MOTOR_OPEN_ACC_CNT*256)
+#define MOTOR_OPEN_ACC_CYCLE           (100)                                    // 强拖启动循环拖动的次数
 
 //OMEGA启动参数
-#define Motor_Omega_Ramp_ACC           (300.0) //(50.00) //5.0  //60                                // omega启动的增量   12
-#define MOTOR_OMEGA_ACC_MIN            (200.0) //(800.0) //20.0 //100                                // (RPM) omega启动的最小切换转速
-#define MOTOR_OMEGA_ACC_END            (400.0)   //50.0                               // (RPM) omega启动的限制转速
+#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_END             _Q15(400.0 / MOTOR_SPEED_BASE)          // (RPM) omega启动的限制转速
 
+#define Motor_Open_Ramp_ACC             _Q15(MOTOR_OPEN_ACC     / MOTOR_SPEED_BASE)
+#define Motor_Open_Ramp_Min             _Q15(MOTOR_OPEN_ACC_MIN / MOTOR_SPEED_BASE)
 
-#define TARGET_SPEED_SET				_Q15(2000.0/MOTOR_SPEED_BASE)
 
-#define MOTOR_SPEED_SMOMIN_RPM         (400.0)
-#define MOTOR_LOOP_RPM					_Q15(500.0 / MOTOR_SPEED_BASE)
 
+#define TARGET_SPEED_SET                _Q15(2000.0/MOTOR_SPEED_BASE)
 
-#define MOTOE_MIN_SPEED					_Q15(900.0/ MOTOR_SPEED_BASE)
-#define MOTOR_MAX_SPEED					_Q15(5400.0/ MOTOR_SPEED_BASE)
-#define MOTOR_STALL_MIN_SPEED			_Q15(800.0/ MOTOR_SPEED_BASE)
-#define MOTOR_STALL_MAX_SPEED			_Q15(7000.0/ MOTOR_SPEED_BASE)
-#define MOTOR_STOP_SPEED				_Q15(1300.0/ MOTOR_SPEED_BASE)
+#define MOTOR_SPEED_SMOMIN_RPM         (400.0)
+#define MOTOR_LOOP_RPM                  _Q15(500.0 / MOTOR_SPEED_BASE)
 
 
+#define MOTOE_MIN_SPEED                 _Q15(900.0/ MOTOR_SPEED_BASE)
+#define MOTOR_MAX_SPEED                 _Q15(5400.0/ MOTOR_SPEED_BASE)
+#define MOTOR_STALL_MIN_SPEED           _Q15(800.0/ MOTOR_SPEED_BASE)
+#define MOTOR_STALL_MAX_SPEED           _Q15(7000.0/ MOTOR_SPEED_BASE)
+#define MOTOR_STOP_SPEED                _Q15(1300.0/ MOTOR_SPEED_BASE)
+
 
 
-/*******运行时的参数*****************/
 /*电流环参数设置值--------------------------------------------------------------*/
 /*启动*/
 #define DQKPStart                      _Q12(2.5)  //1.1                             
@@ -168,7 +161,7 @@
 #define SKPRun2                        _Q12(0.30)//0.15  太大高速时波动,太小
 #define SKIRun2                        _Q15(0.01) //0.0002  // 外环KI  
 
-#define SOUTMAX                        I_Value(60.0)  //7.0  //16                       // (A) 外环最大限幅值
+#define SOUTMAX                        I_Value(5.0) // (A) 外环最大限幅值
 #define SOUTMIN                        I_Value(0.0)  //0.02                         // (A) 外环最小限幅值
 
 #define I_OVER                         I_Value(78.0) //   降频点  超过此值降频率
@@ -188,16 +181,14 @@
 #define Motor_Speed_Dec1               (S_Value(SPEED_DEC1))     /(1000/SPEED_INC_DEC_TIME)
 
 
-#define MotorStartHoldTime				(15000)                                 //上油时间  15000
-#define Motor_Start_Hold_Speed			_Q15(2700.0 / MOTOR_SPEED_BASE)
-
+#define MotorStartHoldTime              (15000)                                 //上油时间  15000
+#define Motor_Start_Hold_Speed          _Q15(2700.0 / MOTOR_SPEED_BASE)
 
 
-#define OUT_LOOP_CONTROL				(0)
-#define LOOP_MODE						(SPEED_CONTROL_MODE)
 
-
-#define CONTROL_MODE					(UARTMODE) 
+#define OUT_LOOP_CONTROL                (0)
+#define LOOP_MODE                       (SPEED_CONTROL_MODE)
+#define CONTROL_MODE                    (NONEMODE)
 
 
 
@@ -207,10 +198,10 @@
 
 
 // 弱磁控制
-#define FiledWeakenCompEnable			(0)
-#define DcbusK							_Q15(0.8)
-#define FiledWeakenKp					_Q12(0.4)
-#define FiledWeakenKi					_Q15(0.0001)
+#define FiledWeakenCompEnable           (0)
+#define DcbusK                          _Q15(0.8)
+#define FiledWeakenKp                   _Q12(0.4)
+#define FiledWeakenKi                   _Q15(0.0001)
 
 
 #define IFFDebugg                      (0)            //  强拖测试模式 
@@ -225,6 +216,6 @@
 #define VAC_Min                           _Q15((290.0*1.414) / HW_L_VOLT_MAX)
 #define VAC_Max                           _Q15((360.0*1.414) / HW_L_VOLT_MAX)
 #define VAC_Max_K                        ((float)(VAC_Max_F-VAC_Min_F)/(float)(VAC_Max-VAC_Min))
-	
+
 
 #endif

+ 115 - 82
User/include/Definition.h

@@ -16,7 +16,7 @@
 #define CCW                             (1)
 
 // 基准电压
-#define VREF3_0                         (0xA0)          
+#define VREF3_0                         (0xA0)
 #define VREF4_0                         (0xB0)
 #define VREF4_5                         (0xC0)
 #define VREF5_0                         (0xD0)
@@ -28,7 +28,7 @@
 #define UP_L_DOWN_H                     (0xD0)
 
 // 电流采样模式
-#define Single_Resistor                 (0xA0)                                     
+#define Single_Resistor                 (0xA0)
 #define Double_Resistor                 (0xB0)
 #define Three_Resistor                  (0xC0)
 
@@ -53,20 +53,20 @@
 #define _Q14(A)                         (int16)((A) * 0x3fff)       // Q14 128*128= 18383
 #define _Q15(A)                         (int16)((A) * 0x7fff)       // Q15 128*256= 32767
 #define _Q16                            (65535.0)                   // Q16 
-#define _2PI                            (3.1415926 * 2) 
+#define _2PI                            (3.1415926 * 2)
 
 // 双电阻采样周期配置
-#define DouRes_1_Cycle                  (0xA0)						// 周期采样完 ia, ib
-#define DouRes_2_Cycle                  (0xB0)						// 交替采用ia, ib, 2周期采样完成
+#define DouRes_1_Cycle                  (0xA0)                      // 周期采样完 ia, ib
+#define DouRes_2_Cycle                  (0xB0)                      // 交替采用ia, ib, 2周期采样完成
 
 // SVPWM模式
 #define SVPWM_5_Segment                 (0xA0)
 #define SVPWM_7_Segment                 (0xB0)
 
 // 估算器
-#define SMO                            	(0xA0)
-#define PLL                            	(0xB0)
-#define AO                             	(0xC0)
+#define SMO                             (0xA0)
+#define PLL                             (0xB0)
+#define AO                              (0xC0)
 
 // 开环启动模式选择
 #define Open_Start                      (0xA0)
@@ -74,44 +74,61 @@
 #define Open_Omega_Start                (0xC0)
 
 //调速模式
-#define UARTMODE                       	(0xA0)
-#define NONEMODE                       	(0xB0)
+#define UARTMODE                        (0xA0)
+#define NONEMODE                        (0xB0)
 
 // 外环
 #define POWER_CONTROL_MODE              (0xA0)
-#define SPEED_CONTROL_MODE				(0xB0)
+#define SPEED_CONTROL_MODE              (0xB0)
 
 // ------------------------------------------------------------------------------------------------------------------
 // 2.电机控制参数定义与配置
 
-#define MCU_CLOCK						(24.0)
+#define MCU_CLOCK                       (24.0)
 
-#define PWM_LEVEL_MODE                 	(HIGH_LEVEL)
+#define DLL_TIME                        (1.3)            // 双电阻最小脉宽设置(us),建议值为死区时间值+0.2us以上
+#define OVERMOD_TIME                    (2.0)            // 三电阻过调制时间(us),建议值2.0
+#define DT_TIME                         (1.0)            // 死区补偿时间(us)适用于双电阻和三电阻,建议值是1/2死区时间
+#define GLI_TIME                        (0.5)            // 桥臂窄脉宽消除(us),建议值0.5
 
-// DQ轴最大限幅值
-#define DOUTMAX                        	_Q15(0.99)
-#define DOUTMIN                        	_Q15(-0.99)
-#define QOUTMAX                        	_Q15(0.99) 
-#define QOUTMIN                        	_Q15(-0.99)
+#define PWM_CYCLE                       (1000.0 / PWM_FREQUENCY)                      // 周期us
+#define SAMP_FREQ                       (PWM_FREQUENCY * 1000)                        // 采样频率(HZ)
+#define TPWM_VALUE                      (1.0 / SAMP_FREQ)                             // 载波周期(S)
+#define PWM_VALUE_LOAD                  (uint16)(MCU_CLOCK * 1000 *2 / PWM_FREQUENCY) // PWM 定时器重载值
 
-// 过调制
-#define OverModulation                 	(0)
+#define PWM_LOAD_DEADTIME               (PWM_DEADTIME * MCU_CLOCK)             // 死区设置值
+#define PWM_OVERMODULE_TIME             (OVERMOD_TIME * MCU_CLOCK / 2)         // 过调制时间
+#define PWM_DLOWL_TIME                  (DLL_TIME * MCU_CLOCK / 2)             //下桥臂最小时间
+
+#define PWM_TS_LOAD                     (uint16)(_Q16 / PWM_CYCLE * MIN_WIND_TIME / 16)            // 单电阻采样设置值
+#define PWM_DT_LOAD                     (uint16)(_Q16 / PWM_CYCLE * DT_TIME / 16)                  // 死区补偿值
+#define PWM_TGLI_LOAD                   (uint16)(_Q16 / PWM_CYCLE * (GLI_TIME + PWM_DEADTIME) / 16)  // 最小脉冲
+
+#define BASE_FREQ                       ((MOTOR_SPEED_BASE / 60) * Pole_Pairs)  // 基准频率
+
+
+#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 EstimateAlgorithm              	(AO)
-#define Open_Start_Mode                	(Omega_Start)
-#define Shunt_Resistor_Mode            	(Double_Resistor)
 
 
 #define LPF_K(K)                        _Q15(_2PI / 1000 * K)
+#define VC1                             (1.0)
+#define RV                              ((RV1 + RV2 + RV3) / RV3)
 
 
 // 电流基准
 #define HW_BOARD_CURR_MAX               (HW_ADC_REF / 2 / HW_AMPGAIN / HW_RSHUNT)
 #define HW_BOARD_CURR_MIN               (-HW_BOARD_CURR_MAX)
-#define HW_BOARD_CURR_BASE              (HW_BOARD_CURR_MAX * 2) 
+#define HW_BOARD_CURR_BASE              (HW_BOARD_CURR_MAX * 2)
 
 // 母线电压采样分压电路
-#define HW_BOARD_VOLT_MAX               (HW_ADC_REF * RV) 
+#define HW_BOARD_VOLT_MAX               (HW_ADC_REF * RV)
 #define HW_BOARD_VOLTAGE_BASE           (HW_BOARD_VOLT_MAX / 1.732)
 #define HW_BOARD_VOLTAGE_VC             ((RV1 + RV2 + RV3 * VC1) / (RV3 * VC1))
 #define HW_BOARD_VOLTAGE_BASE_Start     (HW_ADC_REF * HW_BOARD_VOLTAGE_VC / 1.732)
@@ -119,25 +136,41 @@
 #define I_ValueX(Curr_Value)            (Curr_Value * HW_RSHUNT * HW_AMPGAIN / (HW_ADC_REF))
 #define I_Value(Curr_Value)             _Q15(I_ValueX(Curr_Value))
 
+// 速度带宽的滤波值,经典值为5.0-40.0
+#define SPD_BW                          (25.0)
+#define ATT_COEF                        (0.95)
+
+
+// 过调制
+#define OverModulation                  (0)
+
+#define EstimateAlgorithm               (AO)
+#define Open_Start_Mode                 (Omega_Start)
+#define Shunt_Resistor_Mode             (Double_Resistor)
+
+#define CalibENDIS                      (1)
+#define SVPMW_Mode                      (SVPWM_7_Segment)
+#define DouRes_Sample_Mode              (DouRes_1_Cycle)
+
 // ------------------------------------------------------------------------------------------------------------------
 // 3.其他宏定义
 
-#define LED_PIN							(GP03)
-#define LED_ON							(LED_PIN = 0)				// LED 点亮
-#define LED_OFF							(LED_PIN = 1)				// LED 熄灭
-#define LED_OFF_STATE					(LED_PIN == 1)				// LED 熄灭状态
-#define LED_TOGGLE						(LED_PIN = ~LED_PIN)		// LED 翻转
+#define LED_PIN                         (GP03)
+#define LED_ON                          (LED_PIN = 0)               // LED 点亮
+#define LED_OFF                         (LED_PIN = 1)               // LED 熄灭
+#define LED_OFF_STATE                   (LED_PIN == 1)              // LED 熄灭状态
+#define LED_TOGGLE                      (LED_PIN = ~LED_PIN)        // LED 翻转
 
 
 
-#define VDCBUS_ADC						ADC2_DR						// 高压直流
-#define VACBUS_ADC						ADC3_DR						// 高压交流
-#define NTC1_ADC						ADC6_DR						// NTC1
-#define NTC2_ADC						ADC7_DR						// NTC2
-#define IGBT_NTC_ADC					ADC11_DR					// IGBT
+#define VDCBUS_ADC                      ADC2_DR                     // 高压直流
+#define VACBUS_ADC                      ADC3_DR                     // 高压交流
+#define NTC1_ADC                        ADC6_DR                     // NTC1
+#define NTC2_ADC                        ADC7_DR                     // NTC2
+#define IGBT_NTC_ADC                    ADC11_DR                    // IGBT
 
-#define PRE_DRIVER_RST					GP04						// 驱动复位
-#define MAIN_RELAY						GP51						// 母线主继电器
+#define PRE_DRIVER_RST                  GP04                        // 驱动复位
+#define MAIN_RELAY                      GP51                        // 母线主继电器
 
 
 
@@ -148,17 +181,17 @@
 // LED控制
 typedef struct
 {
-	enum
-	{
-		LED_STATE_OFF,                              // 熄灭
-		LED_STATE_ON,                               // 常亮
-		LED_STATE_BLINK_FAULT,                      // 故障闪烁
-		LED_STATE_POST_FAULT_DELAY                  // 延时等待
-	}LedState ;
-	
-	uint16_t PauseDelayCnt;
-	uint8_t BlinkCnt;
-}LED_Control_t;
+    enum
+    {
+        LED_STATE_OFF,                              // 熄灭
+        LED_STATE_ON,                               // 常亮
+        LED_STATE_BLINK_FAULT,                      // 故障闪烁
+        LED_STATE_POST_FAULT_DELAY                  // 延时等待
+    } LedState ;
+    
+    uint16_t PauseDelayCnt;
+    uint8_t BlinkCnt;
+} LED_Control_t;
 extern volatile LED_Control_t ledControl;
 void LED_State_Display(uint8_t Xn0);
 
@@ -166,14 +199,14 @@ void LED_State_Display(uint8_t Xn0);
 // 上电控制
 typedef  struct
 {
-	enum
-	{
-		DELAY_POWER_ON,						// 等待上电
-		DELAY_FREE_RST,						// 等待释放复位
-		POWER_RUN							// 上电完成
-	}PowerSate;
-	uint16_t PowerInCnt;					// 上电时间计数
-}Power_Control_t;
+    enum
+    {
+        DELAY_POWER_ON,                     // 等待上电
+        DELAY_FREE_RST,                     // 等待释放复位
+        POWER_RUN                           // 上电完成
+    } PowerSate;
+    uint16_t PowerInCnt;                    // 上电时间计数
+} Power_Control_t;
 
 extern volatile Power_Control_t powerControl;
 void Power_In_Control(void);
@@ -182,32 +215,32 @@ void Power_In_Control(void);
 // 电机控制
 typedef struct
 {
-	// 模拟数据
-	uint16_t DCBus;
-	uint16_t ACBus;
-	uint16_t IGBTTemp;
-	
-	// 数据处理
-	uint16_t ACBusMax;
-	uint16_t ACBusMin;
-	
-	// 速度相关
-	int16_t RampInc;
-	int16_t RampDec;
-	int16_t TargetRef;
-	int16_t ActualRef;
-	int16_t ActualSpeed;
-	int16_t QOutRef;
-	
-	int16_t IQRef;
-	int16_t IDRef;
-	
-	// 保护相关
-	uint16_t BackEMF;
-	// 测试
-	int16_t uPhaseCurr;
-	int16_t vPhaseCurr;
-}Motor_Control_t;
+    // 模拟数据
+    uint16_t DCBus;
+    uint16_t ACBus;
+    uint16_t IGBTTemp;
+    
+    // 数据处理
+    uint16_t ACBusMax;
+    uint16_t ACBusMin;
+    
+    // 速度相关
+    int16_t RampInc;
+    int16_t RampDec;
+    int16_t TargetRef;
+    int16_t ActualRef;
+    int16_t ActualSpeed;
+    int16_t QOutRef;
+    
+    int16_t IQRef;
+    int16_t IDRef;
+    
+    // 保护相关
+    uint16_t BackEMF;
+    // 测试
+    int16_t uPhaseCurr;
+    int16_t vPhaseCurr;
+} Motor_Control_t;
 
 extern Motor_Control_t motorControl;
 

+ 2 - 3
User/include/Myproject.h

@@ -7,16 +7,15 @@
 #include <Customer.h>
 #include <Parameter.h>
 #include <AddFunction.h>
-#include <DMA.h>
 #include <Protect.h>
 #include <ProtectSet.h>
-#include <Parameter.h>
 #include <VoltageCompensation.h>
 
 
 // math.h包含算术运算的数学函数
 #include <math.h>                       
 #include <Definition.h>
+#include <Parameter.h>
 
 typedef enum
 {
@@ -38,7 +37,6 @@ typedef union
     uint8 SetMode;                                     // 整个配置模式使能位
     struct
     {
-        uint8 CalibFlag        :1;                     // 电流校准的标志位
         uint8 AlignSetFlag     :1;                     // 预定位配置标志位
     } SetFlag;
 }MotStaM;
@@ -76,6 +74,7 @@ typedef struct
   int32   Iw_busOffsetSum;//Iw或Ibus的偏置电压总和
   int16   OffsetCount;    //偏置电压采集计数
   int8    OffsetFlag;     //偏置电压结束标志位
+	uint8_t CalibFlag; // 偏置电压配置标志位
 }CurrentOffset;
 
 extern CurrentOffset xdata mcCurOffset;

+ 6 - 56
User/include/Parameter.h

@@ -2,60 +2,16 @@
 #define __Parameter_H_
 #include <Myproject.h>
 
-#define PWM_CYCLE                       (1000.0 / PWM_FREQUENCY)                      // 周期us
-#define SAMP_FREQ                       (PWM_FREQUENCY * 1000)                        // 采样频率(HZ)
-#define TPWM_VALUE                      (1.0 / SAMP_FREQ)                             // 载波周期(S)
-#define PWM_VALUE_LOAD                  (uint16)(MCU_CLOCK * 1000 *2 / PWM_FREQUENCY) // PWM 定时器重载值
-
-#define DLL_TIME                        (1.3)            // 双电阻最小脉宽设置(us),建议值为死区时间值+0.2us以上
-#define OVERMOD_TIME                    (2.0)            // 三电阻过调制时间(us),建议值2.0
-#define DT_TIME                         (1.0)            // 死区补偿时间(us)适用于双电阻和三电阻,建议值是1/2死区时间
-#define GLI_TIME                        (0.5)            // 桥臂窄脉宽消除(us),建议值0.5
-
-/*deadtime Parameter*/
-#define PWM_LOAD_DEADTIME               (PWM_DEADTIME * MCU_CLOCK)             // 死区设置值
-#define PWM_OVERMODULE_TIME             (OVERMOD_TIME * MCU_CLOCK / 2)         // 过调制时间
-#define PWM_DLOWL_TIME                  (DLL_TIME * MCU_CLOCK / 2)             //下桥臂最小时间
-/*single resistor sample Parameter*/
-#define PWM_TS_LOAD                     (uint16)(_Q16 / PWM_CYCLE * MIN_WIND_TIME / 16)            // 单电阻采样设置值
-#define PWM_DT_LOAD                     (uint16)(_Q16 / PWM_CYCLE * DT_TIME / 16)                  // 死区补偿值
-#define PWM_TGLI_LOAD                   (uint16)(_Q16 / PWM_CYCLE * (GLI_TIME + PWM_DEADTIME) / 16)  // 最小脉冲
-
-
 
 #define P_Power(POWER)                  _Q15(POWER*2/HW_BOARD_CURR_BASE/HW_BOARD_VOLTAGE_BASE/1.5)
-#define P_PowerReal          	         (3*((uint32)mcFocCtrl.Powerlpf*HW_BOARD_CURR_BASE*HW_BOARD_VOLTAGE_BASE))/4/32767
-#define I_IReal_10          	           (uint32)(10*HW_BOARD_CURR_BASE*mcFocCtrl.IDQFlt/1.414/1.35)/32767
-  
-/*硬件过流保护DAC值*/
-#define DAC_OvercurrentValue            (_Q8(I_ValueX(OverHardcurrentValue ))+0x7F)
-/*转矩补偿时硬件过流保护DAC值*/
-#define TorDAC_OvercurrentValue         (_Q8(I_ValueX(TorOverHardcurrentValue ))+0x7F) 
-
-
-#define BASE_FREQ                       ((MOTOR_SPEED_BASE / 60) * Pole_Pairs)  // 基准频率
-
 
-#define I_ValuePFCIAC(Curr_Value)       _Q15(Curr_Value * PFC_RSHUNT * PFC_AMPGAIN / HW_ADC_REF)
-#define DAC_PFCOvercurrentValue         _Q8(PFCOverCurrentValue * PFC_RSHUNT * PFC_AMPGAIN / HW_ADC_REF)+0x3F
-
-
-
-#define OVER_PROTECT_VALUE              _Q15(Over_Protect_Voltage  / HW_BOARD_VOLT_MAX)
-#define UNDER_PROTECT_VALUE             _Q15(Under_Protect_Voltage / HW_BOARD_VOLT_MAX)
-#define OVER_RECOVER_VALUE              _Q15(Over_Recover_Vlotage  / HW_BOARD_VOLT_MAX)
-#define UNDER_RECOVER_VALUE             _Q15(Under_Recover_Vlotage / HW_BOARD_VOLT_MAX)
+#define DAC_OvercurrentValue            (_Q8(I_ValueX(OverHardcurrentValue ))+0x7F)
 
-#define Motor_Open_Ramp_ACC             _Q15(MOTOR_OPEN_ACC     / MOTOR_SPEED_BASE)
-#define Motor_Open_Ramp_Min             _Q15(MOTOR_OPEN_ACC_MIN / MOTOR_SPEED_BASE)
 
-#define Motor_Omega_Ramp_Min            _Q15(MOTOR_OMEGA_ACC_MIN / MOTOR_SPEED_BASE)
-#define Motor_Omega_Ramp_End            _Q15(MOTOR_OMEGA_ACC_END / MOTOR_SPEED_BASE)
 
 
- #define S_Value(SpeedValue)          	_Q15(SpeedValue/MOTOR_SPEED_BASE)
+#define S_Value(SpeedValue)          	_Q15(SpeedValue/MOTOR_SPEED_BASE)
 
-/* obsever parameter set value */
 #define MAX_BEMF_VOLTAGE                ((MOTOR_SPEED_BASE*Ke)/(1000.0))
 #define MAX_OMEG_RAD_SEC                ((float)(_2PI*BASE_FREQ))
 
@@ -94,10 +50,10 @@
 #define OBSW_KP_GAIN_RUN4               _Q12(2*_2PI*ATT_COEF*ATO_BW_RUN4/BASE_FREQ)
 #define OBSW_KI_GAIN_RUN4               _Q15(_2PI*ATO_BW_RUN4*ATO_BW_RUN4*TPWM_VALUE/BASE_FREQ)
 
-#define OBS_FBASE                       _Q15(BASE_FREQ*TPWM_VALUE)         // Fbase*Tpwm*32768
-#define OBS_KLPF                        _Q15(_2PI*BASE_FREQ*TPWM_VALUE)    // 2PI*Fbase*Tpwm
-#define SPEED_KLPF                      _Q15(_2PI*SPD_BW*TPWM_VALUE)       // 2PI*SPD_BW*Tpwm
-#define OBS_EA_KS                       _Q15((2*MOTOR_SPEED_SMOMIN_RPM*_2PI*BASE_FREQ*TPWM_VALUE)/MOTOR_SPEED_BASE)     // SMO的最小速度
+#define OBS_FBASE                       _Q15(BASE_FREQ*TPWM_VALUE)
+#define OBS_KLPF                        _Q15(_2PI*BASE_FREQ*TPWM_VALUE)
+#define SPEED_KLPF                      _Q15(_2PI*SPD_BW*TPWM_VALUE)
+#define OBS_EA_KS                       _Q15((2*MOTOR_SPEED_SMOMIN_RPM*_2PI*BASE_FREQ*TPWM_VALUE)/MOTOR_SPEED_BASE)
 
 #define OBSE_PLLKP_GAIN1                _Q11(((2*ATT_COEF*_2PI*E_BW1*LD - RS)*HW_BOARD_CURR_BASE)/HW_BOARD_VOLTAGE_BASE)
 #define OBSE_PLLKI_GAIN1                _Q11((_2PI*E_BW1*_2PI*E_BW1*LD*TPWM_VALUE*HW_BOARD_CURR_BASE)/HW_BOARD_VOLTAGE_BASE)
@@ -115,10 +71,4 @@
 #define OBSE_PLLKI_GAIN5                _Q11((_2PI*E_BW5*_2PI*E_BW5*LD*TPWM_VALUE*HW_BOARD_CURR_BASE)/HW_BOARD_VOLTAGE_BASE)
 
 
-
-#define CalibENDIS                      (1)
-#define SVPMW_Mode                      (SVPWM_7_Segment)
-#define DouRes_Sample_Mode              (DouRes_1_Cycle)
-
-
 #endif

+ 13 - 11
User/include/ProtectSet.h

@@ -18,12 +18,12 @@
 #define Hardware_CMP_Protect           (2)                                     // 硬件CMP比较过流保护使能,适用于MOS管应用场合
 #define Hardware_FO_CMP_Protect        (3)                                     // 硬件CMP比较和FO过流保护都使能
 #define Hardware_Protect_Disable       (4)                                     // 硬件过流保护禁止,用于测试
-#define HardwareCurrent_Protect        (Hardware_FO_Protect)              	// 硬件过流保护实现方式
+#define HardwareCurrent_Protect        (Hardware_FO_Protect)                // 硬件过流保护实现方式
 
 /*硬件过流保护比较值来源*/
 #define Compare_DAC                    (0)                                     // DAC设置硬件过流值
 #define Compare_Hardware               (1)                                     // 硬件设置硬件过流值
-#define Compare_Mode                   (Compare_DAC)                      		  // 硬件过流值的来源
+#define Compare_Mode                   (Compare_DAC)                              // 硬件过流值的来源
 
 /*硬件过流保护值设置*/
 #define OverHardcurrentValue            (90.0)                    // (A) 正常运行时DAC模式下的硬件过流值   22  13
@@ -35,10 +35,12 @@
 
 
 /*过欠压保护值设定*/
-#define Over_Protect_Voltage           (720)                      // (V) 直流电压过压保护值
-#define Over_Recover_Vlotage           (680)                      // (V) 直流电压过压保护恢复值
-#define Under_Protect_Voltage          (100)                      // (V) 直流电压欠压保护值
-#define Under_Recover_Vlotage          (130)                      // (V) 直流电压欠压保护恢复值
+#define OVER_PROTECT_VALUE              _Q15(720.0 / HW_BOARD_VOLT_MAX)
+#define UNDER_PROTECT_VALUE             _Q15(100.0 / HW_BOARD_VOLT_MAX)
+#define OVER_RECOVER_VALUE              _Q15(680.0 / HW_BOARD_VOLT_MAX)
+#define UNDER_RECOVER_VALUE             _Q15(130.0 / HW_BOARD_VOLT_MAX)
+
+
 
 /*缺相保护值设定*/
 #define PhaseLossCurrentValue          I_Value(0.3)               // (A)  缺相电流值
@@ -61,22 +63,22 @@
 #define IbusOffsetRecoverTime          (20000)                      // (ms) 恢复时间
 
 /*启动恢复次数*/
-#define StartProtectRestartTimes        (200)                                    
+#define StartProtectRestartTimes        (200)
 /*过流恢复次数*/
 #define CurrentProtectRestartTimes      (50)
 /*堵转恢复次数*/
-#define StallProtectRestartTimes        (5) 
+#define StallProtectRestartTimes        (5)
 /*缺相恢复次数*/
-#define PhaseProtectRestartTimes        (5)  
+#define PhaseProtectRestartTimes        (5)
 /*偏执电压恢复次数*/
-#define IbusOffsetRestartTimes          (5)  
+#define IbusOffsetRestartTimes          (5)
 
 /*********PFC保护相关************/
 #define PFCIOffsetRecoverEnable        (1)                        //压机偏执恢复
 #define PFCOffsetRecoverTime           (3000)                      // (ms) 恢复时间
 
 /*PFC偏执电压恢复次数和过流恢复总次数*/
-#define PFCOffsetRestartTimes         (30)  
+#define PFCOffsetRestartTimes         (30)