数字式自动温度控制仪设计说明.doc

上传人:doc321 文档编号:14867009 上传时间:2022-02-22 格式:DOC 页数:25 大小:267.50KB
返回 下载 相关 举报
数字式自动温度控制仪设计说明.doc_第1页
第1页 / 共25页
数字式自动温度控制仪设计说明.doc_第2页
第2页 / 共25页
数字式自动温度控制仪设计说明.doc_第3页
第3页 / 共25页
数字式自动温度控制仪设计说明.doc_第4页
第4页 / 共25页
数字式自动温度控制仪设计说明.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《数字式自动温度控制仪设计说明.doc》由会员分享,可在线阅读,更多相关《数字式自动温度控制仪设计说明.doc(25页珍藏版)》请在三一文库上搜索。

1、. . . . 课程设计任务书学生: 专业班级: 电信1204班 指导教师:王绪国、维聪 工作单位: 信息工程学院 题 目: 数字式自动温度控制仪设计 设计容与要求:(1)以AT89系列单片机为核心,设计一款数字式自动温度控制仪。(2)测量温度围:室温200;温度测量的精度为1。(3)设置2个模拟输出通道:一个通道控制加热设备(输出05VDC,控制0220VAC), 另一个通道控制电机转速(输出010V,控制转速02000rps),具体控制要求见下表。温度室温100100100150150150180180时间2分钟2分钟5分钟2分钟2分钟5分钟转速rps5008001000150018002

2、000(4)应用液晶显示器实时显示当前的温度值、系统时间和电机转速;(5)完成系统硬软件设计;(6)完成系统仿真,提交课程设计报告。时间安排:1) 第1天, 查阅相关资料,学习设计原理。2) 第23天, 方案选择和电路设计仿真。3) 第4天, 设计说明书撰写。4) 第5天, 上交报告,同时进行答辩。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目 录摘 要IAbstractII1 设计要求与原理11.1 设计要求11.2 电路的总体工作原理12 系统电路设计22.1 系统硬件电路图22.2 具体电路模块分析32.2.1 温度传感器模块(DS18B20)32.2.2 DS130

3、2时钟电路42.2.3 加热电路52.2.4 电机驱动电路52.2.5 液晶显示电路(LCD1602)63 软件设计流程图84 仿真以与性能分析95 心得体会116 参考文献12附录 源程序1319 / 25摘 要本次课程设计主要研究的是数字式自动温度控制仪,利用单片机来控制温度以与电机的转动。它的主要组成部分有:AT89C52单片机、温度传感器、LCD显示电路、温度控制电路,系统时间显示电路。温度传感器DS18B20用于环境温度的采集与转换,DS1302用于产生系统时间,LCD显示电路用于显示温度传感器采集到的温度和直流电机的转速与系统时间,温度控制电路用于控制电机的转速与时间,AT89C5

4、2为系统的核心部分,进行数据的接收和处理。此系统可以实时的显示环境温度,并可以根据温度来控制电机的转速以与这种转速维持的时间,将转速显示在液晶屏上,同时还可以控制加热设备。关键词:AT89C52DS18B20 LCD显示Abstract The course is primarily designed research is digital automatic temperature control device, using SCM to control the temperature and the rotation of the motor. Its main components in

5、clude: AT89C52 microcontroller, temperature sensor, LCD display circuit, the temperature control circuit, the system time display circuit. DS18B20 temperature sensor for ambient temperature acquisition and conversion, DS1302 is used to generate the system time, LCD display speed and system temperatu

6、re sensor to the temperature and DC motor circuit is used to display the time, temperature control circuit for controlling the motor speed and time, AT89C52 as the core of the system, receiving and processing data. This system can display real-time ambient temperature and the temperature can be cont

7、rolled according to the motor speed and the time to maintain this speed, the speed displayed on the LCD screen, but you can also control the heating equipment.Keywords: AT89C52 DS18B20 LCD1 设计要求与原理1.1 设计要求本课程设计的要以AT89系列单片机为核心,设计一个数字式自动温度控制仪。测量温度围:室温200;设置2个模拟输出通道:一个通道控制加热设备(输出05VDC,控制0220VAC),另一个通道控

8、制电机转速(输出010V,控制转速02000rps);温度测量的精度为1;应用液晶显示器实时显示当前的温度值、系统时间和电机转速;1.2 电路的总体工作原理电路总体分为6个模块,分别是DS18B20温度控制模块,DS1302系统时间显示模块,继电器加上lamp模拟的加热设备模块,L298直流电机控制模块,LCD1602液晶显示模块,AT89C52微控制器。其中DS18B20与DS1302用来显示当前温度与时钟,测量的值直接在LCD上面显示,另外DS18B20的温度值还将控制直流电机的转速以与加热设备的启动。电机的控制为温度控制,将温度分为3个档,这3个档分别对应不同的电机转速。当温度下降到30

