綜合測(cè)控實(shí)驗(yàn)報(bào)告-.docx_第1頁(yè)
綜合測(cè)控實(shí)驗(yàn)報(bào)告-.docx_第2頁(yè)
綜合測(cè)控實(shí)驗(yàn)報(bào)告-.docx_第3頁(yè)
綜合測(cè)控實(shí)驗(yàn)報(bào)告-.docx_第4頁(yè)
綜合測(cè)控實(shí)驗(yàn)報(bào)告-.docx_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

綜合測(cè)控實(shí)驗(yàn)報(bào)告 -超聲波測(cè)距與球桿定位控制實(shí)驗(yàn)指導(dǎo)老師:XX專(zhuān)業(yè)班級(jí):XXXXXXX小組成員:XXX XXX2014.3.25目錄| CONTENTS超聲波測(cè)距實(shí)驗(yàn)一 實(shí)驗(yàn)?zāi)康?二 實(shí)驗(yàn)內(nèi)容和原理3三 實(shí)驗(yàn)過(guò)程5四 實(shí)驗(yàn)結(jié)果和總結(jié)21球桿定位控制實(shí)驗(yàn)一 實(shí)驗(yàn)?zāi)康?3二 機(jī)械建模分析23三 實(shí)驗(yàn)內(nèi)容25四 PID調(diào)節(jié)40五 體會(huì)與總結(jié)47超聲波測(cè)距實(shí)驗(yàn)一 實(shí)驗(yàn)?zāi)康?. 學(xué)習(xí)和熟悉MATLAB的基本操作和調(diào)試,掌握基本指令、函數(shù)和基本程序結(jié)構(gòu)的使用,學(xué)會(huì)使用M文件構(gòu)建較為復(fù)雜的程序?qū)嵗?,并且學(xué)會(huì)調(diào)試器的使用與分析。2. 了解使用MATLAB豐富的繪圖命令,學(xué)會(huì)使用基本繪圖命令繪制二維、三維圖形。3. 理解句柄的概念,了解底層圖形指令和圖形對(duì)象屬性,學(xué)會(huì)使用句柄搭建用戶(hù)界面(GUI)。4. 熟悉MATLAB軟件包SIMULINK的使用,學(xué)會(huì)利用SIMULINK進(jìn)行動(dòng)態(tài)系統(tǒng)建模和仿真,掌握子系統(tǒng)的構(gòu)建和使用。5. 理解S-FUNCTION的概念,并實(shí)現(xiàn)與硬件設(shè)備的交互,完成數(shù)據(jù)采集并分析。學(xué)會(huì)采集卡的初始化和基本設(shè)置,了解基本的采集編程。6. 掌握超聲波測(cè)距的原理和方法,并且通過(guò)實(shí)驗(yàn)臺(tái)進(jìn)行采集和數(shù)據(jù)處理二 實(shí)驗(yàn)內(nèi)容和原理本實(shí)驗(yàn)要完成的內(nèi)容,利用實(shí)驗(yàn)臺(tái)提供的超聲波傳感和采集卡完成傳感器數(shù)據(jù)的采集和處理,且在MATLAB的用戶(hù)界面上顯示處理結(jié)果,并對(duì)得出的距離進(jìn)行標(biāo)定和修正,保證誤差在一定范圍內(nèi)。超聲波傳感器輸出的是一定頻率的方波信號(hào),方波信號(hào)的占空比與傳感器離其正前方障礙物的距離成線(xiàn)性關(guān)系,所以采集得到傳感器方波信號(hào)并計(jì)算出占空比即可得到距離信息。設(shè)采樣得到方波一個(gè)周期內(nèi)低電平信號(hào)點(diǎn)數(shù)為n,采集卡的采樣頻率為fs,聲速為v,則理論距離S:S=n*v/fs 采集卡輸入端連接超聲波傳感器,輸出端與計(jì)算機(jī)連接,計(jì)算機(jī)通過(guò)S-function模塊將采集卡與simulink模型連接在一起,同時(shí)可以通過(guò)修改.cpp文件設(shè)置采集卡采樣頻率和采樣端口等,完成系列采集卡的初始化設(shè)置。原理框圖為:超聲波傳感器采集卡SIMULINKS-FUNCTIONWorkspace用戶(hù)界面 三 實(shí)驗(yàn)過(guò)程1. 在MATLAB中通過(guò)句柄和底層繪圖函數(shù)構(gòu)建用戶(hù)界面,實(shí)現(xiàn)基本的交互功能,具有采集和停止按鈕、測(cè)得距離輸出文本框、采集信號(hào)的波形圖和相關(guān)標(biāo)題和注釋。 在界面編程中,除了搭建界面外,還需要為按鈕添加callback屬性,實(shí)現(xiàn)交互功能。 構(gòu)建界面的代碼在test.m中,下面是該文件注釋?zhuān)篶lf reset %清除圖形set(gcf,menubar,none) %設(shè)置當(dāng)前窗口的菜單欄為無(wú)set(gcf,unit,normalized,position,0.2,0.2,0.6,0.6); % 設(shè)置窗口在屏幕的位置和大小,均以相對(duì)屏幕的比例表示set(gcf,defaultuicontrolunits,normalized) %設(shè)置用戶(hù)缺省控件單位屬性值set(gcf,NumberTitle,off,Name,超聲波測(cè)距); %設(shè)置窗口的名稱(chēng)為超聲波測(cè)距h_axes1=axes(position,0.1,0.15,0.6,0.7); %新建一個(gè)軸并定義位置和大小,而且獲得句柄h_axes1axis(0,1000,-2,2); %設(shè)置坐標(biāo)軸x,y的范圍xlabel(時(shí)間(0.2ms); %設(shè)置x軸標(biāo)號(hào)ylabel(電壓); %設(shè)置y軸標(biāo)號(hào)title(超聲波測(cè)距); %命名坐標(biāo)軸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); %新建一個(gè)文本框通過(guò)變量zhankongbi的值顯示和更新占空比htext2=uicontrol(gcf,style,text,position,0.78,0.25,0.14,0.1,fontsize,12,string,距離,sprintf(%1.4g,juli) %新建一個(gè)文本框通過(guò)變量juli的值顯示和更新距離set(gcf,defaultuicontrolhorizontal,left); %設(shè)置默認(rèn)左對(duì)齊set(gcf,defaultuicontrolfontsize,12); %設(shè)置默認(rèn)字體12號(hào) hpush1=uicontrol(gcf,Style,push,. position,0.78,0.7,0.15,0.13,string,測(cè)距); %新建按鈕測(cè)距,設(shè)置位置和大小set(hpush1,callback,. set_param(mytemp1,SimulationCommand,start),. t=timer(TimerFcn,getdata,Period,0.5,ExecutionMode,fixedSpacing,TasksToExecute,inf),. pause(1);start(t);,. ); %設(shè)置按鈕測(cè)距的回調(diào)函數(shù),設(shè)置定時(shí)器并定時(shí)調(diào)用getdata.m文件,開(kāi)始mytemp1.mdl開(kāi)始采集 hpush2=uicontrol(gcf,Style,push,. %建立按鈕停止并設(shè)置位置和 position,0.78,0.53,0.15,0.13,string,停止);set(hpush2,callback,stop(t);set_param(mytemp1,SimulationCommand,stop);); %建立按鈕停止并設(shè)置位置和大小,設(shè)置回調(diào)函數(shù)為stop即停止采集。搭建的圖形界面如下所示:下面是測(cè)距callback中調(diào)用的getdata.m文件set_param(mytemp1,SimulationCommand,stop); %停止采集y1= evalin(base,ydata.signals.values);%將上一次采集得到的數(shù)據(jù)賦給y1y2 = y1(1:5000); %取y1中的前5000個(gè)數(shù)據(jù)賦給y2用于分析plot(y2);%在坐標(biāo)軸上繪制出以上采集的數(shù)據(jù)%*以下代碼是計(jì)算一個(gè)周期內(nèi)低電平點(diǎn)的個(gè)數(shù)*i=1; %循環(huán)計(jì)數(shù)a=1; %標(biāo)志位,表示當(dāng)前數(shù)是高電平大于2000b=0; %用于記錄一個(gè)周期內(nèi)低電平的點(diǎn)的個(gè)數(shù)juli=0; %記錄距離的變量if y2(i)=2000 %如果采集的第一個(gè)數(shù)大于2000,為高電平 while a0 %循環(huán)判斷直到找到低電平的采樣點(diǎn) if y2(i)=2000 i=i+1; %加1用于在下一個(gè)循環(huán)判斷下一個(gè)采樣點(diǎn) else a=0; %標(biāo)志位為0表示當(dāng)前采樣點(diǎn)為低電平用于跳出循環(huán) count=i; %記錄第一個(gè)低電平的點(diǎn),也就是一個(gè)周期的開(kāi)始點(diǎn) end end while a=0 %用該標(biāo)志位循環(huán)判斷,直到遇到下一個(gè)高電平采樣點(diǎn) if y2(i)0 %循環(huán)判斷用于找出下一個(gè)低電平的點(diǎn),用于計(jì)算整周期的點(diǎn)數(shù) if y2(i)=2000 i=i+1; else a=0; %標(biāo)志位為0,表示當(dāng)前值為低電平 zhankongbi=b/(i-count); %由以上數(shù)據(jù)算出占空比 end endelse a=0; %表示第一個(gè)采樣點(diǎn)為低電平, while a1 %循環(huán)判斷找出下個(gè)周期的第一個(gè)高電平點(diǎn) if y2(i)0 %循環(huán)判斷找出下一個(gè)低電平的點(diǎn) if y2(i)=2000 i=i+1; else a=0; %當(dāng)前為此周期內(nèi)第一個(gè)低電平的點(diǎn) b=i-count; %記錄高電平的的點(diǎn)數(shù) end end while a1 %循環(huán)判斷下一個(gè)高電平的點(diǎn)從而計(jì)算出整個(gè)周期的點(diǎn)數(shù) if y2(i)=length) pnum=0; /判斷指針 *y=bufferpnum; /輸出第pnum 個(gè)點(diǎn)的值 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四 實(shí)驗(yàn)結(jié)果與總結(jié)進(jìn)行測(cè)量的界面如下所示最初系統(tǒng)有-5cm的誤差,在用三角尺粗略標(biāo)定后得到了較為準(zhǔn)確的結(jié)果,誤差在1cm以?xún)?nèi),達(dá)到了較好的測(cè)距效果??偨Y(jié):通過(guò)此次實(shí)驗(yàn)學(xué)會(huì)了利用MATLAB采集傳感器的信號(hào)并且進(jìn)行分析、標(biāo)定和顯示,很綜合的運(yùn)用了所學(xué)過(guò)的測(cè)控知識(shí),同時(shí)也更加熟悉了MATLAB的操作和運(yùn)用;通過(guò)simulink的使用了解到圖形編程的使用方法,更加深入體會(huì)到了G語(yǔ)言的簡(jiǎn)潔與方便。另外,這次短時(shí)間內(nèi)的MATLAB和simulink速成讓我們體會(huì)到了要在課下多做功課,才能在課堂上短短的時(shí)間內(nèi)有充足的時(shí)間調(diào)試程序和系統(tǒng),從而更有效率的完成任務(wù)。球桿定位控制實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?1、 通過(guò)球桿定位實(shí)驗(yàn)研究控制系統(tǒng)的方法;2、 體會(huì)并理解控制系統(tǒng)建模分析的方法;3、 學(xué)習(xí)采用PID調(diào)節(jié)設(shè)計(jì)球桿控制系統(tǒng),并對(duì)PID調(diào)節(jié)系統(tǒng)的穩(wěn)定性有進(jìn)一步的理解;4、 理解二階系統(tǒng)的響應(yīng)特性和穩(wěn)態(tài)特性。5、 掌握Matlab軟件在控制系統(tǒng)中的應(yīng)用。二、機(jī)械建模分析 球桿定位控制系統(tǒng)是一個(gè)經(jīng)典控制理論教學(xué)模型,它具有物理模型簡(jiǎn)單、概念清晰,便于用控制理論算法進(jìn)行的特點(diǎn),系統(tǒng)給出一個(gè)相對(duì)簡(jiǎn)單的模型。 鋼球在滑道加速滾動(dòng)的力是小球的重力在同滑道平行方向上的分力與摩擦力的合力。鋼球的滾動(dòng)的動(dòng)力學(xué)方程,鋼球在滑道上滾動(dòng)的加速度: 其中為鋼球與軌道之間的摩擦系數(shù),而為滑道與水平面之間的夾角。為了簡(jiǎn)化系統(tǒng)模型,考慮到摩擦系數(shù)比較小,摩擦力可以忽略不計(jì),因此,其基本的數(shù)學(xué)模型轉(zhuǎn)化成如下方式: ma=mgsin當(dāng)時(shí),線(xiàn)性化處理后,得到傳遞函數(shù)如下: 其中為鋼球在滑道上的位置。在實(shí)際控制的過(guò)程中,滑道的仰角是由電動(dòng)機(jī)的轉(zhuǎn)角輸出來(lái)實(shí)現(xiàn)的。影響電動(dòng)機(jī)轉(zhuǎn)角和滑道仰角之間的關(guān)系主要因素就是齒輪的減速比和非線(xiàn)性。因此,我們把該模型進(jìn)一步簡(jiǎn)化: 另一個(gè)模型: 其中c是一個(gè)包含了b和g的影響的參數(shù)。因此,球桿系統(tǒng)實(shí)際上可以簡(jiǎn)化成一個(gè)二階系統(tǒng)。三、實(shí)驗(yàn)內(nèi)容1、平衡位置標(biāo)定打開(kāi)原有實(shí)例文件qgtest.mdl進(jìn)入測(cè)試界面,點(diǎn)擊運(yùn)行,觀察球桿的運(yùn)動(dòng)情況,查看各個(gè)示波器的功能,用手撥動(dòng)鋼球,觀察示波器的變化。然后通過(guò)改變輸入常量POS的值改變曲柄停留置,最終找到球桿的水平位置。判斷是否水平的方法如下:使小球停留在某一位置,放開(kāi),小球不會(huì)自行滾動(dòng),輕輕撥動(dòng)小球,小球很快停止運(yùn)動(dòng)而不會(huì)朝某一方向加速,此時(shí)可以認(rèn)為球桿處在平衡位置。最終確定POS的平衡值為4510。2、系統(tǒng)模型建立搭建simulink控制模型。建立S-function模塊,添加InitIPM_RAM.cpp、3、Move_Abs.cpp和GetAD.cpp以及相應(yīng)的頭文件,并且使用mex指令編譯生成動(dòng)態(tài)鏈接庫(kù)文件*.dll,以上文件分別完成系統(tǒng)初始化、電機(jī)位置控制和采集卡采樣設(shè)置。創(chuàng)建Move_Abs:a、 在F盤(pán)新建一文件夾。b、 打開(kāi)matlab,點(diǎn)擊simiulink圖標(biāo),新建一個(gè)文件。c、 將User-Defined Functions/S-Function拖入新建文件中,改名為Init。d、 將一個(gè)Sources/Constant拖入新建文件中,改名為Com.e、 將Com輸出端連接Init輸入端。f、 將Ports&Subsystems/Enabled Susystem拖入新建文件中,并打開(kāi)。g、 將其中的In1-Out1刪掉。h、 將User-Defined Functions/S-Function拖入Enabled Subsystem中,改名為move_absolute。i、 將三個(gè)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文件復(fù)制到班號(hào)組號(hào)中。k、 在Init框圖上點(diǎn)擊右鍵/S-Function Parameters,將S-Function Name改為Init_RAM并確定。l、 在move_abslute框圖上點(diǎn)擊右鍵/S-Function Parameters,將S-Function Name改為Move_Abs并確定。S-function模塊GetAD的創(chuàng)建類(lèi)似上述步驟即可。最終搭建出來(lái)的模型截圖如下:系統(tǒng)簡(jiǎn)圖控制子系統(tǒng)簡(jiǎn)圖控制子系統(tǒng)(PID)簡(jiǎn)圖3.目標(biāo)效果實(shí)驗(yàn)最終要達(dá)到的效果為,設(shè)置模型constant中的POS參數(shù)(0400),通過(guò)系統(tǒng)的反饋控制,使球的快速的移動(dòng)到該位置并停止,并且要求穩(wěn)態(tài)誤差盡量小響應(yīng)要迅速超調(diào)量不能過(guò)大??刂葡到y(tǒng)的原理框圖為檢測(cè)球的位置Pos1計(jì)算出偏差e=Pos-POS1偏差e經(jīng)過(guò)增益和PID環(huán)節(jié)與平衡位置4510相加輸入電機(jī)伺服控制電機(jī)動(dòng)作小球運(yùn)動(dòng)檢測(cè)球的位置Pos1系統(tǒng)重復(fù)進(jìn)行以上循環(huán)直至偏差E為0,即球達(dá)到指定位置,電機(jī)停止調(diào)節(jié)。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 /加載函數(shù)庫(kù)文件/#include TML_lib_compact.h /加載頭文件 #pragma comment(lib, TML_lib.lib) /該宏放置一個(gè)注釋到對(duì)象文件或者可執(zhí)行文件#pragma warning( disable: 4761 ) / 不顯示4761號(hào)警告信息 #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) /用來(lái)初始化S-Function函數(shù),輸入端口和輸出端口。 / No expected parameters ssSetNumSFcnParams(S, 0); /設(shè)置參數(shù)個(gè)數(shù),這里為0 / Parameter mismatch will be reported by Simulink if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S) return; /判斷參數(shù)匹配是否錯(cuò)誤 / Specify I/O /if (!ssSetNumInputPor

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論