基于单片机与DS18B20设计的恒温器.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实 训 报 告 学 院 电子和信息学院 课程名称 电路课程设计 设计题目 基于MCU51设计的恒温器 专 业 电子信息工程 班 级 08电本 姓 名 学 号 指导教师 杨舰老师 时 间 2010年9月29日 题目要求: 设计并制作一个自动加热电路并具有一定恒温范围的控制电路,当加热器加热到90°C时,电路能自动控制加热器停止加热;当法度降到70°C时,又能自动启动加热装置;恒温范围误差≦5°C;加热和恒温时均有指示灯显示,要求有过热保护。 本设计实现的功能: 本设计完成了题目的要求,并在此基础上加上了调节恒温温度的调节按钮。 设计思路: 设计51单片机的恒温箱控制系统设计时,需要考虑下面3个方面的内容: 1.选择合适的温度传感器芯片。显然,本文中的核心器件是单片机和温度传感器,单片机采用常用的51单片机即可,而温度传感器的选择则需慎重。 2.单片机和温度传感器的接口电路设计。 3.控制温度传感器实现温度信息采集以及数据传输的软件设计。 温度传感器的选择 方案一:采用热敏电阻,可满足40~90℃的测量范围,但热敏电阻精度、重复性、可靠性都比较差,其测量温度范围相对较小,稳定性较差,不能满足本系统温度控制的范围要求。 方案二:采用温度传感器铂电阻 Pt1000。铂热电阻的物理化学性能在高温和氧化性介质中很稳定,它能用作工业测温元件,且此元件线性较好。在 0—100 摄氏度时,最大非线性偏差小于 0.5 摄氏度。铂热电阻和温度关系是,Rt = R0(1+At+Bt*t) ;其中 Rt 是温度为 t 摄氏度时的电阻;R0 是温度为 0 摄氏度时的电阻;t 为任意温度值,A,B 为温度系数。 方案三:采用模拟温度传感器AD590K,AD590K具有较高精度和重复性(重复性优于0.1℃),其良好的非线性可以保证优于±0.1 方案四:采用数字温度传感器DS18B20,DS18B20提供九位温度读数,测量范围-55℃~125℃,采用独特1-WIRE 综合以上四种方案,本设计采用第四种方案,利用数字温度计DS18B20作为温度传感器。 显示部分 方案一:数码管显示:采用串行口驱动、动态扫描显示,利用单片机的串行口输出数据,显示多位数码,多个数码管可共用驱动芯片和限流电阻。 方案二:液晶显示:采用1062液晶进行控制方式显示和温度显示,成本造价相对较高,但是能显示更多的内容。 综合以上二种方案,本设计采用方案二种方案 输出控制 方案一:采用继电器,易于控制,且实行比较简单,但强电和弱电不能很好的隔离,抗干扰能力极差。 方案二:采用光电藕合器,控制信号和输出信号可以很好的隔离,增强了系统的安全性和抗干扰能力。 综合以上两种方案,本设计采用继电器控制负载工作。 程序流程图: 设计中遇到的问题和解决方案: 1、1602液晶被烧,不能显示,具体问题不明,后换过液晶把问题解决; 2、继电器不能工作,后来经过重复排查,发现是万能表出错,把PNP三极管当成NPN型,导致连接电路时出错。 具体系统的实现: 1 、硬件设计(用proteus软件仿真,如下图所示) 2 、软件设计(C语言) #includereg52.h #define uchar unsigned char #define uint unsigned int uchar i; uchar n=0; int nowtemp; int highest=900; int lowest=700; sbit p23=P2^0; sbit lcdrs=P2^5; //数据/命令选择端(h/l) sbit lcdrw=P2^6; //读/写选择端(h/l) sbit lcden=P2^7; sbit p12=P1^3; sbit p14=P1^4; sbit p25=P3^0; sbit p26=P3^1; sbit p27=P3^2; sbit p20=P1^0; sbit p30=P1^1; bit k=0; bit u=0; bit j=0; uchar code wendu[]=0123456789;//利用一个温度表解决温度显示乱码 sbit DQ = P1^2; //定义ds18B20总线IO void delay(uchar z) //延时子函数 { uchar x,y; for(x=50;x1;x--) for(y=z;y1;y--); } uchar data_bh(uchar dd) { uchar accept=0; uchar acc=0; uchar i=7; uchar k=0x01; uchar n=8; uchar ddd = dd; while(n) { acc = 0; acc = ddd k;

文档评论(0)

151****9996 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档