当前位置:文档之家› 课程设计烤箱

课程设计烤箱

课程设计烤箱
课程设计烤箱

目录

摘要、序言 (1)

1.组员详细分工 (2)

1.1已知参数和设计要求 (2)

1.2实现方法 (2)

2.组员详细分工 (2)

3.详细操作说明 (2)

4.设计总体思路 (3)

4.1设计步骤 (3)

4.2原理分析 (4)

5.实验结果 (5)

6.源程序清单 (5)

7.设计感想 (6)

7.1李杰峰感想 (6)

7.2韩明昆感想 (6)

7.3陆明感想 (7)

7.4吴婧楠感想 (8)

附录

摘要

本文是对烤箱温度控制系统进行设计,在烤箱温度控制系统中,利用计算机对烤箱的继电器发出不同的信号,来控制继电器的开断,从而能够实现控制烤箱加热与否的控制。本系统采用了PID 控制,是经典控制理论在实际中成功应用的典型实例。本次采用的计时芯片是8254,而信号输出芯片则是8255,同时,利用8259芯片对计时、加热等过程进行中断的控制。而温度采集则是用了PT100感温电阻,将电信号送至A/D574中,利用A/D574的模数转换功能,将采集的温度模拟信号转换成计算机可以识别的电信号,进而在计算机内对这些电信号进行处理,经过PID控制算法来输出控制烤箱的电信号。

关键词:PID控制算法,A/D574模数转换,计算机控制

序言

温度控制技术广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等,传统的温度控制技术中最常见的是继电器调温,但由于继电器动作频繁,温度控制范围小,精度不高,可能会因触点不良而影响正常工作。最近几年快速发展的有PID 温控、模糊控制、神经网络以及遗传算法在温度控制中的应用。烤箱是热处理生产中应用最广的加热设备,它电流通过电热元件产生热量,借助辐射和对流的传递方式,将热量传递给所要加热的物品,使其加热到所要求的温度。本文设计的烤箱温度控制系统,是利用计算机对其温度进行控制,采用PID控制算法,以实现对烤箱温度控制,达到控制性能要求的指标。

1.主要设计内容

1.1已知参数和设计要求

1.某烤箱的温度控制要求为:控制烤箱温度从室温上升到目标温度并一直保持在该目标温度,要求控制的精度达±3%,调节时间≤20秒。

2.目标温度应可以通过键盘任意修改。

3.完成温度检测、温度变松,温度显示(LED和CRT曲线)、温度控制、通过键盘设定上、下限温度报警值,温度超限报警(声、光)等功能。

1.2实现方法

采用80X86计算机、JK实验系统装置实现(限≤4人选做)

2.组员详细分工

姓名职务负责的部分

李杰峰组长控制算法编写,软件数据转换

韩明昆组员硬件电路焊接,调试,报告编写

陆明组员发声程序、显示程序编写

吴婧楠组员程序界面、提示语等编写

3.详细操作说明

1.进入程序后显示如下:

Please set room temperature:(输入当前室温,2位数字,以回车结束)

Please set desired temperature:(期望达到的温度,3位数字内,以回车结束)

Please set time:(输入期望保持预设温度的时间,分钟为单位,2位数字)

2.设置完之后屏幕上会显示如下文字:

Please set room temperature:xx

Please set desired temperature:xxx

Please set time:xx

Press R to RESET number. Press Q to EXIT to DOS

Current Temperature:

XXX C

3.此时屏幕上的温度值会不断刷新。达到预设温度后会发出3声短响,在预设温度范围

内保持指定时间之后会发出4声长响并返回设定参数部分。

4.设计总体思路

系统控制框图如图所示

控制器烤箱

温度采集

我们采用的是传统的PID控制策略,其具体过程如下:

