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






