#ifndef __PROTECT_H_
#define __PROTECT_H_

#define PRT_SW_OVER_CURR_EN                 (1)                                 // 软件过流
#define PRT_VDC_EN                          (1)                                 // 母线电压
#define PRT_PHASE_LOSS_EN                   (1)                                 // 缺相
#define PRT_OVER_POWER_EN                   (1)                                 // 过功率
#define PRT_OVER_TEMPER_EN                  (1)                                 // 温度
#define PRT_MOTOR_STALL_EN                  (1)                                 // 堵转
#define PRT_PWM_LOSS_EN                     (0)                                 // PWM丢失
#define PRT_UART_LOSS_EN                    (0)                                 // 串口信号丢失

#define AUTO_RECOVER_FAULT_EN               (1)                                 // 保护自恢复
#define PROTECT_RECOVER_TIME                (180)                               // (unit:s) 恢复等待时间

// 硬件过流
#define HW_OC_MODE                          (HW_OC_CMP_MODE)

// 硬件过流保护比较值来源
#define COMPARE_MODE                        (COMPARE_DAC_MODE)
#define HW_OC_VALUE                         (40.0)

// 直流母线电压保护
#define OVER_VOLTAGE_PROTECT                UDC_Value(30)
#define UNDER_VOLTAGE_PROTECT               UDC_Value(18)
#define OVER_VOLTAGE_RECOVER                UDC_Value(28)
#define UNDER_VOLTAGE_RECOVER               UDC_Value(20)

// 缺相保护参数设置值
#define PHASE_NOLOAD_CURR                   I_Value(0.1)
#define LOSS_PHASE_CYCLE                    (50)

// 过功率保护参数设置
// FOC__POW与实际功率转换公式
// FOC__POW = P * 32767 / HW_BOARD_VOLT_MAX / HW_BOARD_CURR_MAX
// HW_BOARD_VOLT_MAX 732
// HW_BOARD_CURR_MAX 6.25
#define OVER_POWER_VALUE                    (200.0)
#define OP_DECTTIME                         (10000)

// 软件过流保护参数设置
#define BUS_CURR_PROT_VALUE                 I_Value(35.0)
#define BUS_CURR_DECTTIME                   (30)

// 堵转保护参数设置
// 200RPM 1310 1000RPM 5600
#define STALL_SPEED_MAX                     S_Value(5000)
#define STALL_SPEED_MIN                     S_Value(1500)
#define ES_THRESHOLD_LOW                    (2000.0)
#define ES_THRESHOLD_HIGH                   (3000.0)
#define ES_THRESHOLD_SPEED                  S_Value(2000)


// 温度保护 (CMFA103F3950FB)
// 80°C - 1.228kΩ | 95°C - 0.783kΩ
// Q15 = 32767 * Res / (10K + Res)
#define TEMP_PROT_VALUE                     TEMPER_VALUE(0.783) // (kΩ) 过温阈值 (≈95°C)
#define TEMP_RECOVER_VALUE                  TEMPER_VALUE(1.249) // (kΩ) 恢复阈值 (≈80°C)
#define TEMP_DECTTIME                       (10000)

#endif

