温度控制课程设计数字温度测量系统Word格式.docx
《温度控制课程设计数字温度测量系统Word格式.docx》由会员分享,可在线阅读,更多相关《温度控制课程设计数字温度测量系统Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
传统的方式是采用热电偶或热电阻,但是由于模拟温度传感器输出为模拟信号,必须经过A/D转换环节获得数字信号后才能与单片机等微处理器接口,使得硬件电路结果复杂,制作成本较高。
美国DALLAS公司生产的DS18B20为代表的新型单总线数字式温度传感器以其突出优点广泛使用于仓库管理、工农业生产制造、气象观测、科学研究以及日常生活中。
本文提出用DALLAS公司生产的DS18B20数字温度传感器和89S52单片机构成的多路测温系统,采用单总线的方式(一根数据线,在一个I/O口上),可以在单总线上挂接多个18B20,在单片机控制下巡回检测多点温度,并可以设置高、低温度超限报警等功能。
二、结构及功能介绍
1、单片机STC80C52RC
a、该系统采用MCS-51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。
由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。
整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。
MCS-51单片机特点如下:
可靠性好
单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以烧写在ROM上,因此可靠性高。
易扩充
单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统
控制功能强
单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
b、单片机主机系统电路
AT89C51单片机是属于51系列单片机里的。
它的内部自带2K字节可编程FLASH存储器的低电压、高性能COMS8位微处理器。
AT89C51单片机还与IntelMCS-51系列单片机的输出管脚和指令相互兼容。
由于AT89C51将多功能8位CPU和闪速存储器结合在单个的芯片里,所以,AT89C51构成的单片机系统是所有系统里结构最简便,价格最便宜,使用效率最高的控制系统,它还节省了外部的RAM与ROM和接口器件,削减了硬件方便的开销。
节省了制造成本,提高了系统的性价比。
c.主要芯片的介绍
本课题采用单片机AT89C51控制的数字温度测量与显示系统,其功能的实现主要通过软件编程来完成,采用单片机AT89C51,它是低功耗、高性能的CMOS型8位单片机。
片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。
且AT89C51的使用寿命很长,数据保留时间也较长,可以达到十年的时间。
就是因为这一些类的特性,与优点。
所以本次设计我才会选择使用这一类的单片机来作为我实现此系统的工具。
单片机主机系统图
根据设计的要求,要利用温度传感器实时温度。
当温度高于设定的温度时(60℃),当温度高于设置报警的上限值时风扇转同时红色led亮,当低于时继电器以留出接口。
同时要求能设定温度。
毕业设计的主要任务是能对温度进行自动的检测和控制。
设计中采用单片机来控制温度,因此要有温度的显示电路,温控电路,报警电路等几个部分。
要实现系统的设计要用到的知识点有单片机的原理及其应用,温度传感器的原理和应用,及显示电路的设计等。
2、DS18B20数字温度传感器
2.1DS18B20简介
新的“一线器件”DS18B20体积更小,适用电压更宽、更经济,做为一线总线数字化温度床感器,支持“一线总线”接口,测量温度范围为-55℃~+125℃,在-10℃~+85℃范围内,精度为±
0.5℃。
独特的电源和信号复合在一起,仅适用一条口线,每个芯片唯一编码,支持联网寻址,简单的网络化的温度感知,零功能等待。
2.2DS18B20特性
DS18B20可以由程序设定9~12位的分辨率,精度为±
①独特的单线接口仅需一个端口引脚进行通讯
②简单的多点分布应用
③无需外部器件
④可通过数据线供电
⑤零待机功耗
⑥测温范围-55~+125℃,以0.5℃递增华氏器件-67~+257℉,以0.9℉递增
⑦温度以9位数字量读出
⑧温度数字量转换时间200ms(典型值)
⑨用户可定义的非易失性温度报警设置
⑩报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件
应用包括温度控制、工业系统、消费品、温度计或任何感测系统。
2.3说明:
DS18B20有三个主要数字部件:
1)64位激光ROM
2)温度传感器
3)非易失性温度报警触发器TH和TL
4)器件用如下方式从单线通讯线上汲取能量,在信号线处于高电平期间把能量存储在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,知道高电平到来再给寄生电源(电容)充电。
DS18B20也可用外部5V电源供电。
DS18B20依靠一个单线端口通讯。
在单线端口条件下,必须先建立ROM操作协议,才能进行存储器和控制操作。
因此,控制器必须首先提供下面5个ROM操作命令之一:
1)读ROM,2)匹配ROM,3)搜索ROM,4)跳过ROM,5)报警搜索。
这些命令对每个器件的激光ROM部分进行操作,在单总线上挂有多个器件时,可以区分出单个器件,同时可以向总线控制器指明有多少器件或是什么型号的器件。
成功执行完一条ROM操作序列后,即可进行存储器可控制操作,控制器可以提供6条存储器和控制操作指令中的任一条。
一条控制操作命令指示DS18B20完成一次温度测量,测量结果放在内部暂存器中暂存,用一条读暂存器内容的存储器操作命令可以把暂存器中数据读出。
2.4DS18B20测温原理:
用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来的到温度值。
计数器被预置到对应于-55的一个值。
如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55℃)的值增加,表明所测温度大于-55℃。
同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。
然后计数器又开始计数知道0,如果门周期仍未结束,将重复这一过程。
斜坡式累加器用来补偿感温振荡器的非线性,以期测温时获得比较高的分辨力,这是通过改变计数器对温度每增加一度所需计数的值来实现的。
因此,要想获得所需的分辨力,必须同时知道在给定温度下计数器的值和每一度的计数值。
DS18B20内部对此计算的结果可提供0.5℃的分辨力。
温度以16bit带符号位扩展的二进制补码形式读出,表一给出了温度值和输出数据的关系。
数据通过单线接口以串行方式传输。
DS18B20测温范围-55℃~+125℃,以0.5℃递增。
如用于华氏温度,必须要用一个转换因子查找表。
表一
注意DS18B20内温度表示值为1/2℃LSB,如下所示9bit格式:
表二
最高有效(符号)位被复制充满存储器中两字节温度存储器的高MSB位,由这种“符号位扩展”产生出了表一的16bit温度读数。
2.5DS18B20测温原理图:
图二DS18B20测温原理框图
可用下述方法获得更高的分辨力。
首先,读取温度值,将0.5℃位(LSB)从读取的值中截去,这个值叫做TEMP_READ。
然后读取计数器中剩余的值,这个值是门周期结束后保留下来的值(COUNT_REMAIN)。
最后,我们用到在这个温度下每度的计数值(COUNT_PER_C)。
用户可以用下面的公式计算实际温度值:
2.664位激光刻ROM
每只18B20都有一个唯一的长达64位的编码。
最前面8位是单线系列编码。
后面48为是一个唯一的序列号。
最后8为是以上56位的CRC码。
表三
2.7CRC发生器
DS18B20中有8位CRC存储在64位ROM的最高有效字节中。
总线控制器可以用64位ROM中的前56位计算出一个CRC值,再用这个和存储在DS18B20中的值进行比较,以确定ROM数据是否被总线控制器接受无误。
CRC计算等式如下:
8+
5+
4+
。
单总线CRC可以有一个由移位寄存器和XOR门构成的多项式发生器来产生,如下图所示:
图三单总线CRC的结构原理图
2.8单总线系统
单总线系统包括一个总线控制器和一个或多个从机。
DS18B20充当从机,当只有一只从机挂接在总线上时,系统被称为“单点”系统;
如果由多只从机挂接在总线上,系统被称为“多点”。
所有的数据和指令的传递都是从最低有效位开始通过单总线进行传送的。
2.9DS18B20指令控制
执行序列通过单线总线端口访问DS18B20的协议如下:
步骤一:
初始化;
步骤二:
ROM操作指令;
步骤三:
DS18B20功能指令。
每一次DS18B20的操作都必须满足以上步骤,若是缺少步骤或是顺序混乱,器件将不会返回值。
例如这样的顺序:
发起ROM搜索指令[F0H]和报警搜索指令[ECH]之后,总线控制器必须返回步骤一。
2.10ROM时序指令控制
通过单总线的所有执行操作处理都从一个初始化序列开始。
初始化序列包括一个由总线控制器发出的复位脉冲和其后由从机发出的存在脉冲。
存在脉冲让总线控制器知道DS18B20在总线上且已准备好操作。
一旦总线控制器探测到一个存在脉冲,它就发出一条ROM指令。
如果总线上挂有多只DS18B20,这些指令将基于器件独有的64位ROM片序列码使得总线控制器选出特定要进行操作的器件。
这些指令同样也可以使总线控制器识别有多少只,什么型号的器件挂在总线上,同样,它们也可以识别哪些器件已经符合报警条件。
⑴SearchROM[F0H](搜索ROM指令)
当系统上电初始化的时候,总线控制器必须通过识别总线上所有ROM片序列码去得到从机的数目和型号。
总线控制器通过搜索ROM指令多次循环搜索ROM编码,以确认所有从机器件。
如果总线上只有一只从机,那么可以用较为简单的读取ROM代替搜索ROM指令。
在每次搜索ROM指令之后,总线控制器必须返回步骤一。
⑵READROM[33H](读取ROM指令)
只有在总线上存在单只DS18B20的时候才能使用这条命令。
该命令允许总线控制器在不使用搜索ROM的情况下读取从机的64位片序列码。
如果总线上有不止一只从机,当所有从机试图同时传送信号时就会发生数据冲突。
⑶MATHCHROM[55H](匹配ROM指令)
匹配ROM指令,后跟64位ROM编码序列,让总线控制器在多点总线上定位一只特定的DS18B20。
只有和64为ROM片序列码完全匹配的DS18B20才能响应随后的存储操作指令;
所有和64位ROM片序列码不匹配的从机都将等待复位脉冲。
⑷SKIPROM[CCH](跳过ROM指令)
这条指令允许总线控制器不用提供64位ROM编码就使用功能指令。
例如,总线控制器可以先发出一条跳过ROM指令,然后发出温度转换指令[44H],从而完成温度转换操作。
注意,当只有一只从机在总线上时,无论如何,跳过ROM指令之后只能跟着发出一条读取暂存器指令[BEH]。
在单点总线情况下使用该命令,器件无需发回64位ROM编码,从而节省了时间。
如果总线上有不止一只从机,若发出跳过ROM指令,由于多只从机同时传送信号,总线上就会发生数据冲突。
2.11DS18B20功能指令控制
在总线空盒子钱发给欲连接的DS18B20一条ROM命令后,跟着可以发送一条DS18B20功能指令。
这些命令允许总线控制器读写DS18B20的暂存器,发起温度转换和识别电源模式。
DS18B20的功能指令如下所示:
⑴CONVERTT[44H](温度转换指令)
这条命令用以启动一次温度转换。
温度转换指令被执行,产生的温度转换结果数据以2个字节的形式被存储在高速暂存器中,而后DS18B20保持等待状态。
如果寄生电源模式下发出该命令后,在温度转换期间,必须在10US(最多)内给单总线上一个强上拉。
如果DS18B20以外部电源供电,总线控制器在发出该命令后跟着发出读时序,DS18B20如处于转换中,将在总线上返回0,若温度转换完成,则返回1。
寄生电源模式下,总线被强上拉拉高前这样的通讯技术不会被使用。
⑵WRITESCRATCHPAD[4EH](写暂存器指令)
这条命令向DS18B20的暂存器写入数据,开始位置在TH寄存器(暂存器的第二个字节),接下来写入TL寄存器(暂存器的第三个字节),最后写入配置寄存器(暂存器的第四个字节)。
数据以最低有效位开始传送。
上述三个字节的写入必须发生在总线控制器发出复位命令前,否则会终止写入。
⑶READSCRATCHPAD[BEH](读暂存器指令)
这条命令读取暂存器的内容。
读取将从字节0开始,一直进行下去,直到第九个字节(字节8,CRC)读完,如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。
备注:
①对于寄生电源模式下的DS18B20,在温度转换和拷贝数据到EEPROM其间,必须给但总线一个强上拉,总线上载这段时间内不能有其他活动。
②总线控制器在任何时刻都可以通过发出复位信号中止数据传输。
③TH、TL和配置寄存器这三个字节的写入必须在复位信号发起之前。
2.1218B20时序详解
初始化时序
图四初始化时序示意图
读/写时序
DS18B20的数据读写是通过时序处理来确认信息交换的。
⑴写时序:
有两种写时序:
写1时序和写0时序。
总线控制器通过写1时序写逻辑1到DS18B20,写0时序写逻辑0到DS18B20。
所有写时序必须最少持续60us,包括两个写中期之间至少1us的回复时间。
当总线控制器把数据线从逻辑高电平拉到低电平的时候,写时序开始。
(见图五)
图五读/写时序图
总线控制器要产生一个写时序,必须把数据线拉到低电平后释放,在写时序开始后的15us释放中线。
当总线被释放的时候,5K的上拉电阻将拉高总线。
总控制器要生成一个写0时序,必须把数据线拉到低电平并持续保持(至少60us)。
总线控制器初始化写时序后,DS18B20在一个15us到60us的窗口内对I/O线采样。
如果线上是高电平,就是写1。
如果线上是低电平,就是写0。
⑵读时序
总线控制器发起读时序时,DS18B20仅被用来传输数据给控制器。
因此,总线控制器在发出读暂存器指令[BEH]后必须立刻开始读时序,DS18B20可以提供请求信息。
除此之外,总线控制器在发出发送温度转换指令[44H]或召回EEPROM指令[B8H]之后读时序。
所有读时序必须最少60us,包括两个度周期间至少1us的恢复时间。
当总线控制器把数据线从高电平拉到低电平时,读时序开始,数据线必须至少保持1us,然后总线被释放。
在总线控制器发出读时序后,DS18B20通过拉高或拉低总线来传输1或0。
当传输逻辑0结束后,总线将被释放,通过上拉电阻回到上升沿状态。
从DS18B20输出的数据在读时序的下降沿出现后15us内有效。
因此,总线控制器在读时序开始后必须停止把I/O脚驱动为低电平15us,以读取I/O脚状态。
⑶极限使用条件
各引脚对地电压:
-0.5V到+0.6V
工作温度:
-55℃到+125℃
存储温度:
焊接温度:
260℃10秒
⑷直流电特性
表四
①所有的电压参考点都是接地点。
②上拉电压:
假设上拉器件是理想的,因此上拉的高电平应该与VPU相等。
为了达到DS18B20的VIH规格,实际晶体管上拉供电必须包括电压跌落极限;
因此,VPU_ACTUAL=VPU_IDEAL+VTRANSISTOR.
③逻辑0电压在吸收电流为1mA时得到。
④在寄生电源模式低压状态选,为保证出线一个脉冲,VLMAX在VCC低至0.5V时得到。
⑤逻辑1电压在源电流为1mA时得到
⑥待机电流最大定义为到70℃,125℃时典型待机电流为3uA。
⑦为了将IDDS减到最少,DQ的范围如下:
GND≤DQ≤GND+0.3VorVDD-0.3V≤DQ≤VDD.
⑧动态电流涉及温度转换和写EEPROM存储器。
⑨DQ数据线为高状态。
10误差数据在125℃,VDD=5.5V条件下测试1000小时得到。
3、显示器的选择
(一)LCD1602显示器
工业字符型液晶,能够同时显示16x02即32个字符。
虽然LCD显示器的价格比数码管要贵。
但是它有一个非常本质的优点就是它的显示效果好,所以采用LCD作为显示器。
(二)LCD引脚图
1602有16个引脚:
引脚
功能或作用
VSS
接电源地
VCC
接5V电源正极
V0
液晶显示器对比度调整端
RS
具有寄存器选择功能。
高电平1是数据寄存器。
低电平0属于指令寄存器
RW
属于读写信号线,具有读写功能。
高电平1读操作,低电平0写操作
E端
为使能端,高电平1时读取信息,负跳变时执行指令
D0-D7
八位的双向数据端
其他
15脚属于背光正极,16脚属于背光负极
1602显示质量高,功耗小。
三、设计硬件原理及原理图
图十设计硬件原理图
本系统中通过温度传感器DS18B20的数据线DQ与主控芯片51单片机的P3.3相连接,DS18B20将采集到的数据送给单片机,经过单片机出来后,显示在8位数据线与单片机P0口的液晶LCD上。
蜂鸣器经过三极管的驱动后接到单片机的P3.7,来实现当实时温度大于下限或高于上限的报警。
4个按键K1~K4接到单片机的P1.0~P1.3,来实现对上限值和下限值的查看与设定。
液晶LCD的RS、RW、E分别接到单片机的P2.0~P2.2来实现单片机控制液晶的读写命令和数据的控制。
四、设计程序流程图
LCD显示子程序开始先让LCD初始化,接着光标定位,显示字符,最后放回。
LCD流程图
主程序首先设置堆栈为5FH,设置定时器工作方式T1为方式2。
接着开始启动定时器,调用LCD初始化子程序,调用DS18B20复位子程序。
接着调用上下限写入暂存器子程序,把温度报警值拷贝回暂存器,调用读取温度子程序,调用处理显示子程序,调用实际温度值与上下限温度值比较子程序,调用按键扫描子程序后返回到调用读取温度子程序。
主程序框图
按键扫描子程序首先判断按键K1是否按下,如果按下就调用蜂鸣子程序,接着判断K1是否放开,直到K1放开,调用显示数据子程序,然后去判断K3是否按下,直到K3按下,调用蜂鸣子程序,最后放回;
如果K1没有按下去判断K2是否按下,如果没按下就跳到返回,如果有按下就调用鸣响子程序,然后去判断K3是否放开,若放开接着调用显示字符子程序,调用设定报警TH、TL子程序,调用报警上下限写入暂存器子程序,调用报警值拷贝EEROM子程序。
按键扫描子程序框图
五、总结
该系统利用DS18B20进行测温,基于单片机AT89S52进行温度控制,具有硬件电路简单,控温精度高、功能强、体积小,简单灵活等优点,可以应用于控制温度在-55℃到+125℃之间的各种场合,可以实现温度的实时采集、显示功能与控制功能,是一种比较理想的只能化控制系统。
由此构成的单片机控制的但总线温度多路采集系统比传统的测温系统可靠性高,易于构成网络控制,使用与各种温度检测与控制系统。
该单总线技术可以为其他过程参数测控系统提供技术支持,具有实用价值。
AT89C51的时钟为12M,I/O口可达32个,较高的时钟频率和丰富的I/O,都为实现电路功能提供了非常有利的条件。
同时也AT89S51内含4KBFLASHROM,开发环境友好,易用,方便,加上Proteus仿真大大加快本系统设计开发。
在此次设计中学会了对Proteus的基本使用,对里面一些基本元件的英文,如电阻RES、电容CAP、晶振CRYSTAL等,学会了连线和运行。
在设计过程中也遇到一些问题,由于LCD是现实的字符型数据,数字不能直接送去显示,所有对于数字的显示首先要转换为字符格式,方法为:
数字+‘0’;
对于温度传感器的小数处理也遇到一些问题,两个选的是12位,精度为0.0625,DS18B20的温度寄存器里低八位的低四位为小数部分,小数的值为0.0625*低八位的低四位,但是由于单片机的数据处理能力较差,不能处理小数的乘法运算,用上方法就显示错误,后来想到可以把小数先变成整数处理,令低八位的低四位为t,小数后的第一位=625*t/1000,然后将这个数字在小数点后显示即可。
其实该本设计还有很多的不足,本实验是用单片机的多个I/O口来驱动多路,DS18B20是一总线结构,每一个DS18B20在其ROM中都存有一个其唯一的48位序列号,在出厂前已写入片内RMO中,主机在进行操作程序前必须逐一接入18B20用读ROM(33H)命令将该18B20的序列号读出并登录.当主机需要对众多在线的DS18B20的某一个进行操作,首先要发出匹配ROM命令(55H),紧接着主机提供64位序列(包括该DS8B20的48位序列号),之后操作就是针对该DS18B20的.而所谓跳过ROM命令.即为:
之后的操作是对所有DS18B20的,所以可以在一根总线上挂多个DS18B20。
1、程序代码
#include<
reg52.h>
intrins.h>
#defineKEYP1
#defineucharunsignedchar
#defineuintunsignedint
sbitlcden=P2^2;
//1602使能
sbitlcdrd=P2^0;
//数据、命令选择端
sbitlcdrw=P2^1;
//读,写选择端
sbitdq=P3^3;
//18B20数据线
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitbeeee=P3^7;
uintset_t=23;
ucharcodestr1[]="
temperature:
"
;
ucharcodestr2[]="
"
uchardatadisdata[5];
uinttvalue;
uchartflag;
voiddelayms(uintms)//延