计算机控制课程设计最小拍无波纹样本
- 格式:doc
- 大小:459.50 KB
- 文档页数:20
《计算机控制》课程设计报告题目:最小拍控制设计姓名:学号:7月4日《计算机控制》课程设计任务书指引教师签字:系(教研室)主任签字:6 月27 日一、题目分析依照题目规定,设单位反馈线性定常离散系统持续某些和零阶保持器传递函T=0.1s,设计数字控制器二、设计最小拍控制器1、控制系统总体简介最小拍闭环控制系统涉及给定值,输出值,D/A转换环节,数字控制器,被控对象,零阶保持器等环节。
在数字随动控制系统中,规定系统输出值尽快地跟踪给定值变化,至少拍控制就是为满足这一规定一种离散化设计办法。
所谓至少拍控制,就是规定闭环系统对于某种特定输入在至少个采样周期内达到无静差稳态,且闭环脉冲传递函数具备如下形式:式中N是在也许状况下最小正整数。
这一形式表白闭环系统脉冲响应在N个采样周期后变为0,从而意味着系统在N拍之内达到稳态。
2、控制系统框图及闭环工作原理图1 控制系统框图最小拍双通道采样闭环系统框图如图1所示,在该系统中对给定值r(t)进行D/A 转换采样,得到离散化r(z),并且对输出值c(t)也进行D/A 转换,得到c(z),然后计算有e(k )=c(k)-r(z)。
D(z)为计算机控制系统脉冲传递函数,U(z)为输出控制量,然后通过A/D 转换后得到模仿控制量U(t)对包括零阶保持器被控量进行控值进而达到规定最小拍控制目。
3、至少拍无纹波系统控制算法设计(1matlab ,z 变换程序为np=[0 0 10]; dp=[1 1 0]; hs=tf ( np , dp); hz=c2d(hs,0.1) 成果为Transfer function: 0.04837 z + 0.04679 ---------------------------------- z^2 – 1.905 z + 0.9048Sampling time:0.1 seconds 即(2)无波纹最小拍控制器D (z )依照G(z),对象有一种纯迟后因子v=1,两个极点,输,m=2,则闭环脉冲传递函数10()(1)p G s s s =+为11212()(10.967)()z z f z f z ---Φ=++由12(1)(10.967)()f f Φ=-+ 12'(1) 2.967 4.901f f Φ=+得系数1 1.266f =,20.758f =-,则系统脉冲传函为123() 1.2660.4660.733z z z z ---Φ=++ (3)误差脉冲传函为121123()(1)(10.733)1 1.267z 0.4660.733e z z z z z -----Φ=-+=--+ (4)由*z eD G φφ=得设计控制器为2226.183(z-0.6986)(z-0.9048)26.18341.98216.552D(z)=(z-1)(z+0.733)0.2670.733z z z z -+=-- (5)4、无波纹最小拍控制系统simulink 仿真图2 控制系统整体框图仿真成果为:(1)系统输入及系统输出曲线c(t)图形如图3所示:图3 系统输入及系统输出曲线c(t) (2)系统误差e(t)曲线如图4所示:图4 系统误差e(t)曲线(3)控制器输出u(k)曲线如图5所示:图5 控制器输出u (k )曲线通过仿真曲线看出: 控制器D (z )满足设计规定,系统在第三拍之后系统达到无差,输出响应从第三个采样周期开始完全跟踪输入,且没有波纹。
最后控制器输出恒定(u()0k =),因而系统输出不会产生波纹,调节时间为0.3s t s=。
将()()()U z D z E z =得系统差分方程为:()0.267(1)0.733(2)26.183()41.983(1)16.552(2)u k u k u k e k e k e k =-+-+--+-(6)三、硬件电路设计及元件选型 1、AD 转换器选取AD0808由于51 单片机大某些不带AD 转换器,因此模仿量采集就必要靠A/D 实现。
咱们选取8位精度AD 转换器AD0808。
ADC0808 是8位逐次逼近型A/D 转换器。
它由一种8路模仿开关、一种地址锁存译码器、一种A/D 转换器和一种三态输出锁存器构成,内部具备锁存功能,故不需要加地址锁存器。
ALE 脚为地址锁存信号,三根地址线固定接地,由于地址信号已经固定,故将ALE 接高电平。
START脚为AD转换启动信号,高电平有效,程序控制。
AD采样值为系统偏差信号,故选取。
由于ADC0808时钟所限,AD转换器时钟信号,由单片机P2.1脚产生,将CLOCK脚接单片机P2.1。
由单片机产生300khz时钟信号。
单片机晶振可选取为12MHz。
EOC 为转换结束信号。
当EOC 为高电平时,表白转换结束;否则,表白正在进行A/D 转换。
设计将其接单片机P2.2脚由程序读入,判断AD与否转换完毕。
AD转换成果由P0口读入,故将AD转换器输出与单片机P0口相连,高低位依次相连。
图6 AD转换器硬件电路接线图2.DA转换器选取DAC0832。
具备8位并行、中速(建立时间1us)、电流型、低廉(10~20元)特点。
DAC0832引脚接法下:CS:片选端,直接接低电平ILE:数据锁存容许控制端,直接接高电平。
WR2:DAC寄存器写选通控制端,故直接接低。
XFER:数据传送控制,低电平有效,故直接接地。
WR1;第一级输入寄存器写选通控制,低电平有效。
其输入为上升沿时,DA图7 DA转换器硬件电路接线图3、控制器控制器选取AT89C51单片机,依照ADC0808和DAC0832特性,及上述分析,设计单片机与AD、DA接口电路如下图所示。
图8 数字控制器硬件接线图4、被控对象如图9所示,左边积分环节通过选用500K 输入电阻和2UF 并联电容来实现,右边 放大器上并联了R=500K 和C=2uF ,然后再通过实现放大系数Kp=10规定。
图9 被控对象实现硬件电路图图10 整体实现硬件接线图四、程序流程图及源程序1、流程图主程序重要通过调用子程序实现系统初始化和变量初始化操作,涉及设定定期器工作状态、定期器装初值、开定期中断、启动定期器、D/A 清零、变量清零等内容,完毕上述操作后就等待进入定期中断。
主程序流程图如图11所示。
图11 主程序流程图定期器1中断服务程序实现功能有:是为AD 转换提供脉冲信号,流程图如图12所示。
图12 定期器1中断服务流程图定期器0中断服务程序实现了采样和计算输出控制量功能。
一方面检查与否到了采样周期,如果到了,就把输出清零、变量初始化并给采样周期值,进行下一步采样和计算,没到就就继续计时等待采样周期到来。
依照之前算得公式计算出控制输出u(k),然后检查控制量与否溢出,溢出了就取相应最值。
这之后输出控制量。
最后进行控制量和偏差递推和采样周期恢复,就返回了,流程图如图13所示。
图13 定期器0中断服务流程图定期器T0初值计算:T=0.1s设:需要装入T0初值为X,则有:X化为十六进制,即X=0x3cb0T0初值为TH0=0x3c;TL0=0xb0;2、源程序及注释#include<reg51.h>——————定义变量及其初始化——————sbit start=P2^0; // AD启动信号sbit CLK=P2^1; // AD时钟信号输出口sbit EOC=P2^2; // AD转换完毕信号sbit DA_W=P2^3; // DA转换信号sbit OE=P2^4;unsigned char ad_data ; // AD采样值unsigned char n=0; //定期标记量char e; //定义当前采样值char u; //定义DA输出量char u0=0; //char u1=0; //char e0=0; //char e1=0; //前二次采样值和前二次控制值float temp; //设立指针————————AD采样函数——————————void AD(){start=0; //start=1; // 启动AD转换器,开始转换start=0; //while(EOC==0); // 转换未结束,空循环OE=1;ad_data=P0; // 转换结束后,读取AD输出值OE=0;}————————定期器中断初始化程序————————void TimeInitial(){IP=0x08; //设立中断优先级,定期器1为高优先级TMOD=0x21; //定期器1采用方式2,定期器0采用方式1 TH1=0xd8; //设立定期器1初值TL1=0xd8;TH0=0x3c; //设立定期器0初值TL0=0xb0;EA=1; //开放所有中断ET1=1; //容许T1溢出中断TR1=1; //启动定期器1ET0=1; //容许T0溢出中断TR0=1; //启动定期器0}———————主函数——————————void main(){TimeInitial();start=0; //AD启动信号为0DA_W=0;P1=0x80;DA_W=1; //控制器初始输出为零while(1); //空循环,等待中断}——————定期器0中断函数————————void T0(void )interrupt 1 using 1{TH0=0x3c;TL0=0xb0;//重装初值if (n==2){n=0;AD(); //0.1s后,读取AD采样值e=ad_data-128; //采样实际偏差值temp=0.267*u1+0.733*u0+26.183*e-41.983*e1+16.552*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 n++; //定期不到0.1s,继续定期}————————定期器1中断函数————————void clk(void) interrupt 3 using 0{CLK=~CLK; //产生时钟信号}五、设计小结本次课程设计让咱们进一步熟悉并掌握了数字控制器设计普通环节,以及使用MALAB、PROTEL、KEIL等软件进行设计、分析、仿真过程。
在设计过程中遇到某些问题,例如控制器设计方案选取,MATLAB仿真模型建立、控制器程序设计等,在调试过程中,遇到问题更多,调试过程是一种让人思考过程,也是熟悉稳态办法和实践动手好机会,顺着模块顺序依次排查接线,浮现问题,想出各种也许状况,测试解决。