下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年监理工程师之合同管理考试题库500道含完整答案【典优】
- 2026年法律常识题库200道及参考答案(夺分金卷)
- 2026年材料员之材料员基础知识考试题库300道及完整答案【名师系列】
- 2026年企业人力资源管理师之二级人力资源管理师考试题库500道附完整答案(夺冠)
- 2026年二级注册建筑师之建筑结构与设备考试题库500道含完整答案【考点梳理】
- 2026年上半年宁夏中小学教师资格考试(笔试)备考题库【有一套】
- 2026年中国历史文化知识竞赛考试题库附参考答案【达标题】
- 2026年机械员考试题库附答案【黄金题型】
- 2026年大学生计算机考试题库200道附答案(轻巧夺冠)
- 2026年材料员考试题库含答案(综合卷)
- 信息技术产品供货保障措施及质量保证计划
- 充电桩电量销售合同范本
- 设备售后服务方案(3篇)
- 协会提成管理办法
- 水库调度操作规程模板
- 酒店情况诊断报告
- GB/T 45795-2025大气颗粒物PM10、PM2.5质量浓度观测光散射法
- 2025年夏季山东高中学业水平合格考地理试卷试题(含答案)
- 爆破备案工作报告
- 企业现金流管理课件
- 旧电梯拆除合同协议书
评论
0/150
提交评论