MATLAB作业

发布 2022-09-20 19:23:28 阅读 7665

matlab大作业。

指导老师: 金济

年级专业 11 自动化 2 班

姓名学号麦煜华201131200818

严志健201131200826

范俊伟201131200806

2013 年 01 月02日。

使用matlab的simulink建模与**的方法,设计出直流电机双环控制调速系统。直流电机双环控制调速系统框图如下。其中速度控制器采用pwm控制;晶闸管整流器和直流电机使用s函数编写。

图1:直流电机双闭环控制调速系统框图。

从上图给出的控制系统框图可见,其中涉及的到晶闸管整流环节及电机环节,用传统的控制系统建模方式很难精确描述,所以在控制系统研究中经常对它们进行简化。采用s函数编写是个很好的简化方法。

方案一:对于pwm 发生器,采用两个discrete pwm generator 模块。由于此模块中自带三角波,其幅值为1,且输入信号应在-1 与1 之间,将输入信号同三角波信号相比较,当比较结果大于0时,占空比大于50 %,pwm 波表现为上宽下窄,电机正转;当比较结果小于0 而大于-1 时,占空比小于50 %,pwm 波表现为上窄下宽,电机反转。

discrete pwm generator 模块的参数设置为:调制波为外设,载波频率根据电力电子开关频率确定。其次,由于电机运转时,h 桥应与对角两管触发信号一致,为此采用selector 模块(路径为:

simulink/signal routing/selector),其参数设置为:input type 为vector,elements 为[1 2 4 3], 使得pwm 发生器信号同h 桥对角两管触发信号相对应。pwm 发生器模型及封装后子系统如下图所示。

图2:pwm 发生器模块。

方案二:基于s函数的pwm**。采用s函数编写pwm模块。

pwm模块s函数如下:

function [sys,x0,str,ts] =pwm(t,x,u,flag,t)

switch flag,case 0,[sys,x0,str,ts]=mdlinitializesizes(t);

case 3,sys=mdloutputs(t,x,u,t);

case 4,sys=mdlgettimeofnextvarhit(t,x,u,t);

case ,sys=

otherwise

error(['unhandled flag = num2str(flag)])

endfunction [sys,x0,str,ts,t]=mdlinitializesizes(t)

sizes = simsizes;

= 1; %at least one sample time is needed

sys = simsizes(sizes);

x0 = str =

ts = 2 0];

function sys=mdloutputs(t,x,u,t)

if t-fix(t/t)*t==0

sys=sign(u);

elsesys=0;

endfunction sys=mdlgettimeofnextvarhit(t,x,u,t)

if mod(t,t)==0&&abs(u)>0

h=abs(u)*t;disp('b');

elseh=t-mod(t,t);disp('c');

enddisp([h,u,t]);

sys=t+h;

图3:pwm控制系统**模型。

2.2 晶闸管整流环节。

晶闸管整流**s函数:

function [sys,x0,str,ts] =gto(t,x,u,flag)

switch flag,case 0,[sys,x0,str,ts]=mdlinitializesizes;

case 2,sys=mdlupdate(t,x,u);

case 3,sys=mdloutputs(t,x,u);

case ,sys =

otherwise

'simulink:blocks:unhandledflag', num2str(flag));

endfunction [sys,x0,str,ts]=mdlinitializesizes

sizes = simsizes;

sys = simsizes(sizes);

x0 = 0];

str =

ts = 1 0];

function sys=mdlupdate(t,x,u)

sys = fst(u) *220;

function sys=mdloutputs(t,x,u)

sys = x;

function f = fst(x)

if x<=0.5 ,f = 0;

else, f = 1;

end图4:晶闸管整流**s函数模块。

电机**s函数:

function [sys,x0,str,ts] =dianji(t,x,u,flag,u1n,in,nn,ra)

switch flag,case 0,

[sys,x0,str,ts]=mdlinitializesizes;

case 1,

sys=mdlderivatives(t,x,u);

case 3,

sys=mdloutputs(x,u1n,in,nn,ra);

case ,

sys=otherwise

'simulink:blocks:unhandledflag', num2str(flag));

endfunction [sys,x0,str,ts]=mdlinitializesizes

sizes = simsizes

sys = simsizes(sizes);

x0 = str = ts = 0 0];

function sys=mdlderivatives(x)

sys = x;

function sys=mdloutputs(x,u1n,in,nn,ra)

cefai=(u1n-in*ra)/nn;

ctfai=9.55*cefai;

tn=ctfai*in;

for i=1:800

tem(i)=4*i/800;

sys(i)=x/cefai-ra/(cefai*ctfai)*tem(i);

end图5:电机**s函数模块。

图6:直流电机双闭环控制系统**模型。

假设某可编程逻辑器件(pld)模块有6路输入信号,a,b,w1,w2,w3,w4,其中wi为编码信号,它们的取值将决定该模块输出信号y的逻辑关系,具体逻辑关系由表给出。课件如果直接用模块搭建此pld模块很复杂。试编写一个s-函数实现这样的函数。

function [sys,x0,str,ts] =pld_14(t,x,u,flag)

switch flag,case 0,[sys,x0,str,ts]=mdlinitializesizes;

case 3,sys=mdloutputs(t,x,u);

case ,sys=

otherwise

error(['unhandled flag = num2str(flag)])

endfunction [sys,x0,str,ts]=mdlinitializesizes

sizes = simsizes;

matlab作业

2011029170002王柳。a 一个问题的病态性如何,与求解它的算法有关系。错 b 无论问题是否病态,好的算法都会得到它好的近似解。错 c 计算中使用更高的精度,可以改善问题的病态性。错 d 用一个稳定的算法计算一个良态问题,一定会得到它好的近似解。对 e 浮点数在整个数轴上是均匀分布。错 f ...

matlab作业

matlab语言 第3次作业 字符串,单元数组和结构体 专业 海洋技术 海洋测绘方向 姓名 张体强学号 1026222 1 如何将一个char 数据类型的向量转化为相应的double 型数据类型的数据向量。从式1 到8,判断这些语句是否正确。如果它们正确,那么将产生什么结果?这题不要在电脑中做。1....

matlab作业

电子与通信工程学院。通信系统 实验报告。2013 2014 学年第1学期。调频 fm 系统调制解调 专业 通信工程。班级 通信111 班。学号 姓名 指导教师姓名陈多瑜。2013年 11 月日。1.频率调制或调频 fm 1 设调制信号为m t 调频信号的数学表达式为。例如 m t 的时域波形为。m ...