计算机控制实验指导书Word格式文档下载.docx

上传人:b****4 文档编号:17867206 上传时间:2022-12-11 格式:DOCX 页数:33 大小:203.94KB
下载 相关 举报
计算机控制实验指导书Word格式文档下载.docx_第1页
第1页 / 共33页
计算机控制实验指导书Word格式文档下载.docx_第2页
第2页 / 共33页
计算机控制实验指导书Word格式文档下载.docx_第3页
第3页 / 共33页
计算机控制实验指导书Word格式文档下载.docx_第4页
第4页 / 共33页
计算机控制实验指导书Word格式文档下载.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

计算机控制实验指导书Word格式文档下载.docx

《计算机控制实验指导书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机控制实验指导书Word格式文档下载.docx(33页珍藏版)》请在冰豆网上搜索。

计算机控制实验指导书Word格式文档下载.docx

1.必做内容

针对具体的被控对象,设计PID控制器,其算法采用位置式或增量式算法。

设计、编制程序进行仿真分析,给出仿真结果,并讨论比例、积分、微分的作用;

2.选做内容

采用一到二种改进型算法设计PID控制器,例如:

积分分离PID算法、不完全微分PID算法和微分先行PID算法,设计、编制程序进行仿真分析,给出仿真结果;

3.被控对象

设被控对象为二阶惯性环节,其传递函数

如下式:

,且采样周期T=0.1s,输入为单位阶跃信号;

4.性能指标要求

调整时间

超调量

静态误差

四.实验原理图

五.实验步骤:

1.将零阶保持器和给定的控制对象构成广义控制对象,写出其z传递函数,并转化成相应的差分方程;

2.PID控制算法采用位置式算法或者增量式算法

位置式:

增量式:

其中:

为比例系数,

为积分系数,

为微分系数;

3.通过试凑法选择合适的PID参数,使得系统达到给定的性能指标。

并讨论比例、积分和微分对系统产生的作用。

记录选择的PID参数;

记录输出的仿真数据;

记录仿真图形曲线。

提示:

(1)调整PID参数时,先将I、D参数保持不变,改变P参数,通过曲线图的变化得出P与超调量及调整时间的关系,再固定P、D参数,分析I对超调量及调整时间的影响,以此方法,观察D对超调量及调整时间的影响。

P

I

D

不变

分别记录P、I、D三参数对应的仿真曲线

(2)试凑法选择合适的PID参数,使得系统达到给定的性能指标。

记录仿真曲线及参数。

六.预习要求

1.复习数字PID控制算法的基本原理;

2.复习MATLAB和VC、C++的编程、调试方法;

3.用MATLAB或C++设计、编写数字PID控制算法源程序和仿真图形曲线输出的源程序。

七.实验报告

1.写出程序清单并进行注释;

2.分析调试、运行结果。

最小拍控制系统

1.了解数字最小拍控制系统的一般原理;

2.掌握数字最小拍控制系统的编程方法。

三.实验内容

针对具体的被控对象,设计系统存在波纹的最小拍数字控制器,编制程序进行仿真分析,给出仿真结果;

采用阻尼因子法设计最小拍数字控制器,编制程序进行仿真分析,给出仿真结果;

,且采样周期T=1s,输入分别为单位阶跃信号、单位速度信号和单位加速度信号。

五.实验步骤

1.将零阶保持器和给定的控制对象构成广义控制对象,写出其

传递函数

,并化成相应的差分方程;

2.确定希望的数字控制器

单位阶跃信号:

单位速度信号:

单位加速度信号:

3.通过MATLAB或C++编程进行仿真,验证系统是否在规定拍数达到稳态。

分别对单位阶跃信号、单位速度信号和单位加速度信号:

记录调整的最小拍控制参数;

记录仿真图形曲线,标明拍数

1.复习数字最小拍控制系统的基本原理;

2.复习MATLAB和C++的编程、调试方法;

3.用MATLAB或C++设计、编写数字最小拍控制算法源程序和仿真图形曲线输出的源程序。

基于Smith预估器的纯滞后控制系统设计

