您现在的位置:首页 >> 物理 >> 内容

m一级倒立摆的动态模拟和零极点配置控制器matlab仿真

时间:2023/3/24 22:40:05 点击:

  核心提示:08_045_m,包括程序操作录像+说明文档...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJackplw

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览


3.算法概述

        倒立摆是一个开环不稳定的强非线性系统,其控制策略与杂技运动员顶杆平衡表演的技巧有异曲同工之处,目的在于使得摆杆处于临界稳定状态,是进行控制理论研究的典型实验平台。20世纪50年代,麻省理工学院的控制论专家根据火箭助推器原理设计出了第一套倒立摆实验设备,开启了最初的相关研究工作。倒立摆的种类丰富多样,按照其结构可将其分为:直线倒立摆、环形倒立摆以及平面倒立摆等,按照摆杆级数又可将其分为:一级、二级甚至三级等。

4.部分源码

...........................................................

for i=1:TT

    z1     =(A-B*Ks)*(z-zf);

    z      = z + z1*dt;

    y(:,i) = z;

    

    %动画

    x1 = z(3)-k/2+z(4)*dt*i;x2=z(3)+k/2+z(4)*dt*i;

    y1 =-4;

    y2 =-2.5;

    x4 =(x1+x2)/2+l*sin(z(1));

    y4 = y2+l*cos(z(1));

    

    t  = 0:pi/100:2*pi;

    

    %倒立摆上的球体

    x3 = x4+r*cos(t);

    y3 = y4+r*sin(t);

    axes(handles.axes1);

    plot(x3,y3,'ro',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','r',...

    'MarkerFaceColor',[0.9,0.9,0.0]);

    hold on

    %轨道

    plot([-40,40],[-4,-4],'k','linewidth',20);

    hold on

    %模拟小车

    plot([x1,x2],[y1,y1],'b','linewidth',2);

    hold on

    plot([x2,x2],[y1,y2],'b','linewidth',2);

    hold on    

    plot([x1,x2],[y2,y2],'b','linewidth',2);

    hold on    

    plot([x1,x1],[y1,y2],'b','linewidth',2);

    hold on    

    %倒立摆

    plot([(x1+x2)/2,x4],[y2,y4],'g','linewidth',3); 

    hold off

 

    xlabel('小车位移');

    ylabel('高度');

    axis([-30 30 -5 15])

    Y = [Y,(x1+x2)/2];

    axes(handles.axes2);

    plot(Y,'r','linewidth',2);

    axis([0,TT,-15,15]);

    xlabel('时间');

    ylabel('小车位移');

    pause(0.001);

    if (i==1)

        pause(0.01);

    end

    if (abs(z(1)-zf(1))<=0.001)&(abs(z(3)-zf(3))<=0.002)

        break;

    end

end

% --- Executes on button press in pushbutton8.

function pushbutton8_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton8 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

%参数

global R1;

global I1;

global R2;

global I2;

global R3;

global I3;

global R4;

global I4;

global M;

global k;

global V;

global dt;

global l;

global TT;

CC1 = R1 + sqrt(-1)*I1;

CC2 = R2 + sqrt(-1)*I2;

CC3 = R3 + sqrt(-1)*I3;

CC4 = R4 + sqrt(-1)*I4;

fid = fopen('双质量摆动系统虚拟试验软件测试报告.txt','wt');

fprintf(fid,'试验参数:          \n');

 

fprintf(fid,'01、小车宽度:  ');fprintf(fid,'%2.2f\n',k);

fprintf(fid,'02、小车速度:  ');fprintf(fid,'%2.2f\n',V);

fprintf(fid,'03、倒立摆长度:');fprintf(fid,'%2.2f\n',l);

fprintf(fid,'04、小球质量:  ');fprintf(fid,'%2.2f\n',M);

if I1 > 0

fprintf(fid,'05、零极点配置:');fprintf(fid,'%2.2f',R1); fprintf(fid,'+i*'); fprintf(fid,'%2.2f\n',abs(I1));

else

fprintf(fid,'05、零极点配置:');fprintf(fid,'%2.2f',R1); fprintf(fid,'-i*'); fprintf(fid,'%2.2f\n',abs(I1));    

end

if I2 > 0

fprintf(fid,'               ');fprintf(fid,'%2.2f',R2); fprintf(fid,'+i*'); fprintf(fid,'%2.2f\n',abs(I2));

else

fprintf(fid,'               ');fprintf(fid,'%2.2f',R2); fprintf(fid,'-i*'); fprintf(fid,'%2.2f\n',abs(I2));  

end    

if I3 > 0

fprintf(fid,'               ');fprintf(fid,'%2.2f',R3); fprintf(fid,'+i*'); fprintf(fid,'%2.2f\n',abs(I3));

else

fprintf(fid,'               ');fprintf(fid,'%2.2f',R3); fprintf(fid,'-i*'); fprintf(fid,'%2.2f\n',abs(I3));  

end    

if I4 > 0

fprintf(fid,'               ');fprintf(fid,'%2.2f',R4); fprintf(fid,'+i*'); fprintf(fid,'%2.2f\n',abs(I4));

else

fprintf(fid,'               ');fprintf(fid,'%2.2f',R4); fprintf(fid,'-i*'); fprintf(fid,'%2.2f\n',abs(I4));

end

fprintf(fid,'06、模拟时间:  ');fprintf(fid,'%2.2f\n\n',TT);

fprintf(fid,'试验结果:          \n');

fclose(fid);

08_045_m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168