1天津理工大学自动化学院课程设计报告题目:最小拍无波纹控制系统设计学生姓名刘楠楠学号20110729届2011班级电气一班指导教师专业电气工程及其自动化2目录1课题简介2总体方案及硬件设计2.1---系统描述2.2---硬件设计2.2.1---A/D2.2.2---D/A2.2.3---单片机及定时器设计2.2.4---电源部分设计2.3---总体方案设计原理图3控制算法设计3.1---控制算法描述4软件编程设计4.1---软件编程调试平台4.2---软件流程图4.3---软件程序代码5小结6参考文献1.课程简介3利用STC89C52单片机设计最小拍无波纹控制系统,被控对象的数学模型为G(s)=5/s(0.8s+1),设计最少拍无波纹控制算法,并编程实现;根据要求,实现在单位速度信号的作用下,达到控制要求。2.总体方案及硬件设计2.1---系统描述本系统设计使用STC89C52单片机和ADC、DAC等基本元件构成闭环控制系统,整体结构如图:2.1---硬件设计2.2.1---A/DADC芯片选用常用芯片ADC0809,它是一个8位ADC芯片,可以多路切换的CMOS组件,转换方法采用主次逼近法。性能相对较为可靠,价格低廉,使用简单。其中输入信号端加有LM358构成的放大器,可以增加信号的灵敏度和分辨率。电路结构图如下:STC89C52A/DD/A—控制对象42.2.2---D/A选用DAC8032芯片,它是一个8位DAC芯片,本本电路单元采用,单电源供电,它是一款常用的DAC芯片,再输入信号端加上LM358构成的放大电路,不仅提高了系统的可靠程度,而且增加了控制信号的分辨率。2.2.3---单片机及定时器设计STC89C52单片机也是51系列单片机,相对于传统法51单片机,在性能和可靠性上都有较大的提高,电路图设计如下:52.2.4---电源部分设计电源部分选用LM7805和LM7905构成,外加电压范围为8——12V,能够输出+5和-5V电压,能够满足体统设计的点电平要求,电路图如下:62.3---总体方案设计原理图73控制算法设计3.1---控制算法描述1、定时器T0的初值计算本设计单片机采用12M晶振,由于51单片机12分频,所以系统周期为1微秒。ADC0809的转换频率最大为500KHZ,而单片机的系统时钟为1M,所以本系统采用ADC0809全速工作,而对单片机IO口进行采样的周期为1S.定时器定时时间为50MS,利用单片机小精灵软件可以方便的计算出当定时器0工作在方式1时,TH0=3C,TL0=B0。2、对输入信号的滤波本设计利用中值滤波的方法对P2口采集的ADC输入信号数据进行处理,中值滤波是一种较为简单有效的滤波方法,对椒盐信号干扰有较好的抑制作用,不仅可以有效的减少信号干扰带来的影响,而且相对别的滤波方法,能够降低程序的执行时间。3、最少拍无波系统的差分方程计算首先使用MATLAB对G(S)进行Z变换,则变换过程如下:np=[005]np=005dp=[0.810]dp=0.80001.00000hs=tf(np,dp)Transferfunction:5--------------------------0.8s^2+shz=c2d(hs,1)Transferfunction:2.146z+1.421-------------------------Z^2–1.287z+0.28658:G(z)=2.146z+1.421-------------------------Z^2–1.287z+0.2865无波纹最小拍控制器D(z)根据G(z),对象有一个纯迟后因子v=1,一个零点b1=-0.662,两个极点,单位速度信号2l,所以q=1,则闭环脉冲传递函数为由得系数,,则系统脉冲传函为误差脉冲传函为由*zeDG得设计的控制器为将zUzDEz得系统的差分方程为:u(k)=0.357u(k-1)+0.593u(k-2)+0.294e(k)-0.236e(k-1)+0.645e(k-2)94软件编程设计4.1---软件编程调试平台本程序的开发环境为Keiluvisin4,是一款较为常用的开发环境,支持硬件仿真。104.2---软件流程图4.3---软件程序代码#includereg52.hunsignedcharcount=0;//定时器计数量unsignedcharcount1=0;//中值滤波计数量unsignedcharad_data;//装入AD值chare;//当前采样的实际值floutout_data;//当前经过运算后的实际值charu;//定义DA输出量定时器初值重装装CLK=~CLK中断返回A/D时钟程序采样中断服务程序开始主程序初始化等待中断NY中断返回定时器初值重装D/A输出u(k)采样变量赋新值采样周期变量初始化A/D采样计算u(k)采样周期是否到采样周期变量加111charu0=0,u1=0,e0=0,e1=0;//采样值charmid_data[5]=0;//中值滤波的保存值chari,j;//冒泡排序的参数voidtimeInit();//定时器初始化函数voidmain(void)//主函数{timeInit();while(1);}voidtimeInit(){TMOD|=0X01;//选择定时器0,工作方式1TH0=3C;//设置定时器0初值TL0=B0;EA=1;//打开全局中断ET0=1;//打开定时器中断TR0=1;//定时器中断打开}voidTime0_isr(void)interrupt1using1{TH0=3C;//重新装入初值TL0=B0;12if(count=20)//定时器定满一秒{count=0;ad_data=P2;e=ad_data-128;//因为是双极性输入的这样得到的实际值有正负电压//最少拍无波纹差分方程算法If(out_data0)//用于限定当前值在-127——+127之间{if(out_data=127)u=127;elseu=(char)out_data;}else{if(out_data=-127)u=-127;elseu=(char)out_data;}mid_data[count1]=u+128;count1++;u0=u1;u1=u;e0=e1;e1=e;}count++;if(count1=4){13count1=0;for(i=0;i5;i++){for(j=0;j5-i;j++){if(mid_data[j]mid_data[j+1]){temp=mid_data[j];mid_data[j]=mid_data[j+1];mid_data[j+1]=temp;}}}P2=mid_data[2];//滤波后输出值}}145小结通过本系统的设计,我较为详细清晰地了解了最少波无波纹控制算法。它对输入信号的快速响应让我感觉很是神奇,但是,在完成课程设计的过程中也遇到了大量的困难,特别是复杂的差分方程的运算,由于对MATLB不是很熟悉,所以很多参数要自己动手去算,但是,大量的数学运算让我感觉很是困难,不过经过一番努力,最后还是被完美的解决了。在此过程中,让我清醒的认识到数学的重要性。本设计系统,硬件部分相对来说比较简单,用的基本上是常用的芯片,再结合数据手册,能够很好的完成,信号也基本让人满意。通过对资料的查询,让我更进一步提高了自己的知识获取能力。6参考文献[1]赖寿宏主编微型计算机控制技术华中科技大学出版社1994[2]李毅刚主编单片机原理及应用高等教育出版社2003[3]李铁桥主编计算机控制理论与应用2005[4]谢龙汉主编AutiumDesigner原理图与PCB设计及仿真电子工业出版社2012[5]Pro–Log.TechnicalManualandDataBook[6]J.A.Moore,S.MHerb.UnderstandingDistributedProcessSystems.InstrumentSocietyofAmerica,2005[7]J.V.Levy.Amultiplecomputersystemforreliabletransactionprocessing,ACMSIGSMALLNewsletter,4,NO.5,2006\[8]LATTICSemiconductorCrop.,GALDataBook,2009[9]周培德主编计算几何清华大学出版社2004[10]Anany主编算法设计与分析基础清华大学出版社2002[11]钟艳华主编计算机工程与设计2004[12]谭浩强主编C程序设计(四)清华大学出版社2010[13]王松武主编常用电路模分析与指导清华大学出版社2009