1.了解smith预估控制器算法的一般原理;

2.掌握smith预估控制器算法的编程方法;

3.与PID控制算法进行比较,加深对该控制算法的掌握和理解。

1.根据给定对象特性,设计smith预估控制器算法,利用Matlab(Simulink)软件或C++软件编制程序进行仿真分析,给出仿真结果;

2.设广义被控对象为:

控制系统框图为:

取T=1、τ=2、T1=2.88,经采样(T=1s)保持后,其广义对象z传递函数为

转换为2个单位迟延

控制器参数:

Kp=0.5,Ki=0.2,Kd=0。

四.实验步骤

1.设计smith预估控制算法,作给定值扰动和外部扰动响应实验,并绘制控制器输出P和系统输出y响应曲线;

2.被控对象不变,采用理想PID进行给定值扰动和外部扰动响应实验,并绘制控制器输出P和系统输出y响应曲线。

五.预习要求

1.复习smith预估控制算法和PID算法的基本原理;

3.用MATLAB或C++设计、编写smith预估控制算法源程序和仿真图形曲线输出的源程序。

六.思考题

1.分析两类控制算法对带迟延对象的控制效果;

2.根据实验分析Smith预估控制算法的优点是什么,若采用PID算法解决同类问题效果如何?

Matlab辅助设计软件:

具体操作步骤:

1、

启动Matlab;

2、单击工具栏中的Simulink仿真图标,进入Simulink仿真环境

新建

模块库

3、新建仿真结构图,寻找模块,拖动到新建仿真结构图中

所涉及模块的位置:

加法器Sum:

在Simulink/MathOperations子库中。

离散PID控制器:

在SimPowerSystems/ExtraLibrary/DiscreteControlBlocks子库中。

离散传递函数DiscreteTransferFcn:

在Simulink/Discrete子库中。

示波器Scope:

在Simulink/Sinks模型库中。

阶跃信号Step:

在Simulink/Sources模型库中。

4、修改模块参数。

双击模块,在出现的窗口中设置参数。

5、连接模块。

将光标移到一个模块的输出端(>

)按下鼠标左键拖动鼠标到另一个模块的输入端(>

),松开鼠标左键就可以完成两个模块的连接。

6、设置仿真参数,进行仿真。

在Simulation下拉菜单中设置仿真参数,单击工具栏中的StartSimulation图标),计算机开始仿真,示波器可显示出仿真曲线。

7、通过曲线,分析系统性能。

附录

参考程序1

#include"

stdafx.h"

1111.h"

1111Doc.h"

1111View.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

IMPLEMENT_DYNCREATE(CMy1111View,CView)

BEGIN_MESSAGE_MAP(CMy1111View,CView)

ON_COMMAND(ID_FILE_PRINT,CView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT,CView:

ON_COMMAND(ID_FILE_PRINT_PREVIEW,

CView:

OnFilePrintPreview)

END_MESSAGE_MAP()

CMy1111View:

CMy1111View()

{

}

~CMy1111View()

BOOLCMy1111View:

PreCreateWindow(CREATESTRUCT&

cs)

returnCView:

PreCreateWindow(cs);

//CMy1111Viewdrawing

voidCMy1111View:

OnDraw(CDC*pDC)//求PID参数

inti=0;

doubleKp=0.5,Ki=0.045,Kd=1;

doubler[100];

doubley[100],u[100],e[100],datau[100];

y[0]=0;

e[0]=0;

u[0]=0;

e[1]=0;

y[1]=0;

u[1]=0;

for(i=0;

i<

100;

i++)

{

r[i]=4.01;

}

for(i=2;

{

e[i]=r[i]-y[i-1];

datau[i]=(Kp+Ki+Kd)*e[i]-(Kp+2*Kd)*e[i-1]+e[i-2];

u[i]=u[i-1]+datau[i];

y[i]=1.724*y[i-1]-0.741*y[i-2]+0.0453*u[i-1]+0.04095*u[i-2];

CPenhPen1(PS_SOLID,1,RGB(0,0,0));

CPenhPen2(PS_SOLID,1,RGB(255,0,0));

CPenhPen3(PS_SOLID,1,RGB(0,255,0));

CPen*pen0;

CRectrect0;

chars[50];

CFontfont;

font.CreateFont(10,6,0,

0,30,FALSE,

FALSE,FALSE,

DEFAULT_CHARSET,

OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,

PROOF_QUALITY,

DEFAULT_PITCH|FF_ROMAN,"

Arial"

);

CFont*font0;

pen0=pDC->

SelectObject(&

hPen1);

//画X-Y坐标抽

pDC->

MoveTo(50,610);

LineTo(950,610);

LineTo(50,10);

SelectObject(pen0);

MoveTo(950,610);

LineTo(945,605);

LineTo(945,615);

MoveTo(50,10);

LineTo(45,15);

LineTo(55,15);

15;

i++)//画X轴刻度

pen0=pDC->

pDC->

MoveTo(100+i*50,610);

LineTo(100+i*50,605);

rect0.left=90+i*50;

rect0.right=rect0.left+20;

rect0.top=615;

rect0.bottom=630;

sprintf(s,"

%d"

(i+1)*10);

font0=pDC->

font);

pDC->

SetTextColor(RGB(0,0,0));

SetBkMode(TRANSPARENT);

DrawText(s,-1,&

rect0,DT_CENTER);

SelectObject(font0);

5;

i++)//画Y轴刻度

