Matlab中控制系统仿真的简单方法
Matlab中有丰富的控制方程解算与控制函数,但这些函数应用起来略感不自由,我习惯用matlab代码做控制系统的仿真,虽然比较繁琐,但好在可以随心所欲。以一个经典的二阶系统为例,说明一下控制系统仿真方法。
一个经典的质量-弹簧-阻尼系统,如图

系统方程是:

是一个一元二阶常微分方程。对该系统的仿真有很多种方法,比如可以转换成S函数,写出传函

设num=1;
den=[m b k];
形成系统 sys=tf(num,den);
然后就可以研究控制性能了,如研究阶跃响应
Step(sys),复杂响应 lsim(sys,u,t);
但。。。。 不知道说啥原因,习惯问题吧,我喜欢掌控每一个环节,所以常用以下方法实现控制系统的仿真。
首先:将微分方程转换为状态空间:

再配合龙哥库塔发求数值积分。
直接上代码吧
参数:m=5;b=4;k=3; F=sin(t)
function SolveControl
dt=0.1; % 仿真补偿
tmax=30; %仿真时间
u=0; %控制信号初始化
x0=0; %状态初始化
X=zeros(2,tmax/dt); %保存每一步的状态
X(:,1)=x0;
for i=1:tmax/dt
u=sin(i*dt);
K1=dt*dynamic(X(:,i),u); % 4阶龙格库塔
K2=dt*dynamic(X(:,i)+1/2*K1,u);
K3=dt*dynamic(X(:,i)+1/2*K2,u);
K4=dt*dynamic(X(:,i)+K3,u);
X(:,i+1)=X(:,i)+(K1+2*K2+2*K3+K4)/6;
end
t=1:dt:tmax+1;
plot(t,X(1,:),'r.-');
xlabel('T(s)');
ylabel('X');
end
function XX=dynamic(x,u) % 动力学模型+控制
m=5;b=4;k=3;
XX(1,:)=x(2,:); % 状态空间表达
XX(2,:)=-k/m*x(1,:)-b/m*x(2,:)+1/m*u;
end
得到的仿真结果如图所示

作为对比,以下是用matlab函数
num=1;
den=[5 4 3];
sys=tf(num,den);
t=0:0.1:30;
u=sin(t);
lsim(sys,u,t);
生成的曲线

结果是一样的
最后
以上就是丰富外套最近收集整理的关于matlab step函数_Matlab中控制系统仿真的简单方法的全部内容,更多相关matlab内容请搜索靠谱客的其他文章。
发表评论 取消回复