综合测控实验(下).ppt

上传人:小飞机 文档编号:5300254 上传时间:2023-06-23 格式:PPT 页数:58 大小:838KB
返回 下载 相关 举报
综合测控实验(下).ppt_第1页
第1页 / 共58页
综合测控实验(下).ppt_第2页
第2页 / 共58页
综合测控实验(下).ppt_第3页
第3页 / 共58页
综合测控实验(下).ppt_第4页
第4页 / 共58页
综合测控实验(下).ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《综合测控实验(下).ppt》由会员分享,可在线阅读,更多相关《综合测控实验(下).ppt(58页珍藏版)》请在三一办公上搜索。

1、综合测控实验(下),主 讲 人:黄弢、王峻峰,Simulink模块的数学描述,Simulink模块包括一系列输入、状态和输出。输出是采样时间、输入、模块状态的函数。,仿真过程,MATLAB的工具箱提供了各种数值积分方法函数:T,Y=solver(F,TSPAN,Yo,OPTIONS)solver为微分方程的求解函数名。F为系统模型文件名,模型为TSPAN=To Tfinal为积分区间,初值终值,Yo为系统输出初始值,即To时刻的初值列向量;OPTIONS设置积分相对允误RelTol和绝对允误AbsTol,缺省时,RelTol=1e-3,AbsTol=1e-6.solver:ode23 Rung

2、e-Kutta法 三阶积分算法、二阶误差估计、变积分步长的低阶算法ode45 Runge-Kutta法,变步长的中等阶次积分算法ode113 变阶的Adams-Bashforth-Moulton,多步长ode15s 改进的Gear法,用于刚性方程的求解。,例:求微分方程,先建立一个系统模型文件(m文件函数)dfun.mfunction y=dfun(t,x)y=sqrt(x)+5;在命令窗口敲如下命令:t,x=ode23(dfun,0 10,1);plot(t,x),数值积分法、离散相似法 数值积分法上面以讲过。离散相似法是首先将连续系统模型离散化,得到等价的或相似的离散化的模型,然后对相似的

3、离散模型进行仿真计算。根据这一原理,首先应将连续时间系统模型转换为等价的离散时间系统模型。连续系统离散化处理是通过转移矩阵法;采样和信号保持器;变换法(如双线性变换)来实现的。,Matlab通过采样和信号保持器以及双线性变化法将连续系统模型转换为离散时间系统模型的函数C2D,调用格式为sysd=c2d(sys,Ts,method)其中,sys为线性连续时间系统;Ts为采样时间;sysd为等价的离散时间系统。method为离散化方法,可以选用:zoh 为零阶保持器 foh为一阶保持器 tustion为双线性变换法,prewarp为改进的双线性变换法 matched使连续和离散系统具有匹配的DC增

4、益,例:连续系统传递函数采用一阶采样保持器,采样周期为求其离散化系统模型,并比较离散前后系统阶跃响应。sysc=tf(l-1,14 5,td,0.35);%time delaysysd=c2d(sysc,0.1,zoh)step(sysc,sysd);,子系统创建及封装,在命令窗口键入“thermo”(这是一个房间热力学仿真演示程序)。里面包含许多模块,模块之间用直线相连,组成模型,模型造好后,可以仿真运行,等待结果。双击“house”模块,出现“thermo/house”窗口,表示house模块是由窗口右边所示的一些模块连接而成。像house这样由由几个相互关联的模块组合而成的模块在simu

5、link中称为子系统,用户自定义该子系统的图表和设置参数对话House房屋形状的图标就是封装后的结果。还可以做其他尝试,如:把温度设为80(预期的室内温度),观察仿真结果的变化。标签为daily temperature variation的正弦模块是设置日温度变化,试改变幅度值参数,观察仿真结果的变化。,SIMULINK 运行仿真,两种Simulink运行仿真的方法使用窗口运行仿真使用MATLAB 命令运行仿真,使用窗口运行仿真优点:人机交互性强,不必记住繁琐的命令语句即可进行操作。使用窗口运行仿真主要可以完成以下一些操作。1.设置仿真参数:仿真参数和算法选择的设置2.应用仿真参数:仿真参数和