一开始,给定一个输入信号,即期望温度,此时,PID控制器还没有起作用,此信号通过变送器送至继电器,继电器导通,使烤箱处于工作状态。这时,温度传感器就把烤箱内的温度转变成电信号送至计算机中。计算机则将此电信号与输入的期望温度进行比较,通过控制器,根据不同的差值,选择不同的控制策略。由于计算机内的电信号都是脉冲信号,因此,可以调节脉冲信号的占空比来调节继电器的断开与导通的时间。期望值与测量值的差距大,就增大占空比,使一个周期内的加热时间增长,反之,则减小占空比。

采用上述的控制策略,即可以实现PID调节,不同的占空比,相当于PID调节中的比例系数改变,因此,利用计算机调节的烤箱温度控制系统是一个变比例系数的调节过程。因此,只要比例系数选定的合适,都会达到控制指标的要求。

4.1设计步骤

4.1.1主程序的设计

首先确定主程序所要实现的目标,即:显示提示信息,输入设定温度值,输入温度保持时间,实时刷新当前温度,比较实时温度与设定温度差值并进行PID运算,重置参数和结束。

然后,确定了主程序所要实现的功能以后,在相应的编写各个子程序模块。同时,要考虑在整个系统实现的过程中,所要运用到的芯片,好进行芯片的初始化。如8255,8259等

4.1.2温度/时间设定子程序

温度/时间设定子程序,即,从键盘上输入一串数字,将其存放在指定的空间区域内,然后将键盘的ASCII码转换成BCD(8421)码,方便后续计算。

4.1.3读取当前温度子程序

即AD574的使用过程。首先,先将AD574初始化,给R/送负脉冲,启动转换。然后检测STS是否为1,不为1则说名转换结束。读取高8为数据放入AH中,读取低4为放在屏蔽过低4为的AL中,然后将AX中的内容向右移动4位,所得到的结果存放在指定单元中,为当前温度。

4.1.4温度比较以及加热子程序

将前一步骤采集到的当前温度转换成十六进制数,然后进行标度变换,比较当前温度和输入的期望温度差,然后做出相应的标记,然后根据不同的标记跳到相应的加热子程序中。其基本原则就是:实际温度和期望温度差距越大,加热子程序中,每个周期的高电平占空比就越大。

4.1.5发声子程序

在烤箱开始加热的时候,调用一次;待到达指定温度时,再调用一次;最后结束的时候,再调用一次,总共有3次。发声子程序首先是将发声的频率存放到寄存器AX中,然后利用8254定时,再将频率数据写入42H口。然后读取61H口的控制字信息,其中控制信息为11B时,输出,即可发声;为00B时,输出,声音停止。

4.1.6绘制坐标轴子程序

首先初始化屏幕大小,选择X,Y轴所在的位置,选定划线颜色,利用BIOS中断,即可在屏幕上绘制出X,Y轴。

4.1.7CRT曲线绘制子程序

我们将实时保存的温度结果存放在指定的CTEMP中,调用CRT曲线绘制子程序时,直接读取当前温度值,然后设定起始位置,计算当前坐标位置,就可以在屏幕上描出此时的温度点。然后,将横坐标向右移动1,带下次读取时,再次在屏幕上描点,多次反复,就形成了多个点组成的温度响应曲线。

4.2原理分析

设计控制烤箱温度的系统,我们采用PID控制算法。利用计算机控制中的A/D转换器,将采集到的模拟信号转换成数字信号,然后送入计算机进行处理。在计算机中,我们编写了PID控制算法,将送入的电信号经过该算法,输出一个控制继电器开关的脉冲信号,我们可以通过调节脉冲高电平的占空比,来控制一个信号周期内加热时间的长短。从而实现比例控制。又由于这个占空比是实时变化的,所以,这是一个变比例系数的P控制器。利用这个控制器,我们可以使烤箱内的温度保持在我们所设定的期望值。

5.实验结果

实验结果如下表所示:

实验次数

初始温度 设定温度 调节时间 超调量 误差 1 35 80 25秒 4℃ 2.3% 2 40 100 27秒 2℃ 3.3% 3 60 160 29秒 -2℃ 1.5% 4

50

200

40秒

-6℃

3.5%

温度变化过程可大致用如下曲线描述:

