以动画形式绘制交流电压u(t)=Umcos(wt)的波形和对应的时间相量与瞬时值关系图(《电机模型分析及拖动仿真》第7章例7-1源程序搬运)

以动画形式绘制交流电压的波形和对应的时间相量与瞬时值关系图

  • 1.绘制空间矢量箭头的m函数
  • 2.动画形式绘制的调用

(在源程序基础上增加了保存gif的程序)

1.绘制空间矢量箭头的m函数

function DrawArrowPolar(StartAng,StartAm,EndAng,EndAm,ArrowSize,C,W,theta)
%从Start到End绘制一条带箭头的直线
if nargin==7theta=0;
elseif nargin==6theta=0;W=1;
elseif nargin==5theta=0;W=1;C='k';
elseif nargin==4theta=0;W=1;C='k';ArrowSize=EndAm*0.04;
end
hold_was_on=ishold;
Start.A=StartAng;
Start.M=StartAm;
Start.A=Start.A+theta;
[Start.X,Start.Y]=pol2cart(Start.A,Start.M);
End.A=EndAng;
End.M=EndAm;
End.A=End.A+theta;
[End.X,End.Y]=pol2cart(End.A,End.M);
if nargin<=6%只有5个参数W=1;%默认情况线宽为1%直接用极坐标绘制主线polar([Start.A,End.A],[Start.M End.M],C);hold on
else%用直角坐标绘制,以调整线宽plot([Start.X,End.X],[Start.Y,End.Y],C,'LineWidth',W);hold on
end
%箭头位置
PX=End.X-Start.X;
PY=End.Y-Start.Y;
[P.A,P.M]=cart2pol(PX,PY);
Bias=8*[1 -1];
for i=1:2PA(i).M=ArrowSize;PA(i).A = Bias(i) * pi/180 + P.A+ pi;[ PA( i).X,PA(i).Y] = pol2cart(PA( i).A,PA( i). M);PA( i).Fx = PA(i).X+ End.X;PA( i).Fy = PA(i).Y+End.Y;[PA(i).FA,PA( i).FM ] = cart2pol(PA( i).Fx, PA( i). Fy);polar([PA( i).FA,End.A],[ PA( i). FM End. M ],C);%绘制箭头
end
if hold_was_on==false%原来是hold off,还原状态hold off;
end

2.动画形式绘制的调用

 Frms = 220;%有效值
f = 50;%频率
alpha = 0 ;%初始相角
%时间为0~0.1s,采样频率为10000Hz
t=[ 0:0.02/200:0.1];
w =2 * pi* f ;%角频率
%电压波形数据
Fa = Frms * sqrt( 2) * cos( w * t+ alpha) ;
%获取信号最大值FPeak = Frms * sqrt( 2);
%放大,电压矢量的长度
FBaseValue = FPeak * sqrt( 3 ) ;
AngleCircle = [ ];%轨迹值
ReferenceAngle = pi/2;%将实部逆时针旋转90°
AS= 20 ;%箭头大小
%保存为GIF第一步………………
figure;
filename='trace.gif';
%…………………………………………………………for i= 1 : length( t)
F = Fa(i);% 电压
Ang = 2 * pi * f * t( i) + ReferenceAngle;
%左边电压
subplot( 1,2,1);
hold off
%向量正方向
DrawArrowPolar( 0, 0, ReferenceAngle, FPeak * 1.2,AS,'k ' );
hold on
%单相电压矢量
DrawArrowPolar( 0, 0 , Ang, FPeak , AS, 'r',2) ;
DrawArrowPolar( 0 , 0 , ReferenceAngle, FPeak * sin( Ang), AS, 'r',2);
plot( [ FPeak * cos(Ang), 0 ],[ FPeak * sin( Ang), FPeak * sin( Ang)], 'r-.')
%绘制轨迹.
%记录电压矢量轨迹
AngleCircle = [ AngleCircle; FPeak * cos( Ang), FPeak * sin( Ang)];
%绘制轨迹图
plot( AngleCircle( : , 1 ) , AngleCircle( :,2 ) ) ;
%标注当前时间
xlabel(['t= ' num2str( t(i))])
%右边电压瞬时值曲线
subplot( 1,2,2);
hold off
plot( t(1 :i), Fa(1 :i),'r');
hold on
grid on;
if i<200
axis([ 0, 0.03,- FBaseValue,+ FBaseValue] );
else%点数超过200,开始移动坐标轴
axis([ i/10000 - 0.02,i/10000 + 0.01,- FBaseValue,+ FBaseValue]);
end
pause(0.05);
%保存为GIF第二步……………………………………
hold on;
F=getframe(gcf);
im=frame2im(F);
[I,map]=rgb2ind(im,256);
k=i-0;
if k==1;
imwrite(I,map,filename,'gif','Loopcount',inf, 'DelayTime',0.03);
else
imwrite(I,map,filename,'gif','WriteMode','append', 'DelayTime',0.03);
end
%……………………………………………………………………
end

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部