MoveTo(50,510-i*100);

LineTo(55,510-i*100);

rect0.left=30;

rect0.top=510-i*100-5;

rect0.bottom=rect0.top+20;

i+1);

hPen2);

//画曲线r[t]

99;

MoveTo((50+i*5),(610-r[i]*100));

LineTo((50+i*5+5),(610-r[i+1]*100));

hPen3);

//画曲线y[t]

MoveTo((50+i*5),(610-y[i]*100));

LineTo((50+i*5+5),(610-y[i+1]*100));

hPen1.DeleteObject();

hPen2.DeleteObject();

hPen3.DeleteObject();

font.DeleteObject();

//CMy1111Viewprinting

OnPreparePrinting(CPrintInfo*pInfo)

returnDoPreparePrinting(pInfo);

OnBeginPrinting(CDC*,CPrintInfo*)

//TODO:

addextrainitializationbeforeprinting

OnEndPrinting(CDC*,CPrintInfo*)

addcleanupafterprinting

//CMy1111Viewdiagnostics

AssertValid()const

CView:

AssertValid();

Dump(CDumpContext&

dc)const

Dump(dc);

CMy1111Doc*CMy1111View:

GetDocument()//non-debugversionis

//inline

ASSERT(m_pDocument->

IsKindOf(RUNTIME_CLASS

(CMy1111Doc)));

return(CMy1111Doc*)m_pDocument;

#endif//_DEBUG

参考程序2

ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView:

OnDraw(CDC*pDC)

inti;

doubler[1000];

doubley[1000];

doublee[1000];

doubleu[1000];

1000;

r[i]=1;

e[1]=1;

u[1]=1/3.68;

for(i=2;

y[i]=1.368*y[i-1]-0.368*y[i-2]+3.68*u[i-1]+2.64224*u[i-2];

e[i]=r[i]-y[i];

u[i]=-0.718*u[i-1]+(e[i]-0.368*e[i-1])/3.68;

}

CPenhPen1(PS_SOLID,1,RGB(0,0,0));

CPenhPen2(PS_SOLID,1,RGB(255,0,0));

CPenhPen3(PS_SOLID,1,RGB(0,255,0));

CPen*pen0;

CRectrect0;

chars[50];

CFontfont;

font.CreateFont(10,6,0,

OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,

PROOF_QUALITY,DEFAULT_PITCH|FF_ROMAN,"

//画X-Y坐标抽

//画X轴刻度

9;

//画的刻度线

MoveTo(50+i*100,610);

LineTo(50+i*100,605);

rect0.left=40+i*100;

i);

//画Y轴刻度

2;

//////////////画刻度线

MoveTo(50,410-i*200);

LineTo(55,410-i*200);

SelectObje

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

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1