《电加热炉温度控制系统设计.doc》由会员分享,可在线阅读,更多相关《电加热炉温度控制系统设计.doc(43页珍藏版)》请在三一办公上搜索。
1、电加热炉温度控制系统设计 目 录1 意义与要求111 实际意义112 技术要求12 设计内容及步骤121 方案设计122 详细设计2com 主要硬件介绍2com 电路设计方法3com 绘制流程图6com 程序设计723 调试和仿真73 结果分析84 课程设计心得体会9参考文献10附录11电加热炉温度控制系统设计1 意义与要求11 实际意义在现实生活当中很多场合需要对温度进行智能控制日常生活中最常见的要算空调和冰箱了他们都能根据环境实时情况结合人为的设定对温度进行智能控制工业生产中的电加热炉温度监控系统和培养基的温度监控系统都是计算机控制系统的典型应用通过这次课程设计我们将自己动手设计一个小型的
2、计算机控制系统目的在于将理论结合实践以加深我们对课本知识的理解12 技术要求要求利用所学过的知识设计一个温度控制系统并用软件仿真功能要求如下1能够利用温度传感器检测环境中的实时温度2能对所要求的温度进行设定3将传感器检测到得实时温度与设定值相比较当环境中的温度高于或低于所设定的温度时系统会自动做出相应的动作来改变这一状况使系统温度始终保持在设定的温度值2 设计内容及步骤21 方案设计要想达到技术要求的内容少不了以下几种器件单片机温度传感器LCD显示屏直流电动机等其中单片机用作主控制器控制其他器件的工作和处理数据温度传感器用来检测环境中的实时温度并将检测值送到单片机中进行数值对比LCD显示屏用来
3、显示温度时间的数字值直流电动机用来表示电加热炉的工作情况转动表示电加热炉通电加热停止转动表示电加热炉断电停止加热整体思路是这样的首先我们通过按键设定所需要的温度值然后利用温度传感器检测电加热炉的实时加热温度并送至单片机与设定值进行比较若检测值小于设定值则无任何动作电加热炉继续导通加热若检测值大于设定值则单片机控制光电耦合器导通继电器动作电加热炉断电停止加热一旦炉温低于设定值单片机又控制光电耦合器断开继电器开关分离电加热炉开始导通加热这个过程中所设定的温度值和传感器检测到得温度值都要在LCD显示屏上显示出来以方便操作人员观察另外还可以加上时钟模块以方便计时这个设计思路相对比较简单利用所学过的知识
4、容易实现加上光电耦合器用于隔离强电和弱电比较安全正好符合我们自动化专业用弱电控制强电的目的正所谓学以致用22 详细设计com 主要硬件介绍1单片机这里选用AT89C51单片机作为控制系统的处理器AT89C51是一种带4K字节闪存可编程可擦除的低电压高性能CMOS 8位微处理器图21 显示部分电路图这里我选用LCDLM016L液晶显示屏作为系统的显示器件如图所示LCDLM016L采用标准的16脚接口仿真时隐藏了背光正极和背光负极两个引脚它通过D0-D78位数据端来与单片机进行数据和指令传输这里我们将它与单片机的P0口连接在显示屏上显示的内容包括设定的温度值SET传感器检测到的环境温度SA以及时钟
5、这个时钟是可以调整的这样方便工作人员在对系统进行操作时有一个时间概念2温度检测电路温度传感器与单片机的连接情况如下图所示图22 温度检测电路图温度传感器18B20将检测到的环境实时温度进行AD转换和放大然后串行送入单片机P17口便于单片机将此数值与设定的温度值进行比较然后先做出相应反应在仿真时我们只能通过按18B20上的加减按钮来调节实时温度是一个模拟的过程3键盘电路键盘电路如下图所示图23 键盘电路图这里减排设计得比较简单MS键是切换调整对象的调整对象包括时分温度设定值三项键是向上加调整对象的值键是向下减调整对象的值ONOFF键是打开和关闭系统自动调节功能的开关键4电气开关及工作电路电器开关
6、及工作电路如下图所示图24 电气开关及工作电路图如图所示光电耦合器1脚接电源2脚接单片机P37脚工作过程用以下三个阶段来描述1单片机将温度传感器送入的值与设定值进行比较若送入值小于设定值则P37脚保持高电平这样发光二极管不发光光敏晶体管保持高阻态继电器也不会工作电动机和灯泡维持导通相当于电炉继续加热指示灯亮2一旦送入值比设定值大单片机将会控制P37脚变为低电平发光二极管导通发光光敏晶体管受光照影响导通继而继电器工作电磁铁将单刀双掷开关吸向左端使电动机和灯泡同时停止工作这就相当于电炉断电停止加热3电炉短路一段时间后必然导致炉温降低而温度传感器DS18B20在不间断地检测炉温当检测值低于设定值后单
7、片机又控制P37脚恢复高电平光电耦合器恢复高阻态继电器断电单刀双掷开关被弹回右端电动机和灯泡又开始工作这相当于电炉从新开始加热 com 绘制流程图com 程序设计由于整个程序工程量比较大我采用模块化设计方法来设计这个程序首先定义在后面将会用到的变量不可能一次定义准确所以边定义边补充然后编写子函数包括LCM初始化子函数显示指定坐标的一个字符子函数ds18b20初始化函数ds18b20延迟子函数读取ds18b20当前温度子函数液晶显示子函数键盘扫描子函数设定工作模式子函数按键加法子函数按键减法子函数24C02读写驱动程序定时器t0中断子函数等子程序最后是主函数23 调试和仿真在Keil软件中编写完
8、程序后编译生成Hex文件单片机可以执行Hex文件在Protues软件中给单片机加载所生成的Hex文件按下运行按钮系统开始仿真系统仿真截图如下图所示图25系统仿真图一上一张是当温度采样值小于设定值电热炉处于工作状态时的仿真截图以下这张是当温度采样值高于设定值后系统自动做出反应使电热炉断电停止工作的仿真截图图26系统仿真图二3 结果分析由以上仿真结果可以知道此次的设计基本成功当采样温度低于设定值的时候系统不会对电热炉做出相应动作电热炉保持加热一旦采样温度高于设定值系统就会做出反应使电加热炉断电停止加热当温度降下来后系统又会自动控制电加热炉重新开始加热系统的反应速度也是十分精确的会在很短的时间内作出
9、相应动作另外由于在电路中加入了EPROM24C02使得该系统具有掉电保护功能来电后自动恢复正常工作除此之外该系统还有一个比较实用的小功能电子钟这样的话工作人员可以利用它准确掌握系统已经工作的时间也就是说可以把它当做一个定时器来用在安全保护方面该系统也有相当不错的表现由于使用了光电耦合器和就电磁继电器将强电部分和弱电部分充分隔离十分安全综合以上分析该系统的设计十分成功4 课程设计心得体会一个星期很快就过去了计算机控制技术课程设计也告一段落本次课程设计我的题目是设计一个电加热炉温度控制系统说到电加热炉我们都比较熟悉在日常生活中我们经常用到特别是冬天用它来煮火锅我们也会发现这样一个问题一般的电加热炉
10、是没有温度自动控制的当温度上升到我们需要的程度时它仍然继续加热这不仅会影响到加热效果还会造成电能的浪费那么就有必要设计一种能自动调节炉温的系统把它应用到日常生活中将会给人们带来极大的方便在设计的过程中我也遇到一些麻烦比如说怎样来实现电动机回路的自动通断调节怎样来实现时钟的调整等等这些问题都令我十分棘手通过去图书馆查阅相关资料和上网搜索各硬件的原理以及应用我最终都一一解决了这些问题由于我们是三个同学做同一个题目在设计过程中我们遇到困难的时候也经常相互讨论相互请教最终一起解决问题在此也感谢我的战友们总的来说此次课程设计的过程比较轻松从拿到问题到彻底解决问题这是一个令人振奋并享受的过程经过去图书馆大
11、量的查阅书籍我也学到了很多在课本上没有的知识收获颇丰这段过程让我懂得了一个道理那就是学生要学的绝对不该仅仅是课本上的东西有些东西只有走进图书馆你才可能学习到也只有这样我们才能成为一个见多识广渊博的人 参考文献1 于海生微型计算机控制技术清华大学出版社20042 谭浩强C程序设计第三版 清华大学出版社20063 戴焯 传感与检测技术 武汉理工大学出版社20064 张毅刚 单片机原理及应用 高等教育出版社20035 柯节成 简明电子元件器件手册 高等教育出版社2005附录系统的完整程序如下电加热炉温度控制系统问题描述当温控开关打开时若测得环境温度大于设定温度则继电器吸合电加热炉停止工作若测得环境温
12、度小于设定温度则继电器释放电加热炉继续工作include include include define uchar unsigned chardefine uint unsigned intdefine BUSY 0x80 lcd忙检测标志 define DATAPORT P0 定义P0口为LCD通讯端口 define PLAYE_ADDR XBYTE0XBFFF 语音报警地址 sbit RED_ALARM P10 红色指示灯sbit WRITE_ALARM P11 白色指示灯sbit GREEN_ALARM P12 绿色指示灯sbit BLUE_ALARM P13sbit P1_4 P14
13、时钟调整sbit P1_5 P15 时钟加sbit P1_6 P16 时钟减sbit DQ P17 定义ds18b20通信端口 sbit LCM_RS P20 数据命令端sbit LCM_RW P21 读写选择端sbit LCM_EN P22sbit sda P23 IO口定义sbit scl P24 LCD使能信号sbit ad_busy P32 adc中断方式接口sbit RECLED_EOC P35 ISD1420放音结束查询标志sbit OUT P37uchar ad_data ad采样值存储uchar seconde 定义并初始化时钟变量uchar miniteuchar houru
14、char mstcnt 0uchar temp1temp2temp 温度显示变量uchar tsetuchar Kbit ON_OFF 0bit outflagbit write 0uchar code str0 - - uchar code str1 SET C SA C void delay_LCM uint LCD延时子程序void initLCM void LCD初始化子程序void lcd_wait void LCD检测忙子程序void WriteCommandLCM uchar WCLCMuchar BusyC 写指令到ICM子函数void WriteDataLCM uchar W
15、DLCM 写数据到LCM子函数void DisplayOneChar uchar Xuchar Yuchar DData 显示指定坐标的一个字符子函数void DisplayListChar uchar Xuchar Yuchar code DData 显示指定坐标的一串字符子函数void init_timer0 void 定时器初始化void displayfun1 void void displayfun2 void void displayfun3 void void displayfun4 void void keyscan void 键盘扫描子程序void set_adj void
16、void inc_key void void dec_key void void delay_18B20 unsigned int i void Init_DS18B20 void uchar ReadOneChar void void WriteOneChar unsigned char dat void ReadTemperature void void ad0809 void void playalarm void 延时K1ms12000mhzvoid delay_LCM uint k uint ij for i 0i ki for j 0j 60j 写指令到LCM子函数void Wri
17、teCommandLCM uchar WCLCMuchar BusyC if BusyC lcd_wait DATAPORT WCLCM LCM_RS 0 选中指令寄存器 LCM_RW 0 写模式 LCM_EN 1 _nop_ _nop_ _nop_ LCM_EN 0 写数据到LCM子函数void WriteDataLCM uchar WDLCM lcd_wait 检测忙信号 DATAPORT WDLCM LCM_RS 1 选中数据寄存器 LCM_RW 0 写模式 LCM_EN 1 _nop_ _nop_ _nop_ LCM_EN 0 lcm内部等待函数void lcd_wait void D
18、ATAPORT 0xff LCM_EN 1 LCM_RS 0 LCM_RW 1 _nop_ while DATAPORTBUSY LCM_EN 0 _nop_ _nop_ LCM_EN 1 _nop_ _nop_ LCM_EN 0 LCM初始化子函数void initLCM DATAPORT 0delay_LCM 15 WriteCommandLCM 0x380 三次显示模式设置不检测忙信号 delay_LCM 5 WriteCommandLCM 0x380 delay_LCM 5 WriteCommandLCM 0x380 delay_LCM 5 WriteCommandLCM 0x381
19、8bit数据传送2行显示57字型检测忙信号 WriteCommandLCM 0x081 关闭显示检测忙信号 WriteCommandLCM 0x011 清屏检测忙信号 WriteCommandLCM 0x061 显示光标右移设置检测忙信号 WriteCommandLCM 0x0c1 显示屏打开光标不显示不闪烁检测忙信号 显示指定坐标的一个字符子函数void DisplayOneChar uchar Xuchar Yuchar DData Y 1 X 15 if Y X 0x40 若y为1显示第二行地址码0X40 X 0x80 指令码为地址码0X80 WriteCommandLCM X0 Wri
20、teDataLCM DData 显示指定坐标的一串字符子函数void DisplayListChar uchar Xuchar Yuchar code DData uchar ListLength 0 Y 0x01 X 0x0f while X 16 DisplayOneChar XYDDataListLength ListLength X ds18b20延迟子函数晶振12MHz void delay_18B20 unsigned int i while i- ds18b20初始化函数void Init_DS18B20 void unsigned char x 0 DQ 1 DQ复位 dela
21、y_18B20 8 稍做延时 DQ 0 单片机将DQ拉低 delay_18B20 80 精确延时 大于 480us DQ 1 拉高总线 delay_18B20 14 x DQ 稍做延时后 如果x 0则初始化成功 x 1则初始化失败 delay_18B20 20 ds18b20读一个字节 unsigned char ReadOneChar void uchar i 0uchar dat 0for i 8i 0i- DQ 0 给脉冲信号 dat 1 DQ 1 给脉冲信号 if DQ dat 0x80 delay_18B20 4 return dat ds18b20写一个字节 void WriteO
22、neChar uchar dat unsigned char i 0 for i 8 i 0 i- DQ 0 DQ dat0x01 delay_18B20 5 DQ 1 dat 1 读取ds18b20当前温度void ReadTemperature void unsigned char a 0unsigned char b 0unsigned char t 0Init_DS18B20 WriteOneChar 0xCC 跳过读序号列号的操作WriteOneChar 0x44 启动温度转换delay_18B20 100 this message is wery importantInit_DS1
23、8B20 WriteOneChar 0xCC 跳过读序号列号的操作WriteOneChar 0xBE 读取温度寄存器等共可读9个寄存器 前两个就是温度delay_18B20 100 a ReadOneChar 读取温度值低位b ReadOneChar 读取温度值高位temp1 b 4temp1 a0xf0 4temp2 a0x0ftemp b256a 4 当前采集温度值除16得实际温度值 液晶显示子函数1正常显示void displayfun1 void WriteCommandLCM 0x0c1 显示屏打开光标不显示不闪烁检测忙信号DisplayListChar 00str0 Display
24、ListChar 01str1 DisplayOneChar 30hour100x30 液晶上显示小时DisplayOneChar 40hour100x30 DisplayOneChar 60minite100x30 液晶上显示分DisplayOneChar 70minite100x30 DisplayOneChar 90seconde100x30 液晶上显示秒DisplayOneChar 100seconde100x30 DisplayOneChar 41K100x30 液晶上显示设定的温度DisplayOneChar 51K100x30 DisplayOneChar 111temp1100
25、x30 液晶上显示测得的温度 DisplayOneChar 121temp1100x30 DisplayOneChar 141temp2100x30 if ON_OFF 0 若温控标志为0 DisplayOneChar 1400x4f 液晶上显示不控温的标志DisplayOneChar 1500x46 else DisplayOneChar 1400x4f 液晶上显示控温的标志DisplayOneChar 1500x4e if outflag 1 DisplayOneChar 000x7c elseDisplayOneChar 000xef 液晶显示子函数2void displayfun2 v
26、oid WriteCommandLCM 0x0c1 显示屏打开光标不显示不闪烁检测忙信号DisplayListChar 00str0 DisplayListChar 01str1 DisplayOneChar 60minite100x30 DisplayOneChar 70minite100x30 DisplayOneChar 90seconde100x30 DisplayOneChar 100seconde100x30 DisplayOneChar 41K100x30 DisplayOneChar 51K100x30 DisplayOneChar 111temp1100x30 Display
27、OneChar 121temp1100x30 DisplayOneChar 141temp2100x30 WriteCommandLCM 0x0f1 显示屏打开光标显示闪烁检测忙信号 DisplayOneChar 30hour100x30 DisplayOneChar 40hour100x30 液晶显示子函数3void displayfun3 void WriteCommandLCM 0x0c1 显示屏打开光标不显示不闪烁检测忙信号DisplayListChar 00str0 DisplayListChar 01str1 DisplayOneChar 30hour100x30 DisplayO
28、neChar 40hour100x30 DisplayOneChar 90seconde100x30 DisplayOneChar 100seconde100x30 DisplayOneChar 41K100x30 DisplayOneChar 51K100x30 DisplayOneChar 111temp1100x30 DisplayOneChar 121temp1100x30 DisplayOneChar 141temp2100x30 WriteCommandLCM 0x0f1 显示屏打开光标显示闪烁检测忙信号DisplayOneChar 60minite100x30 DisplayOn
29、eChar 70minite100x30 液晶显示子函数4 void displayfun4 void WriteCommandLCM 0x0c1 显示屏打开光标不显示不闪烁检测忙信号DisplayListChar 00str0 DisplayListChar 01str1 DisplayOneChar 30hour100x30 DisplayOneChar 40hour100x30 DisplayOneChar 60minite100x30 DisplayOneChar 70minite100x30 DisplayOneChar 90seconde100x30 DisplayOneChar
30、100seconde100x30 DisplayOneChar 111temp1100x30 DisplayOneChar 121temp1100x30 DisplayOneChar 141temp2100x30 WriteCommandLCM 0x0f1 显示屏打开光标显示闪烁检测忙信号DisplayOneChar 41K100x30 DisplayOneChar 51K100x30 键盘扫描子函数void keyscan void uchar xx 局部变量 P1 0xffif P1 0xff delay_LCM 50 if P1 0xff xx P1switch xx 根据按键状态调用不
31、同的子函数 case 0xfeset_adj break case 0xfdinc_key break case 0xfbdec_key break case 0xf7 delay_LCM 150 ON_OFF ON_OFFwhile BLUE_ALARM breakdefaultbreak 设定工作模式子函数void set_adj void delay_LCM 100 set if set 4 set 0while RED_ALARM 按键加法子函数void inc_key void delay_LCM 150 switch set case 0if P1 0xf7 delay_LCM 1
32、50 ON_OFF ON_OFF breakcase 1hour if hour 23 hour 23 breakcase 2minite if minite 59 minite 59breakcase 3Kif K 99 K 99 break defaultbreak while WRITE_ALARM 按键减法子函数void dec_key void delay_LCM 150 switch set case 0if P1 0xf7 delay_LCM 150 ON_OFF ON_OFF breakcase 1hour- if hour 0 hour 0 breakcase 2minite
33、-if minite 0 minite 0breakcase 3K-if K 1 K 1 break defaultbreak while GREEN_ALARM 24C02读写驱动程序void delay1 uchar x uint ifor i 0i xi void flash void x24c02_init 24c02初始化子程序 scl 1 flash sda 1 flash void start 启动I2C总线 sda 1 flash scl 1 flash sda 0 flash scl 0 flash void stop 停止I2C总线 sda 0 flash scl 1 fl
34、ash sda 1 flash void writex uchar j 写一个字节 uchar itemp temp j for i 0i 8i temp temp 1 scl 0 flash sda CY flash scl 1 flash scl 0 flash sda 1 flash uchar readx 读一个字节 uchar ijk 0scl 0 flash sda 1 for i 0i 8i flash scl 1 flash if sda 1 j 1else j 0k k 1 jscl 0 flash return k void clock I2C总线时钟 uchar i 0s
35、cl 1 flash while sda 1 i 255 iscl 0 flash 从24c02的地址address中读取一个字节数据uchar x24c02_read uchar address uchar istart writex 0xa0 clock writex address clock start writex 0xa1 clock i readx stop delay1 10 return i 向24c02的address地址中写入一字节数据infovoid x24c02_write uchar addressuchar info EA 0start writex 0xa0 c
36、lock writex address clock writex info clock stop EA 1delay1 50 定时器t0初始化void init_timer0 void TMOD 0x01 time0为定时器方式1 TH0 0x3c 预置计数初值 TL0 0xb0 EA 1 ET0 1 TR0 1 定时器t0中断子函数void timer0 void interrupt 1 using 0 定时器0方式150ms中断一次 TH0 0x3c TL0 0xb0 mstcnt if mstcnt 20 seconde write 1 mstcnt 0 if seconde 60 mi
37、nite seconde 0 if minite 60 hour minite 0 if hour 24 hour 0 keyscan 按键扫描 the main funtionvoid main void P1 0xff 初始化p1口全设为1 x24c02_init 初始化24C02 K x24c02_read 2 读出保存的数据赋于Kseconde x24c02_read 4 minite x24c02_read 6 hour x24c02_read 8 delay_LCM 500 延时500ms启动initLCM LCD初始化init_timer0 时钟定时器0初始化 Init_DS18B20 DS18B20初始化DisplayListChar 00str0 DisplayListChar 01str1 while 1 keyscan 按键扫描 ReadTemperature 温度采集 switch set LCD根据工作模式显示 case 0displayfun1 delay_LCM 1000 br