基于单片机的鸡雏孵化室恒温控制器设计王佳.docx
《基于单片机的鸡雏孵化室恒温控制器设计王佳.docx》由会员分享,可在线阅读,更多相关《基于单片机的鸡雏孵化室恒温控制器设计王佳.docx(32页珍藏版)》请在冰豆网上搜索。
基于单片机的鸡雏孵化室恒温控制器设计王佳
基于单片机的鸡雏孵化室恒温控制器设计
摘要
温度是一个很重要的根本物理量,在很多领域都要涉及到,例如:
冶金工业、化工生产、造纸行业、机械制造、电加热炉及家用电器等,都需要对其进展测量和控制,使被控温度保持在预先设定的围〔即恒温控制〕。
在本课题研究的鸡雏孵化室恒温控制器中,要求室温恒定保持在38℃之间,且精度要到达±1℃,因此这里需考虑加热控制和散热装置。
在恒温控制方面运用基于单总线多点循环技术进展温度采样,最终利用继电器控制加热装置实现加热控制。
另外也可通过仪器控制面板实现温度的设定与显示。
关键词:
STC89C51鸡雏孵化室温度控制
基于单片机的鸡雏孵化室恒温控制器设计
一、绪论
〔一〕温度控制系统设计的背景、开展历史及意义
随着社会的开展,科技的进步,以及测温仪器在各个领域的应用,智能化已是现代温度控制系统开展的主流方向。
特别是近年来,温度控制系统已应用到人们生活的各个方面,但温度控制一直是一个未开发的领域,却又是与人们息息相关的一个实际问题。
针对这种实际情况,设计一个温度控制系统,具有广泛的应用前景与实际意义。
温度是科学技术中最根本的物理量之一,物理、化学、生物等学科都离不开温度。
在工业生产和实验研究中,像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、酒类生产等领域,温度常常是表征对象和过程状态的最重要的参数之一。
比方,发电厂锅炉的温度必须控制在一定的围之;许多化学反响的工艺过程必须在适当的温度下才能正常进展;炼油过程中,原油必须在不同的温度和压力条件下进展分馏才能得到汽油、柴油、煤油等产品。
没有适宜的温度环境,许多电子设备就不能正常工作,粮仓的储粮就会变质霉烂,酒类的品质就没有保障。
因此,各行各业对温度控制的要求都越来越高。
可见,温度的测量和控制是非常重要的。
单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也用到了温度检测和温度控制。
随着温度控制器应用围的日益广泛和多样,各种适用于不同场合的智能温度控制器应运而生。
近年来,人类的生产和生活方式发生了巨大的变化,产生这一变化的重要原因就是计算机技术的飞速开展。
第一台计算机诞生至今仅仅几十年的时间,计算机的性能已经大大提高,价格不断的下降,从而使之可以迅速而广泛地应用于人类的生产和生活的各个领域。
然而鸡雏孵化室的温度控制的开展无疑得益于计算机技术的开展。
〔二〕本设计的应用及意义
本设计以保质、节能、平安和方便为基准设计了一个鸡雏孵化室恒温控制器,根据需要进展相应的数据分析和处理,由此完成对鸡雏孵化室温度的采样和控制。
通过本设计掌握使用高级语言对单片机编程技术以及一线总线制在单片机方面的应用及利用继电器控制加热装置,从而控制大功率的加热设备,提高实际工作技能。
本设计以单片机为核心的温度采集与控制系统的研发与应用,在很大程度上提高了生产、生活中对鸡雏孵化室温度的控制水平。
本文的设计正是一个本着学习、创新和效劳人类的思想的机器设计,让机器按照自己预定的想法和目的运作。
〔三〕鸡雏孵化室恒温控制系统完成的功能
本设计是对鸡雏孵化室温度进展实时监测与控制,设计的温度控制系统实现了根本的温度控制功能:
当温度低于设定下限温度时,系统自动按程序设计的顺序利用继电器使加热装置对鸡雏孵化室进展加温,使温度上升。
当温度上升到下限温度以上时,按顺序停顿加热装置加温;当温度到达设定温度时,系统停顿加温。
当温度高于设定上限温度时,系统自动按程序设计的顺序利用散热装置对鸡雏孵化室进展降温。
温度在上下限温度之间时,执行机构不执行。
四个数码管即时显示温度,准确到小数点后一位。
二、系统框图
时钟电路测温电路
单
片
复位电路显示电路
机
报警电路温度控制电路
三、方案比拟与论证
〔一〕温度的采集取样
方案一:
采用热敏电阻。
热敏电阻是一种随温度变化阻值随之变化的器件。
当温度变化时热敏电阻的阻值,电阻两端产生的电压也随之变化。
通过比拟器设置的电压进展比拟,对电压的变化来判断温度的变化。
从而可以控制加热的时间。
采用热敏电阻时,比拟电路需要很准确的设计,且对电路要求跟高。
方案二:
采用温度芯片DS18B20进展温度采集。
该温度芯片不需要接外围电路,可以直接接至单片机,通过单片机直接读取温度值。
这样可以省掉局部电路的设计,同时电路也变得更简洁,控制更好。
综合上述的方案,我们采用方案二。
方案二电路比拟简单合理。
〔二〕温度的显示
方案一:
采用LED显示。
LED点阵可以显示多种字符以及图形,可用软件进展调制,有很强的兼容性以及可操作性。
但是对于本系统来说其本钱比拟高。
方案二:
采用数码管显示。
数码管体积小,又便于单片机控制。
本系统需要显示1到9,硬件只需通过控制单片机来直接控制数码管的显示。
采用数码管节约I/O口,同时减少本钱。
综合上述的方案,我们采用方案二。
〔三〕单片机的控制
方案一:
采用普通继电器控制电热器加热。
通过单片机输出的PWM脉冲来控制继电器的接通和断开。
由于电磁继电器相应存在延迟〔20MS-25MS左右〕相对于单片机而言相当长的时间,而且存在电火花〔弧〕等不平安因素。
普通继电器性能不是很优越,反映慢。
方案二:
采用固态继电器控制电热器加热。
通过单片机输出的PWM脉冲来控制继电器的接通和断开。
固态继电器交流端采用无触点接通和断开,性能优越反映快。
方案三:
利用MOC3021光电耦合器控制加热装置,响应及时。
不会存在平安隐患。
综合上述的方案,我们采用方案二。
〔四〕温度加热
方案一:
采用电烙铁加热。
电烙铁价格较贵,存在一些平安隐患,并且加热区域较小。
方案二:
采用100W灯泡加热。
100W灯泡价格廉价,使用方便,材料常见,便于更换。
方案三:
采用电热管加热。
电热管加热不够平安。
由于灯泡价格廉价,且设计简单,易于采购,所以采用方案二。
〔五〕温度散热
方案一:
采用制冷空调散热降温。
空调价格比拟昂贵,不易于安装。
散热速度快,但经常启动停顿会致使空调损坏。
方案二:
采用电风扇散热降温。
电风扇价格比拟廉价,且便于放置和更换。
由于空调价格昂贵,而电风扇价格廉价,且方便利于普及,所以采用方案二。
四、单元模块设计
本设计主要分为5个模块:
1、温度检测模块
2、显示模块
3、报警模块
4、温度控制模块
5、单片机模块
(一)温度检测模块
该模块是温度检测模块主要由DS18B20构成,主要作用是将实际温度通过DS18B20传输给单片机。
用于单片机判断与设定温度的差值,再去控制继电器模块的开或闭。
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改良型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温。
这一局部主要完成对温度信号的采集和转换工作,由DS18B20数字温度传感器及其与单片机的接口局部组成。
数字温度传感器DS18B20把采集到的温度通过数据引脚DQ脚传到单片机的P2.7口,单片机承受温度并存储。
此局部只用到DS18B20和单片机,硬件很简单。
1.DS18B20的性能特点如下:
〔1〕独特的单线接口仅需要一个端口引脚进展通信;
〔2〕多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
〔3〕无须外部器件;
〔4〕可通过数据线供电,电压围为3.0~5.5V;
〔5〕零待机功耗;
〔6〕温度以4位数字显示;
〔7〕用户可定义报警设置;
〔8〕报警搜索命令识别并标志超过程序限定温度〔温度报警条件〕的器件;
〔9〕负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
2.DS18B20的部构造
DS18B20采用3脚PR-35封装,如图4-1所示;DS18B20的部构造,如图4-2所示。
图4-1DS18B20封装
图4-2DS18B20部构造
3.DS18B20工作原理及应用
DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。
其一个工作周期可分为两个局部,即温度检测和数据处理。
在讲解其工作流程之前我们有必要了解DS18B20的部存储器资源。
18B20共有三种形态的存储器资源,它们分别是:
ROM只读存储器,用于存放DS18B20编码,其前8位是单线系列编码〔DS18B20的编码是19H〕,后面48位是芯片唯一的序列号,最后8位是以上56位的CRC码。
数据在出产时设置不由用户更改。
DS18B20共64位ROM。
RAM数据暂存器,用于部计算和数据存取,数据在掉电后丧失,DS18B20共9个字节RAM,每个字节为8位。
第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。
在上电复位时其值将被刷新。
第5个字节那么是用户第3个EEPROM的镜像。
第6、7、8个字节为计数存放器,是为了让用户得到更高的温度分辨率而设计的,同样也是部温度转换、计算的暂存单元。
第9个字节为前8个字节的CRC码。
EEPROM非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。
DS18B20的主要特征:
全数字温度转换及输出,先进的单总线数据通信。
最高12位分辨率,精度可达正负0.5摄氏度,12位分辨率时的最大工作周期为750毫秒。
可选择寄生工作方式。
检测温度围为-55°C~+125°C〔-67°F~+257°F〕置EEPROM,限温报警功能。
64位光刻ROM,置产品序列号,方便多机挂接。
多样封装形式,适应不同硬件系统。
DS18B20引脚功能:
GND电压地,DQ单数据总线,VDD电源电压,NC空引脚。
DS18B20C采用3脚PR-35封装或8脚SOIC封装。
〔二〕显示模块
显示局部采用数码管显示方式。
数码管用四位一体的共阳数码管。
段选直接有单片机控制,位选通过单片机P1口接上8550进展驱动数码管。
〔三〕报警模块
利用蜂鸣器进展报警功能。
〔四〕温度控制模块
利用继电器控制加热装置和散热装置
〔五〕单片机模块
单片机STC89C51提供以下标准功能:
4k字节Flash闪速存储器,128字节部RAM,32个I/O口线,两个16位定时/计数器,5个中断源,一个全双工串口通信口,置一个精细比拟器,片振荡器及时钟电路,同时,STC89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式:
低功耗的闲置和掉电模式。
空闲方式停顿CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的容,但振荡器停顿工作并制止它所有的部件工作直到下一个硬件复位。
五、DS18B20温度传感器简介
〔一〕温度传感器的历史及简介
温度的测量是从金属(物质)的热胀冷缩开场。
水银温度计至今仍是各种温度测量的计量标准。
可是它的缺点是只能近距离观测,而且水银有毒,玻璃管易碎。
代替水银的有酒精温度计和金属簧片温度计,它们虽然没有毒性,但测量精度很低,只能作为一个概略指示。
不过在居民住宅中使用已可满足要求。
在工业生产和实验研究中为了配合远传仪表指示,出现了许多不同的温度检测方法,常用的有电阻式、热电偶式、PN结型、辐射型、光纤式及石英谐振型等。
它们都是基于温度变化引起其物理参数(如电阻值,热电势等)的变化的原理。
随着大规模集成电路工艺的提高,出现了多种集成的数字化温度传感器。
〔二〕DS18B20的工作原理
1.DS18B20工作时序
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:
〔1〕每一次读写之前都必须要对DS18B20进展复位;
〔2〕复位成功后发送一条ROM指令;
〔3〕最后发送RAM指令,这样才能对DS18B20进展预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待15~60微秒左右后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
其工作时序包括初始化时序、写时序和读时序,具体工作方法如图5-1,5-2,5-3所示。
A.初始化时序
图5-1初始化时序
总线上的所有传输过程都是以初始化开场的,主机响应应答脉冲。
应答脉冲使主机知道,总线上有从机设备,且准备就绪。
主机输出低电平,保持低电平时间至少480us,以产生复位脉冲。
接着主机释放总线,4.7KΩ上拉电阻将总线拉高,延时15~60us,并进入承受模式,以产生低电平应答脉冲,假设为低电平,再延时480us。
B.写时序
图5-2写时序
写时序包括写0时序和写1时序。
所有写时序至少需要60us,且在2次独立的写时序之间至少需要1us的恢复时间,都是以总线拉低开场。
写1时序,主机输出低电平,延时2us,然后释放总线,延时60us。
写0时序,主机输出低电平,延时60us,然后释放总线,延时2us。
C.读时序
图5-3读时序
总线器件仅在主机发出读时序是,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。
所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。
每个读时序都由主机发起,至少拉低总线1us。
主机在读时序期间必须释放总线,并且在时序起始后的15us之采样总线状态。
主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取总线当前电平,然后延时50us。
2.ROM操作命令
当主机收到DSl8B20的响应信号后,便可以发出ROM操作命令之一,这些命令如表5-1:
ROM操作命令。
表5-1ROM操作命令
指令
约定代码
功能
读ROM
33H
读DS18B20ROM中的编码
符合ROM
55H
发出此命令之后,接着发出64位ROM编码,访问单线总线上与该编码相对应的DS18B20使之作出响应,为下一步对该DS18B20的读写作准备
搜索ROM
0F0H
用于确定挂接在同一总线上DS18B20的个数和识别64位ROM地址,为操作各器件作好准备
跳过ROM
0CCH
忽略64位ROM地址,直接向DS18B20发温度变换命令,适用于单片工作。
告警搜索命令
0ECH
执行后,只有温度超过设定值上限或者下限的片子才做出响应
温度变换
44H
启动DS18B20进展温度转换,转换时间最长为500MS,结果存入部9字节RAM中
读暂存器
0BEH
读部RAM中9字节的容
写暂存器
4EH
发出向部RAM的第3,4字节写上、下限温度数据命令,紧跟读命令之后,是传送两字节的数据
复制暂存器
48H
将EEPRAM中第3,4字节容复制到E2PRAM中
重调E2PRAM
0BBH
将EEPRAM中容恢复到RAM中的第3,4字节
读供电方式
0B4H
读DS18B20的供电模式,寄生供电时DS18B20发送“0〞,外接电源供电DS18B20发送“1〞
〔三〕DS18B20的测温原理
1.DS18B20的测温原理:
每一片DSl8B20在其ROM中都存有其唯一的48位序列号,在出厂前已写入片ROM中。
主机在进入操作程序前必须用读ROM(33H)命令将该DSl8B20的序列号读出。
程序可以先跳过ROM,启动所有DSl8B20进展温度变换,之后通过匹配ROM,再逐一地读回每个DSl8B20的温度数据。
DS18B20的测温原理如图5-4所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门翻开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进展计数,进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度存放器中,减法计数器1和温度存放器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进展减法计数,当减法计数器1的预置值减到0时温度存放器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开场对低温度系数晶振产生的脉冲信号进展计数,如此循环直到减法计数器2计数到0时,停顿温度存放器值的累加,此时温度存放器中的数值即为所测温度。
图5-4中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度存放器值到达被测温度值.
另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。
系统对DS18B20的各种操作必须按协议进展。
操作协议为:
初始化DS18B20〔发复位脉冲〕→发ROM功能命令→发存储器操作命令→处理数据。
图5-4测温原理部装置
2.DS18B20的测温流程
图5-5DS18B20测温流程
六、硬件设计
〔一〕温度采集电路
温度采集电路的核心采用DS18B20,DS18B20采集的温度直接送至单片机进展处理。
〔二〕显示电路
显示局部采用数码管显示方式。
数码管用四位一体的共阳数码管。
段选直接由单片机控制,位选通过单片机P1口接上8850进展驱动数码管。
〔三〕时钟电路
晶振为12M,选取适宜的电容和晶振,电路图如下:
〔四〕复位电路
复位电路中选取10u的电解电容和4.7KΩ的电阻,电路图如下:
〔五〕报警电路
报警电路图如下:
如果需要蜂鸣器的蜂鸣效果更好的话,建议将电阻R11的阻值减小。
〔六〕按键电路
按键电路主要是可作为其设计辅助功能,例如:
设置风扇档位等。
现将按键电路接在单片机第39脚P00上,电路图如下:
〔七〕总电路
本设计温度采集电路的核心采用DS18B20采集的温度直接送至单片机P1.7〔8脚〕进展处理。
显示局部采用数码管显示方式。
数码管用四位一体的共阳数码管。
段选直接由单片机P2口控制,位选通过单片机P1.0-P1.3〔1-4脚〕接上8850进展驱动数码管。
P1.4、P1.5〔5、6脚〕分别控制灯泡、风扇电路的通断。
P1.6〔7脚〕控制蜂鸣器报警。
以上各I/O口管脚都是低电平有效。
时钟电路接在单片机第18、19脚,晶振为12M。
复位电路接在单片机第9脚。
单片机第31脚〔
/VP〕接高电平VCC,读取部程序存储器指令数据〔程序地址小于4KB〕。
按键电路接在单片机第39脚,按下按键,那么给P0.0脚送入低电平。
5V直流电源串联LED发光二极管,工作时LED放光。
〔八〕PCB板电路
七、软件设计
〔一〕主程序流程图
完成主程序的一系列功能:
鸡雏孵化室温度调控。
对超过或低于80度的水温进展加热或散热,并于数码管显示。
图7-1所示
图7-1
〔二〕本设计源码
//文件名:
ds18b20.c
//功能:
实现温度显示
//硬件连接:
外部电源供电,且只有1个DS18B20
//原理:
单总线协议〔读取温度七步骤,如程序注释〕
//注意:
此程序晶振为12M,其他晶振需跟据DS18B20资料修改
////////////////////////////////////////////////////////////////////////////
#include
#include//声明_nop_()便于实现延时
sbitDS18B20=P1^7;
sbitc0=P1^0;//位控
sbitc1=P1^1;
sbitc2=P1^2;
sbitc3=P1^3;
sbitdp=P2^7;//小数点
sbitming=P1^6;//蜂鸣器
sbitre=P1^4;//加热器
sbitfang=P1^5;//风扇
unsignedcharcodeLEDMAP[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0xFF,0x86,0xb9,0xbf//灭"E""+""-"
};
bitDS18B20_FLG=0;//“1”:
DS18B20存在;“0”:
DS18B20不存在
bitTEMP_FLG=0;//“1”:
温度为负
bitT1S_FLG=0;//“1”:
1秒钟到
unsignedintt1s;
unsignedcharLEDBuf[6];
//定时中断
Timer0()interrupt1
{
t1s++;
if(4000==t1s)
{
t1s=0;
T1S_FLG=1;
}
}
voiddelay(unsignedinti)
{
while(i--);
}
//显示子函数
display()
{
c0=1;c1=1;c2=1;c3=1;//关所有LED
P2=LEDMAP[LEDBuf[0]];
c0=0;
delay(80);
c0=1;c1=1;c2=1;c3=1;//关所有LED
P2=LEDMAP[LEDBuf[1]];
dp=0;//小数点
c1=0;
delay(80);
c0=1;c1=1;c2=1;c3=1;//关所有LED
P2=LEDMAP[LEDBuf[2]];
c2=0;
delay(80);
c0=1;c1=1;c2=1;c3=1;//关所有LED
P2=LEDMAP[LEDBuf[3]];
c3=0;
delay(80);
}
/////////////////////////////////////////////////////////////////////////////
//DS18B20驱动
//初始化DS18B20步骤:
//1〕总线拉低,并延时480us-960us
//2〕总线拉高,等待回应,如DS18B20为“0”那么初始化成功,
//如等待60us仍无回应,那么DS18B20不存在
Init_DS18B20(void)
{
bitx=0;
unsignedchartemp=30;
DS18B20=1;
_nop_();//无需准确
_nop_();
DS18B20=0;//拉低
delay(80);//★务必在480us-960us之间
DS18B20=1;//拉高总线
delay
(1);//无需准确
while(temp--)//等待60us以上
{
x=DS18B20;//如果x=0那么初始化成功
if(0==x)
{
DS18B20_FLG=1;
delay(20);//无需准确
return(0);
}
}
}
//读DS18B20一个字节
unsignedcharRead_DS18B20(void)
{
unsignedchari=0;
unsignedchard=0;
for(i=8;i>0;i--)
{
DS18B20=0;//给脉冲信号
d>>=1;
_nop_();
DS18B20=1;//给脉冲信号
_nop_();