综合测控实验报告-.docx_第1页
综合测控实验报告-.docx_第2页
综合测控实验报告-.docx_第3页
综合测控实验报告-.docx_第4页
综合测控实验报告-.docx_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

综合测控实验报告 -超声波测距与球杆定位控制实验指导老师:XX专业班级:XXXXXXX小组成员:XXX XXX2014.3.25目录| CONTENTS超声波测距实验一 实验目的3二 实验内容和原理3三 实验过程5四 实验结果和总结21球杆定位控制实验一 实验目的23二 机械建模分析23三 实验内容25四 PID调节40五 体会与总结47超声波测距实验一 实验目的1. 学习和熟悉MATLAB的基本操作和调试,掌握基本指令、函数和基本程序结构的使用,学会使用M文件构建较为复杂的程序实例,并且学会调试器的使用与分析。2. 了解使用MATLAB丰富的绘图命令,学会使用基本绘图命令绘制二维、三维图形。3. 理解句柄的概念,了解底层图形指令和图形对象属性,学会使用句柄搭建用户界面(GUI)。4. 熟悉MATLAB软件包SIMULINK的使用,学会利用SIMULINK进行动态系统建模和仿真,掌握子系统的构建和使用。5. 理解S-FUNCTION的概念,并实现与硬件设备的交互,完成数据采集并分析。学会采集卡的初始化和基本设置,了解基本的采集编程。6. 掌握超声波测距的原理和方法,并且通过实验台进行采集和数据处理二 实验内容和原理本实验要完成的内容,利用实验台提供的超声波传感和采集卡完成传感器数据的采集和处理,且在MATLAB的用户界面上显示处理结果,并对得出的距离进行标定和修正,保证误差在一定范围内。超声波传感器输出的是一定频率的方波信号,方波信号的占空比与传感器离其正前方障碍物的距离成线性关系,所以采集得到传感器方波信号并计算出占空比即可得到距离信息。设采样得到方波一个周期内低电平信号点数为n,采集卡的采样频率为fs,声速为v,则理论距离S:S=n*v/fs 采集卡输入端连接超声波传感器,输出端与计算机连接,计算机通过S-function模块将采集卡与simulink模型连接在一起,同时可以通过修改.cpp文件设置采集卡采样频率和采样端口等,完成系列采集卡的初始化设置。原理框图为:超声波传感器采集卡SIMULINKS-FUNCTIONWorkspace用户界面 三 实验过程1. 在MATLAB中通过句柄和底层绘图函数构建用户界面,实现基本的交互功能,具有采集和停止按钮、测得距离输出文本框、采集信号的波形图和相关标题和注释。 在界面编程中,除了搭建界面外,还需要为按钮添加callback属性,实现交互功能。 构建界面的代码在test.m中,下面是该文件注释:clf reset %清除图形set(gcf,menubar,none) %设置当前窗口的菜单栏为无set(gcf,unit,normalized,position,0.2,0.2,0.6,0.6); % 设置窗口在屏幕的位置和大小,均以相对屏幕的比例表示set(gcf,defaultuicontrolunits,normalized) %设置用户缺省控件单位属性值set(gcf,NumberTitle,off,Name,超声波测距); %设置窗口的名称为超声波测距h_axes1=axes(position,0.1,0.15,0.6,0.7); %新建一个轴并定义位置和大小,而且获得句柄h_axes1axis(0,1000,-2,2); %设置坐标轴x,y的范围xlabel(时间(0.2ms); %设置x轴标号ylabel(电压); %设置y轴标号title(超声波测距); %命名坐标轴zhankongbi=1; %建立变量用于显示和更新juli=0; %建立变量用于显示和更新htext1=uicontrol(gcf,style,text,position,0.78,0.4,0.14,0.1,fontsize,12,string,占空比,sprintf(%1.4g,zhankongbi); %新建一个文本框通过变量zhankongbi的值显示和更新占空比htext2=uicontrol(gcf,style,text,position,0.78,0.25,0.14,0.1,fontsize,12,string,距离,sprintf(%1.4g,juli) %新建一个文本框通过变量juli的值显示和更新距离set(gcf,defaultuicontrolhorizontal,left); %设置默认左对齐set(gcf,defaultuicontrolfontsize,12); %设置默认字体12号 hpush1=uicontrol(gcf,Style,push,. position,0.78,0.7,0.15,0.13,string,测距); %新建按钮测距,设置位置和大小set(hpush1,callback,. set_param(mytemp1,SimulationCommand,start),. t=timer(TimerFcn,getdata,Period,0.5,ExecutionMode,fixedSpacing,TasksToExecute,inf),. pause(1);start(t);,. ); %设置按钮测距的回调函数,设置定时器并定时调用getdata.m文件,开始mytemp1.mdl开始采集 hpush2=uicontrol(gcf,Style,push,. %建立按钮停止并设置位置和 position,0.78,0.53,0.15,0.13,string,停止);set(hpush2,callback,stop(t);set_param(mytemp1,SimulationCommand,stop);); %建立按钮停止并设置位置和大小,设置回调函数为stop即停止采集。搭建的图形界面如下所示:下面是测距callback中调用的getdata.m文件set_param(mytemp1,SimulationCommand,stop); %停止采集y1= evalin(base,ydata.signals.values);%将上一次采集得到的数据赋给y1y2 = y1(1:5000); %取y1中的前5000个数据赋给y2用于分析plot(y2);%在坐标轴上绘制出以上采集的数据%*以下代码是计算一个周期内低电平点的个数*i=1; %循环计数a=1; %标志位,表示当前数是高电平大于2000b=0; %用于记录一个周期内低电平的点的个数juli=0; %记录距离的变量if y2(i)=2000 %如果采集的第一个数大于2000,为高电平 while a0 %循环判断直到找到低电平的采样点 if y2(i)=2000 i=i+1; %加1用于在下一个循环判断下一个采样点 else a=0; %标志位为0表示当前采样点为低电平用于跳出循环 count=i; %记录第一个低电平的点,也就是一个周期的开始点 end end while a=0 %用该标志位循环判断,直到遇到下一个高电平采样点 if y2(i)0 %循环判断用于找出下一个低电平的点,用于计算整周期的点数 if y2(i)=2000 i=i+1; else a=0; %标志位为0,表示当前值为低电平 zhankongbi=b/(i-count); %由以上数据算出占空比 end endelse a=0; %表示第一个采样点为低电平, while a1 %循环判断找出下个周期的第一个高电平点 if y2(i)0 %循环判断找出下一个低电平的点 if y2(i)=2000 i=i+1; else a=0; %当前为此周期内第一个低电平的点 b=i-count; %记录高电平的的点数 end end while a1 %循环判断下一个高电平的点从而计算出整个周期的点数 if y2(i)=length) pnum=0; /判断指针 *y=bufferpnum; /输出第pnum 个点的值 pnum+; /指针加1#define MDL_UPDATE /* Change to #undef to remove function */#if defined(MDL_UPDATE) /* Function: mdlUpdate = * Abstract: * This function is called once for every major integration time step. * Discrete states are typically updated here, but this function is useful * for performing any tasks that should only take place once per * integration step. */ static void mdlUpdate(SimStruct *S, int_T tid) #endif /* MDL_UPDATE */#define MDL_DERIVATIVES /* Change to #undef to remove function */#if defined(MDL_DERIVATIVES) /* Function: mdlDerivatives = * Abstract: * In this function, you compute the S-function blocks derivatives. * The derivatives are placed in the derivative vector, ssGetdX(S). */ static void mdlDerivatives(SimStruct *S) #endif /* MDL_DERIVATIVES */* Function: mdlTerminate = * Abstract: * In this function, you should perform any actions that are necessary * at the termination of a simulation. For example, if memory was * allocated in mdlStart, this is the place to free it. */static void mdlTerminate(SimStruct *S) ADCardQuit(); /退出采集卡停止采集/*=* * See sfuntmpl_doc.c for the optional S-function methods * *=*/*=* * Required S-function trailer * *=*/#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */#include simulink.c /* MEX-file interface mechanism */#else#include cg_sfun.h /* Code generation registration function */#endif四 实验结果与总结进行测量的界面如下所示最初系统有-5cm的误差,在用三角尺粗略标定后得到了较为准确的结果,误差在1cm以内,达到了较好的测距效果。总结:通过此次实验学会了利用MATLAB采集传感器的信号并且进行分析、标定和显示,很综合的运用了所学过的测控知识,同时也更加熟悉了MATLAB的操作和运用;通过simulink的使用了解到图形编程的使用方法,更加深入体会到了G语言的简洁与方便。另外,这次短时间内的MATLAB和simulink速成让我们体会到了要在课下多做功课,才能在课堂上短短的时间内有充足的时间调试程序和系统,从而更有效率的完成任务。球杆定位控制实验一、实验目的 1、 通过球杆定位实验研究控制系统的方法;2、 体会并理解控制系统建模分析的方法;3、 学习采用PID调节设计球杆控制系统,并对PID调节系统的稳定性有进一步的理解;4、 理解二阶系统的响应特性和稳态特性。5、 掌握Matlab软件在控制系统中的应用。二、机械建模分析 球杆定位控制系统是一个经典控制理论教学模型,它具有物理模型简单、概念清晰,便于用控制理论算法进行的特点,系统给出一个相对简单的模型。 钢球在滑道加速滚动的力是小球的重力在同滑道平行方向上的分力与摩擦力的合力。钢球的滚动的动力学方程,钢球在滑道上滚动的加速度: 其中为钢球与轨道之间的摩擦系数,而为滑道与水平面之间的夹角。为了简化系统模型,考虑到摩擦系数比较小,摩擦力可以忽略不计,因此,其基本的数学模型转化成如下方式: ma=mgsin当时,线性化处理后,得到传递函数如下: 其中为钢球在滑道上的位置。在实际控制的过程中,滑道的仰角是由电动机的转角输出来实现的。影响电动机转角和滑道仰角之间的关系主要因素就是齿轮的减速比和非线性。因此,我们把该模型进一步简化: 另一个模型: 其中c是一个包含了b和g的影响的参数。因此,球杆系统实际上可以简化成一个二阶系统。三、实验内容1、平衡位置标定打开原有实例文件qgtest.mdl进入测试界面,点击运行,观察球杆的运动情况,查看各个示波器的功能,用手拨动钢球,观察示波器的变化。然后通过改变输入常量POS的值改变曲柄停留置,最终找到球杆的水平位置。判断是否水平的方法如下:使小球停留在某一位置,放开,小球不会自行滚动,轻轻拨动小球,小球很快停止运动而不会朝某一方向加速,此时可以认为球杆处在平衡位置。最终确定POS的平衡值为4510。2、系统模型建立搭建simulink控制模型。建立S-function模块,添加InitIPM_RAM.cpp、3、Move_Abs.cpp和GetAD.cpp以及相应的头文件,并且使用mex指令编译生成动态链接库文件*.dll,以上文件分别完成系统初始化、电机位置控制和采集卡采样设置。创建Move_Abs:a、 在F盘新建一文件夹。b、 打开matlab,点击simiulink图标,新建一个文件。c、 将User-Defined Functions/S-Function拖入新建文件中,改名为Init。d、 将一个Sources/Constant拖入新建文件中,改名为Com.e、 将Com输出端连接Init输入端。f、 将Ports&Subsystems/Enabled Susystem拖入新建文件中,并打开。g、 将其中的In1-Out1删掉。h、 将User-Defined Functions/S-Function拖入Enabled Subsystem中,改名为move_absolute。i、 将三个Sources/Constant拖入新建文件中。j、 将文件cmpg.out、IPM100.CFG、Move_Abs.cpp、Move_Abs.h、InitIPM_TAM.h、InitIPM_RAM.cpp、TMLcomm.dll、TML_lib.dll、TML_lib.h、TML_lib.lib文件复制到班号组号中。k、 在Init框图上点击右键/S-Function Parameters,将S-Function Name改为Init_RAM并确定。l、 在move_abslute框图上点击右键/S-Function Parameters,将S-Function Name改为Move_Abs并确定。S-function模块GetAD的创建类似上述步骤即可。最终搭建出来的模型截图如下:系统简图控制子系统简图控制子系统(PID)简图3.目标效果实验最终要达到的效果为,设置模型constant中的POS参数(0400),通过系统的反馈控制,使球的快速的移动到该位置并停止,并且要求稳态误差尽量小响应要迅速超调量不能过大。控制系统的原理框图为检测球的位置Pos1计算出偏差e=Pos-POS1偏差e经过增益和PID环节与平衡位置4510相加输入电机伺服控制电机动作小球运动检测球的位置Pos1系统重复进行以上循环直至偏差E为0,即球达到指定位置,电机停止调节。4.代码注释InitIPM_RAM.cpp文件代码及注释如下:/* Copyright 2003-2004 The MathWorks, Inc. */ / */ * To build this mex function use: mex Mytst.cpp */ * #include InitIPM_RAM.h /加载头文件 #define WIN32 /宏定义 /#ifndef WIN32/#error Only WIN32 version is available/#endif #include windows.h /加载头文件 #define S_FUNCTION_LEVEL 2 /宏定义,指定该S-function是level-2格式的#define S_FUNCTION_NAME InitIPM_RAM /宏定义,指定S-function的名字 / Need to include simstruc.h for the definition of the SimStruct and/ its associated macro definitions.#include simstruc.h /加载头文件 #include TML_lib.h /加载函数库文件/#include TML_lib_compact.h /加载头文件 #pragma comment(lib, TML_lib.lib) /该宏放置一个注释到对象文件或者可执行文件#pragma warning( disable: 4761 ) / 不显示4761号警告信息 #define IS_PARAM_DOUBLE(pVal) (mxIsNumeric(pVal) & !mxIsLogical(pVal) &!mxIsEmpty(pVal) & !mxIsSparse(pVal) & !mxIsComplex(pVal) & mxIsDouble(pVal) /宏定义 / Function: mdlInitializeSizes =/ Abstract:/ The sizes information is used by Simulink to determine the S-function/ blocks characteristics (number of inputs, outputs, states, etc.).static void mdlInitializeSizes(SimStruct *S) /用来初始化S-Function函数,输入端口和输出端口。 / No expected parameters ssSetNumSFcnParams(S, 0); /设置参数个数,这里为0 / Parameter mismatch will be reported by Simulink if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S) return; /判断参数匹配是否错误 / Specify I/O /if (!ssSetNumInputPor

温馨提示

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

评论

0/150

提交评论