资源描述:
《pid算法c语言写法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、这是一个PID算法的C语言实现程序:"double sensor (void),void actuator(double rDelta,double LastrDelta )各函数的功能及语句的作用, 以及主函数里的变量j和数值a[]的设置的作用,以及for循环语句的作用,"望大家再分享的同时,给份详细注释,在线等待,大家帮助大家,^_^.#include #include typedef struct PID { /*K1=实际放大倍数,T1=实际积分时间,T2=实际微分时间,T=采样周期*/ double SetPoi
2、nt; /*定义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->T
3、1 + 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; /*微分系数*/
4、 Err = pp->SetPoint-NextPoint; /*当前误差*/ Ud = pp->T2 / ((Kd * pp->T) + pp->T2) * Ud1+ Kd * (pp->T2 + pp->T) / (Kd * pp->T + pp->T2) * Err - Kd * pp->T2 / (Kd * pp->T + pp->T2) *pp->Err1; /*微分作用*/ Ui = Ui1 + pp->K1 * (pp->T / pp->T1) * Ud; /*积分作用*/ U
5、p = pp->K1 * Ud; /*比例作用*/ Ud1=Ud; /*UD1=ud(k-1),ui1=ui(k-1)*/ Ui1=Ui;return (Ud + Up + Ui); /*y(k)*/}void PIDInit (PID *pp){ memset ( pp,0,sizeof(PID)); }/*double
6、sensor (void) { return 1.0;}*/ /*输入口*/ void actuator(double rDelta,double LastrDelta ) /*输出口*/ { double n; n=rDelta-LastrDelta;
7、 /*y(k)-y(k-1)*/ LastrDelta=rDelta; printf ("%f",n); }void main(void) { int j,a[]={15,14,12.5,10.5,5.5,6.7,9.5,11.3,9.6,10.2,10.035,9.2356,10.23