本次设计总体上还是比较成功,基本上实现了任务要求。只有调节时间的,可能是冗长的程序,或者是电烤箱的功率问题,又或者是自己的PID 的参数设计不够完善,总之,不能达到要求的20秒以内,但是接近20秒,此为设计的瑕疵。

6.原程序清单

见附录4

温度T/°C 300

200 100 时间t/s

10

20

7.设计感想

7.1李杰峰感想

作为我们团队的组长,需要确定合适的电路,对电路进行调试,将变送器调至最合适的范围。同时还要确定与硬件相关的软件主体思想。一个项目的成败,与组长的整体协调能力关系很大。

这次的时间比较紧张,而且之前没怎么做过过程控制类的题目,所以可以说是时间短、任务重。热敏电阻PT100之前接触过,但是没有和计算机连起来使用,也是一个新的挑战。

这次设计我吸取的上次计算机硬件课程设计的教训,学会多利用子程序,而不是要把所有的问题都用一个主程序解决,却很少使用子程序。这样,不但别人读不懂自己的程序,就连自己有时候都读不懂自己的程序。

软件部分主要涉及到一些数据的转换和处理,例如BCD码转换成ASCII码、十六进制数与BCD码的相互转换等,虽然很久没用汇编语言编写程序,但是这些算法还是都记在心里,只要稍作熟悉就可以顺利将算法变成一个个子程序。其中,给我带来最大困扰的是PID控制器的设计。但是经过老师的讲解,我明白了,原来可以调节输出信号的占空比,控制继电器的开关时间,来调节PID调节器的比例系数,从而实现变比例系数的PID控制。

这次课程设计感觉比以前进步的一点就是程序的模块化思想更加深刻。之前总也用程序段的方式插入的主程序中,而这次则是尽量减少主程序的内容,将所有的处理部分都写成子程序,设计好入口参数,就可以是整个程序思路清晰,一目了然。

一个好的程序编写者并不是会把所有的模块都自己写出来,而是可以将自己搜索到的各种模块与自己的项目结合,设计好接口参数,达到事半功倍的效果。这次的程序就用了之前做过的一些设计的模块,如实时显示刷新模块,延时程序,发声子程序等。这些之前积累下来的宝贵资料大大加快了本次课程设计的速度。

这次设计的不足是:最开始的一天几乎都浪费掉了,原因是太长时间没有复习汇编语言,感到很生疏,只有拿着课本和实验指导书一点点地找感觉,相信这个问题是大家都存在的,却也是可以解决的。再有类似的课程设计要提前复习即将用到的知识,避免在工作需要时才临时抱佛脚。

7.2韩明昆感想:

本次计控课程设计使我对计算机控制技术的相关知识有了新的理解.一来巩固了上

课所学的计控知识,二来拓宽了我的视野,学到了许多新的东西。

在课程设计开始的阶段,我用老师给的硬件连接图将各个部件焊在板子上,很久没有焊东西了,这次忽然又焊起来又费了不少劲。通过以前学习的知识,我知道有的地方可以从背面连接到一起,这样可以省很多没有必要的线,也少了布线的烦恼。然后我们就

按原理图上将各个部件一一焊好,焊好后用万用表测试了各个连接点,没有出现错误短路的地方,也就完成了前期工作。

然后我们开始编制程序。由于我的编程能力有限,所以对于编程方面我做的很少。起初,我们觉得电烤箱的思路很简单,就是一个测试温度。看是否达到目标温度,然后送1,送0就可以了。但实际编制的时候,才发现其实里面的问题也还是很复杂的。首先,要输入目标温度,但通过板子接AD574转化过来的是一个12位的二进制数,最大值FFF是4000多,这跟我们输入的三位数之间有个换算关系,经过我们计算,应该是三位数*13.6,但这时又不知道小数的乘法该怎么做,后来想到可以先乘136,然后再除以10,就可以得到相应的目标数据。然后还碰到了很多问题,都一一化解了。

