1、增量式PID控制C语言代码增量式PID控制公式:上面u(k)是控制量增量,“增量式PID”就是直接以这个增量进行控制。至于参数的整定,根据响应的情况调,比如,响应慢了,我就增大kp,或者减小kd,超调大了,就减小kp或增大点kd,这个规律你可以看看PID三个参数的作用:)/ 定义PID参数结构体/typedef struct PID /结构体定义 int SetPoint /设定值 int Proportion; / Proportion 比例系数 int Integral; / Integral 积分系数 int Derivative; / Derivative 微分系数 int LastE
2、rror; / Error-1 前一拍误差 int PreError; / Error-2 前两拍误差 PID;main() PID vPID; /定义结构变量名PIDInit ( &vPID ); /Initialize StructurevPID.Proportion = 10; /Set PID Coefficients vPID.Integral = 10; / Set PID Integral vPID.Derivative = 10; / Set PID Derivative vPID. SetPoint = /根据实际情况设定 while(1) Verror=Measure();
3、 /得到AD的输出值 Error =vPID. SetPoint- Verror; /与设定值比较,得到误差值tempi=PIDCal(&vPID, Error; laser.Value+=tempi; / Value与Num2为共同体,共同体名laserLASERH=laser.Num0;LASERL=laser.Num1; /Title:PID参数初始化/Description: Proportion=0/ Integral=0/ LastError=0/Input: PID的P、I控制常数和之前的误差量(PID *pp)/Return:/void PIDInit (PID *pp) /P
4、ID参数初始化,都置0 memset ( pp,0,sizeof(PID);/memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。/ memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参数,/第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。/其函数原型为:void *memset(void*,int,unsigned);/头文件 /Title:增量式PID算法程序/Description:给出一个误差增量/Input: PID的P、I控制常数和之前的误差量(PID *pp)& 当前误差量(ThisError)/
5、Return: 误差增量templ/int PIDCal( PID *pp, int ThisError )/增量式PID算法(需要控制的不是控制量的绝对值,而是控制量的增量) int pError,dError,iError;long templ; pError = ThisError-pp-LastError; iError = ThisError; dError = ThisError-2*(pp-LastError)+pp-PreError;/增量计算 templ=pp-Proportion*pError + pp-Integral*iError+pp-Derivative*dError; /增量 /存储误差用于下次运算 pp-PreError = pp-LastError; pp-LastError = ThisError; return (int)(templ8);