9、度以下时,加热设备开始工作。AT89C52芯片与LCD就负责数据的处理与显示。系统框图如图1:DS18B20温度控制DS1302时钟显示加热设备AT89C52电机驱动模块LCD显示模块图1 系统框图2 系统电路设计2.1 系统硬件电路图图2 系统电路图如图2,系统硬件电路主要由温度显示,时钟芯片,电机驱动模块,加热模块以与LCD显示组成。另外51单片机来控制数据的处理与传输。2.2 具体电路模块分析2.2.1 温度传感器模块(DS18B20)DS18B20原理与特性:本系统采用了DS18B20单总线可编程温度传感器,来实现对温度的采集和转换,大大简化了电路的复杂度,以与算法的要求。部结构主要由

10、四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形与管脚排列如图2-2所示GND为接地线,DQ为数据输入输出接口,通过一个较弱的上拉电阻与单片机相连。VDD为电源接口,既可由数据线提供电源,又可由外部提供电源,围3O5.5 V。本文使用外部电源供电。主要特点有: 1. 用户可自设定报警上下限温度值。 2. 不需要外部组件,能测量55+125 围的温度。3. 10 +85 围的测温准确度为05 。4. 通过编程可实现9l2位的数字读数方式,可在至多750 ms将温度转换成12 位的数字,测温分辨率可达00625 。 5. 独特的单总线接口

11、方式,与微处理器连接时仅需要一条线即可实现与微处理器双向通讯。6. 测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。7. 负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。8. DS18B20支持多点组网的功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温2。DS18B20测温电路图如图3所示。图3 DS18B20 DS18B20在本次设计中用于模拟显示当前实时温度,同时控制电机转速以与加热设备,当温度低于30度时,加热设备开启,同时电机转速最低;当温度大于30度且小于40度时,加热设备关闭,电机转速适当地

12、提高;当温度高于40度时,电机转速达到最大。2.2.2 DS1302时钟电路DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示与部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义

13、的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 在系统电路中用DS1302芯片来显示系统时间,电路图如图4。图4 DS13022.2.3 加热电路在本次仿真当中,用电灯以与继电器来模拟加热设备,当温度低于30度时,单片机输出端输出低电平,同时继电器工作,线圈闭合,12V的电灯lamp点亮。电路图如图5。图5 加热电路2.2.4 电机驱动电路本次课设需要用一个模拟输出来控制电机的转动,于是用P2.0输出PWM波形来控制电机转动,的占空比的不同控制不同的电机转速,设置了3种不同的占空比,分别对应温度不同时电机的转速。由于单片机输出电流太小,无法驱动直流电机的转动

14、,因此加上L298来驱动直流电机。由于需要记录电机的转速,采用的是编码电机MOTORENCODER,该电机其中一脚当电机每转一圈会产生一个脉冲,利用该脉冲记录转速。电路图如图6,图6 电机驱动电路2.2.5 液晶显示电路(LCD1602)LCD1602的管脚图如图2-4所示。图7 LCD1602管脚图u 各引脚功能为:VSS-地电源VDD-5V正电源 VL-液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度 RS-寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器 R/W-读写信号线,高电平时进行读操作

15、,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据 E-使能端,当E端由高电平跳变成低电平时,液晶模块执行命令 D0D7-8位双向数据线BLA(15管脚)-背光源正极 BLK(16管脚)-背光源负极u LCD1602的基本操作时序写指令 输入:RS=L,=L,=指令码,E=高脉冲 输出:=数据写数据 输入:RS=H,=L,=数据, E=高脉冲,输出:无u LCD1602的写操作时序1) 通过RS确定是写数据还是写指令。指令包括使液晶的光标显示/不显示,光标闪烁/不闪烁,需/不需移屏,

16、在液晶的什么位置显示等等。写数据是要显示什么容。2) 读/写控制端设置为写模式,即低电平。3) 将数据或命令送达数据线上。4) 给E一个高脉冲将数据送入液晶控制器,完成写操作。3 软件设计流程图按上述工作原理和硬件结构分析可知系统主程序流程图如下图8所示。结束开始初始化DS18B20测出环境温度判断温度的档位单片机处理数据控制电机转速液晶显示图8 主程序工作流程图4 仿真以与性能分析 仿真开始时,当温度还为30度时,此时电灯熄灭,LCD上显示的转速为48 r/min。电路图如图9。图9 温度为30时由图10可见,此时温度29,低于30度,右下角的加热设备电灯点亮,同时随着温度的下降,电机转速转

