现代控制理论实验报告_第1页
现代控制理论实验报告_第2页
现代控制理论实验报告_第3页
现代控制理论实验报告_第4页
现代控制理论实验报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MACROBUTTONMTEditEquationSection2SEQMTEqn\r\hSEQMTSec\r1\hSEQMTChap\r3\h北京航空航天大学现代控制理论实验报告倒立摆控制系统学院名称自动化专业方向学号学生姓名指导教师日期北京航空航天大学设计(目录)第I页目录TOC\h\z\u\t"标题2,1,标题3,2"1系统设计任务及技术指标 计算机控制系统设计与实现5.1模拟控制系统的设计模拟控制系统的设计是计算机控制系统设计的基础。通过模拟控制系统设计,认识整个系统的结构和组成,为实现计算机控制做准备。模拟控制系统通过调节模拟控制器上的旋钮,改变相应的参数,通过变换电路,控制小车的移动,实现摆的控制;而且,变换电路中通过差分计算,分别可以求出摆的角度和位置的微分,即角速度和速度,可在计算机中直接采样得到摆的位置、速度、转角和角速度。模拟控制电器操作面板简图如图6所示,模拟和数字控制模式可以通过开关选择,T1,T4为摆角θ和位x移运放调零拨动开关,K1、K2、X、V分别为系统摆角θ、角速度、位移x、速度v等相关参数的调节旋钮。通过模拟控制电路,控制倒立摆和小车,首先要调节小车移动位移和摆角的零点位置,具体操作如下:(1)小车调零:拨开小车位置调零开关T4,将小车置于导轨的中间位置,然后用万能表测量位移传感器电压值,适当地转动旋钮X,使万能表电压为零,拨回调零开关T4,调零结束。(2)摆杆调零:拨开调零开关T1,将使摆杆处于垂直位置,然后用万能表测量角度传感器电压值,适当地转动旋钮K1,使万能表电压为零,拨回调零开关T1,调零结束。调零是操作的关键一步,决定倒立摆最后能否处于稳定状态。摆杆调零不到垂直位置,摆杆会来回摆动,最终倒下;小车调零不到位,会使在有限长的轨道上,摆杆调整未完成,小车已移动到轨道端头,调整失败。极性调整和调零完成后,可通过旋钮调节相关参数,使倒立摆处于稳定状态。经过旋转旋钮,数次调试后得到能使倒立摆稳定的参数,其中X=9.33,V=8.00,K1=9.48,K2=8.36。通过计算机采样的得到稳定后且加入角度扰动后倒立摆系统的实时响应曲线曲线如图5.1所示。从图中可以看出通过反复的调节模拟系统中的电位计,倒立摆系统可以达到稳定的状态,且对角度的扰动具有抗扰性,但同时也存在着调节时间较长,超调较大,略微震荡的现象。这是由于模拟控制器精度有限所致。在倒立摆系统稳定后,施加位置干扰,得到此时的模拟控制系统的实时响应曲线如图5.2所示。在位置上施加0.1m的扰动,小车经过快速调整后,倒立摆系统仍旧能搞达到稳态位置,再次验证了控制器的抗干扰性能。图5.1角度扰动时模拟控制系统倒立摆实时响应曲线图5.2位移扰动时模拟控制系统倒立摆实时响应曲线5.2数字控制系统的设计实验主要研究的是通过数字控制使倒立摆处于稳定状态,包括A/D转换、D/A转换、中断、实时控制交互界面设计及相关软件设计。编译程序在TurboC编译环境下运行,通过放大电路控制倒立摆稳定。A/D转换采用12位A/D转换芯片AD574。AD574是美国模拟器件公司产的较先进的高集成度、低价格的12位逐次逼近式转换器,其转换时间为25us,可设置成双极性或单极性,转换结果可8位输出,也可先输出高8位,再输出低8位,输出有三态逻辑控制,片内还有基准电压和时钟,其结构图如图5.3所示。图5.3A/D574结构框图D/A转换采用的是12位D/A转换芯片DAC1210。DAC1210含有2个输入寄存器,一个12位DAC寄存器和D/A转换器,从而得到高精度的输出转换电压,其结构框图如图5.4所示。中断的控制,采用8259可编程中断控制器。在多中断源系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到CPU的INTR端;当CPU响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理,其内部结构框图如图5.5所示。图5.4DAC结构框图图5.58259内部结构系统的软件设计包括系统人机交互界面设计,中断软件设计等,程序流程图如图5.6所示。进入数字控制模式后初始化,运行程序进入主界面,设置控制参数K0、K1、K2、K3,打开电机,系统数字控制阶段,小车往复移动调整,使摆杆处于垂直状态,期间中断向量变化,采集到小车和摆杆变化的数据,最终将采集的数据经转换显示在图形界面上。图5.6控制系统主流程图图5.7中断程序软件结构图6系统的组装与调试6.1系统安装本装置在拆开包装箱后,应检查元件有无损坏现象.将实验装置安放在工作地点之后,把支承杆放在工作台板面中间位置,并固定好,然后将小车及摆移到导轨的中间并用支撑杆上的钩簧勾住上摆,使上,下摆吊直(处于铅垂位置)。在通电检查之前,应检查所有电气部分有无损坏现象。电源线与传感器连接的插头P5,与计算机连接的插头L5等外部接插头是否接好。通电应在设备完好情况下进行.在此之前电源开关应处于OFF位置,控制电机与功放连接线上的功放开关也应处于OFF位置。6.2系统调试6.2.1系统硬件调试(1)小车,下摆L1和上摆L2初始位置的校验(电源开关置ON)。小车初始位置的校验:先将小车置于导轨的中间位置。然后用三用表测量其位移传感器(导轨左侧的WXD7的多圈线绕电位计,阻值为10千欧)电压值,并将负极性的表笔置传感器端子2,另一表笔分别置1和3,适当地转动电位计的轴使其端子2—1间,2—3间的电压值分别为U21=+3V,U23=-3V时,然后将电位器的轴与皮带轮轴用螺钉固紧,这样就基本上保证了电位器的滑臂处在其几何中心处或电气中心处。下摆L1初始位置的校验:下摆角位移传感器是一只转角为360°的WDD35D1型的塑料导电电位器。电阻值为2k欧,适当的转动电位器的轴使其端子2—1间,2—3间的电压值分别为U2-1=-3V,U2-3=+3V时,然后将摆与电位器的轴用螺钉紧固。从而保证了滑臂处在其几何中心处或电气中心处。上摆L2初始位置的校验:校验方法与上相同。上摆的角位移传感器也是一只WDD35D!型电位器。当转动其轴使端子2—1间2—3间的电压值分别为U21=-3V,U23=+3V时,讲轴与上摆L2用螺钉紧固,以保证。滑臂处在其几何中心或电气中心处。(2)小车,下摆L1和上摆L2位移输出零位调整。在零位调整之前,一定要检查后盖板上的插头P5是否以接上。小车位移x零位的调节:首先将“X运放调零电桥调零”拨动开关T4拨向“电桥调零”处,然后旋动其左侧的“X调零”电位器的旋钮,并观察“X测量”孔处的输出电压(对地)是否为零,反复调节直至输出为零为止。下摆L1角位移θ1零位调节:先将拨动开关T1转向“电桥调零”处,然后旋动其左侧的“θ1调零”电位器的旋钮,并观察“θ1测量”孔处的输出电压(对地)是否为零,反复调节直至输出为零为止。上摆L2角位移θ2零位调节:先将拨动开关T2转向“电桥调零”处,然后旋动其左侧的“θ2调零”电位器的旋钮,并观察“θ2测量”孔处的输出电压(对地)是否为零,反复调节直至输出为零为止。都配置正确,硬件调试完成。注:T1、T2、T3、及T4、分别为,θ1,θ2,θ3,及X的“运放调零电桥调零”的拨动开关。6.2.2软件调试对编译的C程序在实验室计算机上编译,检查语法,变量类型,语句等错误,运行使其能够显示各个界面,软件编译调试结束。6.3系统性能分析及结论6.3.1计算机控制单级倒立摆系统实验结果系统调试完成后,运行控制倒立摆采集的数据,当摆杆处于竖着状态,小车能够快速移动,使摆杆保持竖直;摆杆竖直后,小车基本保持短距离往复运动,系统进入稳定状态。当给摆杆施加扰动,系统稳定状态被打破,采集的数据,小车迅速移动,往复调整,最终使摆杆处于竖直状态,系统稳定下来。实验过程中待到系统稳定后施加摆角扰动,得到的倒立摆系统实时响应曲线如图6.1所示。在稳定后的1秒钟对倒立摆摆角施加扰动,从实时响应曲线中可以看出,系统在扰动后仍能够快速地克服扰动,需要较少的调节时间就能重新达到稳态,稳态值不变,且在暂态各个状态的变化量均不是太大。而后再次在倒立摆稳态的基础上施加位移扰动,得到的倒立摆系统实时响应曲线如图6.2所示。这一干扰以重新规定小车稳态为0.1m的方式给出,所以到达新的稳态时,小车的位移应稳定在0.1m处。从图中可以看出,该控制系统在加入位移扰动后依旧能够快速地达到新的稳态,且暂态的超调量小调节时间短,具有较好的抗干扰特性。图6.1角度扰动时数字控制系统倒立摆实时响应曲线图6.2位移扰动时数字控制系统倒立摆实时响应曲线6.3.2实验结果分析及结论从上述的单级倒立摆计算机控制系统的实验结果来看,本文可以得出如下结论:从单级倒立摆计算机控制系统的实验结果中,本文所设计的闭环系统具有良好的暂态品质和稳态性能,从单级倒立摆闭环系统的实时控制响应曲线中可以看出,系统的超调量小,响应时间短,稳态误差小,无稳态震荡现象(纹波),且具有良好的抗干扰特性,满足题设中所述的要求指标。这证明了本文设计的按极点分配的全状态反馈控制器具有良好的控制性能,可以使单级倒立摆这一自然不稳定系统镇定。对于同一单级倒立摆实验装置,同样运用全状态反馈控制器,选取适当的反馈增益K,计算机控制系统的控制效果要明显优于模拟控制系统。这是由于数字控制器相较于模拟控制器具有更高的精度,且计算机的赋值要比人工调节电位计的赋值方式具有更高的准确度。本文所利用的实验平台为面向墙最左侧的那一台实验装置,使该系统镇定的反馈增益K与其他实验平台控制器的反馈增益具有较大的差异,这是由于该实验平台的电机与其他平台电机不同,本实验平台电机输出力矩较大,这就意味着本实验平台与其他及说明书上的单级倒立摆的数学模型有些差异。这也意味着根据说明书所述模型做出的仿真实验并不能对实物实验有极大的指导意义。另外,本台实验装置执行器之一的滑轮有一个失去效用,始终不动,这也是了实验结果中小车位移总是偏向一侧的部分原因。关于倒立摆闭环系统的抗扰动性能,由于稳定裕量是有限的,闭环系统对于较小的干扰具有较好的抗干扰性能,但面对较大的干扰时,却不一定能够使得系统镇定,可能最终发散,这是由系统的稳定裕量及控制器的控制能力决定的。7收获与体会倒立摆系统作为现代控制理论中最典型系统之一,历来是各个新兴控制算法的试金石。仅在我实验中所阅读的文献中,就已发现国内外恒河沙数的倒立摆系统控制算法,其中不乏传统经典的PID,LQR,极点配置控制器,更有流行或新型的鲁棒控制器、模糊控制器以及自适应、进化智能控制算法。这令我在完成实验的同时,更如综述般地令我对控制的历史与前沿有了更多的了解与新的认识。通过这一系列的实验,我也重温了关于控制理论、微机原理和接口技术等多方面的知识。让我有机会将这些知识融会贯通,有了一次很好的结合,为以后更为复杂繁琐的控制系统设计奠定了良好的基础。在实验过程中,每当遇到难题时,袁老师都能给我们很多提示与启发,而且亲自为我们检查实验设备,对此非常感谢老师最后,本次实验也让我感受到团队协作在科研中的重要性。只有团队协作目标明确、团结紧密和工作高效才能顺利地完成科研工作。另外还有一点建议:本套实验装置虽然可以令我们对控制理论和微机接口同时重温学习。然而,该套实验装置的编程对于较为简单的全状态反馈或PID控制算法可容易完成,但对于复杂的控制算法不免繁琐,是否可以考虑半实物仿真设备。参考文献倒立摆控制系统实验说明书,袁少强计算机控制系统系列实验指导书,袁少强计算机控制系统设计与实现,郭锁凤BorlandC函数库手册或TC函数库手册附录#include<stdio.h>#include<conio.h>#include<graphics.h>#include<dos.h>#include<math.h>#defineclosegrclosegraphfloatt=0,x3=0,x1=0,zx1=0,zx3=0,x2=0,x4=0,tt=50,c,e=0,floaty0=417,y1=297,y2=177,y3=57,d[5]={57,57,177,297,417},floatu=0,ri=0,xd=0,cx=0,cx2=0,cy2=0;voidinitgr(void)/*BGI初始化*/{intgd=DETECT,gm=0;/*和gd=VGA,gm=VGAHI是同样效果*/registerbgidriver(EGAVGA_driver);/*注册BGI驱动后可以不需要.BGI文件支持运行*/initgraph(&gd,&gm,"");}voiddraw(void){floati,j,xs;chars[10];intx0=50,l=56,zs;setbkcolor(7);/*画车架子以及两个边框*/setcolor(6);setlinestyle(0,0,3);setcolor(6);setfillstyle(SOLID_FILL,0);bar(5,0,375,478);bar(380,100,630,250);setcolor(CYAN);line(410,180,610,180);setlinestyle(0,0,2);setcolor(RED);setlinestyle(0,0,3);line(x0,y0+l,x0,y0-l);line(x0,y0-l,x0-5,y0-l+5);line(x0,y0-l,x0+5,y0-l+5);/*画纵坐标与箭头*/line(x0,y0,x0+303,y0);line(x0+303,y0,x0+301,y0-5);line(x0+303,y0,x0+301,y0+5);/*画横坐标与箭头*/line(x0,y1+l,50,y1-l);line(x0,y1-l,x0-5,y1-l+5);line(x0,y1-l,x0+5,y1-l+5);/*画纵坐标与箭头*/line(x0,y1,x0+303,y1);line(x0+303,y1,x0+301,y1-5);line(x0+303,y1,x0+301,y1+5);/*画横坐标与箭头*/line(x0,y2+l,50,y2-l);line(x0,y2-l,x0-5,y2-l+5);line(x0,y2-l,x0+5,y2-l+5);/*画纵坐标与箭头*/line(x0,y2,x0+303,y2);line(x0+303,y2,x0+301,y2-5);line(x0+303,y2,x0+301,y2+5);/*画横坐标与箭头*/line(x0,y3+l,50,y3-l);line(x0,y3-l,x0-5,y3-l+5);line(x0,y3-l,x0+5,y3-l+5);/*画纵坐标与箭头*/line(x0,y3,x0+303,y3);line(x0+303,y3,x0+301,y3-5);line(x0+303,y3,x0+301,y3+5);/*画横坐标与箭头*/setlinestyle(3,0,0);settextstyle(0,1,1);for(i=x0,j=0;i<=x0+300;i=i+15){setcolor(BLUE);line(i,y0-l+10,i,y0+l-10);/*画纵虚线*/setcolor(DARKGRAY);sprintf(s,"%1.1f",j);if(j==(int)j)outtextxy(i-1,y0,s);j=j+0.5;}for(i=x0,j=0;i<=x0+300;i=i+15){setcolor(BLUE);line(i,y1-l+10,i,y1+l-10);/*画纵虚线*/setcolor(DARKGRAY);sprintf(s,"%1.1f",j);if(j==(int)j)outtextxy(i-1,y1,s);j=j+0.5;}for(i=x0,j=0;i<=x0+300;i=i+15){setcolor(BLUE);line(i,y2-l+10,i,y2+l-10);/*画纵虚线*/setcolor(DARKGRAY);sprintf(s,"%1.1f",j);if(j==(int)j)outtextxy(i-1,y2,s);j=j+0.5;}for(i=x0,j=0;i<=x0+300;i=i+15){setcolor(BLUE);line(i,y3-l+10,i,y3+l-10);/*画纵虚线*/setcolor(DARKGRAY);sprintf(s,"%1.1f",j);if(j==(int)j)outtextxy(i-1,y3,s);j=j+0.5;}settextstyle(0,0,1);for(j=y0-l+8,i=0.3;j<=y0+l-8;j=j+8){setcolor(BLUE);line(x0,j,x0+300,j);/*画横虚线*/setcolor(DARKGRAY);sprintf(s,"%1.1f",i);xs=10*i;zs=xs;if((-0.2<(xs-zs)&&(xs-zs)<0.3)||(xs-zs)<-0.8)outtextxy(10,j,s);i=i-0.05;}for(j=y1-l+8,i=0.3;j<=y1+l-8;j=j+8){setcolor(BLUE);line(x0,j,x0+300,j);/*画横虚线*/setcolor(DARKGRAY);sprintf(s,"%1.1f",i);xs=10*i;zs=xs;if((-0.2<(xs-zs)&&(xs-zs)<0.3)||(xs-zs)<-0.8)outtextxy(10,j,s);i=i-0.05;}for(j=y2-l+8,i=0.3;j<=y2+l-8;j=j+8){setcolor(BLUE);line(x0,j,x0+300,j);/*画横虚线*/setcolor(DARKGRAY);sprintf(s,"%1.1f",i);xs=10*i;zs=xs;if((-0.2<(xs-zs)&&(xs-zs)<0.3)||(xs-zs)<-0.8)outtextxy(10,j,s);i=i-0.05;}for(j=y3-l+8,i=0.3;j<=y3+l-8;j=j+8){setcolor(BLUE);line(x0,j,x0+300,j);/*画横虚线*/setcolor(DARKGRAY);sprintf(s,"%1.1f",i);xs=10*i;zs=xs;if((-0.2<(xs-zs)&&(xs-zs)<0.3)||(xs-zs)<-0.8)outtextxy(10,j,s);i=i-0.05;}setcolor(RED);settextstyle(4,0,1);outtextxy(x0+5,y0-55,"anglespeed");outtextxy(x0+5,y1-55,"angle");outtextxy(x0+5,y2-55,"carspeed");outtextxy(x0+5,y3-55,"carposition");outtextxy(x0+300,y0+2,"t/s");outtextxy(x0+300,y1+2,"t/s");outtextxy(x0+300,y2+2,"t/s");outtextxy(x0+300,y3+2,"t/s");/*画右下角与上部*/setcolor(6);setlinestyle(0,0,3);outtextxy(415,260,"InvertedPendulum");setcolor(6);setfillstyle(SOLID_FILL,0);bar(380,50,630,100);/*右上*/setcolor(5);/*右下角扯淡部分*/outtextxy(383,280,"fortesingthatwecreate");outtextxy(383,300,"upsidedownbetherightstate");outtextxy(383,320,"unstableasaerectedplate");outtextxy(383,340,"tamewhileitwasrightlypaid");outtextxy(383,360,"plentyofcontributionsitmade");outtextxy(383,380,"yetpossessinganendlessfate");outtextxy(383,400,"serveasapasswayoragate");outtextxy(383,420,"andleavenoplaceforthehate");setlinestyle(0,0,3);}voiddazh(floatx)/*-5<=x<=5*//*注意这里如果x是-1到1之间那输出的控制信号就被放大了5倍*/{intlo=0,hi=0,newlo=0,newhi=0;x=(x/5+1)/2*0xfff0;/*printf("偏移二进制码:%f\n",(unsignedint)x);*/lo=(unsignedint)(x)%256;hi=((unsignedint)x-lo)/256;/*printf("高八位:%x\n",(unsignedint)hi);printf("低八位:%x\n",(unsignedint)lo);*/newhi=(int)(hi)%16*16+(unsignedint)hi/16;/*printf("换后高八位:%x\n",(unsignedint)newhi);*/outportb(0x314,newhi);newlo=(unsignedint)(lo)%16*16+(unsignedint)(lo)/16;/*printf("换后低八位:%x\n",(unsignedint)newlo);*/outportb(0x315,newlo);inportb(0x315);/**/}floatadzh(inta){inti=0,p=0,q=0,r=0;floatad=0,r1=0,v=0;/*outportb(0x31b,0x18);*/outportb(0x310,a);for(i=0;i<10000;i++);outportb(0x311,0x0);for(i=0;i<10000;i++);p=inportb(0x312)%16;q=inportb(0x313);r1=p*256+q;/*ad=r1/0x800-1;*/v=r1*20.0/4096-10;/*控制器输入为电压,所以ad得到的需要是电压值*//*v=(int)(v*100)%1000;v=v/100;*//*printf("浮点数:%f\n",ad);printf("电压值:%f\n",v);*/returnv;}voidinterruptmyint(){setcolor(BLACK);setlinestyle(0,0,2);cx=510+x1*200/90/2;cx2=cx+60*sin(c);cy2=180-60*cos(c);rectangle(cx-4,174,cx+4,180);circle(cx2,cy2,5);setlinestyle(0,0,3);line(cx,177,cx2,cy2);zx1=zx1+1;/*输入信号*/if(zx1>1000)ri=0.1;adzh(13);adzh(13);adzh(13);adzh(13);adzh(13);x1=(adzh(13)/4.8);/*位移*/adzh(5);adzh(5);adzh(5);x2=(adzh(5)*0.235/4.8);/*x2=200*(x1-zx1);*//*速度*/adzh(14);adzh(14);adzh(14);x3=(adzh(14)/3.487);/*摆角*/adzh(6);adzh(6);adzh(6);x4=(adzh(6)*0.235/3.487);/*x4=200*(x3-zx3);*//*角速度*/e=(-ri+x1);/*全状态反馈控制律*/u=12.3*x3+26.1*x4+6.75*x1+9*x2;if(u>2.5)u=2.5;elseif(u<-2.5)u=-2.5;dazh(2*u);/*zx1=x1,zx3=x3;*/t=t+0.005;ri=ri*160;setcolor(GREEN);line(tt,d[0],50+(int)(30*t),y3-(int)ri);/*输入曲线*/x1=x1*160;setcolor(YELLOW);line(tt,d[1],50+(int)(30*t),y3-(int)x1);/*输出位置曲线*/x2=x2*160;line(tt,d[2],50+(int)(30*t),y2-(int)x2);/*输出速度曲线*/c=x3;x3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论