#ifndef __CUSTOMER_H_
#define __CUSTOMER_H_

// ------------------------------------------------------------------------------------------------------------------
// 1.电机相关参数: 电阻(Ω) DQ电感(H) 反电动势常数(V/RPM)  转向(CW/CCW) 基准转速(RPM) 极对数
#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               (9000.0)
#define Pole_Pairs                     (3)


#define ID_Limit                       I_Value(-Psi/LD/2)

// ------------------------------------------------------------------------------------------------------------------
// 2.硬件相关:载波频率(KHz) 死区(us) 单电阻最小窗口(us) 驱动电平 基准电压(V)
#define PWM_FREQUENCY                  (5.0)
#define PWM_DEADTIME                   (5.0)
#define MIN_WIND_TIME                  (5.9)
#define HW_ADC_VREF                    (VREF5_0)
#define HW_ADC_REF                     (5.0)
// 运放配置 运放倍数
#define HW_AMP_MODE                    (AMP_NOMAL)
#define HW_AMPGAIN                     (0.5)


// ------------------------------------------------------------------------------------------------------------------
// 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 RL1                            (450.0)                                  // (kΩ) 母线电压分压电阻1
#define RL2                            (2.0)                                    // (kΩ) 母线电压分压电阻2
#define RL                             ((RL1 + RL2) / RL2)                // 分压比    
#define HW_L_VOLT_MAX                  (HW_ADC_REF * RL)                        // (V)  ADC可测得的最大母线电压  


#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算法里的反电动势滤波值
#define E_BW3                          (80.0)                                 // PLL算法里的反电动势滤波值
#define E_BW4                          (80.0)                                 // PLL算法里的反电动势滤波值
#define E_BW5                          (80.0)                                 // PLL算法里的反电动势滤波值

#define AlignTestMode                  (0)                                     // 预定位测试模式


#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(2.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 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(4.0)                            // (A) Q轴启动电流

#define Start_FOC_THECOMP              _Q15(10.0/180.0)                        //启动补偿角度

/*************Omega启动的参数***************/
#define ATO_BW                         (100.0)                               // 观测器带宽的滤波值，经典值为1.0-200.0
#define ATO_BW_RUN                     (130.0)
#define ATO_BW_RUN1                    (140.0)
#define ATO_BW_RUN2                    (150.0)
#define ATO_BW_RUN3                    (160.0)
#define ATO_BW_RUN4                    (190.0)

//open 算法启动参数
#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)                                 // 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 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                             
#define DQKIStart                      _Q15(0.01) //0.01                             
/*低速*/
#define DQKP                           _Q12(2.0)  //带载时5.0                            
#define DQKI                           _Q15(0.002)  //此值不能太大，大了后影响低速性能（与转矩补偿冲突） 
/*中速*/
#define DQKP_zhong                     _Q12(1.5)  //带载时5.0                            
#define DQKI_zhong                     _Q15(0.002)  //      
/*高速*/
#define DQKP_highspeed                 _Q12(1.5)  //4.0  切换时易导致转速波动                            
#define DQKI_highspeed                 _Q15(0.002)  //0.02  0.011                          



#define QOUTINC                        (1)

/*外环参数设置值----------------------------------------------------------------*/
#define SPEED_LOOP_TIME                (1)  //2                                  // (ms) 速度环调节周期 SPEED_INC_DEC_TIME
#define WEAK_LOOP_TIME                 (1)  //2                                  // (ms) 速度环调节周期 SPEED_INC_DEC_TIME
#define SPEED_INC_DEC_TIME             (200)                                    // (ms) 速度环爬坡周期


/*启动*/
#define SKP                            _Q12(0.65)  //0.25                            // 外环KP
#define SKI                            _Q15(0.010) //0.00251
/*低速*/
#define SKPRun                         _Q12(0.45)         //0.35                                 // 外环KP
#define SKIRun                         _Q15(0.03)    //0.03                                      // 外环KI    0.01 ，影响转矩补偿
/*中速*/
#define SKPRun1                        _Q12(0.30)//0.2  太大高速时波动，太小
#define SKIRun1                        _Q15(0.01) //0.0005   
/*高速*/
#define SKPRun2                        _Q12(0.30)//0.15  太大高速时波动，太小
#define SKIRun2                        _Q15(0.01) //0.0002  // 外环KI  

#define SOUTMAX                        I_Value(5.0) // (A) 外环最大限幅值
#define SOUTMIN                        I_Value(0.0)  //0.02                         // (A) 外环最小限幅值

#define I_OVER                         I_Value(78.0) //   降频点  超过此值降频率
#define I_LIMIT                        I_Value(77.0) //   限制电流值 
#define P_OVER                         P_Power(15180) //   降频点  超过此值降频率
#define P_LIMIT                        P_Power(15150) //   限制功率值 


/*外环增量*/
#define SPEED_INC_Start                (200.0)
#define SPEED_INC                      (200.0) //150                                // 速度环增量
#define SPEED_DEC                      (200.0) //150                                // 速度环减量
#define SPEED_DEC1                     (800.0) //150                              // 速度环减量  停机时使用
#define SpeedRampStartInc              (S_Value(SPEED_INC_Start))/(1000/SPEED_INC_DEC_TIME)
#define Motor_Speed_Inc                (S_Value(SPEED_INC))      /(1000/(SPEED_LOOP_TIME*20.0))
#define Motor_Speed_Dec                (S_Value(SPEED_DEC))      /(1000/(SPEED_LOOP_TIME*20.0))
#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 OUT_LOOP_CONTROL                (1)
#define LOOP_MODE                       (SPEED_CONTROL_MODE)
#define CONTROL_MODE                    (NONEMODE)


#define StopBrakeFlag                  (0)
#define StopWaitTime                   (2000)                                  // (ms) 刹车等待时间


// 弱磁控制
#define FiledWeakenCompEnable           (0)
#define DcbusK                          _Q15(0.8)
#define FiledWeakenKp                   _Q12(0.4)
#define FiledWeakenKi                   _Q15(0.0001)


#define IFFDebugg                      (0)            //  强拖测试模式 


#define VoltageCompensationEn           (0)//电压补偿使能位

//电压限频
#define VAC_Min_F                         900
#define VAC_Max_F                         900
#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
