版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
綜合測控實驗(下)主講人:黃弢、王峻峰主要內(nèi)容:Matlab、Simulink測控系統(tǒng)應用:Matlab、Simulink調(diào)用*.dll,結(jié)合PID算法,實現(xiàn)對外部設備的閉環(huán)控制其它控制系統(tǒng)軟件平臺:組態(tài)軟件在控制系統(tǒng)的應用DR-LinkVisualC++,VisualBasic51單片機、ARM控制實驗內(nèi)容Matlab/SimulinkPLC組態(tài)軟件DR-LinkVC++/VB51單片機變頻器直流電機調(diào)速器步進電機驅(qū)動器伺服電機驅(qū)動器可控硅調(diào)功器三相交流異步電機直流電機步進電機伺服電機發(fā)熱元件換算算法輸出電流電壓PWMPID算法被控對象課程內(nèi)容PWM脈寬調(diào)制實現(xiàn)調(diào)壓——直流斬波調(diào)壓直流斬波調(diào)壓:將一個量值的直流電變?yōu)榱硪粋€量值的直流電,也稱DC/DC變換
利用C寫的S-Function執(zhí)行步驟
mdlInitializeSizes是Simulink與S-function交互時調(diào)用的第一個方法。隨后Simulink將調(diào)用其他S-function方法(都以mdl開頭)。仿真結(jié)束時,Simulink調(diào)用mdlTerminate。注意:Simulink仿真時直接在適當?shù)臅r間調(diào)用每個回調(diào)方法,利用C寫的S-Function仿真步驟如圖4.1所示:03二月2023SIMULINK自定義模塊CommonlyUsedBlocks(公共模塊庫)Continuous(連續(xù)模塊庫)Discrete(離散模塊庫)Logic&BitOperation(邏輯與位操作模塊庫)Ports&Subsystems(端口與子系統(tǒng)模塊庫)
MathOperation(數(shù)學模塊庫)
Function&Tables(函數(shù)與表格模塊)Ports&SubsystemsSignalAttributes(信號與系統(tǒng)模塊庫)Sinks(接收器模塊庫)Sources(輸入源模塊庫)User-DefinedFunctions03二月2023Simulink
s-Functuion應用在MATLAB環(huán)境下使用MEX命令將已編譯好的C文件(通過SIMULINK編譯)轉(zhuǎn)換成DLL文件,然后再結(jié)合S-FUNCTION,調(diào)用該DLL文件。首先在MATLAB的COMMAND窗口中輸入:>>mex-setup會出現(xiàn):
Selectacompiler:[1]LccCversion2.4inF:\MATLAB\sys\lcc[2]MicrosoftVisualC/C++version6.0inC:\ProgramFiles\MicrosoftVisualStudio[0]None即選擇一個編譯器。在這里一般選擇VC++選項,直接在命令窗口中敲擊編譯器編號的數(shù)字鍵,然后回車即可。S-Function模板創(chuàng)建DLL
新建一個文件夾,選擇為當前目錄打開simulink,選擇User-DefinedFunctions/S-FunctionExamples/C-filesS-Function//BasicC-MEXTemplate,根據(jù)所定義模塊的功能,將該自動生成的文件重命名,并存入你指定的文件夾中將模版的c文件另存,文件名自定義,如MyOn.cpp。將Function改成和文件名一樣,如圖4.5所示。在mdlOutputs(SimStruct*S,int_Ttid)函數(shù)中進行修改,將real_T*y=ssGetOutputPortSignal(S,0);替換為real_T*y=ssGetOutputPortRealSignal(S,0);Matlab命令窗口,輸入:mexMyOn.cpp,可以看到出現(xiàn)了一個MyOn.dll文件在simulink窗口下,新建一個mdl文件(可為mytemp1,mdl的文件名不能與sfunction的名字相同,即不能為MyOn,否則會出現(xiàn)命名沖突。)),向其中添加一個S-Function模塊,雙擊模塊,將其中的S-FunctionName改為dll的文件名(不加后綴,也就是MyOn)。
相同
輸入輸出設置及采集編程以下編程均在MyOn.cpp文件中標注輸入輸出設置:
三個接口沒有任何,這樣我們就不清楚道理每個接口作用。為此,我們可以在圖4.10所示的模塊上單擊右鍵,然后選擇MaskS-Function,在該cpp文件mdlStart(SimStruct*S)函數(shù)中添加采集卡初始化以及開啟采集任務。
constreal_T*u1=(constreal_T*)ssGetInputPortRealSignalPtrs(S,0);constreal_T*u2=(constreal_T*)ssGetInputPortRealSignalPtrs(S,1);constreal_T*u3=(constreal_T*)ssGetInputPortRealSignalPtrs(S,2);doubleFs=u1[0];//采樣頻率
if(ADCardInit()!=1)//采集卡初始化
{ssSetErrorStatus(S,"Can'tfindtheDAQCard!");}DAQ1(0x1,5000,1024*4,buffer);//開啟采集Fs=5000pnum=0; //初始化buf指針位置采集卡初始化及開啟數(shù)據(jù)采集:
if(u2[0]==1)DAQ1(0x1,Fs,1024,buffer);elseif(u2[0]==2)DAQ1(0x2,Fs,1024,buffer);elseif(u2[0]==3)DAQ1(0x4,Fs,1024,buffer);elseif(u2[0]==4)DAQ1(0x8,Fs,1024,buffer);elseif(u2[0]==5)DAQ1(0x10,Fs,1024,buffer);elseif(u2[0]==6)DAQ1(0x20,Fs,1024,buffer);elseif(u2[0]==7)DAQ1(0x40,Fs,1024,buffer);elseif(u2[0]==8)DAQ1(0x80,Fs,1024,buffer);elsessSetErrorStatus(S,"channelnumberiswrong!");ADCardInit()是采集卡DLL函數(shù),作用是初始化采集卡。如果初始化成功則返回1,用于判斷是否連上采集卡。DAQ1()函數(shù)為采集卡DLL單通道采樣函數(shù),作用是啟動采集卡進行單通道數(shù)據(jù)采集。參數(shù)1為采樣通道,是以8位2進制數(shù)表示各個通道是否開啟,如對通道1進行采集,該參數(shù)即為:00000001;同理,對3通道進行采集,其參數(shù)為00000100。各通道對應關(guān)系分別為:0x1:通道1 0x2:通道2 0x4:通道30x8:通道4 0x10:通道5 0x20:通道60x40:通道7 0x80:通道8DAQ2(ch,Fs,len,buffer1,buffer2)為雙通道采樣函數(shù),第一個參數(shù)為通道號,和DAQ1一樣,同樣是以2進制數(shù)表示,如對1,2通道進行采集,該參數(shù)即為00000011;對3,4通道進行采集,即為00001100;下面是幾組通道的對應關(guān)系0x3:通道1、2 0x0A:通道2、40x0C:通道3、40x11:通道1、5 0x12:通道2、50x22:通道2、6程序中使用位操作,首先獲取采樣通道號,例如1和2,將通道變量置0,即程序中的:unsignedcharchannel=0x00; //初始化采集通道用位操作方法,設置channel的第0位、第1位為1:
channel|=(1<<ch1);//設置采樣通道1(該例子中ch1為0)
channel|=(1<<ch2);//設置采樣通道2(該例子中ch2為1)第二個參數(shù)Fs為采樣頻率;第三個參數(shù)len為采樣長度;第四、五個參數(shù)為兩個通道的緩存區(qū)指針。數(shù)據(jù)輸出
數(shù)據(jù)輸出在mdlOutputs()函數(shù)內(nèi)實現(xiàn)。
intLength=1024*4; //讀取的buffer長度
constreal_T*u2=(constreal_T*)ssGetInputPortRealSignalPtrs(S,1);ReadDaq(u2[0],Length,buffer);//從采集卡讀取bufferreal_T*y=ssGetOutputPortRealSignal(S,0); //獲取輸出指針
if(pnum>=Length)pnum=0;//判斷指針是否已滿*y=buffer[pnum]; //輸出第pnum個點的值
pnum++; //指針加1
函數(shù)ReadDaq()作用是讀取下位機buf里的采樣數(shù)據(jù)。參數(shù)1為通道號,分別為1-8;參數(shù)2為buffer長度;參數(shù)3為保存的buffer指針。退出采集卡:函數(shù)ADCardQuit()是采集卡dll函數(shù),其作用是退出采集卡。staticvoidmdlTerminate(SimStruct*S){
ADCardQuit();}再次在MATLAB的CommandWindow中輸入mexMyOn.cpp,完成數(shù)據(jù)采集卡的程序編寫。打開測試實驗平臺上的直流電源,打開通道1的信號源,返回使用該模塊形成的mytemp1.mdl文件,將運行時間改為inf,點擊菜單欄上的“保存”圖標,點擊菜單欄上的“運行”圖標,進行執(zhí)行。雙擊Scope可以查看采集的信號波形。調(diào)用界面設計clfresetset(gcf,'menubar','none')set(gcf,'unit','normalized','position',[0.2,0.2,0.5,0.35]); set(gcf,'defaultuicontrolunits','normalized') %設置用戶缺省控件單位屬性值h_axes1=axes('position',[0.05,0.55,0.6,0.4]);h_axes2=axes('position',[0.05,0.05,0.6,0.4]);有兩軸對象和兩個按鈕對象。
hpush1=uicontrol(gcf,'Style','push',... %制作“采集”按鈕
'position',[0.8,0.25,0.18,0.15],'string','采集');hpush2=uicontrol(gcf,'Style','push',... %制作“停止”按鈕
'position',[0.8,0.05,0.18,0.15],'string','停止');%首先讓我們先前建立的mytemp1mdl文件運行%“采集”按鍵引起的回調(diào)set(hpush1,'callback',[...'set_param(''mytemp1'',''SimulationCommand'',''start''),',... 't=timer(''TimerFcn'',''getdata'',''Period'',1,''ExecutionMode'',''fixedSpacing'',''TasksToExecute'',inf),',...%設置定時器,運行g(shù)etdata文件,與上面是一行。'pause(2);start(t);',... %暫停2秒并啟動定時器
]);%“停止”按鍵引起的回調(diào)hpush2=uicontrol(gcf,'Style','push',... 'position',[0.8,0.05,0.18,0.15],'string','停止');%制作“停止”按鈕set(hpush2,'callback','stop(t);set_param(''mytemp2'',''SimulationCommand'',''stop'');');%停止定時器,mdl文件停止運行。
回調(diào)屬性球桿定位控制系統(tǒng)實驗電機簡單運動控制Qtest.mdl的Matlab模型結(jié)構(gòu)如下圖所示:模型主要由一個常量模塊——COM,代表使用的串口號;S函數(shù)——InitIPM_RAM,初始化控制卡和下載配置文件;一個子系統(tǒng)構(gòu)成。雙擊子系統(tǒng),能看到其內(nèi)部結(jié)構(gòu)如下所示:將文件mcqg.out、IPM100.CFG、TMLcomm.dll、TML_lib.dll、TML_lib.h、TML_lib.lib復制到當前路徑中。其中mcqg.out是執(zhí)行InitIPM-_RAM必須要的文件(在s-function的c文件中有相應語句);IPM100.CFG、TMLcomm.dll、TML_lib.dll、TML_lib.h、TML_lib.lib五個文件是IPM的驅(qū)動文件;編寫InitIPM_RAM.h、InitIPM_RAM.cpp、Move_Abs.cpp、Move_Abs.h、Get-AD.cpp、Get-AD.h、Stop.cpp、Stop.h、Servo_On.cpp、Servo_On.h、InitIPM_RAM.h、InitIPM_RAM.cpp是初始化IPM的c文件和頭文件,同時也要mex產(chǎn)生對應的dll文件。InitIPM_RAM函數(shù)功能:對采集控制卡初始化;函數(shù)實現(xiàn)描述:定義與上位機通訊的波特率115200定義驅(qū)動器的軸號255定義與上位機通訊方式RS232定義與上位機通訊默認端口號串口1初始化驅(qū)動器載入驅(qū)動器配置文件使用說明:1個輸入設置串口號1個輸出“1”
(真值也就是“Subsystem的一個觸發(fā)信號,初始化完成后發(fā)出信號)Get_AD函數(shù)功能:采集AD數(shù)據(jù)(對于球桿系統(tǒng)為采集小球位置);函數(shù)實現(xiàn)描述:定義AD采樣端口的值、地址、AD端口號等變量對他們賦初始值IPM100運動控制器有兩個10位的模擬量輸入端口,AD2和AD5,該函數(shù)中對AD端口號AD_No(系統(tǒng)默認為5)進行判斷并讀取該端口模擬量的值,并賦給變量val_ad。再通過讀取內(nèi)存中模擬量輸入端口對應地址單元內(nèi)的值,根據(jù)*y=400.00*((float)(unsignedshort)val_ad/65535.00)計算出小球的實際位置(單位毫米)。其中400為整個位移傳感器的長度(400毫米),65535(1111111111111111)B為小球位置為400mm時對應的值。備注:AD轉(zhuǎn)換結(jié)果有10位的分辨率,并左移6位。這樣AD轉(zhuǎn)換后的值在內(nèi)存中為16位。該函數(shù)的輸入是AD輸入通道模擬量經(jīng)轉(zhuǎn)換后在內(nèi)存中的值,輸出為計算出來的小球的實際位置。使用說明:1個輸入:AD端口號1個輸出:經(jīng)過換算出來的小球的位置YMove_Abs函數(shù)功能:絕對運動命令:控制電機運動函數(shù)實現(xiàn)描述:輸入電機的目標位置、目標速度和目標加速度,使電機運動到設定的目標位置使用說明:3個輸入:設定運動的速度和加速度及目標位置Stop函數(shù)功能:運動停止命令函數(shù)函數(shù)實現(xiàn)描述:讀入電機停車的方式(默認STOP_3系統(tǒng)以設定的加減速度停車)
使用說明:一個輸入:設定停止模式Servo_on函數(shù)功能:電機伺服控制函數(shù)實現(xiàn)描述:讀入
TS_Power(Axis_On_Flag)Axis_On_Flag值(1或0)根據(jù)輸入值上伺服或下伺服。使用說明:一個輸入:設定伺服狀態(tài)(上伺服或下伺服)問題討論1:問題1:Servo_on開時,曲柄才能運動到目標位置,問題2:當Stop關(guān)閉時,曲柄才能運動到目標位置,當Stop開時,理論上曲柄會一動一停的運動到目標位置,實際很艱難,可以聽到電機在運動。QGTest的子系統(tǒng)中五個模塊的程序是循環(huán)執(zhí)行的。Stop和Move_Abs循環(huán)執(zhí)行,曲柄則會一停一動的運動。如果搭建的只有servo_on和Stop兩個模塊的系統(tǒng)中則不存在這個問題。對于Servo_on可能也是由于程序的循環(huán)執(zhí)行所造成的。問題討論2:1.時域波形特征:有效值,均值,均方差,峰值,峰峰值,頻率.2.頻域波形分析:信號波形和相應幅值譜和相位譜,并得到相應的頻率值和幅值.Fft的雙邊特性3.熱電偶溫度測量:測量信號的均值4.數(shù)字濾波器設計消除不需要的頻率分量
卷積基礎任何輸入的數(shù)字信號均可以表示成時延脈沖的線性組合,如下數(shù)字信號的脈沖表示而單位脈沖響應h[n],是系統(tǒng)對單位脈沖函數(shù)輸入的響應。每個濾波器都有單位脈沖響應。如果已知濾波器的單位脈沖響應h[n],則可以利用卷積的方法來計算濾波器在任意輸入的輸出。卷積的計算由于濾波器為線性時不變因果系統(tǒng),當輸入是單位脈沖δ[n-k],則輸出是h[n-k],可見,系統(tǒng)的輸出取決于輸入和系統(tǒng)的脈沖響應h[n],卷積事實上等于序列x[k]和和h[k]的反轉(zhuǎn)位移序列相乘,卷積的計算:逐點相乘后相加,這里要理解h[n-k]的含義,h[n-k]是h[k]關(guān)于縱軸的鏡像;h[n-k]是h[-k]右移n個采樣點所得的值。離散系統(tǒng)的時域模型
——差分方程差分方程是遞歸定義的,函數(shù)f(t)在t=kT處第i階差分的差分就是其第i+1階差分,如:上述函數(shù)的二階前向差分方程定義為:離散系統(tǒng)中信號是以序列的形式出現(xiàn)的,因此只能用差分方程來分析。設f(t)為t的函數(shù),在t=kT處取值為f(kT),此時f(t)在t=kT處的一階差分方程定義為:前向差分后向差分差分方程與卷積差分方程與卷積均可以計算己知輸入情況下的濾波器的輸出,二者的結(jié)果對于同一個濾波器而言應該是相同的。Z變換與差分方程求解Z變換是對離散序列進行的一種數(shù)學變換。常用以求線性時不變差分方程的解。
離散時間序列x(n)的Z變換:逆Z變換:由Y(z)計算y[n]y[n]=Z?1{Y(z)}z-1延遲因子,不能把單步延遲項z-1和逆Z變換的符號Z
?1混淆。①線性性質(zhì):②時延性質(zhì):延遲定理用Z傳輸函數(shù)、脈沖響應、差分方程可以描述同一個數(shù)字系統(tǒng)。數(shù)字濾波器設計數(shù)字濾波器經(jīng)典濾波器根據(jù)濾波特性來分:低通;高通;帶通;帶阻(理想濾波器是不可實現(xiàn)的,只能在一定程度上去逼近)從單位脈沖響應長度來分:IIR-DF;FIR-DF現(xiàn)代濾波器尋找在某種準則下的最優(yōu)解維納濾波器,卡爾曼濾波器,自適應濾波器從對信號處理的作用來分:選頻;其他1.ωp和ωs分別稱為通帶邊界頻率和阻帶截止頻率。2.從ωp到ωs稱為過渡帶,過渡帶上的頻響一般是單調(diào)下降的3.通帶頻率范圍為0≤|ω|≤ωp,在通帶中要求(1-δ1)<|H(ejω)|≤1,阻帶頻率范圍為ωs≤|ω|≤π,在阻帶中要求|H(ejω)|≤δ2。11+p1-psps顯然,p越小,通帶波紋越小,通帶逼近誤差就越小;s越大,阻帶波紋越小,阻帶逼近誤差就越小;ωp與ωs間距越小,過渡帶就越窄。所以低通濾波器的設計指標完全由通帶邊界頻率ωp、通帶最大衰減p
阻帶邊界頻率ωs和阻帶最小衰減s確定。11/Aps歸一化的數(shù)字低通濾波器幅度響應指標FIR濾波器可以設計為線性相位,并且總是穩(wěn)定的。在多數(shù)情況下,F(xiàn)IR濾波器的階數(shù)NFIR
顯著大于具有等效幅度響應的IIR濾波器階數(shù)NIIR
。NFIR/NIIR
通常為10的量級或更高.I
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五年級教學工作計劃模板錦集四篇
- 耐材項目建議書(立項報告)
- 勞動小能手小班教案
- 幼兒園中班教案《路線圖》及教學反思
- 2021八年級歡慶中秋節(jié)滿分作文五篇
- 大學生曠課檢討書集合15篇
- 高中軍訓心得15篇
- 初中體育教師學期教學工作計劃范文
- 人才公寓(原公租房)項目第三方檢測和監(jiān)測服務招標文件
- 2025年食品級纖維素醚項目發(fā)展計劃
- 船舶調(diào)度年終述職報告
- 玻璃的浮法成型工藝
- 山東省濟南市2023-2024學年高三上學期期末學習質(zhì)量檢測物理試題(解析版)
- 國家開放大學電大本科《古代小說戲曲專題》2025期末試題及答案(試卷號:1340)
- 粵教粵科版三年級科學上冊全冊單元期中期末測試卷 含答案
- 遼寧省大連市甘井子區(qū)2023-2024學年五年級上學期期末英語試卷
- (完整版)年產(chǎn)30萬噸甲醇工藝設計畢業(yè)設計
- 外研版五年級上冊(三起)連詞成句專項訓練
- 養(yǎng)老機構(gòu)風險管控清單
- 辦公室消防管理制度
評論
0/150
提交評論