pid算法matlab仿真程序和c程序.doc

上传人:小** 文档编号:89126566 上传时间:2019-05-19 格式:DOC 页数:6 大小:35.50KB
返回 下载 相关 举报
pid算法matlab仿真程序和c程序.doc_第1页
第1页 / 共6页
pid算法matlab仿真程序和c程序.doc_第2页
第2页 / 共6页
pid算法matlab仿真程序和c程序.doc_第3页
第3页 / 共6页
pid算法matlab仿真程序和c程序.doc_第4页
第4页 / 共6页
pid算法matlab仿真程序和c程序.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《pid算法matlab仿真程序和c程序.doc》由会员分享,可在线阅读,更多相关《pid算法matlab仿真程序和c程序.doc(6页珍藏版)》请在金锄头文库上搜索。

1、增量式PID控制算法Matlab仿真程序设一被控对象G(s)=50/(0.125s2+7s),用增量式PID控制算法编写仿真程序(输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:-5,5,仿真曲线包括系统输出及误差曲线,并加上注释、图例)。程序如下clear all;close all; ts=0.001;sys=tf(50,0.125,7, 0);dsys=c2d(sys,ts,z);num,den=tfdata(dsys,v); u_1=0.0;u_2=0.0;y_1=0.0;y_2=0.0;x=0,0,0;error_1=0;error_2=0;for k=1:1:100

2、0time(k)=k*ts; S=2;if S=1 kp=10;ki=0.1;kd=15; rin(k)=1; %Step Signalelseif S=2 kp=10;ki=0.1;kd=15; %Sine Signal rin(k)=0.5*sin(2*pi*k*ts); end du(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controlleru(k)=u_1+du(k);%Restricting the output of controllerif u(k)=5 u(k)=5;endif u(k)=110 u(k)=110;endif u(k)=10 u(k)

3、=10;endif u(k)=-10u(k)=-10;endu_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);error_1=error(k);endfigure(1);plot(time,rin,b,time,yout,r);xlabel(time(s);ylabel(rin,yout);figure(2);plot(time,u,r);xlabel(time(s);ylabel(u);figure(3);plot(time,rin-yout,r);xlabel(time(s);ylabel(error)

4、;figure(4);bode(Q,r);dcgain(Q);C语言PID演示程序#include #includetypedef struct PID double Command; /输入指令 double Proportion; /比例系数 double Integral; /积分系数 double Derivative; /微分系数 double preErr; /前一拍误差 double sumErr; /误差累积PID;double PIDCale(PID *p,double feedback) double dErr,Err; Err=p-Command-feedback; /当

5、前误差 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 motor double lastY; double preY; double lastU; double preU;motor;void motorInit(motor *m) me

6、mset(m,0,sizeof(motor);double motorCal(motor *m,double u) double y=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 main() FILE *fp=fopen(data.txt,w+); PID sPID; motor m_motor; int k=0; double u; double y

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号