最后通过通力协作,我们按要求实现了基本功能,本次课程设计算是做完了。通过这次课程设计。使我了对计控知识的了解又有了新的认识。最大的收获就是通过团队合作,每人完成相应的程序模块,然后将各个模块合在一起,这是以后进入社会,工作中会遇到的实际问题,这也算是增长了一次实践经验吧。团队合作是这次课程设计让我体会最深的,如果让一个人来完成这么庞大的程序,我估计没几个人做的出来。所以,以后一定要加强这方面的锻炼,还有一点体会就是编程这方面最重要的就是仔细,有时候一个标号弄错了,要费很大的劲去找,所以细心也非常重要。这也是大学最后一次团队合作的课程设计了,我们大家相处的也很融洽,总之这次课程设计让我收获颇丰。

7.3陆明感想

这次的课程设计我们小组总算是顺利地完成了。虽然只有短短一个星期,但让我真正见识到了什么是团队的力量。从接到此次课程设计任务开始,大家就分配好了各自的任务,并且经常聚在一起各抒己见地讨论各个方案的可行性,气氛那是十分的热烈。在我们小组中也许有的同学能力强些,有些同学能力没那么强,分工时能力强的同学可能任务就重些,但是大家都没有任何的怨言,全力地专注于自己的那一部分任务,所以团结协作是我们小组能顺利完成此次课程设计的一项非常重要的保证,而这次设计也正好锻炼我们这一点,这也是非常宝贵的。

我们这次是设计对烤箱温度控制系统,对于温度的控制系统,我们需要完成温度的采集,温度的控制,能通过键盘,显示接口实现恒温时间设置,系统初始参数设置,报警设置等功能,并能通过不同的声音提示恒温开始和结束时间。我们一起讨论,一起研究,经过几番努力,初步编出的程序,问题很多,也总找不到原因,然后参考书上的例题程序,修改了很多,有些问题是子程序与主程序的连接没弄好,还是很多问题,然后仔细复习书上所学过的知识,对我们的程序再次发现问题,修改问题,后来经过多次的修改最终完成了初步的可行性程序,也算一个进步。在调试过程中又遇到了烤箱失灵等各种客观问题,但最终在老师的协作以及我们自身的努力下,都将这些困难一一克服并得到了比较理想的结果。

在这次设计中,我主要负责的是显示及声音部分,就是程序刚开始的时候有关显示界面,刚开始的时候还是出现很多问题,显示程序的编写,在同学的帮助以及参考书上的一些程序后,初步完成了这段程序,然后经过组长的多次修改,完成了这部分的编写。经过这个部分的编写,让自己明白了很多,课堂上学的东西远远不够,还是需要自己课后的更多的付出和复习,才能让自己所学的东西学以致用,才能让书上的知识变成自己的,也才能让自己变得更加充实,学得更多。

最后顺利地完成了课程设计,大家心情都很喜悦,虽然过程有点累,但是看到努力后的成果,还是很欣慰。

总的来说,通过历时一个星期的课程设计,发现了自己的很多不足,以及自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理

论联系实际的能力还急需提高。经过这个课程设计,同时也证明一个团队的力量比一个人的力量大得多,完成一个复杂的问题效率也会高很多,我自己也从此次课程设计中学到了很多东西,实在是令我受益匪浅。

7.4吴婧楠感想:

这次课程设计让我体会到了团队的温暖。由于我将要参加研究生入学考试,所以精力大都放到复习考研上面去了。但是我的团队给了最大的包容和理解,让我负责了较为轻松的程序界面和提示语程序编写。这已经不是第一次团队合作做课程设计了,但是这次让我最为记忆犹新。

本次课程设计我们小组做的是烤箱,我的主要工作是程序界面和提示语程序编写。通过此次课程设计,总的来说收获还是挺大的。

我的工作是参与了部分子程序的编写,主要有用AD574检测温度的程序、加热程序(分为100%加热、80%加热、50%加热、20%加热)、恒温延时的编写。

