智能电脑散热器.docx

上传人:b****0 文档编号:9070301 上传时间:2023-05-16 格式:DOCX 页数:32 大小:395.20KB
下载 相关 举报
智能电脑散热器.docx_第1页
第1页 / 共32页
智能电脑散热器.docx_第2页
第2页 / 共32页
智能电脑散热器.docx_第3页
第3页 / 共32页
智能电脑散热器.docx_第4页
第4页 / 共32页
智能电脑散热器.docx_第5页
第5页 / 共32页
智能电脑散热器.docx_第6页
第6页 / 共32页
智能电脑散热器.docx_第7页
第7页 / 共32页
智能电脑散热器.docx_第8页
第8页 / 共32页
智能电脑散热器.docx_第9页
第9页 / 共32页
智能电脑散热器.docx_第10页
第10页 / 共32页
智能电脑散热器.docx_第11页
第11页 / 共32页
智能电脑散热器.docx_第12页
第12页 / 共32页
智能电脑散热器.docx_第13页
第13页 / 共32页
智能电脑散热器.docx_第14页
第14页 / 共32页
智能电脑散热器.docx_第15页
第15页 / 共32页
智能电脑散热器.docx_第16页
第16页 / 共32页
智能电脑散热器.docx_第17页
第17页 / 共32页
智能电脑散热器.docx_第18页
第18页 / 共32页
智能电脑散热器.docx_第19页
第19页 / 共32页
智能电脑散热器.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

智能电脑散热器.docx

《智能电脑散热器.docx》由会员分享,可在线阅读,更多相关《智能电脑散热器.docx(32页珍藏版)》请在冰点文库上搜索。

智能电脑散热器.docx

智能电脑散热器

智能电脑散热器设计

摘要:

随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数字单片机技术入手,一切向着数字化控制,智能化控制方向发展,与传统的散热器相比,具有可读数方便,测温范围广,测温准确度高,自动调节。

该设计控制器使用单片机AT89S51,测温传感器使用DS18B20,用LCD来实现温度显示。

关键词:

单片机;温度检测;AT89S52;DS18B20;

1.设计内容及性能指标

●以MCS-51系列单片机为核心部件,组成一个数字式温度计;

●采用数字式温度传感器为检测器件,进行单点温度检测;

●温度测量范围:

-20℃~100℃,测量误差小于0.5℃;

●用液晶显示器进行实际温度值显示;

●能够根据需要方便设定上下限报警温度。

●实现声音报警功能。

2.设计方案选择与确定

方案一:

用热敏电阻作为温度传感器,通过采集各个时间内的电压,进行A/D转换,经过电压与温度的转换、校准,测量出温度。

方案二:

用DS18B20数字式温度传感器。

DS18B20是DS1820的换代产品,它与传统的热敏电阻温度计传感器不同,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。

其内部集成了温度传感器及A/D转换模块,通过读取片内数据,测量出温度。

方案确定:

由于用热敏电阻作为温度传感器误差较大,可靠性相对较差,且不方便调试校准;而DS18B20测量精度高,集成度高,方便调试,线路简单。

所以本设计采用方案二。

3.系统总体方案

温度计电路设计总体设计方框图如图3.1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用LCD1602液晶实现温度显示。

 

 

图1温度计电路设计总体设计方框图

4.硬件电路设计

4.1主控制器

单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用5V电源供电。

本设计采用AT89S52最小系统。

4.1.1复位电路

图2上电复位电路图图3RST引脚电压和时间的关系图4手动复位电路图

本次设计考虑可以随时调节上下线的考虑,采用了手动复位电路图。

 

4.1.2晶振电路

图5晶振电路(12MHz)

4.2温度传感器

DS18B20可以程序设定9-12位的分辨率,精确度为+-0.5℃。

可选更小的封装方式,更宽的电压试用范围。

分辨率设定及用户设定的报警温度存储在EPROM中,掉电后依然保存。

4.2.1DS18B20引脚及功能

(1)DS18B20引脚如下图所示:

 

图6DS18B20引脚图

(2)引脚功能说明

GND为电源

DQ为数字信号输入/输出端

VDD为外接供电电源输入端(在寄生电源接线方式时接地)。

4.2.2DS18B20的主要特性

1适应电压范围更宽,电压范围:

3.0~5.5V,在寄生电源方式下可由数据线供电

2独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯

3DS18B20支持多点组网功能,多个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、负压特性:

电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

4.2.3DS18B20的内部结构

图为DS1820的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。

DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图所示:

 

 

 

图7DS18B20内部结构框图

 

 4.2.4.DS18B20的使用方法

  由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

  由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。

DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。

该协议定义了几种信号的时序:

初始化时序、读时序、写时序。

所有时序都是将主机作为主设备,单总线器件作为从设备。

而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。

数据和命令的传输都是低位在先。

DS18B20的读时序

  对于DS18B20的读时序分为读0时序和读1时序两个过程。

  对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。

DS18B20在完成一个读时序过程,至少需要60us才能完成。

  DS18B20的写时序

  对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

  对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线

DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。

DS18B20测温原理如图4.7所示。

图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。

高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。

计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。

图4.7中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

图8DS18B20工作原理图

DS18B20有4个主要的数据部件:

(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。

64位光刻ROM的排列是:

开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。

光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:

用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。

表1:

DS18B20温度值格式表

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FE6FH,-55℃的数字输出为FC90H。

DS18B20温度传感器主要用于对温度进行测量,数据可用16位符号扩展的二进制补码读数形式提供,并以0.0625℃/LSB形式表示。

表2:

部分温度值对应的二进制温度表示数据

(3)DS18B20温度传感器的存储器

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

(4)配置寄存器

该字节各位的意义如下:

表3:

配置寄存器结构

TM

R1

R0

1

1

1

1

1

低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。

在DS18B20出厂时该位被设置为0,用户不要去改动。

R1和R0用来设置分辨率,如下表所示:

(DS18B20出厂时被设置为12位)

表4:

温度分辨率设置表

R1

R0

分辨率

温度最大转换时间

0

0

9位

93.75ms

0

1

10位

187.5ms

1

0

11位

375ms

1

1

12位

750ms

4.3显示电路

显示电路采用LCD1602A显示,P3.0P3.1P3.2分别接LCD1602A的RS(4脚)R/W(5脚)E(6脚),从P2口输出数据。

图9LCD1602A外观图

1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线,VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:

表5LCD1602A管脚说明表

引脚

符号

功能说明

1

VSS

一般接地

2

VDD

接电源(+5V)

3

V0

液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

4

RS

RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

5

R/W

R/W为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作。

6

E

E(或EN)端为使能(enable)端,下降沿使能。

7

DB0

底4位三态、双向数据总线0位(最低位)

8

DB1

底4位三态、双向数据总线1位

9

DB2

底4位三态、双向数据总线2位

10

DB3

底4位三态、双向数据总线3位

11

DB4

高4位三态、双向数据总线4位

12

DB5

高4位三态、双向数据总线5位

13

DB6

高4位三态、双向数据总线6位

14

DB7

高4位三态、双向数据总线7位(最高位)(也是busyflag)

15

BLA

背光电源正极

16

BLK

背光电源负极

  表6寄存器选择控制表

  

RS

R/W

操作说明

0

0

写入指令寄存器(清除屏等)

0

1

读busyflag(DB7),以及读取位址计数器(DB0~DB6)值

1

0

写入数据寄存器(显示各字型等)

1

1

从数据寄存器读取数据

 注:

关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0。

busyflag(DB7):

在此位为被清除为0时,LCD将无法再处理其他的指令要求。

表7LCD显示地址

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

00H

01H

02H

03H

04H

05H

06H

07H

08H

09H

0AH

0BH

0CH

0DH

0EH

0FH

40H

41H

42H

43H

44H

45H

46H

47H

48H

49H

4AH

4BH

4CH

4DH

4EH

4FH

4.4DS18B20温度传感器与单片机的接口电路

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源,如图3.4。

另一种是寄生电源供电方式,单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。

采用电阻4.7K的接高电平。

由于单线制只有一根线,因此发送接口必须是三态的。

4.5按钮和蜂鸣器设计电路

本次设计用到4个按键,分别用来对上线确定,下线确定,加一,减一的功能。

蜂鸣器采用PNP三极管放大,接单片机P1.7。

5.系统软件算法分析

系统程序主要包括主程序,上线程序,下线程序,读出温度子程序,温度转换命令子程序,计算温度子程序,报警子程序等。

5.1主程序

主程序的主要功能是负责定义上下线、温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。

这样可以在一秒之内测量一次被测温度,其程序流程见图4.1所示。

图10主函数流程图

5.2上下线子程序流程图

       图11上限子函数程序流程图

注:

由于下限与上限程序流程相似,也可参考上限设计下限程序,在此,不再详述。

 

5.3读温度子程序

图12读温度子程序流程图

5.4转换温度子程序

图13温度转换子程序流程图

 

5.5计算温度子程序

图14计算温度子程序流程图图15显示温度子程序

其他子程序在程序代码中都有详细的注解,见附录。

在此,不在绘制流程图。

设计心得体会

参考文献:

附录

附录一:

系统总体仿真电路图

附录二:

元件清单

序号

元器件

型号

数量

1

AT89S52最小系统

1

2

温度传感器

DS18B20

1

3

蜂鸣器

1

4

三极管

8550

1

5

发光二极管

2

6

按键

复位式

4

7

万用板

1

8

排线

24

9

排针

2排

10

反相器

74F04

1

11

液晶显示屏

LCD1602

1

12

滑动变阻器

10K

1

附录三:

程序清单

/*************************************************/

#include

#include  //使用_nop_()函数

#defineucharunsignedchar

#defineuintunsignedint

/*************************************************/

    //函数申明//

/*************************************************/

voiddelay(uchark);               //标准延时函数

voiddelay1(uints);                //LCD延时函数

voidinit();                             //初始化显示

voidinit_18b20();                   //复位ds18b20

voidwrite_18b20(uchardat);  //写ds18b20数据

ucharread_18b20();             //读ds18b20数据

voidread_word_18b20();       //读数据并转换温度,进行显示

voiddisp_tp();                       //温度显示

voidinit_LCD();                    //初始化LCD1602

voidwrite_data(uchardate);  //写LCD1602显示数据

voidwrite_com(ucharcom);  //写LCD1602指令

voidsw();                             //按键扫描,修改报警上下限值

voidsw_disp();                     //显示修改报警上下限界面

sbitDQ=P1^7;                     //ds18b20数据线引脚

sbitrs=P2^0;

sbitrw=P2^1;

sbiten=P2^2;

sbitP10=P1^0;                   //蜂鸣器报警引脚,P10=1时报警

sbitk0=P3^0;                      //4个按键:

k0--加上限值,k1--减上限值,k2--加下限值,k3--减下限值

sbitk1=P3^1;

sbitk2=P3^2;

sbitk3=P3^3;

uinttvalue;                           //温度值

uchartflag;                          //温度正负标志

uinti,j,kk=0,key=0;            //kk控制上下限值修改界面显示,key控制温度界面显示   

uinttemph=30;                    //初始上限值

uinttempl=25;                    //初始下限值

ucharcodedis0[]={"Welcome!

"};

ucharcodedis1[]={0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x00};      //初始化等待界面,进程的代码

ucharcodedis2[]={"temperature:

"};

ucharcodedis3[]={0x06,0x09,0x06,0x00,0x00,0x00,0x00,0x00, //温度符号代码(。

                            0x00,0x00,0x06,0x09,0x08,0x08,0x09,0x06};//温度符号代码(C)

ucharcodedis4[]={"Changepassword:

"};

ucharcodedis5[]={"H:

L:

"};

uchardatatemp_data[5];                                                        //储存温度值的数据

/*************************************************/

    //主函数//

/*************************************************/

voidmain()      

{

 init();                                                          //初始化显示

 init_LCD();                                                 //初始化LCD1602

ss:

 init_18b20();                                          //复位ds18b20

 read_word_18b20();                                     //读数据并计算转换温度,显示温度值

 if(((tvalue/10)%100)

 elseif(((tvalue/10)%100)>=temph)P10=1;     //温度高于或等于上限值,报警

 elseP10=0;

 kk=0;

 sw();

 gotoss;       

}

/*************************************************/

   //开机初始化显示----欢迎等待界面//

/*************************************************/

voidinit()                                                     //初始化显示

{

  ucharn,a,b,temp;

  P10=0;

  P3=0x0f;  

  init_LCD();                                                //初始化LCD1602

  write_com(0x84);   

  for(n=0;n<8;n++)

   {

   write_data(dis0[n]);

   delay1(10);

   }

   delay1(100);

  write_com(0x40);                                        //写1602,RAM地址

  for(a=0;a<8;a++)                                        //写入自定义字符,用于LCD显示

   {

   write_data(dis1[a]);

   }

  temp=0xc0;                                                //赋初始化显示,进程标志的初始地址

  for(b=0;b<16;b++)                                      //显示进程标志的进度

   {

   write_com(temp);                                      //写进程命令  

   write_data(0);                                           //显示进程标志

   delay1(80);    

   temp++;     

   }

   delay1(500);   

}

/*************************************************/

voi

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2