#ifndef __ctrl_H
#define __ctrl_H
//通用定义


//控制相关数据集合
struct	CTRL_DATA
{
	float	fRef;			//给定数据
	float	fVal;			//反馈输入

	float	fERR_N;			    //当前误差
	float	fERR_N_pre;			    //前一次误差
	float	fERR_N_pre_pre;			    //前两次误差
	float	fERR_MAX;			    //误差限定幅值

	float	fECN_N;			    //en-(en-1) 误差微分量
	float	fECN_MAX;			    //误差微分量最大值

	float	fout;			    //控制输出量
	float	foutpre;			    //前一次控制输出量
	float	foutMax;			//输出最大值
	float	foutMin;			//输出最小值

	float	fkp;			//比例系数
	float	fki;			//积分系数
	
	float	fk1;			//比例系数
	float	fk2;			//积分系数
	float	fk3;			//比例系数

	float	fa1;			//积分系数
	float	fa2;			//积分系数
	float	fa3;			//积分系数
};

struct	CTRL_MES
{
	struct CTRL_DATA Ctrl;
	float     fSet;//设定输出量
	float     fCMD;//当前控制量
	float     fCMD_detal;//控制量和设定量每次调节量
};
struct CTRLMESS
{
	Uint16  uEnableFlag;           
	float    fdb;//四驱
	float    fprd;//周期
	
    float    fSyc_db;//同步死区
	float    fSyc_prd;//同步周期
	Uint16   uSycEnable;
	Uint16   uSycNum;
	
	Uint16   uChg_TIME;
	Uint16   uWatch_TIME;
	Uint16   uCtrType;	
	
    float    fPower_limit_cur;//限功率电流值
};


extern struct	CTRL_MES VoutCtrMes;
extern struct	CTRL_MES IoutCtrMes;
extern struct	CTRL_MES VbusCtrMes;
extern struct	CTRL_MES IbusCtrMes;
extern struct   CTRLMESS CtrlMess;



void ctrl_DATA_INIT(void);
void Ctrl_init(struct	CTRL_MES* cs);
void v_ref_fun(struct	CTRL_MES* cs);
void ctrl_DATA_INIT(void);
void Ctrl_Fun(void);
void DC_reset_fun(struct	CTRL_MES * cs,float fcmd,float fdet,float fset);
void Fun_Ctrl_Time(void);

#endif /* APP_INIT_PWM_H_ */