6、算法设置后,使之生效3.启动仿真:选择命令运行仿真4.停止仿真:选择命令停止仿真5.中断仿真:可以在中断点继续启动仿真,而停止仿真则不能6.仿真诊断:在仿真中若出现错误,Simulink将会终止仿真并在仿真诊断对话框中显示错误信息,1.设置仿真参数选择菜单选项【SimulationParameters】,可以对仿真参数及算法进行设置,共有五个选项卡解法设置(Solver)(已讲)工作间I/O(Workspace I/O)诊断页(Diagnostics)(自学)高级设置(Advanced)(自学)实时工具对话框(Real-Time Workshop)(自学),工作间I/O,Simulink作为M

7、ATLAB 的一个附件,理应与MATLAB 很好地结合,它的输入数据可以从MATLAB的工作空间中获得,其仿真结果也可以被引入到MATLAB的工作空间。实现此项功能需要用到仿真参数对话框中的工作间I/O页。工作间I/O 页大致可以分为三个部分:从MATLAB工作空间获得系统输入(Load from workspace)仿真结果输出到MATLAB的工作空间(Save to workspace)输出选项(Save option)下面对Workspace I/O选项页的功能与使用分别予以简介。,从MATLAB工作空间加载(Load from workspace)虽然Simulink提供了多种系统输入

8、信号,但并不能完全满足需要。Simulink允许使用用户自定义的信号作为系统输入信号。在Load from workspace框中,用户可以设置MATLAB中的变量作为系统输入信号或系统状态初值,如下所述:(1)Input:用来设置系统输入信号,其格式为t,u,其中t、u 均为列向量,t 为输入信号的时间向量,u 为相应时刻的信号取值。可以使用多个信号输入,如t,u1,u2。输入信号与Simulink的接口由Inport模块(In1模块)实现。(2)Initial state:用来设置系统状态变量的初始值。初始值xInitial可为列向量。注意:使用xInitialstate所设置的状态变量初

9、始值会自动覆盖系统模块中的设置。另外,输入信号与状态变量需要按照系统模型中Inport模块(即In1 模块)的顺序进行正确设置。,仿真结果输出到MATLAB的工作空间(Save to workspace)使用Workspace I/O选项页可以将系统的仿真结果、系统仿真时刻、系统中的状态或指定的信号输出到MATLAB的工作空间中,以便用户对其进行定量分析,如下所述:(1)Time:输出系统仿真时刻。(2)States:输出系统模型中的所有状态变量。(3)Output:输出系统模型中的所有由Output 模块(即Out1 模块)表示的信号。(4)Final state:输出系统模型中的最终状态变

10、量取值,即最后仿真时刻处的状态值。,输出选项(Save option)(1)Limit data points to last:表示输出数据的长度(从信号的最后数据点记起)。(2)Format:表示输出数据类型。共有三种形式:Structure with Time(带有仿真时间变量的结构体)、Structure(不带仿真时间变量的结构体)、Array(信号数组)。,使用MATLAB命令运行仿真,MATLAB提供了sim命令,用户可以在MATLAB 的环境下以命令行或M 文件的形式运行Simulink模型。使用命令行方式,用户可以在脚本文件中重复地对同一系统在不同的仿真参数或不同的系统模块参数下

11、进行仿真,而无需一次又一次启动Simulink图形窗口中的Start Simulink。,建立一个简单的动态系统,其功能如下:(1)系统的输入为一单位幅值、单位频率的正弦信号;(2)系统的输出信号为输入信号的积分。要求如下:(1)系统的输入信号由MATLAB 工作空间中的变量提供,时间010s;(2)使用MATLAB绘制原始输入信号与系统运算结果的曲线。,问题描述:原函数:sin(t)时间区域:0-10s原函数的积分为:-cos(t)+C若取零初始条件,则有:C=1;因此,有x(t)=-cos(t)+1,对Workspace I/O 页进行如下设置:(1)Load from workspace

