资源描述
. .
《计算机控制》课程设计报告
题目:最小拍控制设计
XX:
学号:
2014年7月4日
《计算机控制》课程设计任务书
学 号
班 级
学 生
指导教师
题 目
最小拍控制设计
设计时间
2014年 6 月 27 日 至 2014 年 7 月 4 日 共 1 周
设计要求
设计任务:设单位反馈线性定常离散系统的连续部分和零阶保持器的传递函数分别为,,采样周期T=0.05s,设计数字控制器,要求系统在单位阶跃输入时实现最小拍无波纹控制。
方案设计:
1. 完成控制系统的分析、设计;
2. 选择元器件,完成电路设计,控制器采用MCS-51系列单片机(传感器、功率接口以及人机接口等可以暂不涉及),使用Proteus绘制原理图;
3. 编程实现单片机上的控制算法。
报告内容:
1. 控制系统仿真和设计步骤,应包含性能曲线、采样周期的选择、数字控制器的脉冲传递函数和差分方程;
2. 元器件选型,电路设计,以及绘制的Proteus原理图;
3. 软件流程图,以及含有详细注释的源程序;
4. 设计工作总结及心得体会;
5. 列出所查阅的参考资料。
指导教师签字: 系(教研室)主任签字:
2014年 6 月 27 日
方案设计:
一、题目分析
设单位反馈线性定常离散系统的连续部分和零阶保持器的传递函数分别为,,采样周期T=0.05s,设计数字控制器,要求系统在单位阶跃输入时实现最小拍无波纹控制。
二、 控制系统设计
1、被控对象特性
图1 被控对象整体框图
图2 被控对象波特图
图3 被控对象波特图
图4 被控对象Nyquist图
图5 被控对象输出曲线图
2、采样周期T的选择
当取采样周期T=0.05s时,经过理论验证,两拍后系统无波纹,达到无波纹输出时t=0.10s,满足控制器要求。
3、无波纹最小拍控制器的计算
(1)带零阶保持器的广义被控对象为通过matlab,z变换程序为
np=[0 0 10];
dp=[1 1 0];
hs=tf ( np, dp);
hz=c2d(hs,0.05)
结果为
Transfer function:
0.01229 z + 0.01209
----------------------------
z^2 - 1.951 z + 0.9512
Sampling time: 1
即
(1)
(2)无波纹最小拍控制器D(z)
根据G(z),对于单位阶跃r(t)=1(t),m=1。考虑到广义对象,则闭环脉冲传递函数为
由,得系数,则系统脉冲传函为
误差脉冲传函为
由得设计的控制器为
(2)
4、无波纹最小拍控制系统框图
图6 控制系统整体框图
5、无波纹最小拍控制系统Matlab仿真
通过Matlab观察阶跃输入响应曲线如下
图7 控制系统阶跃图
由图7可见,2拍后输出跟上输入,可实现最小拍控制,T=0.05s满足要求。
图8 控制系统波特图
图9 控制系统Nyquist图
6、无波纹最小拍控制系统simulink仿真
图10 控制系统仿真图
仿真结果为:
(1)系统输入及系统输出曲线c(t)图形如下:
图11 控制系统输出响应图
(2)系统误差e(t)曲线如下:
图12 控制系统误差曲线图
(3)控制器输出u(k)曲线如下:
图13 控制系统控制器输出曲线图
通过仿真曲线看出: 控制器D(z)满足设计要求,系统在第二拍之后系统达到无差,最后控制器输出恒定(u(k)=0),因此系统输出不会产生波纹,调节时间为。
将得系统的差分方程为:
(3)
三、硬件电路设计及元件选型
控制器部分由AD转换器,DA转换器和AT89C51单片机组成。模数转换芯片采用ADC0808,数模转换芯片采用DAC0832。
图14 系统结构总图
1、AD转换器
由于用proteus进行仿真,但在它的库里没ADC0809的仿真模型,而有ADC0808的,故AD转换器选ADC0808。ADC0808是一种逐次比较式的8路模拟输入,内部具有锁存功能,故不需要加地址锁存器。ALE脚为地址锁存信号,高电平有效,三根地址线固定接地,由于地址信号已经固定,故将ALE接高电平。
系统只需要一路信号,选择IN-0通道作为输入。
START脚为AD转换启动信号,高电平有效,程序控制。AD采样值为系统的偏差信号,故选择ADC0808的为5V。
由于ADC0808的时钟所限,AD转换器的时钟信号,由单片机P0.1脚产生,将CLOCK脚接单片机的P0.1。单片机晶振选12MHz,对其40分频,产生300khz的时钟信号。
EOC 为转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换。设计将其接单片机P0.2脚由程序读入,判断AD是否转换完成。AD转换结果由P1口读入,故将AD转换器的输出与单片机P1口相连,由于ADC0808的高位是OUT1,故将其输出与P1口反向依次相连。
OE为ADC0808数据端输出控制口,当为高电平时,送出转换后的数据给P1口。
设计AD转换器的接口电路如图所示:
图15 AD转换器的接口电路
2、DA转换器
DA转换器选择DAC0832,DAC0832是具有两个输入数据寄存器的8位DAC,可以直接与51单片机相连。参考电压 ,直接与供电电源相连。
因为输出的C(t)可能有负的情况,故选择DAC为双极性电压输出。DA输出值为:
(4)
DAC0832的引脚接法下:
CS:片选端,直接接低电平
ILE:数据锁存允许控制端,直接接高电平。
WR2:DAC寄存器写选通控制端,故直接接低。
XFER:数据传送控制,低电平有效,故直接接地。
WR1;第一级输入寄存器写选通控制,低电平有效。其输入为上升沿时,将输入数据锁存到DAC寄存器,故将该脚与单片机P0.3口相连,由程序控制DA转换的时间。
D10~D17:与单片机P20~P27相连。
电路图如下:
图16 DA转换器的接口电路
3、控制器
控制器选择AT89C51单片机,根据ADC0808和DAC0832的特性,及上述分析,设计单片机与AD、DA的接口电路如下图所示:
图17 控制器电路
4、被控对象
被控对象如下图所示:
图18 被控对象电路
5、仿真波形
图19 仿真波形图
四、 程序流程图及源程序
1、流程图如下:
图20 程序流程图
2、定时器T0的初值计算
设:需要装入T0的初值为X,则有:
X化为十六进制,即X=0x3cb0
T0的初值为 TH0=0x3c; TL0=0xb0;
3、源程序及注释如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void init();
/////////////////////定义//////////////////////
sbit START=P0^0; //AD开始转换控制,上升沿有效
sbit CLK=P0^1; //AD工作脉冲,不高于600KHZ
sbit EOC=P0^2; //AD的转换完成标志,转换完成为高电平
sbit DA_W=P0^3;//DA的WR1选通控制,低电平有效
sbit OE=P0^4; //AD的输出控制,低电平有效
uchar addata;//AD采样值
uint count=0;//定时量
char e;//偏差信号
char e1=0;
char u; //输出信号
char u1=0;
float temp;
////////////////////主程序///////////////////////
void main()
{
init();
START=0; //启动信号为0
DA_W=0;
P2=0x80;
DA_W=1;//控制器初始输出为零
while(1);
}
//////////////延时程序,延时i/8毫秒/////////////
void delay(uchar i)
{
uchar j;
while(i--)
{
for(j=125;j>0;j--);
}
}
////////////////初始化子程序///////////////////
void init()
{
EA=1; //开总中断
TMOD=0x21; //T0工作方式1,T2工作方式2
IP=0x08;//设置优先级,T1为最高
TH0=0x3c;//设置定时器T0的初值
TL0=0xb0; //产生0.05s的中断
TR0=1;//启动定时器T0
ET0=1;
TH1=216; //利用T1中断产生CLK信号
TL1=216;
TR1=1; //启动定时器T1
ET1=1;
START=0;//AD初始化
OE=0;
DA_W=1; //DA初始化
}
///////////////////AD子程序//////////////////////
void AD()
{
START=0;
START=1; //启动AD转换
START=0;
while(EOC==0);//等待转换完毕
OE=1;//AD数据输出允许
addata=P1;
OE=0;
}
//////////////////T0中断程序/////////////////////
void t0(void)interrupt 1
{
TH0=0x3c;//重装初值
TL0=0xb0;
if (count==1)
{
count=0;
AD();//0.05s后,读取AD采样值
e=addata-128;//采样实际偏差值
/////////////差分方程////////////
temp=-0.4959*u1+41.017*e-39.015*e1;
if(temp>0)//当前输出值大于零
{
if(temp>=127)//判断是否溢出,溢出取极值
u=127;
else u=(char)temp;//控制器输出值
}
else //当前输出值小于零
{
if(temp<=-127)//判断是否溢出,溢出取极值
u=-127;
else u=(char)temp;//控制器输出值
}
P2=u+128;//DA输出值
u1=u;
e1=e;
DA_W=0;
DA_W=1;//上升沿DA输出
}
else count++;//定时不到1次,即不到0.05s,继续定时
}
//////////////////T1中断程序/////////////////////
void t1(void) interrupt 3
{
TH1=216; //利用T1中断产生CLK信号
TL1=216;//重新赋初值
CLK=~CLK;
}
五、 设计工作总结及心得体会:
经过一星期的《计算机控制》课程设计,收获了很多。通过这几天的学习,确实掌握了许多知识,关于MATLAB,SIMULINK还有PROTEUS。不同于以往的课程设计,《计算机控制》课设的包含面相当的广泛,不仅包括对上课时的理论基础的回顾还有对数学工具MATLAB的学习掌握及单片机的使用。单片机这块还包含程序编程与原理图设计,这使得课程设计的包含面非常广泛,是一次对前面所学习科目的综合设计。
在这次课程设计中,我们学到了很多设计数字控制系统的思想与方法,应用了计算机控制课程上学到的知识,还用到了自动控制原理、单片机原理及应用、模拟电子技术中的相关知识,给我们提供了一个将所学的课程联系在一起,并应用于实践的机会。
参考文献
【1】郭天祥主编.《51单片机C语言教程》 电子工业,2009.1
【2】魏立峰 王宝兴编著.《单片机原理与应用技术》大学,2006.8
【3】林飞 杜欣编著.《电力电子应用技术的MATLAB仿真》中国电力,2008
【4】及力主编.《电子CAD-基于Protel99SE》邮电大学,2008
【5】赵XX 编著 MTATLAB与控制系统仿真实践 航天航空大学 2009.08
. .jz.
展开阅读全文