/**
 * @copyright (C) COPYRIGHT 2022 Fortiortech Shenzhen
 * @file      Protect.h
 * @author    Marcel He
 * @note      Last modify author is Marcel He
 * @since     2022-07-01
 * @date      2022-07-14
 * @brief     This file contains protection parameter used for Motor Control.
 */


/* Define to prevent recursive inclusion -------------------------------------------------------- */
#ifndef __PROTECT_H_
#define __PROTECT_H_

#define OC_SW_ProtectEn                     (1)                                  // 软件过流保护使能： 0,不使能；1，使能
#define OV_ProtectEn                        (1)                                  // 过欠压保护使能：   0,不使能；1，使能
#define LP_ProtectEn                        (1)                                  // 缺相保护使能：     0,不使能；1，使能
#define OT_ProtectEn                        (1)                                  // 过温保护使能：     0,不使能；1，使能
#define Start_ProtectEn                     (1)
#define Stall_ProtectEn                     (1)                                  // 堵转失速保护使能： 0,不使能；1，使能
#define GetCurrentOffsetEnable              (1)                                  // 偏置电压保护，0,不使能；1，使能
#define OverSpeedProtectEnable				(0)                                  //< 超速保护使能
#define OverLSensorEnable                   (0)
#define OverRSensorEnable                   (0)
#define OverUARTEnable                      (0)
#define OverPowerEnable                     (1)

/*  保护重启参数设置  */
#define OC_RecoveryTimes                    (100)                                  // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
#define OC_RecoveryDelayTime                (1000)                               // (ms)重启延迟时间

#define OV_RecoveryTimes                    (10)                                   // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
#define OV_RecoveryDelayTime                (1000)                                // (ms)重启延迟时间

#define LP_RecoveryTimes                    (3)                                   // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启

#define LP_RecoveryDelayTime                (3000)                                // (ms)重启延迟时间
#define LP_RecoveryDelayTime1               (60000)

#define OT_RecoveryTimes                    (20)                                   // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
#define OT_RecoveryDelayTime                (60000)                                // (ms)重启延迟时间
#define Start_RecoveryTimes                 (0)                                 // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
#define Stall_RecoveryTimes                 (255)                                 // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
#define Stall_RecoveryDelayTime             (60000*5)                                // (ms)重启延迟时间

#define LRS_RecoveryTimes                    (200)                                   // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
#define LRS_RecoveryDelayTime                (1000)                                // (ms)重启延迟时间
/* HW current protection */
#define HW_OC_FO_MODE                       (1)                                     ///< 硬件FO过流保护使能，适用于IPM有FO保护的场合
#define HW_OC_CMP_MODE                      (2)                                     ///< 硬件CMP比较过流保护使能，适用于MOS管应用场合
#define HW_OC_FOCMP_MODE                    (3)                                     ///< 硬件CMP比较和FO过流保护都使能
#define HW_OC_DISABLE                       (4)                                     ///< 硬件过流保护禁止，用于测试
#define HW_OC_MODE                          (HW_OC_CMP_MODE)                        ///< 硬件过流保护实现方式

/* 硬件过流保护比较值来源 */
#define COMPARE_DAC_MODE                    (0)                                     ///< DAC设置硬件过流值
#define COMPARE_HW_MODE                     (1)                                     ///< 硬件设置硬件过流值
#define COMPARE_MODE                        (COMPARE_DAC_MODE)                      ///< 硬件过流值的来源
#define HWOCValue                           (40.0)                                  ///< (A) DAC模式下的硬件过流值//18.0

/* 软件过流保护参数设置 */
#define SW_OC_CurrentVal                    I_Value(35.0)                            ///< (A)软件过流值
#define SW_OC_DectTime                      (100)                                    ///< (ms)软件过流检测时间

/* -----偏置电压保护----- */
#define GetCurrentOffsetValue              _Q14(0.05)                               // (单位:100%)偏置电压保护误差范围，超过该范围保护   

/* 直流母线电压保护参数设置值 */

#define OVER_VOLTAGE_DECTTIME               (100)                                   ///< (ms) 直流母线电压过压检测保持时间
#define UNDER_VOLTAGE_DECTTIME              (100)                                   ///< (ms) 直流母线电压欠压检测保持时间

#define OVER_VOLTAGE_PROTECT                UDC_Value(30.0)                          ///< (V) 直流母线电压过压保护值
#define UNDER_VOLTAGE_PROTECT               UDC_Value(9.6)                          ///< (V) 直流母线电压欠压保护值

#define OVER_VOLTAGE_RECOVER                UDC_Value(28.0)                          ///< (V) 直流母线电压过压保护恢复值            
#define UNDER_VOLTAGE_RECOVER               UDC_Value(10.6)                          ///< (V) 直流母线电压欠压保护恢复值

/* 启动保护参数设置值 */
#define StartProtectRestartTimes       (10)                                       // 启动保护重启次数，单位：次
#define StartRecoverDelay1             (30)
#define StartRecoverDelay2             (12000)//12000
#define StartProtect1EsValue           (5500)
#define StartProtect2EsValue           (2500)//500

/* 堵转保护参数设置值 */
#define STALL_SPEED_MAX                     S_Value(4500)                                                     //150000 can enter the water shortage protection 
#define STALL_SPEED_MIN                     S_Value(2200)

#define EsThresholdValueL                   (2600.0)
#define EsThresholdValueH                   (2900.0)
#define EsThresholdSpeed                    S_Value(2500)                          ///< (RPM) 电机转速


/* 缺相保护参数设置值 */
#define LP_NoLoadCurrentValue               I_Value(0.3)                            ///< (A) 相电流峰值小于该电流值则不进行缺相判断
#define LP_DectDealyTIME                    (500)                                   ///< (ms) 启动延迟检测时间，用于屏蔽启动阶段
#define LP_DectCycleTIME                    (10)                                    ///< (ms) 峰值检测周期时间,需满足覆盖至少一个完整电周期(50)

/* -----NTC过温保护----- */
#define TemperatureProtectTime                          (60000)                                                             // (ms)温度保护检测时间
#define TempeValue(res)                (short)(_Q15((5*(1000.0/(res+1000.0)))/HW_ADC_REF)) //  温度保护AD值换算
#define OVER_Temperature                                TempeValue(1014)                                        // 过温保护值100℃  100度(1014)
//#define UNDER_Temperature                             (800.0)                                     // 过温保护恢复阈值，根据NTC曲线设定，10K上拉电阻，70℃
#define OvertempRec_Value                   TempeValue(1878)
#define OvertempLimit_Value                 TempeValue(1369)

/* -----堵入风口超速保护----- */
#define  MOTOR_SPEED_OVER_RPM                           (70000)                                 ///< (RPM) 超速保护速度
#define  OVER_SpeedDetectTime                               (1400)                                  ///< (ms) 超速保护检测时间

/* -----堵入风口限速功能----- */
#define  OverSpeedLimitEnable                               (1)                                     ///< 限速功能，0，不使能，1使能
#define  MOTOR_SPEED_LIMIT_RPM                  (8000.0)                                ///< (RPM) 限速保护最大速度

#define  MOTOR_SPEED_LIMIT0_RPM                 (700.0)                                 ///< (RPM) For Lack water protection 

/* 故障显示 */
#define LED_ONTime                          (100)
#define LED_OFFTime                         (233)
#define LED_ONOFFTime                       (LED_ONTime + LED_OFFTime)
#define LED_DelayTime                       (200)
#define LED_IntervalTime                    (1000)



#endif

