增量式PID控制算法的MATLAB仿真及思考
2017-08-24 13:31
239 查看
1.增量式PID算法
2.仿真程序
被控对象:
%Increment PID cuntroller
clear all;
close all;
ts=0.001;
sys=tf(400,[1,50,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
u_1=0.0;u_2=0.0;u_3=0.0;
y_1=0;y_2=0;y_3=0;
x=[0,0,0]';
error_1=0;error_2=0;
for k=1:1:1000
time(k)=k*ts;
rin(k)=1.0;
kp=8;ki=0.10;kd=10;
du(k)=kp*x(1)+kd*x(2)+ki*x(3);
u(k)=u_1+du(k);
if u(k)>=10;
u(k)=10;
end
if u(k)<=-10;
u(k)=-10;
end
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
error=rin(k)-yout(k);
u_3=u_2; u_2=u_1; u_1=u(k);
y_3=y_2; y_2=y_1; y_1=yout(k);
x(1)=error-error_1;
x(2)=error-2*error_1+error_2;
x(3)=error;
error_2=error_1;error_1=error;
end
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');
3.疑问四处
sys=tf(400,[1,50,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
4.解决
4.1 sys=tf(400,[1,50,0])
这句话是运行结果为
sys =
400
----------
s^2 + 50 s
可见功能为建立传递函数。
4.2 dsys=c2d(sys,ts,'z')
这句话是运行结果为
dsys =
0.0001967 z + 0.0001935
-----------------------
z^2 - 1.951 z + 0.9512
经查找资料,这句话的作用是将传递函数在零初始条件下取Z变换。
4.3 Z变换
n阶定常离散系统差分方程
在零初始条件下取Z变换:
dsys即Y(z)/U(z)
4.4 [num,den]=tfdata(dsys,'v')
num为dsys分子多项式系数
den为dsys分母多项式系数
4.5 yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2
就是4.3中从n阶定常离散系统差分方程变化来的。
5.总结
以上难点就是把传递函数转化为差分方程,以实现PID控制。
2.仿真程序
被控对象:
%Increment PID cuntroller
clear all;
close all;
ts=0.001;
sys=tf(400,[1,50,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
u_1=0.0;u_2=0.0;u_3=0.0;
y_1=0;y_2=0;y_3=0;
x=[0,0,0]';
error_1=0;error_2=0;
for k=1:1:1000
time(k)=k*ts;
rin(k)=1.0;
kp=8;ki=0.10;kd=10;
du(k)=kp*x(1)+kd*x(2)+ki*x(3);
u(k)=u_1+du(k);
if u(k)>=10;
u(k)=10;
end
if u(k)<=-10;
u(k)=-10;
end
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
error=rin(k)-yout(k);
u_3=u_2; u_2=u_1; u_1=u(k);
y_3=y_2; y_2=y_1; y_1=yout(k);
x(1)=error-error_1;
x(2)=error-2*error_1+error_2;
x(3)=error;
error_2=error_1;error_1=error;
end
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');
3.疑问四处
sys=tf(400,[1,50,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
4.解决
4.1 sys=tf(400,[1,50,0])
这句话是运行结果为
sys =
400
----------
s^2 + 50 s
可见功能为建立传递函数。
4.2 dsys=c2d(sys,ts,'z')
这句话是运行结果为
dsys =
0.0001967 z + 0.0001935
-----------------------
z^2 - 1.951 z + 0.9512
经查找资料,这句话的作用是将传递函数在零初始条件下取Z变换。
4.3 Z变换
n阶定常离散系统差分方程
在零初始条件下取Z变换:
dsys即Y(z)/U(z)
4.4 [num,den]=tfdata(dsys,'v')
num为dsys分子多项式系数
den为dsys分母多项式系数
4.5 yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2
就是4.3中从n阶定常离散系统差分方程变化来的。
5.总结
以上难点就是把传递函数转化为差分方程,以实现PID控制。
相关文章推荐
- BSCB 图像修复算法 Matlab 仿真-(2000)
- matlab仿真ALE算法
- 空间FFT确定目标位置算法matlab仿真
- [转]粒子滤波的Matlab仿真算法实现
- K-均值算法Matlab仿真
- 锁相放大算法的MATLAB的仿真设计
- 增量式PID的matlab仿真
- 增量式PID 的matlab仿真
- 增量式PID控制算法
- PID控制算法在仿真中的运用
- FPGA与MATLAB数据交互高效率验证算法——仿真阶段
- PID控制的MATLAB仿真(2)对PID控制的一些改进
- 基于matlab程序对PID控制算法的理解
- 通信算法之五:五种编码方式增益比较及matlab仿真验证
- PID控制的MATLAB仿真(1)
- 第2章 单层前向网络及LMS学习算法仿真实例 Matlab 实现
- 一道算法题目的思考
- 粒子滤波原理及其matlab仿真
- 熵值法确定权重算法及Matlab实现
- PID控制算法的C语言实现一 PID算法原理