12、 栏:Input 打勾,并填入sim_input(由MATLAB 工作空间输入的输入名)。Initial state 不选。(2)Save to workspace 栏:Time 和Output 项勾上,State 和Final state 项不勾。(3)Save options 栏依次为:1000,1,Array,在MATLAB工作空间中定义输入变量sim_input如下:t=0:0.1:10;t=t;%表示输入信号的时间范围u=sin(t);%产生输入正弦信号sim_input=t,u;%传递给Simulink系统模型的变量然后运行Simulink仿真。:或者 tout,x,yout=si

13、m(command_in_out)使用sim进行系统仿真,仿真参数取与前面相同最后在MATLAB工作空间运行如下命令plot(t,u,tout,yout,-);grid,利用C写的S-Function执行步骤,mdlInitializeSizes是Simulink与S-function交互时调用的第一个方法。随后Simulink将调用其他S-function方法(都以mdl开头)。仿真结束时,Simulink调用mdlTerminate。注意:Simulink仿真时直接在适当的时间调用每个回调方法,利用C写的S-Function仿真步骤如图4.1所示:,S-Function模板创建DLL,新建

14、一个文件夹,选择为当前目录 打开simulink,选择User-Defined Functions/S-Function Examples/C-files S-Function/Basic C-MEX Template,根据所定义模块的功能,将该自动生成的文件重命名,并存入你指定的文件夹中 将模版的c文件另存,文件名自定义,如MyOn.cpp。将Function改成和文件名一样,如图4.5所示。,在mdlOutputs(SimStruct*S,int_T tid)函数中进行修改,将real_T*y=ssGetOutputPortSignal(S,0);替换为 real_T*y=ssGetOut

15、putPortRealSignal(S,0);回到Matlab命令窗口,输入:mex setup Matlab命令窗口,输入:mex MyOn.cpp,可以看到出现了一个MyOn.dll文件 在simulink窗口下,新建一个mdl文件(可为mytemp1,mdl的文件名不能与sfunction的名字相同,即不能为MyOn,否则会出现命名冲突。),向其中添加一个S-Function模块,双击模块,将其中的S-Function Name改为dll的文件名(不加后缀,也就是MyOn)。,相同,输入输出设置及采集编程,以下编程均在MyOn.cpp文件中,标注输入输出设置:,三个接口没有任何,这样我们

16、就不清楚道理每个接口作用。为此,我们可以在图4.10所示的模块上单击右键,然后选择Mask S-Function,,在该cpp文件mdlStart(SimStruct*S)函数中添加采集卡初始化以及开启采集任务。const real_T*u1=(const real_T*)ssGetInputPortRealSignalPtrs(S,0);const real_T*u2=(const real_T*)ssGetInputPortRealSignalPtrs(S,1);const real_T*u3=(const real_T*)ssGetInputPortRealSignalPtrs(S,2)

17、;double Fs=u10;/采样频率 if(ADCardInit()!=1)/采集卡初始化 ssSetErrorStatus(S,Cant find the DAQCard!);DAQ1(0 x1,5000,1024*4,buffer);/开启采集Fs=5000 pnum=0;/初始化buf指针位置,采集卡初始化及开启数据采集:,if(u20=1)DAQ1(0 x1,Fs,1024,buffer);else if(u20=2)DAQ1(0 x2,Fs,1024,buffer);else if(u20=3)DAQ1(0 x4,Fs,1024,buffer);else if(u20=4)DAQ

18、1(0 x8,Fs,1024,buffer);else if(u20=5)DAQ1(0 x10,Fs,1024,buffer);else if(u20=6)DAQ1(0 x20,Fs,1024,buffer);else if(u20=7)DAQ1(0 x40,Fs,1024,buffer);else if(u20=8)DAQ1(0 x80,Fs,1024,buffer);else ssSetErrorStatus(S,channel number is wrong!);,ADCardInit()是采集卡DLL函数,作用是初始化采集卡。如果初始化成功则返回1,用于判断是否连上采集卡。DAQ1()