在编写程序之前我先复习了下硬件书,检测温度的程序主要就是AD转换的程序,先选通道,再启动转换并检测转换是否结束,结束后将得到的结果保存起来,在参考了硬件实验书上的程序的情况下,程序很快就正确编完了。加热程序是通过8255的A0

口输出1或0来实现的,如50%加热就是在前半周期时间内A0送1,后半周期内A0

口送1。恒温延时程序的主要思想就是先设定一个标志,此标志的值等于设定的恒温时间(以分为单位)乘以60除以2(恒温程序的周期),然后再设定另一个标志,初始值为0,接着在每次进入恒温程序时自加1,就可以通过判断是否等于第一个值来判断来判断延时是否完成。

就在三四天的时间内,大家就把整个课程设计完成了,虽然大家都有点累,但更多的是兴奋。

总的来说,这次课程设计历时一个星期,通过课程设计,发现自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需

提高。经过这个课程设计,也可以证明一个团队的力量比一个人的力量大得多,也可以从中体会到,完成一个复杂的问题效率高很多,我自己也从中学到了很多以前懂的东西,这是实践与理论的结合,也为以后打下基础。

附录

1.系统框图

2.电路原理图

+12V

-12V

20K 电位器

Oab_3p

1K

100Ω电位器

100K

5.1K

5.1K

1K

10K

PT100212.02

电烤箱 8255A Pt100

Pt100变送器

AD574

JK 实验板

PC

PCI 总线

3.各模块程序流程图

3.1主程序流程图

开始

定时中断初始化

8255初始化

显示室温设置提示信息

设置室温子程序 显示温度设置提示信息

设置室温度程序

显示时间设置提示信息 设置时间子程序

定时结束否?

N

读温度子程序 实时显示刷新子程序

转换当前温度子程序

比较温度子程序

根据温度选择加热占空比

结束音乐子程序

Y

3.2设定温度/时间/室温流程图

N

Y

输入一个目标温度的三位数值,

将其存入Stemp 单元

SI 指向stemp 单元的第一个数 设置循环次数CX=3 将SI 指向单元的数据转化

为BCD 码(即-30)

SI+1 3次到否 将BCD 码存入DI 指向的STEMPBCD 单元中 DI+1 RET 返回

3.3读取当前温度子程序

开始

选择通道

延时

给/R C

送负脉冲,启动转换

检测STS 是否为1

读高8位,将结果存入AH

读低4位,屏蔽低4位,将结果存入AL

将AX 右移4位并将结果存入CTEMP ,即得到当前温度

子程序结束

3.4 温度比较和标志位改变子程序

N

N

N

N

开始

将设定温度的BCD 码转换为16进制

将当前温度采样值除以斜率 比较当前温度和设定温度值,得到差值 △8? △>3?

△>15? △>30? 温度标志设为01

温度标志设为03

温度标志设为04

温度标志设为02

温度标志设为FF 结束返回

Y

Y Y

Y

3.5加热子程序(以占空比20%为例)

开始

启动加热

设置CX=2 延时200ms CX自减1

判断CX是否为0

关加热

设置CX=8

延时200ms

CX自减1

判断CX是

否为0

子程序结束N

Y

Y N

3.6 发声子程序

设置发声频率,即16位计数初值,存入AX中

压栈,将AX中的数

据保护起来

8254定时器2为方式3,先低后高写16位计数值

弹栈将AX中的

数据取出

将低八位计数值写入

42H

将高八位计数值写入

42H

返回读取61H端口的原控制信息

D1D0=PB1PB0=11B,其他位

不变

直接控制发声

返回

读取61H端口的原控制信息

D1D0=PB1PB0=00B 其他位不变

直接控制闭音

返回

3.7屏幕实时显示子程序

开始

调用02号DOS中断显示空格

指针指向显缓区

将BCD码转换为ASCII码

依次调用02号DOS中断显示显缓区内容

显示CR,将光标移动到显示区首位

结束返回

4.程序源代码

DATA SEGMENT

AD574H EQU 200H

AD574L EQU 201H

AD574S EQU 205H

KEEP_CS DW ?

