自动控制原理频域超前校正的通用Matlab实现

        复习实验课考试,遂写了一个简单的超前校正通用的Matlab实现。给出原系统的闭环传递函数和期望指标即可设计出串联超前校正系统。只适用于比较简单的系统,代码还有待完善。

        文中21行,26行,28行的常量40为原系统Bode图中频段的斜率。

        给定系统:Gs=10/s(s+1),要求截止频率ωc*≥6rad/s ,相角裕度γ*≥60°

1.	clear  
2.	close  
3.	hold on  
4.	  
5.	sys_op.k = 10;  
6.	sys_op.num = 1;  
7.	sys_op.den = [1 1 0];  
8.	sys_op.tf = sys_op.k * tf(sys_op.num, sys_op.den);  
9.	margin(sys_op.tf)  
10.	[sys_op.gm, sys_op.pm, sys_op.wcg, sys_op.wcp] = margin(sys_op.tf);  
11.	  
12.	misc.wcRef = 7;  
13.	misc.pmRef = 60;  
14.	misc.gmRef = 10;  
15.	misc.pmTest = 5;  
16.	  
17.	[misc.mag, misc.pha] = bode(sys_op.tf, misc.wcRef);  
18.	misc.pmTest = sys_op.pm - (180 + misc.pha);  
19.	sys_ck.pm = misc.pmRef - sys_op.pm + misc.pmTest;  
20.	sys_ck.a1 = (1 + sin(deg2rad(sys_ck.pm)))/(1 - sin(deg2rad(sys_ck.pm)));      
21.	sys_ck.gm = 40*(log10(misc.wcRef/sys_op.wcp));  
22.	sys_ck.a2 = 10^(sys_ck.gm / 10);     
23.	sys_ck.a = max(sys_ck.a1, sys_ck.a2);  
24.	if sys_ck.a == sys_ck.a1          
25.	    sys_ck.gm = 10 * log10(sys_ck.a);  
26.	    sys_ck.wm = sys_op.wcp * 10^(sys_ck.gm / 40);    
27.	else  
28.	    sys_ck.gm = 40*(log10(misc.wcRef/sys_op.wcp));  
29.	    sys_ck.wm = misc.wcRef;  
30.	end  
31.	sys_ck.w1 = sys_ck.wm / sqrt(sys_ck.a);  
32.	sys_ck.w2 = sys_ck.wm * sqrt(sys_ck.a);  
33.	sys_ck.num = [1/sys_ck.w1 1];  
34.	sys_ck.den = [1/sys_ck.w2 1];  
35.	sys_ck.tf = tf(sys_ck.num, sys_ck.den);  
36.	  
37.	sys = series(sys_ck.tf, sys_op.tf)  
38.	margin(sys)  
39.	[gm, pm, wcg, wcp] = margin(sys)  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值