19、函数为采集卡DLL单通道采样函数,作用是启动采集卡进行单通道数据采集。参数1为采样通道,是以8位2进制数表示各个通道是否开启,如对通道1进行采集,该参数即为:0000 0001;同理,对3通道进行采集,其参数为 0000 0100。各通道对应关系分别为:0 x1:通道10 x2:通道20 x4:通道30 x8:通道40 x10:通道50 x20:通道60 x40:通道70 x80:通道8,DAQ2(ch,Fs,len,buffer1,buffer2)为双通道采样函数,第一个参数为通道号,和DAQ1一样,同样是以2进制数表示,如对1,2通道进行采集,该参数即为0000 0011;对3,4通道进行

20、采集,即为0000 1100;下面是几组通道的对应关系0 x3:通道1、20 x0A:通道2、4 0 x0C:通道3、40 x11:通道1、50 x12:通道2、5 0 x22:通道2、6程序中使用位操作,首先获取采样通道号,例如1和2,将通道变量置0,即程序中的:unsigned char channel=0 x00;/初始化采集通道用位操作方法,设置channel的第0位、第1位为1:channel|=(1ch1);/设置采样通道1(该例子中ch1为0)channel|=(1ch2);/设置采样通道2(该例子中ch2为1)第二个参数Fs为采样频率;第三个参数len为采样长度;第四、五个参数

21、为两个通道的缓存区指针。,数据输出,数据输出在mdlOutputs()函数内实现。int Length=1024*4;/读取的buffer长度 const real_T*u2=(const real_T*)ssGetInputPortRealSignalPtrs(S,1);ReadDaq(u20,Length,buffer);/从采集卡读取buffer real_T*y=ssGetOutputPortRealSignal(S,0);/获取输出指针 if(pnum=Length)pnum=0;/判断指针是否已满*y=bufferpnum;/输出第pnum个点的值 pnum+;/指针加1 函数Re

22、adDaq()作用是读取下位机buf里的采样数据。参数1为通道号,分别为1-8;参数2为buffer长度;参数3为保存的buffer指针。,退出采集卡:函数ADCardQuit()是采集卡dll函数,其作用是退出采集卡。static void mdlTerminate(SimStruct*S)ADCardQuit();再次在MATLAB的Command Window中输入mex MyOn.cpp,完成数据采集卡的程序编写。打开测试实验平台上的直流电源,打开通道1的信号源,返回使用该模块形成的mytemp1.mdl文件,将运行时间改为inf,点击菜单栏上的“保存”图标,点击菜单栏上的“运行”图标

23、,进行执行。双击Scope可以查看采集的信号波形。,调用界面设计,clf resetset(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,.%制作

24、“采集”按钮 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文件运行%“采集”按键引起的回调 set(hpush1,callback,.set_param(mytemp1,SimulationCommand,start),.t=timer(TimerFcn,getdata,Period,1,ExecutionMode,fixedSpa cing,TasksT

25、oExecute,inf),.%设置定时器,运行getdata文件,与上面是一行。pause(2);start(t);,.%暂停2秒并启动定时器);%“停止”按键引起的回调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文件停止运行。,回调属性,球杆定位控制系统实验,电机简单运动控制Qtest.mdl的Matlab模型结

26、构如下图所示:模型主要由一个常量模块COM,代表使用的串口号;S函数InitIPM_RAM,初始化控制卡和下载配置文件;一个子系统构成。双击子系统,能看到其内部结构如下所示:,将文件mcqg.out、IPM100.CFG、TMLcomm.dll、TML_lib.dll、TML_lib.h、TML_lib.lib复制到当前路径中。其中mcqg.out是执行InitIPM_RAM必须要的文件(在s-function的c文件中有相应语句);IPM100.CFG、TMLcomm.dll、TML_lib.dll、TML_lib.h、TML_lib.lib五个文件是IPM的驱动文件;编写 InitIPM_

27、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产生对应的dll文件。InitIPM_RAM 函数功能:对采集控制卡初始化;函数实现描述:定义与上位机通讯的波特率 115200定义驱动器的轴号 255 定义与上位机通讯方式 RS232定义与上位机通讯默认端口号 串口 1初始化驱动器载入驱动器配置文件 使用说明:1个输入 设置串口号

28、1个输出“1”(真值也就是“Subsystem的一个触发信号,初始化完成后发出信号),Get_AD 函数功能:采集AD数据(对于球杆系统为采集小球位置);函数实现描述:定义AD采样端口的值、地址、AD端口号等变量对他们赋初始值IPM100运动控制器有两个10位的模拟量输入端口,AD2和AD5,该函数中对AD端口号AD_No(系统默认为5)进行判断并读取该端口模拟量的值,并赋给变量val_ad。再通过读取内存中模拟量输入端口对应地址单元内的值,根据*y=400.00*(float)(unsigned short)val_ad/65535.00)计算出小球的实际位置(单位毫米)。其中400为整个位

