马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 Posion 于 2016-3-24 15:50 编辑
这几天单自由度总做不出来。用Matlab做了点儿数字试验。控制对象是一个质量块,给定外力,看它的阶跃响应。
一开始的实验,zhhSys_03,位置和速度都是微分方程计算的结果,是完全精确的,自然收敛没有问题。
随后的zhhSys_04,模拟实际过程,不用计算得来的位置和速度,把每次计算得到的位置,加上正态噪声,作为位置的测量值,给比例环节;前后两次的位置测量值的差,给微分环节。此时系统会不太稳定,有震荡。
再后的zhhSys_05,06没有区别。在04的基础上,如果力是减小的,就多减一点儿,是加大的,就少加一点儿。模拟磁轴承力模型线性化的误差。这会造成最终的静态误差。
做了四组实验。
这四个图大概说明:
1、模型线性化的误差,和测量误差会造成系统的震荡和稳态误差。
2、线性化误差小而测量误差大,与线性化误差大而测量误差小,效果差不多。
3、线性化误差测量误差都大,可能根本看不到系统做出预期的动作。如图0202,本来预期它向1的方向跃升,实际却变得更小,在-0.5左右大幅震荡。在CXF04上,就好像转子贴在一侧不动了。
程序
%sysZhh_04,张华的模拟系统文件
%每个时间段用x和x'计算控制力,一个时间段内控制力不变。
%把这个文件作为一系列数字试验的基础20151111
%现在这个文件模拟一个PD控制,控制一个质量快
%这个程序比03增加了噪声
function [t,y,zao]=sysZhh_04()
opt=odeset;
opt.RelTol = 1e-8;
t=zeros(1001,1);
y=zeros(1001,2);
zao=randn(1001,1)*0.3; %产生均值为0,方差为0.04的随机数
t(1,1)=0;
y(1,:)=[0 0 ];
index=1;
global Fx;
for i=0:0.1:100-0.1
if i==0
Fx=0;
else
Fx=PD2(y(index,1)+zao(index,1),(y(index,1)+zao(index,1)-y(index-1,1)-zao(index-1,1))*10);
end
[tt,yy]=ode45(@shell_move2,[i,i+0.1],y(index,:),opt);
index=index+1;
lengthTemp = length(tt);
t(index,1)= i+0.1;
y(index,:)=yy(lengthTemp,:);
end;
function F=PD2(xx,xxx)
%PD控制计算
%第一个1是Kp,第二个1是位置的目标值,2是Kd
F=1*(1-xx)-2*xxx;
%这是一个质量快的运动方程
function dx=shell_move2(t,x)
global Fx;
dx=[x(2);
0.1*Fx]; %0.1对应质量
>> [t,y,zao]=sysZhh_06
>>plot(y(1:900,:))
转自:http://blog.sina.com.cn/s/blog_4d9f829f0102vxpp.html
|