#include typedef struct PID { /*K1=实际放大倍数,T1=实际积分时间,T2=实际微分时
间,T=采样周期*/
double SetPoint; /*定义PID结构体*/
double K1;
double T1;
double T2;
double T;
double Err1; /*前一时刻误差,E(K-1)*/
} PID;
double PIDCalc( PID *pp, double NextPoint,double Ud1,double Ui1) /*PID计算
*/
{
double Ti,Td,Kp,Ki,Kd,Ud,Up,Ui,Err;
Ti = pp->T1 + pp->T2; /*积分时间*/
Td = (pp->T1 * pp->T2) / (pp->T1 + pp->T2); /*微分时间*/
Kp = pp->K1 * ((pp->T1 + pp->T2) / pp->T1); /*比例系数*/
Ki =pp->T / Ti * Kp; /*积分系数*/
Kd = Td / pp->T * Kp; /*微分系数*/
Err = pp->SetPoint-NextPoint; /*当前误差*/
Ud = pp->T2 / ((