29、移传感器的长度(400毫米),65535(1111 1111 1111 1111)B 为小球位置为400mm时对应的值。备注:AD转换结果有10位的分辨率,并左移6位。这样AD转换后的值在内存中为16位。该函数的输入是AD输入通道模拟量经转换后在内存中的值,输出为计算出来的小球的实际位置。使用说明:1个输入:AD端口号1个输出:经过换算出来的小球的位置 Y,Move_Abs函数功能:绝对运动命令:控制电机运动函数实现描述:输入电机的目标位置、目标速度和目标加速度,使电机运动到设定的目标位置使用说明:3个输入:设定运动的速度和加速度及目标位置 Stop函数功能:运动停止命令函数函数实现描述:读入

30、电机停车的方式(默认 STOP_3 系统以设定的加减速度停车)使用说明:一个输入:设定停止模式,Servo_on 函数功能:电机伺服控制函数实现描述:读入 TS_Power(Axis_On_Flag)Axis_On_Flag 值(1或0)根据输入值上伺服或下伺服。使用说明:一个输入:设定伺服状态(上伺服或下伺服),问题讨论1:,问题1:Servo_on开时,曲柄才能运动到目标位置,问题2:当Stop关闭时,曲柄才能运动到目标位置,当Stop开时,理论上曲柄会一动一停的运动到目标位置,实际很艰难,可以听到电机在运动。QGTest的子系统中五个模块的程序是循环执行的。Stop和Move_Abs循环

31、执行,曲柄则会一停一动的运动。如果搭建的只有servo_on和Stop两个模块的系统中则不存在这个问题。对于Servo_on可能也是由于程序的循环执行所造成的。,问题讨论2:,1.时域波形特征:有效值,均值,均方差,峰值,峰峰值,频率.2.频域波形分析:信号波形和相应幅值谱和相位谱,并得到相应的频率值和幅值.Fft的双边特性3.热电偶温度测量:测量信号的均值4.数字滤波器设计消除不需要的频率分量,卷积基础,任何输入的数字信号均可以表示成时延脉冲的线性组合,如下数字信号的脉冲表示,而单位脉冲响应hn,是系统对单位脉冲函数输入的响应。每个滤波器都有单位脉冲响应。如果已知滤波器的单位脉冲响应hn,则

32、可以利用卷积的方法来计算滤波器在任意输入的输出。,卷积的计算,由于滤波器为线性时不变因果系统,当输入是单位脉冲n-k,则输出是hn-k,可见,系统的输出取决于输入和系统的脉冲响应hn,卷积事实上等于序列xk和和hk的反转位移序列相乘,卷积的计算:逐点相乘后相加,这里要理解hn-k的含义,hn-k是hk关于纵轴的镜像;hn-k是h-k右移n个采样点所得的值。,离散系统的时域模型差分方程,差分方程是递归定义的,函数f(t)在t=kT处第i阶差分的差分就是其第i+1阶差分,如:上述函数的二阶前向差分方程定义为:,离散系统中信号是以序列的形式出现的,因此只能用差分方程来分析。设f(t)为t的函数,在t