KEEP_IP DW ?

COUNT_TIME DW 00H ;中断计数器SETTIME DB 4

DB 0

DB 4 DUP (?) SETTIMEBCD DW ?,?,?

x_p dw 10

SETROOM DB 4

DB 0

DB 4 DUP(?) SETROOMBCD DW ?,?,?

STEMP DB 4

DB 0

DB 4 DUP(?)

STEMPBCD DW ?,?,?

STEMP16 DW ?

CTEMP DW ?

CTEMP16 DW ?

CTEMPBCD DB ?,?,?,27H,'C','$' CHAZHI DW ?

DELAYLOGO DW ?

TIMECOUNT DW 0

HEATFLAG DB ?

MUSICFLAG DB 0

MSG1 DB 0AH,0DH,'Room temperature:','$'

MSG2 DB 0AH,0DH,'Desired temperature:','$'

MSG3 DB 0AH,0DH,'The time:','$' MSG4 DB 0AH,0DH,'Current Temperature:',0AH,0DH,'$'

MSG5 DB 0AH,0DH,'Press R to RESET the temperature',0ah,0dh

DB 'Press Q to EXIT','$' DATA ENDS

;------------------------------------------------ STCK SEGMENT PARA STACK 'STACK'

DB 256 DUP(0)

STCK ENDS

;------------------------------------------------CODE SEGMENT

MAIN PROC FAR

ASSUME

CS:CODE,DS:DATA,SS:STCK START:

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

CLI ;中断向量的设置及8259初始化

MOV AL,1CH

MOV AH,35H

INT 21H

MOV KEEP_CS,CS

MOV KEEP_IP,BX

MOV AL,1CH

MOV AH,25H

MOV DX,SEG TIMER

MOV DS,DX

MOV DX,OFFSET

TIMER

INT 21H

MOV AX,DATA

MOV DS,AX

MOV AL,36H

OUT 43H,AL

MOV AX,59660D

OUT 40H,AL

MOV AL,AH

jmp p_1

start_1: jmp start

p_1: OUT 40H,AL

IN AL,21H

AND AL,0FCH

OUT 21H,AL

;-----------8255初始化--------------

MOV DX,20BH

MOV AL,80H

OUT DX,AL

call tt

LEA DX,MSG1

MOV AH,09H

INT 21H

CALL SETROM

LEA DX,MSG2

MOV AH,09H

INT 21H

CALL SETEMP

LEA DX,MSG3

MOV AH,09H

INT 21H

CALL SETIME

LEA DX,MSG5

MOV AH,09H

INT 21H

LEA DX,MSG4

mov ah,09h

int 21h

MAINAGAIN:

MOV AH,01H

INT 16H

JZ GOON2

MOV AH,0

INT 16H

CMP AL,'R'

JZ START_1

CMP AL,'r'

JZ START_1

CMP AL,'Q'

JZ EXITMAIN_1

CMP AL,'q'

JZ EXITMAIN_1 GOON2: CALL TRANSTIME LEA SI,TIMECOUNT

MOV AL,[SI]

MOV BL,AL

LEA SI,DELAYLOGO

jmp mm_1

start_2: jmp start

mm_1: MOV AL,[SI]

CMP AL,BL

JBE ENDMUSIC

CALL TRANSCTEMP

CALL DISP

call point

jmp pp_1

exitmain_1:jmp exitmain

pp_1: CALL READTEMP

CALL CMPTEMP

MOV AH,01H

INT 16H

JZ GOON1

MOV AH,0

INT 16H

CMP AL,'R'

JZ START_2

CMP AL,'r'

JZ START_2

CMP AL,'Q'

JZ EXITMAIN

CMP AL,'q'

JZ EXITMAIN

GOON1: CMP HEATFLAG,01H

JZ H100

CMP HEATFLAG,02H

JZ H80

CMP HEATFLAG,03H

JZ H50

CMP HEATFLAG,04H

JZ H20

CMP HEATFLAG,0FFH

相关主题
文本预览
相关文档 最新文档