计算机控制课程设计报告.doc

上传人:b****1 文档编号:262456 上传时间:2022-10-08 格式:DOC 页数:14 大小:634.95KB
下载 相关 举报
计算机控制课程设计报告.doc_第1页
第1页 / 共14页
计算机控制课程设计报告.doc_第2页
第2页 / 共14页
计算机控制课程设计报告.doc_第3页
第3页 / 共14页
计算机控制课程设计报告.doc_第4页
第4页 / 共14页
计算机控制课程设计报告.doc_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

计算机控制课程设计报告.doc

《计算机控制课程设计报告.doc》由会员分享,可在线阅读,更多相关《计算机控制课程设计报告.doc(14页珍藏版)》请在冰豆网上搜索。

计算机控制课程设计报告.doc

《计算机控制》课程设计报告

姓名:

侯念廷学号:

080350110

2011年7月2日

1设计任务与理论基础

1.1设计任务

无波纹最小拍控制设计

采用零阶保持器的单位反馈离散系统,被控对象为,要求系统在单位斜坡输入时,实现无波纹最小拍控制,用离散设计法设计数字控制器。

1.2离散化设计方法

图1-1计算机控制系统框图

Gc(s)——被控对象的连续传递函数,

D(z)——数字控制器的Z传递函数,

H(s)——零阶保持器的传递函数,

T——采样周期。

广义对象G(s)的Z传递函数为:

则闭环Z传递函数为:

若已知Gc(s),且可根据控制系统的性能指标要求构造Ф(z),则根据

得数字控制器得离散化设计步骤:

1)求广义对象的Z传递函数G(z);

2)根据控制系统的性能指标和其他约束条件,确定所需的闭环Z传递函数Ф(z);

3)求数字控制器的Z传递函数D(z);

4)根据D(z)求取控制算法的递推公式,设D(z)的一般形式:

得D(z)的计算机控制算法

2控制器的设计与仿真

2.1无波纹最小拍控制器的设计

2.1.1Z传递函数G(z)

按照离散化设计的步骤,先求得连同零阶保持器的广义对象脉冲传递函数为:

其在MATLAB环境下的描述语句如下:

G=zpk([],[0-1],10);%传递函数

HG=c2d(G,1,'zoh');%带ZOH的离散化,采样周期为1s

程序运行结果如下:

Zero/pole/gain:

Zero/pole/gain:

10 3.6788(z+0.7183)

------- -----------------

s(s+1) (z-1)(z-0.3679)

与手算结果一致。

2.1.2闭环Z传递函数Ф(z)

闭环脉冲传递函数为:

误差脉冲传递函数为:

其在MATLAB环境下的描述语句如下:

z=tf([10],[1],1);

phil=(1+0.593/z)*(1-1/z)^2;%φe(z)

phi=1.407*(1+0.718/z)*(1-0.586/z)/z;%φ(z)

程序运行结果如下:

Transferfunction:

Transferfunction:

z^3-1.407z^2-0.186z+0.5931.407z^2+0.1857z-0.592

-------------------------------------------------------------

z^3z^3

与手算结果一致。

2.1.3Z传递函数D(z)

D=phi/(HG*phil);%控制器D(z)

sys0=feedback(HG,1);%未加控制器时的闭环传函

sys=feedback(HG*D,1);%加控制器后的闭环传函

程序运行如下:

Zero/pole/gain:

0.38246z^3(z+0.718)(z-0.586)(z-0.3679)(z-1)

------------------------------------------------

z^3(z+0.7183)(z+0.593)(z-1)^2

Samplingtime:

1

与手算结果一致。

2.1.4数字控制器的差分方程形式

根据输出函数

可得差分方程形式

2.2Simulink仿真

在simulink环境下建立控制模型如图2-6所示:

图2-1

输入为单位速度输入,运行后,双击虚拟示波器查看输出

相应性能曲线如下所示:

1.离散化后斜坡输入

图2-2

2.e(k)波形图

图2-3

3.u(k)波形图

图2-4

4.离散化后输出

图2-5

5.未离散化后输出

图2-6

由仿真图可知控制器输出在3拍后达到恒定,同时系统输出不产生波纹

经MATLAB下的分析设计与SIMULINK下的模型仿真,我们认为当前设计完全符合最小拍无波纹系统的要求。

