煤气退火炉控制系统设计汇总.docx
《煤气退火炉控制系统设计汇总.docx》由会员分享,可在线阅读,更多相关《煤气退火炉控制系统设计汇总.docx(20页珍藏版)》请在冰豆网上搜索。
煤气退火炉控制系统设计汇总
1.设计内容...................................................................................................................................1
3.控制系统的设计.........................................................................................................................6
9.程序...............................................................................................................................................19
1.设计内容
煤气罩式退火炉主要用于对冷轧钢板进行热处理,采用高炉煤气作为燃料。
炉体分内罩和外罩,在内罩内放入退火钢卷,并投入保护性气体防止氧化。
燃烧在内罩和外罩之间进行。
12个喷嘴分为上下两层,每层6个环绕排列。
煤气和空气的喷燃比由连接两个阀门的连杆所固定,这样在燃烧时,其空燃比不变。
煤气和空气阀均为蝶阀,由一台电动执行器通过连杆共同带动。
设计系统保护气体温度为输入及控制量,以电动执行器带动的蝶阀开度(对应于煤气输入量)为输出的一个单输入单输出的温度控制系统。
设计系统要求温度在升温、保温过程中按一定的工艺曲线升温和保温,在400℃温度内,保护气体温度在供气阀门开到最大情况下,以自由升温的速率再最短的时间内升到400℃。
从400℃开始到700℃的保温点,温度按45~75℃/h的速率上升,此段为升温段。
到达700℃点,则开始进入保温段,以700℃为恒值温度进行保温。
钢卷保温一定时间后停火,进入降温段,而降温过程为自由降温,在此段中温控系统停用。
选择合适的控制算法进行控制。
2.总体方案设计
2.1.系统设计方案的提出
本设计是基于51单片机的控制及显示电路设计,从系统的设计功能上看,系统可分为五大部分,即控制部分、传感器部分、数字显示部分、电源部分和执行部分,对于每一个部分都有不同的设计方案,起初我们组拟订了下面两种方案:
1.控制部分
(1)AT89C52单片机
(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°/秒~6°/秒。
其缺点是无法大电流驱动.降低了工作效率且不容易实现。
若选用集成芯片LM298驱动直流步进电机,具有转速高、可变速的优点,十分适合需要快速捕捉目标的场合。
其水平最高转速可达40~50°/秒,垂直可达10~24°/秒。
这种电路通过芯片产生正反向电压.开关速度很快.稳定性极强.效率也非常高。
基于上述考虑.我们拟选用方案二。
3.控制系统的设计
AT89C52单片机作为主控模块,通过传感器进行温度的采集,采集的数据经过A/D转换变成计算机能够接收的数字信号,然后在经过D/A转换将数字信号转变成模拟信号去控制执行机构(直流电机)的转动,并且电机的转动分为三个阶段:
第一阶段:
当采集到的数据在(0~400)℃范围内时,单片机就会控制直流电机转动,
而且转动的非常快。
电机转动带动阀门,从而控制阀门的开度,使温度快速升高。
第二阶段:
当采集到的数据在(400~700)℃范围内时,单片机就会控制直流电机转动,
而且转动速度减慢。
电机转动带动阀门,从而控制阀门的开度,并且使速率控制在45~75℃
/h之间,温度由400℃升温到700℃。
第三阶段:
当采集的数据达到700℃时,电机就停止转动。
同时系统整个过程都通过LCD液晶屏对温度进行实时跟踪与显示。
4.系统硬件设计
4.1.系统硬件电路设计
图2系统硬件电路图
4.2单元模块设计
根据系统要实现的功能,本系统分为五个模块:
电源模块、控制模块、执行模块、温度采集模块和显示模块。
分别将各单元模块功能介绍如下:
4.2.1.电源模块
稳压电源模块我们采用三端集成线性稳压集成块:
L7805CV芯片。
本设计中我们所需的5V电源使用L7805CV芯片完成。
因为它的外围电路比较简单,并且工作比较稳定。
它的稳压精度为2%,工作电流1.5A,封装为TO-220(A),工作温度也很不错,并且具有过温保护和短路保护,最大输入电压为35V,能对电路的长时间工作有很大的保障,故用其作为稳压芯片。
4.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级加密位
·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能
4.2.3.执行模块
执行机构我们采用直流电机作为被控对象,直流电机是电机的主要类型之一。
一台直流电机即可作为发电机使用,也可作为电动机使用,用作直流发电机可以得到直流电源,而作为直流电动机,由于直流电机的启动性能好,具有良好的调速性能,运行稳定;直流电动机的调速范围宽广,调速特性平滑,而且直流电动机的过载能力较强,热动和制动转矩较大。
在许多调速性能要求较高的场合,仍得到广泛使用。
尤其是在调速性能要求较高的大型设备,比如轧钢机上都采用直流电动机拖动。
在本实验中直流电机的作用是:
根据电动机转动的快慢来反映煤气退火炉温度上升的快慢。
在0℃~400℃时,电动机快速转动打开供气阀门快速供气,使火炉在最短的时间内快速升温到400℃;从400℃~700℃为火炉的保温点,此时直流电机的转速将慢慢降低;当温度上升到700℃时,阀门供气量将会下降,使火炉进入保温阶段。
这时直流电机将停止转动
4.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转换器。
4.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
背光电源负极
4.3.元器件清单
表2器件清单
器件名称
个数
单片机
1
A/D转换器
1
D/A转换器
1
LCD1602
1
滑动变阻器
1
运算放大器
1
电流源
5
直流电动机
1
温度传感器
1
5.系统软件设计
5.1.软件流程图
图为软件流程图
7.总结
通过本次的课程设计,我受益匪浅。
不用说在其中学到的新知识是多么有价值,也不用说它拓宽了多少我的眼界,只是说它让我的能力得到的提高就已足以成为我努力付出的回报。
课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。
虽然作的还不是很完善,但还是让我收获了很多的东西,在遇见问题的时候,应从总的方面找原因,不能一味的注意小环节,小环节再对大的方向不对也是没有意义的。
同时了解了很多的硬件知识。
很多涉及到实际问题时,感到了自己的知识的不足,完全不能满足需要。
对于硬件的使用很多都时在同学的知道下才完成的。
让我对学习的方向和方法有了新的认识。
8.参考文献
【1】于海生计算机控制技术北京:
机械工业出版社2007.5
【2】周泽魁.控制仪表与计算机控制装置.北京:
化学工业出版社,2002.9
【3】徐科军.传感器与检测技术.北京:
电子工业出版社,2004.9
【4】谢建英.微型计算机控制系统.北京:
清华大学出版社,2004.
9程序:
9.1#include
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]);
elseDAConvert(dianya[0]);
}
}
unsignedintADC0808()
{
unsignedintadc;unsignedlongintgetdata;
ST=0;OE=0;ST=1;ST=0;
while
(1)
{
CLK=~CLK;
if(EOC==1)break;
}//AD时钟脉冲
OE=1;
getdata=ADC_OUT;
OE=0;
adc=getdata*704/255;
//adc=adc;
return(adc);
}
voidLcd_WriteData(unsignedcharTempData)
{
Lcd_ReadStatus();
Lcd_Data=TempData;
Lcd_RS=1;
Lcd_RW=0;
Lcd_E=0;
Lcd_E=0;
Lcd_E=1;
Lcd_E=0;
}
//写指令
voidLcd_WriteCmd(unsignedcharTempData,unsignedcharBuysC)
{
if(BuysC)Lcd_ReadStatus();
Lcd_Data=TempData;
Lcd_RS=0;
Lcd_RW=0;
Lcd_E=0;
Lcd_E=0;
Lcd_E=1;
Lcd_E=0;
Lcd_E=0;
}
//读数据
unsignedcharLcd_ReadData(void)
{
Lcd_RS=1;
Lcd_RW=1;
Lcd_E=0;
Lcd_E=0;
Lcd_E=0;
Lcd_E=0;
Lcd_E=1;
Lcd_E=0;
return(Lcd_Data);
}
voidLcd_ReadStatus(void)
{
Delay(100);
}
voidLcd_Init(void)//LCM初始化
{
Lcd_Data=0;
Lcd_WriteCmd(0x38,0);//三次显示模式设置,不检测忙信号
Delay(6000);
Lcd_WriteCmd(0x38,0);
Delay(6000);
Lcd_WriteCmd(0x38,0);
Delay(6000);
Lcd_WriteCmd(0x38,1);//显示模式设置,开始要求每次检测忙信号
Lcd_WriteCmd(0x08,1);//关闭显示
Lcd_WriteCmd(0x01,1);//显示清屏
Lcd_WriteCmd(0x06,1);//显示光标移动设置
Lcd_WriteCmd(0x0C,1);//显示开及光标设置
}
//按指定位置显示一个字符
voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData)
{
Y&=0x1;
X&=0xF;//限制X不能大于15,Y不能大于1
if(Y)X|=0x40;//当要显示第二行时地址码+0x40;
X|=0x80;//算出指令码
Lcd_WriteCmd(X,0);//这里不检测忙信号,发送地址码
Lcd_WriteData(DData);
}
//按指定位置显示一串字符
voidDisplayString(unsignedcharX,unsignedcharY,unsignedchar*DData)
{
unsignedcharListLength;
ListLength=0;
Y&=0x1;
X&=0xF;//限制X不能大于15,Y不能大于1
while(DData[ListLength]!
='\0')//若到达字串尾则退出
{
if(X<=0xF)//X坐标应小于0xF
{
DisplayOneChar(X,Y,DData[ListLength]);//显示单个字符
ListLength++;
X++;
}
}
}
voidDelay(unsignedintdelaytime)
{
while(delaytime--);
}