机 电 工 程 学 院
《Matlab控制系统仿真》实验指导书
学 院
班 级
姓 名
学 号
温州大学机电工程学院 制
实验一 MATLAB语言基本命令
1 实验目的
1. 掌握科学计算的有关方法,熟悉MATLAB语言及其在科学计算中的运用;
2. 掌握MATLAB的命令运行方式和M文件运行方式;
3. 掌握矩阵在MATLAB中的运用。
2 实验器材
计算机WinXP、Matlab7.0软件
3 实验内容
(1). 输入 A=[7 1 5;2 5 6;3 1 5],B=[1 1 1; 2 2 2;3 3 3],
在命令窗口中执行下列表达式,掌握其含义:
A(2, 3) A(:,2) A(3,:) A(:,1:2:3)
A(:,3).*B(:,2) A(:,3)*B(2,:) A*B A.*B
A^2 A.^2 B/A B./A
(2).输入 C=1:2:20,则 C(i)表示什么?其中 i=1,2,3,…,10;
(3).查找已创建变量的信息,删除无用的变量;
(4). 试用 help命令理解下面程序各指令的含义:
clear
t =0:0.001:2*pi;
subplot(2,2,1);
polar(t, 1+cos(t))
subplot(2,2,2);
plot(cos(t).^3,sin(t).^3)
subplot(2,2,3);
polar(t,abs(sin(t).*cos(t)))
subplot(2,2,4);
polar(t,(cos(2*t)).^0.5)
4 实验步骤:
打开MATLAB程序,将实验内容中的题目依次输入MATLAB中,运行得到并记录结果,最后再对所得结果进行验证。
5 实验报告要求
记录实验数据,理解其含义
实验二 MATLAB语言程序设计
1 实验目的
(1)掌握Matlab程序的编制环境和运行环境。
(2)掌握Matlab程序的编写方法。
(3)能编写基本的数据处理Matlab程序。
(4)能编写基本的数据可视化Matlab程序。
2 实验器材
计算机WinXP、Matlab7.0软件
3 实验内容
(1) Matlab脚本文件编写和执行
(2) Matlab 函数文件的编写和调用
(3) nargm和nargout函数使用方法
(4) 局部变量与全局变量使用
4 实验步骤
1、Matlab命令文件编写
(1) 建立自己工作目录,如/Mywork。
(2) 设置工作目录的搜索路径。
(3) 打开新的M文件编辑器中
(4) 在编辑器中完成(求小于2000且为2的整数次幂的正整数)的程序内容, 调试后,将其以test1.m形式保存在/Mywork中
2、Matlab函数文件编写
编写(求小于任何指定的正整数n且为2的整数次幂的正整数)的函数文件, 调试后,将其以tt.m形式保存在/Mywork中
3、nargm和nargout函数使用方法
利用nargm函数,编写函数文件testarg(a,b),从而实现因参数个数的不同,分别调用函数内部不同的的执行内容。
4. 全局变量使用
利用全局变量编写函数weight_add,实现将输入的参数加权相加
5 实验报告要求
把调试好的脚本文件和函数文件,清晰的写入报告中,并附加一些语句的解释。
实验三 典型数控机床建模
1 实验目的
(1) 了解数控机床进给系统的建模方法;
(2) 熟练M语言与simulink建模仿真方法
2 实验器材
计算机WinXP、Matlab7.0软件
3 实验内容
进给系统的精度是影响数控机床的精度主要因素,进给伺服系统根据数控装置发来的速度与位移指令信号,由伺服电路做一定的转换和放大后,经伺服驱动装置和机械传动机构等执行部件实现工件进给和运动,达到加工出所需的工件外形和尺寸。本实验以CK7815数控机床进给系统常用的步进电机、滚珠丝杠等构成的经典结构为对象,建立数控机床进给系统的数学模型(用系统方块图表示)。
4 实验步骤
按图1所示,分析CK7815数控机床进给部分的结构,由DC伺服电机通过一级减速齿轮和滚珠丝杠螺母机构驱动工作台运动。利用运动学原理构建出驱动电机和机械系统模型,从而获得整体进给系统的数学模型。
图1.直流伺服进给系统方块图
(1).对于永磁直流电动机,其微分方程式为
(1)
式中:为电机输出力矩;为电机扭转刚度系数;为电枢回路的电感;为电枢回路的总电阻;为电枢回路的电流;为电枢回路的控制电压;为电机的反电动势;为测速电机系数;为电机输出转速;为折算到电机轴上的总转动惯量;B为折算到电机轴上的总粘性阻尼系数。若设功率放大器的增益为,电机的输出转角有关系,将式(1)进行拉氏变换,获得输出转角与输入电枢的控制电压间关系为:
(2)
(2)机械传动装置:设分别为机械传动装置折算到电机轴上的等效转动惯量、等效回转阻尼系数和等效扭转刚度系数。经过等效变换后,机械传动装置可简化为图2所示系统。为电机驱动转矩,为电机输入转角,为电机轴在负载作用下的实际转角。
图2. 等效机械传动装置简图
由图所示可以列出平衡方程
(3)
则输入转角与工作台之间的传递函数为:
(4)
式中:为齿轮1,2的齿数和丝杠导程,为进给系统的无阻尼固有频率,为进给系统的阻尼比。
在仿真时,据伺服驱动系统要求,取放大器增益,电机参数
z1/z2=0.5, L=4mm,
(3) 检测装置:将编码器测得的实际位移量,以脉冲数直接反馈到输入端,设传递函数为1 。
(4) 比较转换装置
将指令与反馈脉冲比较,差值经过D/A转换,变为电压信号。该环节为比例环节增益为。
(5) 根据永磁直流电动机的传函式(2)与机械传动装置的传函式(4),在实验报告中,编写系统闭环的的位置阶跃响应仿真的M脚本文件或者利用simulink构建方块图进行仿真。
(6) 观察所得到的结果进行分析
5 实验报告要求
(1)编写M脚本程序进行调试,完成进给系统的位置闭环仿真。
(2)构建进给系统的闭环simulink仿真,与脚本语言进行比较。
(3)根据仿真结果进行必要的说明。
实验四 SIMULINK的初步使用
1 实验目的
(1)熟悉Matlab中基本Simulink仿真环境;
(2)掌握simulink进行系统仿真设计的基本步骤。
(3)了解simulink 中各模块库;
(4)掌握仿真系统参数设置及子系统封装技术
2 实验器材
计算机WinXP、Matlab7.0软件
3 实验内容
(1) 在命令窗口输入simulink,观察其模块库的构成;
(2) 搭建一个简单的simulink二阶不稳定系统的阶跃响应仿真模型
(3) 设计PID控制器实现稳定阶跃响应
(4) 封装PID控制器
4 实验步骤
(1) 建立新的simulink模块编辑界面。
(2) 在simulink模块中的continue模块集中拉出Transfer Fun 模块,从Sink模块集中拉出阶跃信号模块,从Math operations模块集中拉出Sum模块,从Sink模块集中拉出Scope模块,构建二阶系统的阶跃响应的系统模块图.
(3) 通过设定Simulink 解法器的相关参数,进行仿真并从结果中判断说明系统的稳定性。
(4) 在原有系统模块的基础上,从continue模块集中拉出Derivative、Integrator以及从Math Operations模块集中拉出Gain模块,设计PID控制器,对原系统进行串联校正。
(5) 对PID控制器进行封装。
5 实验报告要求
(1)画出二阶系统的阶跃响应的系统模块图和结果,说明系统不稳定的理由。
(2)画出PID控制系统的在不同参数下的仿真曲线。
实验五 MATLAB控制系统工具箱使用
1 实验目的
(1)了解Matlab控制系统工具箱中常用函数.
(2)掌握模型转换方法以及奈氏图、伯德图的绘制。
(3)掌握系统脉冲、阶跃等响应的仿真方法
2 实验器材
计算机WinXP、Matlab7.0软件
3 实验内容
(1)利用residue函数求取传递函数的部分分式展开式
(2)利用tf函数构建系统传递函数
(3)利用impulse、step、lsim等函数仿真系统的单位脉冲、阶跃、速度响应。
(4)画出单位负反馈的开环传递函数的在频率0.01-100rad/s间的伯德图
(5)画出系统的乃奎斯特图
4 实验步骤
(1) 写出传递函数的部分展开式
a. 列些分子num、分母den的系数
b. 利用residue(num,den) 求出零极点和余项
c. 把部分展开式写入实验报告。
(2)对于系统
a.首先利用conv函数展开分母,获得各阶系数,此时num=[14 21];
den=conv(conv(conv([1 0 0], [3 1]),conv([1 2],[1 2])), [5 0 3 8])
b.再利用tf函数构建传递函数
c. 结果写入实验报告
(3)a. 用tf(num,den)函数构建高阶系统传递函数
b.构建时间向量t
c 用函数impulse及step仿真系统的单位脉冲响应、单位阶跃响应
d. 用lism函数仿真系统速度响应
e. 程序调试成功后,写入实验报告
(4)绘制单位负反馈的开环传递函数的伯德图。
a. 写出num,den
b. 用logspace函数设定频率范围
c 利用bode函数输入幅值增益、相位
d. 把增益值转换为分贝值
e. 添加网格线,并生成二行一列的图表
f. 用semilogx在两个图标中分别生成幅值频率和相频特性曲线。
g. 用margin函数获取开环的幅值裕量和相位裕量。
h. 程序调试后写入实验报告
实验六 数控机床SIMULINK仿真
1 实验目的
(1) 了解数控机床的位置与速度反馈控制。
(2) 提高控制器设计能力并进行仿真验证。
(3) 熟练SImulink仿真操作方法。
2 实验器材
计算机WinXP、Matlab7.0软件
3 实验内容
基于实验3数控机床的进给系统,根据其电机以及机械部分的关系,参考推导出的传递函数,用simulink构建完整的进给系统的控制仿真方块图。并对速度回路进行PI控制,并对所设计好的PD控制器进行封装。同时对位置回路进行PID控制。比较控制前后的仿真结果。
4 实验步骤
(1)利用M脚本编辑器,完成数控机床进给部分的参数设定。
(2)完成Simulink的系统模块构建。
(3)为速度回路与位置回路分别设计PI和PID控制器。
(4)设定仿真求解器的参数,进行仿真
(5)调节PID控制器参数,使进给过程快速、稳定。
(2)
5 实验报告要求
(1)画出调试好的数控机床进给系统的PI速度控制和PID位置控制的Simulink模块图。
(2)比较分析仿真结果。
实验七 MATLAB数字控制器设计初步
1 实验目的
(1)掌握离散信号z变换和z逆变换的matlab方法
(2)掌握离散系统的系统函数零极点分布与系统频率特性的matlab实现方法
(3)掌握matlab计算差分方程的方法。
2 实验器材
计算机WinXP、Matlab7.0软件
3 实验内容
(1)找到matlab的符号运算工具箱提供的z变换函数ztrans与反变换函数iztrans,通过help理解其用法,并掌握符号表达式的构建和应用。
F=ztrans(f) %求符号函数f的z变换,返回函数的自变量为z;
F=ztrans(f,w) %求符号函数f的z变换,返回函数的自变量为w;
F=ztrans(f,k,w) %对自变量为k的符号函数f求z变换,返回函数的自变量为w。
f=iztrans(F) %对自变量为z的符号函数F求逆z变换,返回函数的自变量为n;
f=iztrans(F,k) %对自变量为z的符号函数F求逆z变换,返回函数的自变量为k;
f=iztrans(F,w,k) %对自变量为w的符号函数F求逆z变换,返回函数的自变量为k。
4 实验步骤
(1).已知序列,求其z变换。
解:在命令窗口中输入如下命令,即可完成f(k)的z变换
>> syms k
>> f=sym('2^(-k)'); %定义序列
>> F=ztrans(f) %求z变换
在实验报告中,写出程序并写出其结果
(2)已知一离散系统的系统函数,求其冲激响应h(k)。
解:运行如下M文件,
syms k z
H=sym('z/(z^2+3*z+2)');
h=iztrans(H,k) %求逆z变换
在实验报告中,写出程序并写出其结果
(3) MATLAB的zplane函数用于系统函数的零极点图的绘制,调用方式为:
zplane(b,a) 其中, b、a分别为系统函数分子、分母多项式的系数向量
例.已知一离散系统的系统函数,试绘制其零极点图。
解:在MATLAB的命令窗口中输入如下命令,即可得到其零极点图(图15-1)。
>> a=[1 3 2];
>> b=[1 -0.7 0.1];
>> zplane(b,a) %绘制其零极点图
在实验报告中,写出程序并画出其结果
(4) 若描述离散系统的差分方程为,已知激励,初始状态y(-1)=1,y(-2)=0,求系统的零输入响应,零状态响应。
【解】将差分方程两边取z变化的
,进整理,得
,前一部分为零输入响应,后一部分为零状态响应。
将y(-1)=1,y(-2)=0代入第一部分,则零输入响应的表达式为
,因此经过z的逆变化得,
同理,则零状态激励响应响应的表达式为,
如果直接利用iztrans函数进行编程求解如下
clc
syms z
y=0.5*(1/z-1)/(1+1/2*z-1/2*z^2)
y=iztrans(y)
结果:1/2*charfcn[1](n)-3/4*charfcn[0](n)+1/12*2^n+2/3*(-1)^n
(5)已知,通过部分分式展开法求F(z) 。
F=sym('(s+2)/(s*(s+1)^2*(s+3))');%传递函数F(s)进行符号定义
[numF,denF]=numden(F) ;%提取分子分母
pnumF=sym2poly(numF) ;%将分子转化为一般多项式
pdenF=sym2poly(denF) ;%将分母转化为一般多项式
[R,P,K]=residue(pnumF,pdenF)%部分分式展开
对应部分分式分解结果为:
剩余部分在实验报告中完成
5 实验报告要求
(1)按照要求,写出程序及相应结果
实验八 MATLAB数字控制器设计
1 实验目的
(1)了解数字PID控制器的结构和控制原理。
(2)掌握连续系统的数字PID控制仿真。
(3) 掌握离散系统的数字PID控制仿真。
2 实验器材
计算机WinXP、Matlab7.0软件
3 实验内容
(a). 计算机控制是一种采样控制,它只能根据采样时刻的偏差计算控制量。因此连续PID控制算法不能直接使用,需要离散化成数字PID控制器。这里以一系列的采样时刻电KT代表连续时间t,以矩形法数值积分近似代替积分,以一阶后向差分近似代替微分。即对于连续控制系统中PID的控制律
,改写为离散形式如下
,其中,To为采样时间
(附注:因此,PID控制器的脉冲传递函数如下所示:
式中,
(b). 练习连续系统与离散系统的数字控制方正
4 实验步骤
【连续系统与数字控制器】
【例】采用Matlab语句进行仿真。被控对象为一电机模型
式中,,输入指令信号为r=0.5sin(2*pi*t),采用PID控制方法设计控制器,其中,求其正弦波的跟踪结果。
【解法1】如图建立系统的仿真图,模块的采样时间都设定为1ms,其中电机系统为连续系统,控制器采用simulink模块与M函数相结合的形式。(chap_3.mdl)
function [u]= pidsimf1(u1,u2)persistent pidmat errori error_1
if u1==0
error_1=0
end
ts=0.001;
kp=20;
kd=0.5;
error=u2;
errord=(error-error_1)/ts;
u=kp*error+kd*errord;
error_1=error;
【解法2】直接编写M脚本文件和M函数,当系统的数学模型以微分方程给出时,利用ODE45的方法求解连续对象方程。(chap1_2.m)
%Discrete PID control for continuous plant[]
clear all;
close all;
ts=0.001; %Sampling time
xk=zeros(2,1);
e_1=0;
u_1=0;
for k=1:1:2000
time(k) = k*ts;
rin(k)=0.50*sin(1*2*pi*k*ts); %构造正弦输入信号
para=u_1;
tSpan=[0 ts];
[tt,xx]=ode45(' PlantModel ',tSpan,xk,[],para); %前面的输入为t,x,后面的为参数a,b,c。一定要在t,x与参数间写[].
xk = xx(length(xx),:);
yout(k)=xk(1);
e(k)=rin(k)-yout(k);de(k)=(e(k)-e_1)/ts;
u(k)=20.0*e(k)+0.50*de(k);
%Control limit
if u(k)>10.0
u(k)=10.0;
end
if u(k)<-10.0
u(k)=-10.0;
end
u_1=u(k);
e_1=e(k);
end
figure(1);
plot(time,rin,'r',time,yout,'b');
xlabel('time(s)'),ylabel('rin,yout');
figure(2);
plot(time,rin-yout,'r');
xlabel('time(s)'),ylabel('error');
function dy = PlantModel(t,y,flag,para)
u=para;
J=0.0067;B=0.1;
dy=zeros(2,1);
dy(1) = y(2);
dy(2) = -(B/J)*y(2) + (1/J)*u;
【离散系统与数字控制器】
【例】采用Simulink仿真。被控对象为三阶传递函数,采用Simulink模块与M函数相结合的形式,利用ODE45的方法求解连续对象方程,主程序由Simulink模块实现,控制器由M函数实现。输入指令信号为采样周期为1ms的正弦信号。采用PID方法设计控制器,其中Kp=1.5,Ki=2,Kd=0.05。偏差的初始化是通过时钟功能实现的,从而在M函数中实现偏差的积分和微分
【解法1】建立simulink仿真图,首先对连续系统进行离散(利用c2d函数)
%连续系统离散化,保存为lisanpid.m
num=523500
den=[1 87.5 10470 0]
sys=tf(num,den)
dsys=c2d(sys,1e-3,'z')
[num1 den1]=tfdata(dsys,'v')
%离散控制器函数
function [u]=pidsimf(u1,u2)
% persistent pidmat errori error_1
if u1==0
errori=0
error_1=0
end
ts=0.001;
kp=1.5;
ki=1.0;
kd=0.01;
error=u2;
errord=(error-error_1)/ts;
errori=errori+error*ts;
u=kp*error+kd*errord+ki*errori;
error_1=error;
5 实验报告要求
(1)画出连续和离散系统的simulink模块图
(2)画出两种方式的仿真结果