matlab控制算法C语言,PID算法Matlab仿真程序和C程序

《PID算法Matlab仿真程序和C程序》由会员分享,可在线阅读,更多相关《PID算法Matlab仿真程序和C程序(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=1kp=10;ki=0.1;kd=15; rin(k)=1; %Step Signalelseif S=2kp=10;ki=0.1;kd=15; %Sine Signalrin(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)=110u(k)=110;endif u(k)=10u(k)=10;e。

3、ndif u(k)#includetypedef 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-feedback; /当前误差p-sumErr+=Err; /误差累加dErr=Err-p-preErr; /误差微分p-。

4、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;void motorInit(motor *m)memset(m,0,sizeof(motor);double motorCal(motor *m,double u)dou。

5、ble 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=0;PIDInit(&sPID);sPID.Proportion=2;sPID.Derivative=1;sPID.Integ。

6、ral=0.00001;sPID.Command=10;motorInit(&m_motor);while(k/Title:增量式PID算法程序/Description:给出一个误差增量/Input: PID的P、I控制常数和之前的误差量(PID *pp)& 当前误差量(ThisError)/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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值