模糊PIDC语言程序_第1页
模糊PIDC语言程序_第2页
模糊PIDC语言程序_第3页
模糊PIDC语言程序_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C 语言 PID 演示程序 #include <string.h> #include<stdio.h> typedef struct PIDdouble Command; /输入指令 double Proportion; /比例系数 double Integral; /积分系数 double Derivative; /微分系数 double preErr;/ 前一拍误差double sumErr; /误差累积 PID;double PIDCale(PID *p,double feedback)double dErr,Err;Err=p->Command-feedb

2、ack; /当前误差 p->sumErr+=Err;/误差累加dErr=Err-p->preErr; / 误差微分 p->preErr=Err;return(p->Proportion*Err /比例项+p->Derivative*dErr/微分项+p->Integral*p->sumErr); /积分项void PIDInit(PID *p)memset(p,0,sizeof(PID); / 初始化typedef struct motordouble lastY;double preY;double lastU;double preU;motor;v

3、oid motorInit(motor *m)memset(m,0,sizeof(motor);double motorCal(motor *m,double u)doubley=1.9753*m->lastY-0.9753*m->preY+0.00003284*u+0.00006568*m->lastU+0.00003284*m->preU; 二阶系统m->preY=m->lastY;m->lastY=y;m->preU=m->lastU;m->lastU=u;return y;void mai n()FILE *fp=fope n

4、("data.txt","w+");PID sPID;motor m_motor;int k=0;double u;double y=0;PIDI nit(&sPID);sPID.Proportio n=2;sPID.Derivative=1;sPID.I ntegral=0.00001;sPID.Comma nd=10;motorI nit(&m _motor);while(k<=1000)? fprin tf(fp,"%d 设定值=%f 被控量=%f 偏差=%f 控制量 =%fn",k,sPID.Comma

5、nd,y,sPID.Comma nd-y,u);u=PIDCale(&sPID,y);y=motorCal(&m_motor,u);k+;prin tf("%fn",y);fclose(fp);增量式PID控制C语言代码增量式PID控制C语言代码/定义PID参数结构体/ / typedefstruct PID int int intintintintSetPoi nt Proporti on; In tegral; Derivative; LastError; PreError;结构体定义/设定值/ Proportion/ Integral/ Derivat

6、ive比例系数 积分系数 微分系数/ Error-1前一拍误差/ Error-2前两拍误差 PID;mai n()PIDPIDInit ( &vPID ); vPID.Proportion = 10; vPID.I ntegral = 10; vPID.Derivative = 10; vPID. SetPoi nt =vPID;/定义结构变量名/Initialize Structure /Set PID Coefficients / Set PID Integral / Set PID Derivative /根据实际情况设定while(1) Verror=Measure();Err

7、or =vPID. SetPoint- tempi=PIDCal(&vPID, Error; laser.Value+=tempi;/Verror;得到AD的输出值/与设定值比较,得到误差值Value与Num2为共同体,共同体名laserLASERH=laser.NumO;LASERL=laser.Num1;/Title:PID参数初始化/Descripti on: Proporti on="0"/In tegral=0/LastError=0/Input: PID的P、I控制常数和之前的误差量(PID *pp)/Return:/void PIDInit (PID

8、*pp)/PID 参数初始化,都置 0 memset ( pp,0,sizeof(PID);memset()的函数,它可以一字节一字节地把整个数组设置为一个指定的值。/ memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参 数,/第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。/其函数原型为:void *memset(void*,int,unsigned);/ 头文件 <stri ng.h>/Title:增量式PID算法程序/Description:给出一个误差增量/Input: PID的P、I控制常数和之前的误差量(PI

9、D *pp)&当前误差量(This Error)/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->Proporti on *pError+ pp->ln tegra

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论