Browse Source

更新

1.故障指示灯逻辑修改
2.保护恢复延长到180秒
3.代码格式化
4.送样 1A4C
avery 5 months ago
parent
commit
8f822f9ea8

+ 3 - 3
User/Application/control.c

@@ -102,11 +102,11 @@ void Compressor_Speed_Control(void)
         {
             case COMP_RETURN_OIL:
                 loopCtrl.TargetRef = RETURN_OIL_SPEED;
-			
+                
                 if (++loopCtrl.ReturnOilCnt > RETURN_OIL_TIME)
                 {
                     loopCtrl.ReturnOilCnt = 0;
-					loopCtrl.CompState = COMP_RUN; 
+                    loopCtrl.CompState = COMP_RUN;
                 }
                 
                 break;
@@ -140,7 +140,7 @@ void Get_Target_Ref(void)
     loopCtrl.TargetRef = _Q15(2000.0 / MOTOR_SPEED_BASE);
     #elif (SPEED_MODE == PWMMODE)
     Input_Capture_Calc();
-	Compressor_Speed_Control();
+    Compressor_Speed_Control();
     #elif (SPEED_MODE == STARTTEST)
     Motor_Start_Test();
     #endif

+ 1 - 2
User/Application/main.c

@@ -13,8 +13,6 @@ Fault_Check_t xdata faultCheck;
 Fault_Type_e xdata FaultSource;
 Sys_State_e xdata sysState;
 
-
-
 FOCCTRL xdata mcFocCtrl;
 
 /**
@@ -26,6 +24,7 @@ void HardwareInit(void)
 {
     CMP3_Init();
     GPIO_Init();
+    LED_GPIO_Init();
     ADC_Init();
     AMP_Init();
     // 附加配置 处理程序丢失问题 !>待验证

+ 1 - 1
User/Application/protect.h

@@ -11,7 +11,7 @@
 #define PRT_UART_LOSS_EN                    (0)                                 // 串口信号丢失
 
 #define AUTO_RECOVER_FAULT_EN               (1)                                 // 保护自恢复
-#define PROTECT_RECOVER_TIME                (5000)                              // (unit:ms) 恢复等待时间
+#define PROTECT_RECOVER_TIME                (180)                               // (unit:s) 恢复等待时间
 
 // 硬件过流
 #define HW_OC_MODE                          (HW_OC_CMP_MODE)

+ 7 - 1
User/Function/MotorProtect.c

@@ -261,7 +261,13 @@ void Motor_Fault_Handle(void)
     
     // 故障自动恢复
     #if (AUTO_RECOVER_FAULT_EN)
-    Recovery_Fault_Handle();
+    
+    if (++faultCheck.DelayRecover >= 1000)
+    {
+        faultCheck.DelayRecover = 0;
+        Recovery_Fault_Handle();
+    }
+    
     #endif
 }
 

+ 89 - 29
User/Function/led.c

@@ -7,8 +7,9 @@
 */
 
 #include <MyProject.h>
-LED_State_t ledState = LED_STATE_OFF;
-LED_Count_t ledCount;
+
+LED_Control_t ledCtrl;
+
 
 
 /**
@@ -30,7 +31,18 @@ void LED_GPIO_Init(void)
 */
 void LED_State_Display(unsigned char Xn0)
 {
-    switch (ledState)
+    // 故障指示状态下 检测到故障码清除 立刻清除故障
+    if ((ledCtrl.ledState != LED_STATE_OFF ) && (ledCtrl.ledState != LED_STATE_ON))
+    {
+        if (Xn0 == 0)
+        {
+            LED_OFF;
+            ledCtrl.ledState = LED_STATE_OFF;
+            return;
+        }
+    }
+    
+    switch (ledCtrl.ledState)
     {
         // 关闭状态
         case LED_STATE_OFF:
@@ -38,14 +50,17 @@ void LED_State_Display(unsigned char Xn0)
             // 存在故障 切入故障状态 清零计数
             if (Xn0)
             {
-                ledState = LED_STATE_BLINK_FAULT;
-                ledCount.PauseDelayCnt = 0;
-                ledCount.BlinkCnt = 0;
+                ledCtrl.ledState = LED_STATE_FAULT_HIGH_BLINK;
+                ledCtrl.PauseDelayCnt = 0;
+                ledCtrl.BlinkCnt = 0;
+                ledCtrl.FaultHighBit = Xn0 >> 4;
+                ledCtrl.FaultLowBit = Xn0 & 0x0F;
+                LED_OFF;
             }
             // 开启状态且无故障 切入开启状态并打开LED
             else if (isCtrlPowOn)
             {
-                ledState = LED_STATE_ON;
+                ledCtrl.ledState = LED_STATE_ON;
                 LED_ON;
             }
             
@@ -57,50 +72,95 @@ void LED_State_Display(unsigned char Xn0)
             // 故障或停止时 关闭LED并切回关闭状态
             if (!isCtrlPowOn || Xn0)
             {
-                ledState = LED_STATE_OFF;
+                ledCtrl.ledState = LED_STATE_OFF;
                 LED_OFF;
             }
             
             break;
             
-        // 故障指示状态
-        case LED_STATE_BLINK_FAULT:
-            ledCount.PauseDelayCnt ++;
+        // 高4位闪烁
+        case LED_STATE_FAULT_HIGH_BLINK:
+            if (ledCtrl.FaultHighBit == 0)
+            {
+                LED_OFF;
+                ledCtrl.BlinkCnt = 0;
+                ledCtrl.PauseDelayCnt = 0;
+                ledCtrl.ledState = LED_STATE_FAULT_HIGH_GAP;
+                break;
+            }
             
-            // 延时等待
-            if (ledCount.PauseDelayCnt >= 500)
+            if (++ledCtrl.PauseDelayCnt >= 500)
             {
-                ledCount.PauseDelayCnt = 0;
+                ledCtrl.PauseDelayCnt = 0;
                 LEDPinONOFF;
                 
-                // 灭灯时计数
-                if (LED_PIN)
+                if (LED_PIN)   // 灭灯计数
                 {
-                    ledCount.BlinkCnt ++;
+                    ledCtrl.BlinkCnt++;
                     
-                    // 完成一个周期的闪烁 切换到延时等待模式
-                    if (ledCount.BlinkCnt >= Xn0)
-                    { ledState = LED_STATE_POST_FAULT_DELAY; }
+                    if (ledCtrl.BlinkCnt >= ledCtrl.FaultHighBit)
+                    {
+                        LED_OFF;
+                        ledCtrl.BlinkCnt = 0;
+                        ledCtrl.ledState = LED_STATE_FAULT_HIGH_GAP;
+                    }
                 }
             }
             
-            // 故障清除后 立刻回到熄灭状态
-            if (!Xn0)
+            break;
+            
+        // 高低位间隔 1s
+        case LED_STATE_FAULT_HIGH_GAP:
+            if (++ledCtrl.PauseDelayCnt >= 1000)
+            {
+                ledCtrl.PauseDelayCnt = 0;
+                ledCtrl.ledState = LED_STATE_FAULT_LOW_BLINK;
+            }
+            
+            break;
+            
+        // 低4位闪烁
+        case LED_STATE_FAULT_LOW_BLINK:
+            if (ledCtrl.FaultLowBit == 0)
             {
                 LED_OFF;
-                ledState = LED_STATE_OFF;
+                ledCtrl.BlinkCnt = 0;
+                ledCtrl.PauseDelayCnt = 0;
+                ledCtrl.ledState = LED_STATE_FAULT_CYCLE_GAP;
+                break;
+            }
+            
+            if (++ledCtrl.PauseDelayCnt >= 500)
+            {
+                ledCtrl.PauseDelayCnt = 0;
+                LEDPinONOFF;
+                
+                if (LED_PIN)
+                {
+                    if (++ledCtrl.BlinkCnt >= ledCtrl.FaultLowBit)
+                    {
+                        LED_OFF;
+                        ledCtrl.BlinkCnt = 0;
+                        ledCtrl.ledState = LED_STATE_FAULT_CYCLE_GAP;
+                    }
+                }
             }
             
             break;
             
-        // 延迟等待
-        case LED_STATE_POST_FAULT_DELAY:
-            ledCount.PauseDelayCnt ++;
+        // 整码间隔 3s
+        case LED_STATE_FAULT_CYCLE_GAP:
+            if (++ledCtrl.PauseDelayCnt >= 3000)
+            {
+                ledCtrl.PauseDelayCnt = 0;
+                ledCtrl.ledState = LED_STATE_FAULT_HIGH_BLINK;
+            }
             
-            // 延时满足或故障清除回到关闭状态
-            if ((ledCount.PauseDelayCnt >= 1000) || (!Xn0))
-            { ledState = LED_STATE_OFF; }
+            break;
             
+        default:
+            LED_OFF;
+            ledCtrl.ledState = LED_STATE_OFF;
             break;
     }
 }

+ 14 - 10
User/Function/led.h

@@ -12,22 +12,26 @@
 #include <FU65_72.h>
 // LED指示灯控制
 // ------------------------------------------------------------------------
-typedef enum
-{
-    LED_STATE_OFF,                          // 熄灭
-    LED_STATE_ON,                           // 常亮
-    LED_STATE_BLINK_FAULT,                  // 故障闪烁
-    LED_STATE_POST_FAULT_DELAY              // 延时等待
-} LED_State_t;
 
 typedef struct
 {
+    enum
+    {
+        LED_STATE_OFF = 0,                  // 熄灭
+        LED_STATE_ON,                       // 常亮
+        LED_STATE_FAULT_HIGH_BLINK,         // 故障码高4位闪烁
+        LED_STATE_FAULT_HIGH_GAP,           // 高低位间隔 1s
+        LED_STATE_FAULT_LOW_BLINK,          // 故障码低4位闪烁
+        LED_STATE_FAULT_CYCLE_GAP           // 整个故障码显示完成,间隔 3s
+    } ledState;
+    
     uint16_t PauseDelayCnt;                 // 延时
     uint8_t BlinkCnt;                       // 当前闪烁次数
-} LED_Count_t;
+    uint8_t FaultHighBit;                   // 故障码 高位
+    uint8_t FaultLowBit;                    // 故障码 低位
+} LED_Control_t;
+extern LED_Control_t ledCtrl;
 
-extern LED_State_t ledState;
-extern LED_Count_t ledCount;
 
 void LED_GPIO_Init(void);
 void LED_State_Display(unsigned char Xn0);

+ 1 - 0
User/Function/protect_def.h

@@ -141,6 +141,7 @@ typedef struct
         uint16_t PWMLoss;
         uint16_t UartLoss;
     } RecoverCnt;
+    uint16_t DelayRecover;
 } Fault_Check_t;
 
 extern Fault_Check_t xdata faultCheck;