1、系统采用AT89C51作为系统的微处理器来完成对水温的控制和键盘显示功能。C51单片机片内除了128B的RAM外,片内又集成了4KB的ROM作为程序存储器,是一个程序不超过4K字节的小系统。系统程序较多时,只需要外扩一个容量较小的程序存储器,占用的I/O口减少,同时也为键盘、显示等功能的设计提供了硬件资源,简化了设计,降低了成本。因此89C51可以完成设计要求。综上所述的二种方案,该设计选用方案二比较合适。3系统总体结构设计单片机温度控制系统是以89C51单片机为控制核心,辅以采样反馈电路,驱动电路,晶闸管主电路对电炉炉温进行控制的微机控制系统。其系统基本控制原理为:将温度设定值(即60)和温
2、度反馈值同时送入控制电路部分,然后经过调节器运算得到输出控制量,输出控制量控制驱动电路得到控制电压施加到被控对象上,电炉因此达到规定的温度。结构图如图3-1所示:图3-1 电阻炉控制系统总体结构设计图图3-2系统总体结构图4系统模块设计4.1 温度信号输入通道温度检测电路包括温度检测电路、放大器和A/D转换三部分。原理图如图4-1所示图4-1 温度输入信号通道4.1.1温度传感器采用的是National Semiconductor 所生产的LM35。计算公式: LM35是一种得到广泛使用的温度传感器。由于它采用内部补偿,所以输出可以从0开始。LM35有多种不同封装型式。在常温下,LM35 不需
3、要额外的校准处理即可达到 1/4的准确率。其在静止温度中自热效应低(0.08),单电源模式在25下静止电流约50A,工作电压较宽,可在420V的供电电压范围内正常工作非常省电。工作电压430V,在上述电压范围以内,芯片从电源吸收的电流几乎是不变的(约50A),所以芯片自身几乎没有散热的问题。这么小的电流也使得该芯片在此系统中特别适合,输出可以由第三个引脚取出,根本无需校准。4.1.2 运算放大器运算放大器采用差动运算放大器LM324。LM324系列器件带有差动输入的四运算放大器。与单电源应用场合的标准运算放大器相比,它们有一些显著优点。该四放大器可以工作在低到3.0伏或者高到32伏的电源下,静
4、态电流为MC1741的静态电流的五分之一。共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性。可以得出运放的输出电压为为了使后面的A/D转换器得到合适的输入模拟电压,本系统选取=100k,=200k。4.1.3 A/D转换器ADC0809是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型DA转换器、逐次逼近寄存器、逻辑控制和定时电路组成。温度信号输入通道的总增益由温度传感器、运放和A/D转换器三个环节的增益所决定。在本系统中,由于温度要求100是固定的,这三个环节的增益也是固定的。这样有利于整个通道在设计和安装时,避免不必要
5、的精度误差和偏差。4.2 执行信号输出通道本系统采用脉冲宽度调制(PWM)的控制方法。单片机输出控温信号:输出高电平时,使双向可控硅导通,电热丝通电;输出低电平时,双向可控硅截止,电热丝断电。脉冲宽度与周期T的比值为P,它反映了系统的输出控制量。执行信号输出通道的原理图如图3-2所示,单片机系统AT89C51的P2.5口输出信号经过光电耦合器,直接控制双向可控硅的门极,从而控制电热丝的平均加热功率。这样使输出通道省去了数/模(D/A)转换器和可控硅一项触发电路,大大简化了硬件;而且可控硅工作在过零触发状态,提高了设备的功率因数,减轻了对电网的干扰。AT89C51的I/O脚的负载能力不足以驱动光
6、电耦合器的发光二极管,所以用1413的一路作为功放。光电耦合器的光敏二极管所能通过的电流足以触发5A的双向可控硅,其间不必加功放环节,其中对可控硅可用负极性触发。图3-2 执行输出信号控制通道触发电路6V不必采用稳压,只需一般的阻容滤波即可,但不能与单片机基本系统5V电源相通。可控硅门极回路与220V电源相通,光电耦合器的结缘耐压能有效地把单片机系统与220V强电隔离。4.3 LED接口设置设计中用到四个LED数码管显示器。LED工作方式有两种:静态显示方式和动态显示方式。LED数码管,其原理和数字表扫描显示的原理一致即采用动态显示,动态显示是将所有数码管的段选线并联在一起,由位选线控制是哪一
7、位数码管有效。选择导通数码管的方式是采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路的。图3-3 显示模块电路图4.4 单片机及其电路设计单片机控制系统原理图如图3-4所示。微处理器采用51系列单片机AT89C51。单片机系统的硬件结构简单,调试方便。单片机系统主要I/O口的分配如下:89C51的P1口为温度信号的输入口,P0口为温度显示信号数据输出,P2口的P2.0端到P2.3端为显示信号的扫描,P2.4端口为执行信号
8、输出口。图3-4 单片机控制系统5 SMITH预估控制算法如图4-1,在所示的单回路控制系统中,D(s)表示控制器的传递函数,用于校正部分;表示被控对象的传递函数,为表示被控制对象中不包含纯滞后部分的传递函数,为被控制对象纯滞后部分的传递函数。y(t)D(s)u(t)e(t)图5-1 带纯滞后环节的控制系统令=,为被控对象的放大系数,;为被控对象的时间常数;为纯滞后时间。由图4-2可见,纯滞后补偿的数字控制器由两部分组成:一部分是数字PID控制器(由(s)离散化得到);一部分是施密斯预估器。图5-2 具有纯滞后补偿的控制系统施密斯预估器的输出可按图5-3的顺序计算:图3-3 史密斯预估器框图图
9、中,u(k)是PID数字控制的输出,是施密斯预估的输出。从图中可知,必须先计算传递函数的输出m(k)后,才能计算反馈回路偏差:纯滞后补偿器的输出 :其中,上式称为施密斯预估控制算式。偏差:控制器的输出:式中,为PID控制的比例系数;为积分系数;为微分系数。在纯滞后补偿控制算法中,相对于标准的PID算法,只是加入了补偿环节,可以采用PID的方式来处理。为了提高控制质量,我们对其进行改进,采用所谓的积分分离的PID位置式算法。当偏差绝对值小于某一预定门限时,采用标准的PID算法:式中:为系统控制量,为第i-1次偏差,T为采样周期,为积分时间,k为比例系数,为系统基准控制量。当偏差绝对值大于这一预定
10、门限时,舍去积分项的运算。6系统软件设计系统主程序初始化时,允许INT0中断,并设置为边沿触发方式,ADC0809 EOC为中断请求信号口,中断服务程序把“转换结束”标志置位时,采用查询的方式,根据ADC0809的D0D7的信息分别进行处理和存放。程序的每次循环,只读入一组数据。为了削弱干扰和纯滞后带来的影响,程序采用纯滞后补偿的方法,即SMITH预估控制,对读入信号进行平滑加工。显示更新程序把滤波后的温度从单片机的P0输送到显示接口电路。图5-1 控制系统的主流程图程序还对系统控制量作上、下限幅,使输出脉冲宽度与脉冲周期的比值p的范围为5%95%。本系统中的脉冲周期取10s,与采样周期相同,
11、这样与电热元件并联的指示灯始终闪烁发光,这是系统正常工作的一种标志。操作人员还可以从亮、暗时间的比例,方便地了解系统的控制量。控制系统主流程图如上图所示。心得体会本次课程设计之初,通过老师的给的资料,对报告的要求和所设计的内容有了一定的了解。由于对电阻炉,温度传感器等不是太了解,于是在我查询了相关的资料,了解了电阻炉,温度传感器,根据题目的要求选择了热电阻中的铂电阻。同时本次课程设计中运用到了51单片机、ADC0809等较多的芯片,为此查询了相关芯片的引脚图,对这些芯片有了大致的了解,在学会使用这些芯片的过程,加深了我运用专业知识解决实际问题的能力并且在芯片选型以及设计方案对比方面有了一定的训
12、练。本次课程设计让Protues,Word,Keil等软件的使用,增强了我相应专业软件的使用能力,对单片机的使用让我重新回顾了C语言和汇编语言的使用,对以前的知识有了复习的机会。而本次课程设计主要的难点也是在于程序的设计。本次课程设计中也遇到了些问题,如刚开始时题目的理解错误,程序运行出错,仿真出问题等,在同学的指导和帮助下,这些问题得到了一定的解决。在今后的学习生活中也是如此,除了自己的努力外,还需请教他人,从他人那里学习有关经验和获得帮助,另外此次课程设计为毕业设计打下了良好的基础。参考文献1 陈立周、陈宇.单片机原理及其应用.机械工业出版社,20062 于海生.计算机控制技术.机械工业出
13、版社,20033 谭浩强.C程序设计.清华大学出版社,20054 于海生.计算机控制技术.机械工业出版社,2007.5 刘红丽、张菊秀. 传感与检测技术. 国防工业出版社,2007.6 康华光编著.电子技术基础.模拟部分.高等教育出版社,2000附录一电阻炉微型计算机温度控制系统设计原理图:附录二程序代码#includeintrins.hmath.hstring.hstruct PID unsigned intSetPoint; / 设定目标 Desired Valueunsigned int Proportion; / 比例常数 Proportional Constunsigned int
14、Integral; / 积分常数 Integral Constunsigned int Derivative; / 微分常数 Derivative ConstunsignedintLastError; / Error-1unsignedintPrevError; / Error-2unsignedintSumError; / Sums of Errors;struct PID spid; / PID Control Structureunsignedint rout; / PID Response (Output)unsignedintrin; / PID Feedback (Input)sb
15、it data1=P10;sbitclk=P11;sbit plus=P20;sbit subs=P21;sbit stop=P22;sbit output=P34;sbit DQ=P33;unsigned char flag,flag_1=0;unsigned char high_time,low_time,count=0;/占空比调节参数unsigned char set_temper=35;unsigned char temper;unsigned char i;unsigned char j=0;unsignedint s;/*延时子程序,延时时间以12M晶振为准,延时时间为30ust
16、ime*/void delay(unsigned char time) unsigned char m,n;for(n=0;ntime;n+)for(m=0;m2;m+) 获取温度子程序voidget_temper()unsigned char i,j;do i=reset(); /*复位*/while(i!=0); /*1为无反馈信号*/ i=0xcc; /*发送设备定位命令*/write_byte(i); i=0x44; /*发送开始转换命令*/ delay(180); /*延时*/ /*设备定位*/ i=0xbe; /*读出缓冲区内容*/ j=read_byte(); i=read_by
17、te(); i=(i4; temper=i|j; /*获取的温度放在temper中*/*Smith控制算法*/voidSMITHInit (structSMITH *pp)memset ( pp,0,sizeof(structSMITH);/*SMITH计算部分*/unsignedintSMITHCalc( structSMITH *pp, unsigned intNextPoint )unsignedintdError,Error;Error = pp-SetPoint - NextPoint; / 偏差pp-SumError += Error; / 积分dError = pp-LastEr
18、ror - pp-PrevError; / 当前微分PrevError = pp-LastError;LastError = Error;return (pp-Proportion * Error / 比例项+ pp-Integral * pp-SumError / 积分项Derivative * dError); / 微分项温度比较处理子程序compare_temper()if(set_tempertemper)if(set_temper-temper1) high_time=100;low_time=0;elsefor(i=0;i10;i+) get_temper();rin = s; /
19、 Read Inputrout = PIDCalc ( &spid,rin ); / Perform PID Interationif (high_time=100)high_time=(unsigned char)(rout/800);low_time= (100-high_time);else if(set_temper0)high_time=0;low_time=100;100)high_time=(unsigned char)(rout/10000); / else / /*T0中断服务子程序,用于控制电平的翻转 ,40us*100=4ms周期*/void serve_T0() int
20、errupt 1 using 1if(+count=(high_time)output=1;else if(countoutput=0;count=0; TH0=0x2f; TL0=0xe0;显示子程序void display() unsigned char code number=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6;unsigned char disp_num6;unsignedint k,k1; k=high_time; k=k%1000; k1=k/100;if(k1=0)disp_num0=0;disp_num0=0x60
21、; k=k%100;disp_num1=numberk/10;disp_num2=numberk%10; k=temper;disp_num3=numberk/10;disp_num4=numberk%10+1;disp_num5=numbers/10; disp_1(disp_num);主程序main()unsigned char z;unsigned char a,b,flag_2=1,count1=0; unsigned char phil=2,0xce,0x6e,0x60,0x1c,2; TMOD=0x21; TL0=0x40; SCON=0x50; PCON=0x00; TH1=0x
22、fd; TL1=0xfd; PS=1; EA=1; EX1=0; ET0=1; ES=1; TR0=1; TR1=1;high_time=50;low_time=50;PIDInit( &spid ); / Initialize Structurespid.Proportion = 10; / Set PID Coefficientsspid.Integral = 8;spid.Derivative =6;spid.SetPoint = 100; / Set PID Setpointwhile(1)if(plus=0) EA=0;for(a=0;a5;a+)for(b=0;b102;b+) set_temper+;flag=0;else if(subs=0)if(subs=0)set_temper
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1