计算机控制课程设计报告.doc
《计算机控制课程设计报告.doc》由会员分享,可在线阅读,更多相关《计算机控制课程设计报告.doc(14页珍藏版)》请在冰豆网上搜索。
![计算机控制课程设计报告.doc](https://file1.bdocx.com/fileroot1/2022-10/8/76ff03ce-bd26-4b35-9014-cf2df24f65bc/76ff03ce-bd26-4b35-9014-cf2df24f65bc1.gif)
《计算机控制》课程设计报告
姓名:
侯念廷学号:
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