资源描述
(完整word版)无波纹最小拍控制设计
《计算机控制》课程设计报告
题目: 无波纹最小拍控制设计
2010年7月5日
《计算机控制》课程设计任务书
专 业
学 生
题 目
无波纹最小拍控制设计
设计时间
2010年 7月 5 日 至 2010 年7 月 11 日 共 1 周
设计要求
设计任务:采用零阶保持器的单位反馈离散系统,被控对象为,要求系统在单位斜坡输入时,实现无波纹最小拍控制,用离散设计法设计数字控制器。
方案设计:
1. 采用Matlab完成控制系统的建立、分析、设计和模拟仿真;
2. 选择元器件,完成电路设计,控制器采用MCS-51系列单片机(传感器、功率接口以及人机接口等可以暂不涉及),使用Protel绘制原理图;
3. 控制算法采用单片机汇编语言编程实现(应通过编译,无语法错误)。
报告内容:
1. 控制系统仿真和设计步骤,应包含Matlab仿真的性能曲线、采样周期T的选择、数字控制器脉冲传递函数和差分方程形式;
2. 元器件选型过程,电路设计过程,绘制的Protel原理图;
3. 算法流程图,含有详细注释的源程序;
4. 设计工作总结及心得体会;
5. 列出所查阅的参考资料。
指导教师签字: 系(教研室)主任签字:
2010年 7 月 5 日
方案设计:
一、题目分析
根据题目要求,设计无波纹最小拍控制器。采用零阶保持器的单位反馈离散系统,被控对象为,要求系统在单位斜坡输入时,实现无波纹最小拍控制,用离散设计法设计数字控制器。
二、控制系统设计
1、采样周期T的选择
当取采样周期T=1s时,经过理论验证,三拍后系统无波纹,达到无波纹输出时t=3s,满足控制器要求。
当取采样周期T=0.1s时,满足控制器要求且三拍系统无波纹,达到无波纹输出时t=0.3s,但考虑到AD转换器和DA转换器的转换时间和速率有限,故在满足性能要求的前提下,这里选择采样周期T=1s。
2、无波纹最小拍控制器的计算
(1)带零阶保持器的广义被控对象为通过matlab,z变换程序为
np=[0 0 10];
dp=[1 1 0];
hs=tf ( np, dp);
hz=c2d(hs,1)
结果为
Transfer function:
3.679 z + 2.642
----------------------
z^2 - 1.368 z + 0.3679
Sampling time: 1
即
(2)无波纹最小拍控制器D(z)
根据G(z),对象有一个纯迟后因子v=1,一个零点,两个极点,单位速度信号,所以q=1,则闭环脉冲传递函数为
由
得系数,,则系统脉冲传函为
误差脉冲传函为
由得设计的控制器为
3、无波纹最小拍控制系统框图
控制系统整体框图
4、无波纹最小拍控制系统Matlab仿真
通过Matlab观察阶跃输入响应输出程序如下
num=[0.382 -0.364 0.0824];
den=[1 -0.407 -0.593];
dz=tf ( num, den,-1);
sys1=dz*hz;
sys2=feedback(sys1,1);
step(sys2,20)
输出曲线如下
由图可见,3拍后输出跟上输入,可实现最小拍控制,T=1s满足要求。
5、无波纹最小拍控制系统simulink仿真
仿真结果为:
(1)系统输入及系统输出曲线c(t)图形如下:
(2)系统误差e(t)曲线如下:
(3)控制器输出u(k)曲线如下:
通过仿真曲线看出: 控制器D(z)满足设计要求,系统在第三拍之后系统达到无差,最后控制器输出恒定(),因此系统输出不会产生波纹,调节时间为。
将得系统的差分方程为:
三、硬件电路设计及元件选型
控制器部分由AD转换器,DA转换器和AT89C51单片机组成。模数转换芯片采用ADC0809,数模转换芯片采用DAC0832。
系统结构总图
1、AD转换器
AD转换器选ADC0809, ADC0809是一种逐次比较式的8路模拟输入,内部具有锁存功能,故不需要加地址锁存器。ALE脚为地址锁存信号,高电平有效,三根地址线固定接地,由于地址信号已经固定,故将ALE接高电平。
系统只需要一路信号,选择IN-0通道作为输入。
START脚为AD转换启动信号,高电平有效,程序控制。AD采样值为系统的偏差信号,故选择ADC0809的为5V。
由于ADC0809的时钟所限,AD转换器的时钟信号,由单片机P2.1脚产生,将CLOCK脚接单片机的P2.1。由单片机产生500khz的时钟信号。单片机晶振可选择为12MHz。
EOC 为转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换。设计将其接单片机P2.2脚由程序读入,判断AD是否转换完成。AD转换结果由P0口读入,故将AD转换器的输出与单片机P0口相连,高低位依次相连。
设计AD转换器的接口电路如图所示:
AD转换器的接口电路
2、DA转换器
DA转换器选择DAC0832,DAC0832是具有两个输入数据寄存器的8位DAC,可以直接与51单片机相连。参考电压 ,直接与供电电源相连。
因为输出的C(t)可能有负的情况,故选择DAC为双极性电压输出。DA输出值为:
DAC0832的引脚接法下:
CS:片选端,直接接低电平
ILE:数据锁存允许控制端,直接接高电平。
WR2:DAC寄存器写选通控制端,故直接接低。
XFER:数据传送控制,低电平有效,故直接接地。
WR1;第一级输入寄存器写选通控制,低电平有效。其输入为上升沿时,将输入数据锁存到DAC寄存器,故将该脚与单片机P2.3口相连,由程序控制DA转换的时间。
D10~D11:与单片机P0~P7相连。
电路图如下:
DA转换器的接口电路
3、控制器
控制器选择AT89C51单片机,根据ADC0809和DAC0832的特性,及上述分析,设计单片机与AD、DA的接口电路如下图所示:
单片机选择12MHZ晶振,按键复位模式。
四、 程序流程图及源程序
1、流程图如下:
定时器初值重装装
CLK=~CLK
中断返回
A/D时钟程序
采样周期是否到
采样周期
变量加1
采样中断服务程序
开始
主程序
初始化
等待中断
N
Y
中断返回
定时器初值重装
D/A输出u(k)
采样变量赋新值
采样周期变量初始化
A/D采样
计算u(k)
2、定时器T0的初值计算
设:需要装入T0的初值为X,则有:
X化为十六进制,即X=0x3cb0
T0的初值为 TH0=0x3c; TL0=0xb0;
3、源程序及注释如下:
#include<reg51.h>
sbit start=P2^0; // AD启动信号
sbit CLK=P2^1; // AD时钟信号输出口
sbit EOC=P2^2; // AD转换完成信号
sbit DA_W=P2^3; // DA转换信号
unsigned char ad_data ; // AD采样值
unsigned char count=0; //定时标记量
char e; //定义当前采样值
char u; //定义DA输出量
char u0=0; //
char u1=0; //
char e0=0; //
char e1=0; //前二次采样值和前二次控制值
float temp; //设置指针
void AD() // AD采样函数
{ start=0; //
start=1; // 启动AD转换器,开始转换
start=0; //
while(EOC==0); // 转换未结束,空循环
ad_data=P0; // 转换结束后,读取AD输出值
}
void TimeInitial() // 定时器中断初始化函数
{
IP=0x08; //设置中断优先级,定时器1为高优先级
TMOD=0x11; //定时器1和定时器0均采用方式一
TH0=0x3c; //设置定时器0的初值
TL0=0xb0; //
TH1=0xff; //设置定时器1的初值
TL1=0xfb; //
EA=1; //开放所有中断
ET0=1; //允许T0溢出中断
TR0=1; //启动定时器0
ET1=1; //允许T1溢出中断
TR1=1; //启动定时器1
}
void main() //主函数
{
TimeInitial(); //
start=0; //启动信号为0
DA_W=0;
P1=0x80;
DA_W=1; //控制器初始输出为零
while(1); //空循环,等待中断
}
void t1(void )interrupt 1 using 1 //定时器0中断函数
{
TH0=0x3c; //
TL0=0xb0; //重装初值
if (count==20) //
{
count=0; //
AD(); //一秒后,读取AD采样值
e=ad_data-128; //采样实际偏差值
temp=0.407*u1+0.595*u0+0.382*e-0.364*e1+0.0824*e0; //差分方程
if(temp>0) //当前输出值大于零
{
if(temp>=127) //
u=127; //判断是否溢出,溢出取极值
else u=(char)temp; //控制器输出值
} //
else //当前输出值小于零
{
if(temp<=-127) //
u=-127; //判断是否溢出,溢出取极值
else u=(char)temp; //控制器输出值
}
//
P1=u+128; //DA输出值
u0=u1; //控制量递推赋值
u1=u; //
e0=e1; //偏差量递推赋值
e1=e; //
DA_W=0; //
DA_W=1; //上升沿DA输出
}
else count++; //定时不到20次,即不到一秒,继续定时
}
void clk(void) interrupt 3 using 0 // 定时器1中断函数
{
TH1=0xff; //
TL1=0xfb; //重装初值
CLK=~CLK; //产生时钟信号
}
五、 设计工作总结及心得体会:
经过多天的努力,这次计算机控制课程设计已基本结束,在这一段时间中,我们收获良多。由于考试时间与课程设计时间安排有冲突,我们的时间很紧,前期准备不足。这导致我们刚开始的上机设计难以进行,浪费了很多时间,整个小组都没有一个明确方向。后来,在老师的指导下,经过我们多方查找资料,终于明确了工作方向,分工合作,相互帮助,最终完成了这次课程设计。
在这次课程设计中,我们学到了很多设计数字控制系统的思想与方法,如matlab仿真并利用simlink仿真。应用了计算机控制课程上学到的知识,还用到了自动控制原理、单片机原理及应用、模拟电子技术中的相关知识,给我们提供了一个将所学的课程联系在一起,并应用于实践的机会。
六、参考文献
1、张毅刚 主编. 单片机原理及应用 高等教育出版社,2003.12
2、李铁桥,张虹 主编 计算机控制理论与应用 2005,07
3、赵广元 编著 MTATLAB与控制系统仿真实践 北京航天航空大学出版社 2009.08
17
展开阅读全文