我是靠谱客的博主 小巧电源,最近开发中收集的这篇文章主要介绍连续系统PID的Simulink仿真-2,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

仍以二阶线性传递函数为被控对象,进行模拟PID 控制。被控对象形式为,其中b为在[103,163]范围内随机变化,a为在[15,35]范围内随机变化,则被控对象的描述方式可转换为:

S函数是Simulink一项重要的功能,采用S函数可实现在Simulink下复杂控制器和复杂被控对象的编程。在仿真一的基础上,利用S函数实现上述对象的表达、控制器的设计及仿真结果的输出。

在S函数中,采用初始化、微分函数和输出函数,即 mdlInitializeSizes函数、mdlDerivatives函数和mdlOutputs函数。在初始化中采用sizes结构,选择2个输出、3个输入,3个输入实现了P、I、D三项的输入。S函数嵌入在Simulink程序中。系统初始状态为:x(0)=0,。仿真结果如图所示。

仿真图:

主程序:chap_3s.m

%S-function for continuous state equation

function [sys,x0,str,ts]=s_function(t,x,u,flag)

switch flag,

%Initialization

case 0,

[sys,x0,str,ts]-mdlInitializeSizes;

%Outputs

case 3,

sys=mdlOutputs(t,x,u);

%Unhandled flags

case {2,4,9}

sys=[1;

%Unexpected flags

otherwise

error(['Unhandled flag-',num2str(flag)D);

end

%mdllnitializeSizes

function [sys,x0,str,ts]=mdlInitializeSizes

sizes= simsizes;

sizes.NumContStates =0;

sizes.NumDiscStates=0;

sizes.NumOutputs=1;

sizes.Numlnputs-3

sizes.DirFeedthrough=1;

sizes.NumSample Times= 0;

sys=simsizes(sizes);

x0=[ ];

str=[ ];ts=[ ];

function sys=mdIOutputs(t,x,u)

error=u(1);

derror=u(2);

errori=u(3);

kp=60;

ki=1;

kd=3;

ut=kp*error+kd*derror+ki*errori;

sys(1)=ut;

被控对象程序:chap_3plant.m

%S-function for continuous state equation

function [sys,x0,str,ts]=s_function(t,x,u,flag)

switch flag,

%Initialization

case 0,

[sys,x0,str,ts]=mdllnitializeSizes;

case 1,

sys=mdlDerivatives(t,x ,u);

%Outputs

case 3,

sys=mdIOutputs(t,x,u);

%Unhandled flags

case {2,4,9}

sys =D;

%Unexpected flags

otherwise

error(TUnhandled flag =',num2str(flag)]);

end

%mdlInitializeSizes

function [sys,x0,str,ts]=mdllnitializeSizes

sizes = simsizes;

sizes.NumContStates=2;

sizes.NumDiscStates=0;

sizes.NumOutputs=1;

sizes.Numlnputs=1;

sizes.DirFeedthrough=0;

sizes.NumSampleTimes= 0;

sys=simsizes(sizes);

x0=[0.0]:

str=[ ];

ts=[ ];

function sys-mdlDerivatives(t,x,u)

sys(1)=x(2);

%sys(2)=-(25+5*sin(t))*x(2)+(133+10*sin(t))*u;

sys(2)=-(25+10*rands(1))*x(2)+(133+30*rands(1))*u;

function sys=mdlOutputs(t,x,u)

sys(1)=x(1);

作图程序:chap1_3plot.m

close all;

plot(ty(, 1).'r,ty(:,2),k:1,linewidth',2);

xlabel('time(s)');ylabel('yd.y');

legend('Tdeal position signal',Position tracking');

最后

以上就是小巧电源为你收集整理的连续系统PID的Simulink仿真-2的全部内容,希望文章能够帮你解决连续系统PID的Simulink仿真-2所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部