当前位置:首页 > MATLAB与系统仿真 - 图文
Kp=[0.9*(T/tau)+0.082]/K;
Ti=T*[3.33*(tau/T)+0.3*(tau/T)^2]/[1+2.2*(tau/T)]; elseif PID==3,
Kp=[1.24*(T/tau)+0.1612]/K;
Td=T*[0.27*(tau/T)]/[1+0.13*(tau/T)]; elseif PID==4,
Kp=[1.35*(T/tau)+0.27]/K;
Ti=T*[2.5*(tau/T)+0.5*(tau/T)^2]/[1+0.6*(tau/T)]; Td=T*[0.37*(tau/T)]/[1+0.2*(tau/T)]; end switch PID case 1,Gc=Kp;
case 2,Gc=tf([Kp*Ti Kp],[Ti 0]); case 3,Gc=tf([Kp*Td Kp],1); case 4,nn=[Kp*Ti*Td Kp*Ti Kp]; dd=[Ti 0]; Gc=tf(nn,dd); end
调用的子程序kttau.m
function [K,T,tau]=kttau(G) % MATLAB FUNCTION PROGRAM kttau.m %
K=dcgain(G);
[Kc,Pm,Wcg,Wcp]=margin(G);
tau=1.6*pi/(3*Wcg);T=0.5*Kc*K*tau; ktt=0;
if finite(Kc), x0=[tau;T]; while ktt==0
ww1=Wcg*x0(1);ww2=Wcg*x0(2);
FF=[K*Kc*(cos(ww1)-ww2*sin(ww1))+1+ww2^2;sin(ww1)+ww2*cos(ww1)]; J=[-K*Kc*Wcg*sin(ww1)-K*Kc*Wcg*ww2*cos(ww1),...
-K*Kc*Wcg*sin(ww1)+2*Wcg*ww2;Wcg*cos(ww1)-Wcg*ww2*sin(ww1),Wcg*cos(ww1)];
x1=x0-inv(J)*FF; if norm(x1-x0)<1e-8, ktt=1; else,x0=x1; end
tau=x0(1);T=x0(2); end
12
end
运行主程序,得出结果 Gc1 =
9.7294
Transfer function: 732.2 s + 7.45 -------------- 98.28 s
Transfer function: 193.3 s + 10.55
Transfer function:
4.244e004 s^2 + 1774 s + 12.06 ------------------------------ 147.2 s
运行程序后,得到用Cohen-Coon公式计算的P、PI、PID校正器校正后,其阶跃给定响应曲线。如下图示:
Cohen-Coon公式计算的三种校正阶跃给定响应曲线
13
四、对于传递函数为G?1s?2?s?12的归一化二阶系统,制作一个能绘制该
系统单位阶跃响应的图形用户界面。本例演示要求分别采用纯MATLAB程序(参考例10.1-1所示)和GUI控件(参考例10.6.2-1所示)两种形式来实现,要求写出两种不同实现方式的详细设计步骤,要有程序代码和界面设置截图。(本题30分)
具体技术要求:
(1)主体图形界面与《图形用户界面GUI制作.doc》中例10.1-1和例
10.6.2-1的显示界面大体类似,起始阻尼比设置为0.707,并在按【Enter】键后,在轴上画出默认的相应的红色曲线,坐标范围:X轴[0,20];Y轴[0,2.5]。
(2)菜单有【Options】选项,在菜单【Options】下,有2个下拉菜单项
【Box on】和【Box off】;缺省时默认为Box off 状态(参考例10.1-1 和例10.6.2-1)。
(3)在点击【Grid on】或【Grid off】按键时,在轴上画出或删除“分格
线”;缺省时,无分格线。
(4)所设计的界面和其上的图形对象、控件对象都按比例缩放,位置可以
任意放置。
(5)创建一个与该曲线相联系的现场菜单能随时改变曲线的颜色,要求能
设置改变5种不同的颜色(参考例10.3.4-1)。
(6)在该界面中,采用滚动条的方式来改变阻尼比的大小,起始阻尼比设
置为0.707,阻尼比可在[0.02,2.02]中连续调节,标志当前阻尼比的值;标志峰值时间和大小;标志(响应从0到0.95所需的)上升时间(参考例10.4.3.2-1)。
【解】
1、纯MATLAB程序 (1) 输入下面程序 clf reset
H=axes('unit','normalized','position',[0,0,1,1],'visible','off');
set(gcf,'currentaxes',H); str='归一化二阶系统的阶跃响应曲线';
text(0.12,0.93,str,'fontsize',13); h_fig=get(H,'parent');
set(h_fig, 'MenuBar','none')
h_menu=uimenu(gcf,'label','Options');
h_sub3=uimenu(h_menu,'label','box on','callback','box on',...
'separator','on'); h_sub4=uimenu(h_menu,'label','box off','callback','box off');
14
set(h_fig,'unit','normalized','position',[0.1,0.2,0.7,0.4]);
h_axes=axes('parent',h_fig,...
'unit','normalized','position',[0.1,0.15,0.55,0.7],... 'xlim',[0 20],'ylim',[0 1.8],'fontsize',8) 得到下面图形
在上一段程序后加入
h_text=uicontrol(h_fig,'style','text',...
'unit','normalized','position',[0.67,0.73,0.25,0.14],... 'horizontal','left','string',{'系统阻尼比','zeta ='}); h_edit=uicontrol(h_fig,'style','edit',...
'unit','normalized','position',[0.67,0.59,0.25,0.14],... 'horizontal','left',... 'callback',[...
'z=str2num(get(gcbo,''string''));',... 't=0:0.1:15;',...
15
共分享92篇相关文档