下面将具体讨论硬件电路的设计与程序算法。

3电路设计

3.1器件选择

由于本设计对单片机的要求不高,因此控制器选择传统的8051单片机即可满足要求,同时由于系统精度要求不高,可选用8位AD与DA。

模数转换芯片采用ADC0809,数模转换芯片采用DAC0832。

由于系统采用总线结构,需要锁存器74HC373。

ADC0809的时钟可由ALE二分频得到,需要D触发器74LS74,由于ADC0809的时钟所限,单片机晶振可选择为6MHz。

考虑到DAC0832为电流型DAC,故需要运放转换电路,选择运算放大器为LM324。

3.2电路设计

3.2.1总电路图

控制器电路原理图如下图所示:

图3-1

3.2.28051外围电路

由于本课程设计对单片机的性能不高,因此8051单片机完全可以满足此要求,同时51单片机也有着低廉的价格,不错的性能等诸多优点

8051的最小系统电路如下图所示

图3-2

3.2.3ADC0809模块

这里采用ADC0809芯片,此芯片时8位逐次逼近型A/D转换器,带8个模拟量输入通道,芯片内带通道地址译码器,输出带三态数据锁存器启动信号为脉冲启动方式,每一通道转换大约100µs。

ADC0809与单片机连接方式如下所示:

图3-3

3.2.4DAC0832模块外围电路

DAC0832带有数据输入寄存器,是总线兼容型,可直接与总线相连。

本电路中DA与单片机之间采用单缓冲接法,输出采用双极性输出。

DAC082的外围电路如下图所示:

图3-4

4流程图与程序

4.1流程图

算法流程图如图4-1所示:

图4-1

采样周期设定为1s,系统初始化后,由定时器计时,系统不断查询,若采样周期到,则启动AD采样,并根据前面计算所得公式计算D(z),最后输出控制量u(k)经DAC转换后输出。

4.2源程序代码

采用C语言编程,编译环境为wave6000。

现附含详细注释的源代码如下:

/*********************************

程序名称:

无波纹最小拍控制器

*****************************************/

#include

#include

#include

/*****************************************

宏定义

*****************************************/

#defineucharunsignedchar

#defineuintunsignedint

#defineADC_7XBYTE[0x7ff0]//定义模数转换IO地址

#defineDAC_1XBYTE[0x7ff2]//定义D/A第一路的IO地

/*****************************************

全局变量定义

*****************************************/

sbitstr=P1^7;//定义A/D启动信号

sbitDIN0=P1^0;//声明同步信号

uintdatatime;//声明变量,用于定时

uchardatat0_h,t0_l;//用于存储定时器0的初值

intTK=100;//声明采样周期变量,//采样周期=TK*10ms

intTC;//TK的变量

floatKK0=0.382//系数kk0

floatKK1=-0.364//系数kk1

floatKK2=0.082;//系数kk2

floatKK3=0;//系数kk3

floatPP1=-0.407;//系数pp1

floatPP2=-0.593;//系数pp2

floatPP3=0;//系数pp3

charUK;//当前时刻的D/A输出

charEK;//当前时刻的偏差

charUK_1,UK_2,UK_3,EK_1,EK_2,EK_3;//前3次采样时刻的控制量和偏差

/*****************************************

主函数

*****************************************/

voidmain(void)

{

TMOD=0x01;

time=10;//定时10ms

t0_h=(65536-500*time)/256;//计算定时器0初值

t0_l=(65536-500*time)%256;

t0_l=t0_l+20;//修正因初值重装而引起的定时误差

TH0=t0_h;

TL0=t0_l;

IT1=1;//边沿触发中断

EX1=1;//开外部中断1

ET0=1;//开定时中断0

TR0=1;//启动定时器

TC=1;

DAC_1=0x80;//D/A清零

UK=UK_1=UK_2=UK_3=0;

EK=EK_1=EK_2=EK_3=0;

EA=1;//开总中断

while

(1);

}

/**********************************************

函数名:

INT1

功能:

1号外部中断服务程序

参数:

无*

返回值:

无*

***********************************************/

voidint1()interrupt2using2

{floati,j;

DIN0=1;//读取输入前,先输出高电平

if(DIN0)//判同步信号到否

{

UK=UK_1=UK_2=UK_3=0;

EK=E

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

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

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

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