33、=kT处取值为f(kT),此时f(t)在t=kT处的一阶差分方程定义为:,前向差分,后向差分,差分方程与卷积,差分方程与卷积均可以计算己知输入情况下的滤波器的输出,二者的结果对于同一个滤波器而言应该是相同的。,Z变换与差分方程求解,Z变换是对离散序列进行的一种数学变换。常用以求线性时不变差分方程的解。,离散时间序列 x(n)的Z变换:,逆Z变换:由Y(z)计算yn,yn=Z 1Y(z),z-1延迟因子,不能把单步延迟项z-1和逆Z变换的符号Z 1混淆。,线性性质:,时延性质:延迟定理,用Z传输函数、脉冲响应、差分方程可以描述同一个数字系统。,数字滤波器设计,数字滤波器,经典滤波器,根据滤波特性

34、来分:低通;高通;带通;带阻(理想滤波器是不可实现的,只能在一定程度上去逼近),从单位脉冲响应长度来分:IIR-DF;FIR-DF,现代滤波器,寻找在某种准则下的最优解维纳滤波器,卡尔曼滤波器,自适应滤波器,从对信号处理的作用来分:选频;其他,1.p和s分别称为通带边界频率和阻带截止频率。,2.从p到s称为过渡带,过渡带上的频响一般是单调下降的,3.通带频率范围为0|p,在通带中要求(11)|H(ej)|1,阻带频率范围为s|,在阻带中要求|H(ej)|2。,归一化的数字低通滤波器幅度响应指标,FIR 滤波器可以设计为线性相位,并且总是稳定的。在多数情况下,FIR滤波器的阶数 NFIR 显著大

35、于具有等效幅度响应的IIR滤波器阶数NIIR。NFIR/NIIR 通常为10的量级或更高.IIR 滤波器通常计算更简便。在很多应用中,并不要求滤波器具有严格的线性相位,在这些情况下,通常会因计算简便而选择IIR滤波器。,求解得:,滤波器的特性由3db截止频率和阶数N确定.,附加条件1过渡比:通常用k表示,它反应过渡带的性能,过渡带越窄,k值趋近于1,对于低通滤波器k1.,附加条件2偏离参数:通常用k1表示,设计要求,只要求简单的iir滤波器,有低通、高通等选项。,Fs=5120;dt=1.0/Fs;N=1024;T=dt*N;t=linspace(0,T,N);y=sin(2*3.14*100

36、*t)+1/3*sin(9*2*3.14*100*t);plot(t,y);fp=280;fs=450;wp=2*fp/Fs;ws=2*fs/Fs;rp=0.1;rs=60;%DF指标(低通滤波器的通、阻带边界频)N,Wc=buttord(wp,ws,rp,rs);%估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc b,a=butter(N,Wc);%设计Butterworth低通滤波器%N,Wc=ellipord(wp,ws,rp,rs);%调用ellipord计算椭圆DF阶数N和通带截止频率wp%b,a=ellip(N,rp,rs,Wc);%调用ellip计算椭圆带

37、通DF系统函数系数向量b和a%b,a=butter(N,Wc,high);%设计Butterworth高通滤波器 figure(2);%打开窗口2freqz(b,a);%求数字低通滤波器的频率响应%h,f=freqz(b,a);%求数字低通滤波器的频率响应figure(3);%打开窗口3y1t=filter(b,a,y);%滤波器软件实现,应用差分方程%conv()是卷积运算,适用于Fir滤波器滤波运算。plot(y1t),数字PID控制器,PID控制器的传递函数:,对于微分环节:将微分项离散化,可用一阶向后差分法则近似得:,T 为采样周期,k 为采样序号,,上式的z变换为:,同样,对于积分环节:可以用所有累加和近似得到,也可以用使用递归方法,上次累加和+本次增量积分项.,其z变换为:,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号