17、速也随之下降,LCD显示屏上显示为36 r/min,并显示了当前的温度以与系统时间。图10 温度低于30当温度继续上升,因为没达到临界值,电灯开关状态并没有发生改变,但随着温度的上升,电机的转速随之升高,为54 r/min。如图11图11当温度升高到41度时,开关状态发生改变,电机转速也随温度升高而线性升高,为60 r/min如图12图12当温度在不同的围时,题目中要求电机的转速为800r/s和1500r/s,但由于proteus仿真的直流电机不能达到那么高的转速,因此,在仿真的过程当中,利用每分钟多少转来显示,通过仿真不同的温度围,都能达到预定的转速。而在实际当中,又通过修改pwm波的占空比

18、,从而调节转速,测量电机转速的方法是测10秒电机的转动圈数,然后乘上6就转换为电机每分钟的转速,这样简单但是必然会导致一定误差,但是不影响总体。在程序中我只设置了3种不同温度控制电机转速,如果需要更加精确的温度控制,随时可以加上更加精细的温度档数。5 心得体会正所谓“纸上得来终觉浅,觉知此事要躬行。”学习任何知识,仅从理论上去求知,而不去实践、探索是不够的。因此在学期末来临之际,我们迎来了单片机的课程设计,此次设计就是综合运用以前学过的C语言知识、Proteus仿真、keil软件、单片机的编程基础知识等来设计一个自动温度控制仪。此次的课程设计我觉得最基础的应该是C语言知识。作为一种入门语言,我

19、们在大一就已经学过,并且还参加了计算机二级考试。但当时学的时候就只了解一些语法知识,编一些简单的程序,至于具体地能应用到哪个方面,从来就没有去考虑。以前也做过类似的课设,可当时也没怎么把它当回事,纯粹是打酱油,随便在网上搜几个程序就可以解决老师所布置下来的任务。其时,当时也并不明白原理性,就连操作也是看了别人的解释才稍微地明白了那么一点,更不用说去探究各种不同的方法来完成一样的任务,以此比较它们的性能好坏。这学期因为很闲,就了解了一下C语言的用法,因此经常跟它打交道,对于一些简单的芯片、开发板的电路结构都有了个基本的了解,因此这次跟上次比起来感觉还是顺手多了。但问题还是会常出现的,我们书本上的

20、知识都是零散的,这就必须得把它们串起来,然后用C语言把它们一一实现,因此少不了上网查阅各种资料,实在不懂的就跟同学们探讨,在这个过程中,大家都可以交流自己的想法,我们学会了如何去接受别人的观点,偿到了合作的甜头。在设计之前我根本就没有考虑到电机的转速特性,认为只要我们人为控制,都可以达到预定的要求,因此就直接使用了步进电机,但不管怎样好像都无法实现目标,最后在同学的提醒下才使用直流电机来提速。在整个设计过程中我懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力, 使自己充分体会到了在设计过程中的成功

21、喜悦。虽然这个设计做的不怎么好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。在没有做课程设计以前,觉得课程设计只是对知识的单纯总结,但是通过这次课程设计发现自己的看法有点太片面,课程设计不仅是对前面所学知识的一种检验,也是对自己能力的一种提高,这次课程设计使我明白了原来的那点知识是非常欠缺的,要学习的东西还很多,我们要明白学习是一个长期积累的过程,在以后的工作和生活中都应该不断的学习,努力提高自己的知识和综合素质。6 参考文献1 郭天祥.51单片机C语言教程M.:电子工业,20092 楼然苗.51系列单片机设计实例M:航空航天大学,20063 伟. 单片机C语言程

22、序设计实训100例基于8051+Proteus仿真.:电子工业,20104 史翔,岳涛.基于AT89C51单片机微电阻测量系统J. 科技,2007年8月5 王东峰,王会良.单片机C语言应用100例M.:电子工业,2010附录 源程序Main.c :#include #include LCD.h#include DS18B20.h#include DS1302.hsbit outv=P20; /电机转动时PWM输出口;sbit ctr =P23; /控制加热设备输出uchar flag2=1;uchar tflag=1;uchar timeflag=0;uchar per=10; /PWM低电平

