复习实验课考试,遂写了一个简单的超前校正通用的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)