温度测控系统的设计绝对经典.docx
- 文档编号:28536399
- 上传时间:2023-07-18
- 格式:DOCX
- 页数:15
- 大小:69.87KB
温度测控系统的设计绝对经典.docx
《温度测控系统的设计绝对经典.docx》由会员分享,可在线阅读,更多相关《温度测控系统的设计绝对经典.docx(15页珍藏版)》请在冰豆网上搜索。
温度测控系统的设计绝对经典
温度测控系统的设计
专业班级:
电信08103班
设计者:
指导老师:
设计时间:
2010.12.27—2010.1.6
一课程设计目的:
1、掌握单片机的工作原理并加以应用,巩固已学理论知识。
2、熟练掌握使用proteus和keil软件实现功能的仿真。
3、掌握DS18B20的基本使用。
二、设计任务与要求:
利用DS18B20设计一个温度测控系统,在LED数码显示器上显示温度值,并对温度进行测试和设定,当检测温度到达温度上限时开风扇(即开启电动机),低于下限时关闭风扇并加热,LED上的显示内容为:
XX℃(采用十进制显示)。
三、总体设计方案:
本系统的电路设计由三部分组成:
①、控制部分主芯片采用单片机AT89C51;②、显示部分采用4位LED数码管以动态扫描方式实现温度显示;③、温度采集部分采用DS18B20温度传感器。
1、控制部分:
单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要三个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用。
2、显示部分:
显示电路采用4位共阴LED数码管,从P0口送数,P2口扫描。
3、温度采集部分:
DS18B20温度传感器介绍
为了满足本设计需要,所选用的是DS18B20智能温度传感器。
它是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,世界上第一片支持"一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
①.DS18B20的特点
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的外形及引脚排列如图1所示。
图1DS18B20外形及引脚排列图
DS18B20引脚定义:
(1)DQ为数字信号输入/输出端。
(2)GND为电源地。
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
新型数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
DS18B20的性能特点如下:
(1)适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电。
(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条接口线即可实现微处理器与DS18B20的双向通讯。
(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。
(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。
(6)可编程分辨率为9~12位,对应可分辨温度分别为0.5℃、0.25℃、0.125℃0.0625℃,可实现高精度测温。
(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。
(8)测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。
(9)负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
②.DS18B20工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
DS18B20有4个主要的数据部件:
(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
表1:
DS18B20温度数据表
温度
数字输出
换成16进制
+125℃
0000011111010000
07D0H
+85℃
0000010101010000
0550H
+25.0625℃
0000000110010001
0191H
+10.125℃
0000000010100010
00A2H
+0.5℃
0000000000001000
0008H
0℃
0000000000000000
0000H
-0.5℃
1111111111111000
FFF8H
-10.125℃
1111111101011110
FFE5H
-25.0625℃
1111111001101111
FF6FH
-55℃
1111110010010000
FC90H
(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
(3)DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
(4)配置寄存器
低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0。
R1和R0用来设置分辨率,如表2所示:
(DS18B20出厂时被设置为12位)
表2:
温度分辨率设置表
R1
R0
分辨率
温度最大转换时间
0
0
9位
93.75ms
0
1
10位
187.5ms
1
0
11位
375ms
1
1
12位
750ms
高速暂存存储器由9个字节组成,其分配如表3所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后。
对应的温度计算:
当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值,第九个字节是冗余检验字节。
表3:
DS18B20暂存寄存器分布
寄存器内容
字节地址
温度值低位(LSByte)
0
温度值高位(MSByte)
1
高温限值(TH)
2
低温限值(TL)
3
配置寄存器
4
保留
5
保留
6
保留
7
CRC校验值
8
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤。
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
表4:
ROM指令表
指令
约定代码
功能
读ROM
33H
读DS1820温度传感器ROM中的编码(即64位地址)
符合ROM
55H
发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。
搜索ROM
0FOH
用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。
为操作各器件作好准备。
跳过ROM
0CCH
忽略64位ROM地址,直接向DS1820发温度变换命令。
适用于单片工作。
告警搜索命令
0ECH
执行后只有温度超过设定值上限或下限的片子才做出响应。
表5:
RAM指令表
指令
约定代码
功能
温度变换
44H
启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。
结果存入内部9字节RAM中。
读暂存器
0BEH
读内部RAM中9字节的内容
写暂存器
4EH
发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
复制暂存器
48H
将RAM中第3、4字节的内容复制到EEPROM中。
重调EEPROM
0B8H
将EEPROM中内容恢复到RAM中的第3、4字节。
读供电方式
0B4H
读DS1820的供电模式。
寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。
四、系统流程图(如图2所示):
图2系统总的流程图
五、电路设计(如图3所示):
图3
六、具体设计程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
#definesfrP0=0x80/*定义端口*/
#definesfrP2=0xA0
sbitDQ=P1^0;
sbitEQ=P1^1;
sbitRQ=P1^2;
signedcharshangxian=25;
signedcharxiaxian=10;
codeLEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
codeLEDData1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
union{
ucharc[2];
uintx;
}temp;
ucharflag;
ucharcc,xs;
voiddelay(uinti)/*延时程序*/
{
uintj;
for(j=i;j>0;j--)
;
}
ucharow_reset(void)
{
ucharreset;/*系统复位*/
DQ=0;
delay(50);
DQ=1;
delay(10);
while(DQ);
reset=DQ;
delay(10);
returnreset;
}
ucharread_byte(void)/*从总线上读取一个字节*/
{
uchari;
ucharvalue=0;
for(i=8;i>0;i--)
{
value>>=1;
DQ=0;
DQ=1;
delay
(1);
if(DQ)value|=0x80;
delay(10);
}
return(value);
}
voidwrite_byte(ucharval)/*向总线写字节*/
{
uchari;
for(i=8;i>0;i--)/*每次写入一个字节*/
{
DQ=0;
DQ=val&0x01;
delay(5);
DQ=1;
val=val/2;
}
delay(5);
}
voidinitDS18B20(void)/*初始化DS18B20*/
{
ow_reset();
write_byte(0xcc);/*跳过ROM*/
write_byte(0x4e);/*写暂存存储器命令*/
write_byte(0x00);/*写高温触发器*/
write_byte(0x00);/*写低温触发器*/
write_byte(0x7f);
}
ucharRead_Temperature(void)/*读取温度*/
{
ow_reset();
write_byte(0xCC);
write_byte(0x44);/*转换温度存入RAM中*/
ow_reset();
write_byte(0xCC);/*从RAM中读取温度*/
write_byte(0xBE);
temp.c[1]=read_byte();/*读低位字节*/
temp.c[0]=read_byte();/*读高位字节*/
}
voiddisplay(void)
{
intshi,ge;
shi=cc/10;/*读十位,个位并显示*/
ge=cc%10;
P2=0xfe;
P0=LEDData[0];
delay(100);
P0=0;
P2=0xfd;
P0=LEDData[xs];
delay(100);
P0=0;
P2=0xfb;
P0=LEDData1[ge];
delay(100);
P0=0;
P2=0xf7;
P0=LEDData[shi];
delay(100);
P0=0;
}
voidmain()
{
delay(10);
EA=0;
flag=0;
initDS18B20();
while
(1)
{
flag=0;
Read_Temperature();
if(temp.c[0]>0xf8)/*如果温度为负值*/
{
flag=1;
temp.x=~temp.x+1;/*取反并加一得出实际值*/
}
cc=temp.x/16;/*读取温度值的整数部分*/
xs=temp.x&0x0f;/*小数点后面的第一位*/
xs=xs*10;
xs=xs/16;
display();
display();
display();
if(cc>=shangxian)
{EQ=1;RQ=0;}
elseif(cc>xiaxian&&cc {EQ=0;RQ=0;} else {EQ=0;RQ=1;} } } 七、仿真结果分析: 执行上述程序,将程序载入单片机AT89C51芯片进行仿真,DS18B20显示的温度与数码管显示的温度相同。 若检测到的温度高于程序设定的上限值(25℃),电机启动。 若检测到的温度在程序设定的上限值(25℃)与下限值(10℃)之间,电机停止工作。 若输入的温度低于程序设定的下限值(10℃),红指示灯亮,加热电阻工作。 此功能在实际应用中非常广泛,比如,可用作一个大功率器件外围散热的控制系统。 八、设计心得体会: 在老师的督导和自身的努力下,我们顺利地完成了这次课程设计。 这次课程设计,巩固了我们的有关单片机的工作原理的知识,地训练了C51程序设计的能力,有效提高了我们的知识应用能力。 此外,关于新知识,我们认真地学习了有关数字温度传感器DS18B20的知识,以及DS18B20与单片机的综合应用。 在这过程中,由于理论知识缺乏,计算机编程能力有限等,我们遇到了许多的难题,通过与老师交流和学习,我们以前所学的知识变得扎实多了。 这次课程设计,我们是两人一组,虽然设计只花了一个多星期的时间,但一种不断求知,共同成功的精神却在我们的思想中扎下了根。 这次课程设计,让我们感受到电子技术的无穷魅力,深深地吸引了我们继续学习有关单片机的实际应用知识的热情。 我们深刻地认识到知识的缺乏,要学习的东西还太多,深切地感受到学习是一个长期积累的过程,在以后的生活中都应该不断的学习,努力提高自己的知识和综合素质。 九、参考文献: [1]李朝青单片机原理及接口技术北京航空航天大学出版社1998. [2]徐爱卿MCS一51系列单片机原理及应用[M]北京航空航天大学出版社1998. [3]韩志军沈晋源单片机应用系统设计机械工业出版社2005. [4]谢维成杨加国单片机原理与应用及C51程序设计清华大学出版社2010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 测控 系统 设计 绝对 经典