23、所占时间void initall();void chesu();void initT0();void DispTemp(uint tem);void DispTime();void DispSP();/*主函数*/void main() initall();while(1)DispTemp(gettemp();DispTime();if(timeflag) DispSP();/*温度显示函数*/void DispTemp(uint tem)if(tflag)/第一次调用温度显示函数tflag=0;write_string(0,10,Tem:); if(tem=300&tem=330)per=5

24、;else per=0;write_(0x80+14);write_data(tem/100+48);write_data(tem%100/10+48);write_data(.);write_data(tem%10+48);write_data(0);/显示摄氏度/*DS1302时间显示函数*/void DispTime() uchar j; gettime();write_(0x80);for(j=0;jper)outv=1;else outv=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(times=200)times=0;timefl

25、ag=1;/*电机转速显示函数*/void DispSP()uint count=0;timeflag=0;write_(0xc0+7);count=TH1*256+TL1; write_data(count*6/100+48);write_data(count*6%100/10+48);write_data(count*6%10+48); TH1=0;TL1=0;LCD.c:#include#includeLCD.hsbit RS=P10; sbit EN=P11;uchar Pic=0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00; /摄氏度的图案显示void

26、 delayms(uint x)uint i,j;for(i=0;ix;i+)for(j=0;j124;j+);void write_(uchar )RS=0;P0=;delayms(5);EN=1;delayms(5);EN=0; void write_data(uchar com1)RS=1;P0=com1;delayms(5);EN=1;delayms(5);EN=0;void write_string(uchar col, uchar line, uchar *table) /LCD中输出字符串if(col=0)write_(0x80+line);while(*table!=0)wri

27、te_data(*table+);else if(col=1)write_(0xc0+line);while(*table!=0)write_data(*table+);else return;void initLCD() uchar k;EN=0;write_(0x38);write_(0x0c);write_(0x06); write_(0x01);/清屏;write_(0x40);for(k=0;k8;k+)write_data(Pick);DS18B20.c:#include#include #include#includeLCD.h#includeDS18B20.hsbit D0=P

28、12; /数据线 void delayus(uchar ms) /微秒级的延时;延时2*ms+5(s).while(-ms);void init() D0=1;delayus(4);D0=0; delayus(175);/延时750s; delayus(175);D0=1;delayus(200); void write_byte(uchar dat)/写字节uchar i ; for(i=8;i0;i-) D0=0;D0=dat&0x01;delayus(20);D0=1;dat=1;uchar read_byte() /读数据uchar dat1,j;for(j=8;j0;j-)D0=0;

29、dat1=1; /注意什么时候移入delayus(2); D0=1;if(D0) dat1=dat1|0x80;delayus(20);return dat1; uint gettemp() /获得温度数值uchar a,b ;uint temp ; init();delayms(1);write_byte(0xcc); /跳过读ROM指令write_byte(0x44); /开始温度转换; delayms(5); init(); /每次进行通信时都要进行复位操作write_byte(0xcc); /跳过读ROM指令write_byte(0xbe); /读取RAM中的数据a=read_byte

30、();b=read_byte();temp=b;temp=temp8;temp=temp|a; temp=temp*(0.625); return (temp);DS1302.c:#include#includeLCD.hsbit dsclk=P14;/ds时钟输入端sbit dsdata=P13;/ds数据双向通信端sbit dsret=P15;/ds 复位端uchar buf8;/申请数据暂存空间uchar read(uchar address) uchar i; uchar rdata; dsclk=0; dsdata=0; dsret=0; dsret=1;/ret处于高电平时可对13

31、02进行读操作for(i=0;i1;/右移一位 dsclk=1;/上升沿写数据for(i=0;i1; if(dsdata) rdata=rdata|0x80; dsclk=1;/上升沿动作 dsclk=1;/等待dsclk=1;/时钟置高dsret=0;/片选无效return (rdata);void write(uchar address,uchar number) uchar i; dsclk=0;/清零时钟总线 dsdata=0;/清零数据总线 dsret=0;/片选端无效 dsret=1;/逻辑控制有效,可对1302操作 for(i=16;i0;i+) dsclk=0; if(i8)

32、dsdata=address&0x01;/低地址输入 address=address1;/地址数据右移一位 else dsdata=number&0x01;/进行数据传送 number=number1;/数据右移一位 dsclk=1; dsclk=1;/上升沿动作 dsret=0;/片选无效,不可进行操作void gettime() buf0=read(0x85)/16+48; /小时数据转换成十六进制 buf1=read(0x85)%16+48; /小时数据转换成十六进制 buf2=:; /小时与分之间的横线 buf3=read(0x83)/16+48; /分数据转换成十六进制 buf4=read(0x83)%16+48; /分数据转换成十六进制 buf5=:; /分与秒之间的横线 buf6=read(0x81)/16+48; /秒数据转换成十六进制 buf7=read(0x81)%16+48; /秒数据转换成十六进制

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1