綜合測控實驗報告-.docx_第1頁
綜合測控實驗報告-.docx_第2頁
綜合測控實驗報告-.docx_第3頁
綜合測控實驗報告-.docx_第4頁
綜合測控實驗報告-.docx_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論