%Closed system approaching and zero phase error controller design
clear all;
close all;
load freq.mat;
ts=0.001;
f=FF;
for i=1:length(ph)
if ph(i)>0 ph(i)=ph(i)-360;
end
end
%Transfer function approaching
%(1)Freq parameters
w=2*pi*f; %From Hz to rad/sec
mag1=10.^(mag/20); %From dB to degree
ph1=ph*pi/180; %From degree to radian
h=mag1.*cos(ph1)+j*mag1.*sin(ph1);
%(2)Continous function
na=3; %Three ranks approaching
nb=1;
%bb and aa are real numerator and denominator of transfer function
[bb,aa]=invfreqs(h,w,nb,na); %w contains the frequency values in radians/s
display('Transfer function approaching is:');
sysx=tf(bb,aa)
[zs,ps,ks]=zpkdata(sysx,'v');
%(3)Discrete function
Gc=c2d(sysx,ts,'zoh');
zpksys=zpk(Gc);
[z,p,k]=zpkdata(zpksys,'v'); %Getting zero-pole-gain: z,p,k
display('Zeros and Poles of the Transfer function is:');
z
p
%In z-1 format
zGc=tf(Gc);
[nGc,dGc]=tfdata(zGc,'v');
zGc=filt(nGc,dGc,ts);
%(4)Magnitude and Phase to draw Bode
%Frequency response:create the complex frequency response vector: h=a+bi
h=freqs(bb,aa,w);
%Magnitude and phase
sysmag=abs(h); %Degree
sysmag1=20*log10(sysmag); %From degree to dB
sysph=angle(h); %Get radian
sysph1=sysph*180/pi; %From radian to degree
%(5)Drawing practical plant and its approach function Bode to compare
figure(1);
subplot(2,1,1);
semilogx(w,sysmag1,'r',w,mag,'b');grid on;
xlabel('Frequency(rad/sec)');ylabel('magnitude approach(dB)');
subplot(2,1,2);
semilogx(w,sysph1,'r',w,ph,'b');grid on;
xlabel('Frequency(rad/sec)');ylabel('phase approach(deg)');
figure(2);
magError=sysmag1-mag;
phError=sysph1-ph;
plot(w,phError,'r',w,magError,'b');
xlabel('Frequency(rad/sec)');ylabel('error of phase(deg) and magnitude(dB)');
%(6)Plant in zero-pole-gain format
zu=z(1); %Unstable zero point
z1=z(2);
p1=p;
p1(4)=1/zu;
k1=1;
Gctemp=zpk(z1,p1,k1,ts);
dc=dcgain(Gctemp); %Getting DC gain
k1=1/dc; %G(1)=1;
Gcn=zpk(z1,p1,k1,ts);
%(7)Design controller
Fdz=1/Gcn; %Fdz=zpk(p1,z1,1/k1,ts);
display('ZPE Controller is:');
tfdz=tf(Fdz) %z^(-3):three rank delay
[nn1,dd1]=tfdata(tfdz,'v');
nF=nn1;
dF(1)=dd1(4); %z^(-3):three rank delay
dF(2)=dd1(5);
dF(3)=dd1(1);
dF(4)=dd1(2);
dF(5)=dd1(3);
format long;
display('ZPE Controller coefficient is:');
nF
dF
save zpecoeff.mat nF dF;
%Controller
F=filt(nF,dF,ts); %Equal conversion:from z to z-1
dcgain(F);
%(8)Verify the controller
Gn=series(F,Gc); %Gn(z)=F(z)*Gc(z)
figure(3);
bode(Gn);
yk=minreal(Gn,ts); %Simpling Gn(z)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【达摩老生出品,必属精品,亲测校正,质量保证】 资源名:干扰观测器_pid控制_非线性pid鲁棒控制_线性pid控制器设计_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的开发人员
资源推荐
资源详情
资源评论
收起资源包目录
干扰观测器_pid控制_非线性pid鲁棒控制_线性pid控制器设计_matlab.zip (36个子文件)
干扰观测器_pid控制_非线性pid鲁棒控制_线性pid控制器设计_matlab
chap7_15f.m 133B
chap7_8_2.m 3KB
chap7_3.mdl 8KB
chap7_9.m 1KB
chap7_1.mdl 13KB
chap7_16eq.m 555B
chap7_15.mdl 13KB
chap7_13f.m 102B
chap7_13.m 767B
chap7_8_3.m 1KB
chap7_11.m 1KB
chap7_2.m 2KB
chap7_4f2.mdl 8KB
chap7_6.m 2KB
chap7_12.m 2KB
chap7_11f.m 135B
chap7_10.mdl 13KB
chap7_10.m 1KB
chap7_4f1.m 224B
chap7_7.mdl 11KB
chap7_8_1.m 1KB
chap7_8_0.m 721B
chap7_14f.m 102B
chap7_14.m 964B
chap7_10f.m 702B
chap7_5.m 2KB
chap7_15m.m 258B
chap7_3f.m 93B
chap7_12f.m 135B
chap7_13s.m 902B
chap7_16.m 1KB
Matlab实现无约束条件下普列姆(Prim)算法.docx 14KB
chap7_1f.m 247B
chap7_13sim.mdl 13KB
chap7_8.m 1KB
chap7_4.m 111B
共 36 条
- 1
阿里matlab建模师
- 粉丝: 3233
- 资源: 2782
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页