#ifndef __AddFunction_H_
#define __AddFunction_H_

#include <FU68xx_5_Type.h>

typedef struct
{
    uint16 Max_ia;                     // IA的最大值
    uint16 Max_ib;                     // IB的最大值
    uint16 Max_ic;                     // IC的最大值
    uint16 Max_is;
    uint16 time;
} CurrentVarible;

typedef struct
{
    int16  mcDcbusFlt;                     // 母线电压
    int16  mcAcbusFlt;                     // 母线电压
    int16  mcAcbustime;                     // 母线电压
    int16  mcDcbus;                     // 母线电压
    int16  mcAcbus;                     // 母线电压
    int16  mcDcbus_max_temp;                     // 母线电压最大值
    int16  mcAcbus_max_temp;                     // 母线电压最大值
    int16  mcDcbus_min_temp;                     // 母线电压最小值
    int16  mcDcbus_max;                     // 母线电压最大值
    int16  mcAcbus_max;                     // 母线电压最大值
    int16  mcDcbus_min;                     // 母线电压最小值
    int16  mcDcbus_chazhi;                     // 母线电压最小值
    uint16 mcDcbus_count;
    uint16 CtrlMode;                       // 控制模式
    int16  Powerlpf;                       // 功率滤波后的值
    int16  IsRef;                  // 速度闭环PI计算结果
    
    int16  mcIqref;                        // Q轴给定电流
    int16  mcIdref;                        // Q轴给定电流
    
    int16  IqRef;                            // Q 轴参考电流
    int16  IdRef;                          // D 轴参考电流
    int16  UQFlt;                                     // UQ滤波后的值
    int16  UDFlt;                                       // UD滤波后的值
    
    int16  QoutValue;
    int16  SpeedFlt;                       // 当前速度滤波后的值
    uint16 BEmf;                           // 反电动势
    uint16 IDQFlt;
    uint16 RunStateCnt;                    // 运行状态计数
    uint16 LoopTime;                       // 外环时间
    uint16 IND_DEC_LoopTime;               // 外环时间
    uint16 ChargeStep;                     // 预充电的步骤
    uint16 State_Count;                    // 电机各个状态的时间计数
    uint16 iiqq;                    // 电机各个状态的时间计数
    uint16 iiqq2;                    // 电机各个状态的时间计数
    int16  IPMtemp;
    int16  foc_comp_temp;
    int16  STT_FOC_THECOMP;
    uint8  CurrentAlignStatus;
} FOCCTRL;


typedef struct
{
    int16  TargetValue;
    int16  ActualValue;
    int16  IncValue;
    int16  DecValue;
} MCRAMP;


typedef struct
{
    uint16 PWMARR;                   // 周期值
    uint16 PWMARR2;                   // 周期值
    int16 PWMARR_last;                   // 周期值
} PWMINPUTCAL;


typedef struct
{
    int16     yajispeed;
    int16     fengjispeed;
    int16       dianzifakaidu;
    int16     sitongfa;
    uint8     RunMode1; //运行模式
    uint8     RunMode2; //运行模式
    uint8     dianjiare;
} CONTROLCMDD;

typedef struct
{
    uint8    mcIDQtime1;
    uint8    mcIDQtime2;
    uint16   mcIDQtime3;
    uint32   mcIDQtime4;
    uint8    mcPtime1;
    uint8    mcPtime2;
    uint16   mcPtime3;
    uint32   mcPtime4;
    int16    flag;
    int16    Pflag;
} ILIMIT;

/* Exported variables ---------------------------------------------------------------------------*/
extern PWMINPUTCAL    xdata   mcPwmInput;
extern CurrentVarible xdata   mcCurVarible;
extern FOCCTRL        xdata   mcFocCtrl;
extern MCRAMP         xdata   mcSpeedRamp;
extern ILIMIT         xdata   mcIimit;
extern CONTROLCMDD    xdata   ConTrolCmd;
extern int16     Huan_temp, Guan_temp, Paiqi_temp, Yaji_temp;

extern int16 LPF_realize(int16 Xn1, int16 Xn0, int16 K);
extern int16 LPF_realize1(int16 Xn1, int16 Xn0, int16 K);
extern int16 LPF_realize2(int16 Xn1, int16 Xn0, int16 K);

extern void   Fault_Detection(void);
extern void   PFCFault_Detection(void);
extern void   TargetRef_Process(void);
extern void   Speed_response(void);
extern void   mc_ramp(MCRAMP * hSpeedramp);
extern void   STT_FOC_THECOMP_CLEAR(void);
extern void   FaultProcess(void);
extern uint32 Abs_F32(int32 value);
extern void   StarRampDealwith(void);

extern void Current_Speed_PI(void);
extern void IsLimit_Over_tect(void);
extern void IsLimit_Over_deal(void);
extern uint16 VAC_Frequency_Max(void);

#endif

