煤气退火炉控制系统设计Word文档下载推荐.docx
《煤气退火炉控制系统设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《煤气退火炉控制系统设计Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
![煤气退火炉控制系统设计Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/3/8797cdf1-6d3a-473c-8cbb-eb8b9e551bab/8797cdf1-6d3a-473c-8cbb-eb8b9e551bab1.gif)
(2)其他
2.传感器部分
(1)(J型热电偶)铁-铜镍热电偶
(2)(T型热电偶)铜-铜镍热电偶
3.数字显示部分
(1)采用LED数码管显示,利用多个数码管来显示数字。
(2)LCD液晶屏显示。
4.电源部分:
(1)购买开关电源。
(2)自制电源。
5.执行部分
(1)用交流电机。
(2)用直流电机,采用集成芯片LM298与LM297组成驱动电路。
2.2.方案比较及确定
(1)本设计中我们采用AT89C52单片机作为主控芯片,AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。
AT89C52是一个低电压,高性能CMOS8位单片机,而且可编程性好。
(2)J型热电偶具有线性度好,热电动势较大,灵敏度较高,稳定性和均匀性较好,价格便宜等优点,广为用户所采用。
其温度范围为0~750℃,符合我们的要求。
虽然T型热电偶也具有这些优点,但是其测量温区为-200~350℃,不能满足我们的要求。
(3)若用LED数码管显示,LED数码管亮度高、小巧轻便,但是电路复杂,显示信息量较小;
LCD的优点是:
工作电流较小、功耗很低,而且可以清晰显示大量信息,趣味性强。
所以选用LCD液晶显示。
(4)购买的开关电源带负载的能力比较好,比较稳定,但是为了提升自己的动手能力,我们选择自己焊接所需的电路。
(5)若用交流电机,转动速度固定,一般为水平转动速度为4°
/秒~6°
/秒,垂直转动速度为3°
/秒。
其缺点是无法大电流驱动.降低了工作效率且不容易实现。
若选用集成芯片LM298驱动直流步进电机,具有转速高、可变速的优点,十分适合需要快速捕捉目标的场合。
其水平最高转速可达40~50°
/秒,垂直可达10~24°
这种电路通过芯片产生正反向电压.开关速度很快.稳定性极强.效率也非常高。
基于上述考虑.我们拟选用方案二。
2.3.控制系统方框图
图1控制系统方框图
AT89C52单片机作为主控模块,通过传感器进行温度的采集,采集的数据经过A/D转换变成计算机能够接收的数字信号,然后在经过D/A转换将数字信号转变成模拟信号去控制执行机构(直流电机)的转动,并且电机的转动分为三个阶段:
第一阶段:
当采集到的数据在(0~400)℃范围内时,单片机就会控制直流电机转动,
而且转动的非常快。
电机转动带动阀门,从而控制阀门的开度,使温度快速升高。
第二阶段:
当采集到的数据在(400~700)℃范围内时,单片机就会控制直流电机转动,
而且转动速度减慢。
电机转动带动阀门,从而控制阀门的开度,并且使速率控制在45~75℃
/h之间,温度由400℃升温到700℃。
第三阶段:
当采集的数据达到700℃时,电机就停止转动。
同时系统整个过程都通过LCD液晶屏对温度进行实时跟踪与显示。
2.4.算法设计问题
运算控制部分主要使用单片机小系统对采集的数据进行处理,方便快捷;
我们运用C语言进行编程。
单片机C语言和标准C语言又存在着很大差别,在计算机上进行C语言程序设计时由于不必考虑程序代码的长短,只需考虑程序功能实现,但是在单片机上进行C语言程序设计就必须考虑系统的硬件资源。
有时并不是程序的算法越简单、长度越短越好,因为有一些算法要调用一些内部的子程序和函数,生成的机器代码长度非常长。
不同的算法对程序代码长度影响十分大,因此在进行程序设计时,就尽量采用程序生成代码短的算法,在不影响程序功能实现的情况下可以采用一些优化算法]。
在单片机C语言编译成机器代码时,不同的运算生成的机器代码的长度相差很大,尽可能地减少程序中对某种数据类型的运算种类,越复杂的数据类型效果越明显。
在进行数据计算时,在一定的精度范围内,可以用一些近似的计算来完成一些运算,既不损失精度又能减少大量的代码。
比如:
用逻辑AND/&
取模比MOD/%操作更有效。
在用热敏电阻测量温度时,可根据热敏电阻—温度特性公式来求值。
数学表达式表示为:
RT=RT0expB(1/T-1/T0)
如果直接按照公式温度时程序结构简单,算法复杂度不高,但是程序将调用<
Math.h>
文件中的对数函数,在编译成机器码时函数有1K多字节,对于一般只有几K字节的单片机系统来说,这是十分不合适的。
考虑到系统资源问题可以用一种替代方法—查表法来实现算法。
只要给出一定温度范围内不同温度值对应热敏电阻的电阻值,然后建立表格,只要按照系统求出的阻值,进行查表,插值,就可以求出相应的温度值。
这种算法相比前面的的公式法的算法复杂高,C语言程序代码也长,但在编译成机器码时,代码长度却很短,只有一、二百字节。
3.系统硬件设计
3.1.系统硬件电路设计
图2系统硬件电路图
3.2单元模块设计
根据系统要实现的功能,本系统分为五个模块:
电源模块、控制模块、执行模块、温度采集模块和显示模块。
分别将各单元模块功能介绍如下:
3.2.1.电源模块
稳压电源模块我们采用三端集成线性稳压集成块:
L7805CV芯片。
本设计中我们所需的5V电源使用L7805CV芯片完成。
因为它的外围电路比较简单,并且工作比较稳定。
它的稳压精度为2%,工作电流1.5A,封装为TO-220(A),工作温度也很不错,并且具有过温保护和短路保护,最大输入电压为35V,能对电路的长时间工作有很大的保障,故用其作为稳压芯片。
3.2.2.控制模块
本设计中我们采用AT89C52单片机作为主控芯片,AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
其引脚图如下所示:
图3引脚图
主要功能特性:
·
兼容MCS51指令系统·
8k可反复擦写(>
1000次)FlashROM
32个双向I/O口·
256x8bit内部RAM
3个16位可编程定时/计数器中断·
时钟频率0-24MHz
2个串行中断·
可编程UART串行通道
2个外部中断源·
共6个中断源
2个读写中断口线·
3级加密位
低功耗空闲和掉电模式·
软件设置睡眠和唤醒功能
3.2.3.执行模块
执行机构我们采用直流电机作为被控对象,直流电机是电机的主要类型之一。
一台直流电机即可作为发电机使用,也可作为电动机使用,用作直流发电机可以得到直流电源,而作为直流电动机,由于直流电机的启动性能好,具有良好的调速性能,运行稳定;
直流电动机的调速范围宽广,调速特性平滑,而且直流电动机的过载能力较强,热动和制动转矩较大。
在许多调速性能要求较高的场合,仍得到广泛使用。
尤其是在调速性能要求较高的大型设备,比如轧钢机上都采用直流电动机拖动。
在本实验中直流电机的作用是:
根据电动机转动的快慢来反映煤气退火炉温度上升的快慢。
在0℃~400℃时,电动机快速转动打开供气阀门快速供气,使火炉在最短的时间内快速升温到400℃;
从400℃~700℃为火炉的保温点,此时直流电机的转速将慢慢降低;
当温度上升到700℃时,阀门供气量将会下降,使火炉进入保温阶段。
这时直流电机将停止转动
3.2.4.温度采集模块
在本次实验中用到的A/D转换器是ADC0808,其原理图及控制原理如下:
(1)①模拟量输入;
②A/D转换器;
③数据输出
图4ADC0808的原理框图
(2)引脚介绍:
:
主电源输入端。
REF(+)、REF(-):
基准电源输入端,使用中REF(-)一般接地,REF(+)最大可接
,要求不高时,REF(+)接
的
电源。
GND:
模拟地数字地共用的接地端。
CLK:
时钟输入引脚,时钟频率范围
,典型值
,此时转换时间约为
。
8路模拟量单极性电压的输入引脚。
ADDA、ADDB、ADDC:
8选1模拟开关的三位通道地址输入端。
用来选择对应的输入通道,其对应关系如图9-4所示。
比如CBA=011,则选中
引脚的输入电压。
C、B、A通常与系统数据总线的
、
连接。
但也有与系统地址总线相连的,此种用法需小心处理端口地址的组织。
ALE:
为通道地址锁存允许选通控制端,输入上跳沿有效;
它有效时,C、B、A的通道地址值才能进入通道地址锁存器,ALE下跳为低电平(无效)时,锁存器锁存进入的通道地址。
START:
启动A/D转换控制引脚,由高电平下跳为低电平时有效;
即对该引脚输入正脉冲下跳沿后,ADC开始逐次比较;
也可将START与ALE连接在一起使用,安排一个CPU写端口地址;
正脉冲上升沿通道地址(码)被写入通道地址锁存器,下降沿启动A/D转换。
EOC:
ADC转换状态输出信号引脚;
未启动转换时,EOC为高电平,启动转换后,正在逐次逼近比较期间EOC为低电平,低电平持续时间为A/D转换时间,约
(与时钟频率有关),一旦转换完毕,EOC端上跳为高电平,此信号可供CPU查询或向CPU发中断。
8位数字量输出引脚,
为
(MSB),
(LSB),它是三态输出数据锁存器的输出引脚,未被选通时,8个引脚对片内均为高阻断开;
因此可与系统数据总线
直接相连。
OE:
数字量输出允许控制端,输入正脉冲有效;
它有效时,数据输出三态门被打开,转换好的数字量各位被送到
引脚上;
它无效时,
浮空(高阻隔离);
显然OE端必须设置一个CPU读数据的端口地址,未访问时,必须为低电平。
(3)公式
①单极性
图5ADC0808/9芯片的引脚图
②双极性
可见此系列ADC本身是单极性转换器,也可以通过外偏置电路方法,变成双极性输入电压的A/D转换器。
3.2.5.显示模块
本系统我们采用LCD液晶显示屏进行显示。
LCD为英文LiquidCrystalDisplay的缩写,即液晶显示器,是一种数字显示技术,可以通过液晶和彩色过滤器过滤光源,在平面面板上产生图象。
LCD占用空间小,低功耗,低辐射,无闪烁,降低视觉疲劳。
在系统中,LCD主要进行温度的显示。
本设计中我们选用LCD1602进行显示,下面是1602的管脚功能说明。
图6引脚说明
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线
VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚功能如下:
表1引脚功能
引脚
符号
功能说明
1
VSS
一般接地
2
VDD
接电源(+5V)
3
V0
液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
4
RS
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5
R/W
R/W为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
6
E
E(或EN)端为使能(enable)端,下降沿使能。
7
DB0
底4位三态、双向数据总线0位(最低位)
8
DB1
底4位三态、双向数据总线1位
9
DB2
底4位三态、双向数据总线2位
10
DB3
底4位三态、双向数据总线3位
11
DB4
高4位三态、双向数据总线4位
12
DB5
高4位三态、双向数据总线5位
13
DB6
高4位三态、双向数据总线6位
14
DB7
高4位三态、双向数据总线7位(最高位)(也是busyflag)
15
BLA
背光电源正极
16
BLK
背光电源负极
3.3.元器件清单
表2器件清单
器件名称
个数
单片机
A/D转换器
D/A转换器
LCD1602
滑动变阻器
运算放大器
电流源
直流电动机
温度传感器
4.系统软件设计
4.1.软件流程图
图7软件流程图
5.调试部分
5.1.调试中遇到的问题
在调试的过程中,起初我们也遇到了一些问题。
在进行数据采集时,由于信号的干扰,采集的数据没有按照一定的规律变化,于是我们就加了一个隔离元件,很好的解决了这个问题。
5.2.调试过程
我们通过传感器对炉温进行数据采集,采集到的数据会在LCD液晶显示屏上进行显示。
当采集到的数据在(0~400)℃范围内时,单片机就会控制直流电机转动,而且转动的
非常快。
电机转动带动阀门,从而控制阀门的开度,由于此时阀门的开度很大,从显示屏上
可以看出温度的变化很快,很快的就达到了400℃。
当采集到的数据在(400~700)℃范围内时,单片机就会控制直流电机转动,而且转动
速度减慢。
电机转动带动阀门,从而控制阀门的开度,从显示屏上可以看出温度的变化也减
缓,并且速率在45~75℃/h之间,温度由400℃升温到700℃。
当采集的数据达到700℃时,电机就停止转动。
LCD显示屏上的数字停止在700℃不变。
5.3.调试结果与分析
1.当采集到的数据在(0~400)℃范围内时,仿真图如下:
图8控制系统硬件仿真图
2.当采集到的数据在(400~700)℃范围内时,仿真图如下:
图9控制系统硬件仿真图
3.当采集到的数据为700℃范围内时,仿真图如下:
图10控制系统硬件仿真图
4.停止温度控制,系统进入自由降温阶段。
5.把系统的四个阶段合并起来,得到如下的工艺曲线:
图11温度曲线图
从曲线上可以看出:
在400℃温度内,气体温度在供气阀门开到最大的情况下,以自由升温的速率在最短的时间(图中为2小时)内升到了400℃。
从400℃开始到700℃的保温点,温度按60℃/h速率上升,此段为升温段,到达700℃点,则开始进入保温段,以700℃为恒值温度进行保温,钢卷保温t1时间后停火,进入降温段,而降温过程为自由降温,在此段中温控系统停用了。
符合设计系统的要求,使温度在升温、保温过程中都能按照一定的工艺曲线进行了升温和保温。
通过调试,我们看到整个系统能够按照题目的要求完成相应的功能。
能够对炉内的温度
进行控制,使其按照要求的曲线进行升温和保温。
从而达到了预期的效果。
6.总结
通过本次的课程设计,我受益匪浅。
不用说在其中学到的新知识是多么有价值,也不用说它拓宽了多少我的眼界,只是说它让我的能力得到的提高就已足以成为我努力付出的回报。
课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。
下面我对课程设计的过程做一下简单的总结。
第一,接到任务以后进行选题。
选题是课程设计的开端,选择恰当的、感兴趣的题目,这对于整个设计是否能够顺利进行关系极大。
好比走路,这开始的第一步是具有决定意义的,第一步迈向何方,需要慎重考虑。
否则,就可能走许多弯路、费许多周折,甚至南辕北辙,难以到达目的地。
因此,选题时一定要考虑好了。
第二,题目确定后就是找资料了。
查资料是做设计的前期准备工作,好的开端就相当于成功了一半,到图书馆、书店、资料室去虽说是比较原始的方式,但也有可取之处的。
总之,不管通过哪种方式查的资料都是有利用价值的,要一一记录下来以备后用。
第三,通过上面的过程,已经积累了不少资料,对所选的题目也大概有了一些了解,这一步就是在这样一个基础上,综合已有的资料来更透彻的分析题目。
第四,有了研究方向,就应该动手实现了。
其实以前的三步都是为这一步作的铺垫。
我们小组既有明确的分工,又有很好的合作。
通常团队的合作是至关重要的,它往往决定了一个比赛的成败。
一位同学主要负责软件部分,我主要负责写报告,另一位同学主要负责硬件部分。
在我们的默契的配合下,终于圆满完成了设计。
通过这次设计,我们对数字电路设计和单片机有了一定的认识,对以前学的数字电路又有了一定的新认识,温习了以前学的知识,就像人们常说的温故而知新嘛,但在设计的过程中,遇到了很多的问题,有一些知识都已经不太清楚了,但是通过一些资料又重新的温习了一下数字电路部分及单片机方面的内容。
在这次比赛中也使我们的同学关系更进一步了,队友之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢我的队友,我从他们身上学到了很多东西。
希望以后有更多这样锻炼的机会。
7.参考文献
【1】潘新民、王燕芳.微型计算机控制技术.北京:
高等教育出版社,2001.7
【2】周泽魁.控制仪表与计算机控制装置.北京:
化学工业出版社,2002.9
【3】徐科军.传感器与检测技术.北京:
电子工业出版社,2004.9
【4】于海生计算机控制技术北京:
机械工业出版社2007.5
8.附录(软件代码)
8.1#include<
reg52.h>
voidLcd_WriteData(unsignedcharTempData);
voidLcd_WriteCmd(unsignedcharTempData,unsignedcharBuysC);
voidLcd_ReadStatus(void);
voidLcd_Init(void);
//LCM初始化
unsignedcharLcd_ReadData(void);
voidDisplayString(unsignedcharX,unsignedcharY,unsignedchar*DData);
voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);
voidDelay(unsignedintdelaytime);
sbitLcd_RS=P2^0;
sbitLcd_RW=P2^1;
sbitLcd_E=P2^2;
unsignedintdianya[11]={0,50,100,150,200,250,300,350,400,450,500};
//0--5V
#defineLcd_DataP0
#defineDA_DataP3
//-------------------------------------------------------------------------
sbitST=P2^5;
sbitEOC=P2^6;
sbitOE=P2^7;
sbitCLK=P2^4;
#defineADC_OUTP1
unsignedcharb;
unsignedinttemp;
unsignedchartable[3];
//==================DAC转换输出控制电热丝加热功率====================
voidDAConvert(unsignedlongintVoltage)
{Voltage=255*Voltage/500;
DA_Data=Voltage;
}
unsignedintADC0808();
//-------------------------------------------------------------------------
voidmain(void)
{
Lcd_Init();
//lcd初始化
while
(1)
{
temp=ADC0808();
//temp=100;
table[2]=temp%10;
table[1]=(temp/10)%10;
table[0]=(temp/100)%10;
DisplayString(0,1,"
T:
"
);
DisplayOneChar(10,1,table[0]+0x30);
DisplayOneChar(11,1,table[1]+0x30);
//LCD显示测量值
DisplayOneChar(12,1,table[2]+0x30);
DisplayOneChar(13,1,'
C'
if(temp<
=400)
DAConvert(dianya[9]);
elseif(temp>
400&
&
temp<
=700)
DAConvert(dianya[5]);
e