智能散热系统.docx

上传人:b****7 文档编号:10073443 上传时间:2023-02-08 格式:DOCX 页数:33 大小:866.97KB
下载 相关 举报
智能散热系统.docx_第1页
第1页 / 共33页
智能散热系统.docx_第2页
第2页 / 共33页
智能散热系统.docx_第3页
第3页 / 共33页
智能散热系统.docx_第4页
第4页 / 共33页
智能散热系统.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

智能散热系统.docx

《智能散热系统.docx》由会员分享,可在线阅读,更多相关《智能散热系统.docx(33页珍藏版)》请在冰豆网上搜索。

智能散热系统.docx

智能散热系统

《单片机原理及接口》

课程设计报告

题目:

智能散热系统

专业名称:

通信工程

班级:

创新142

学号:

201411403128

姓名:

刘小杰

2015年12月

课程设计报告首页

院、系(部)

信息工程学院

专业

通信工程

班级

创新142

学号

201411403128

姓名

刘小杰

任课教师

陈玮

课程名称

单片机原理及接口

成绩

签字:

年月日

签字:

年月日

课程设计报告的要求:

首先应先介绍课程设计的基本内容(包括设计目标)、设计的背景及意义。

其次是方案论证:

说明设计的原理并进行方案选择,再然后进行硬件电路的设计及原理说明,和软件的流程说明。

第三是过程(设计或实验)论述:

对设计调试工作的详细表述。

最后是结论或总结:

对整个研究工作进行归纳和综合、包括心得体会。

大致内容按上面要求來写,也可以参考网上“单片机课程设计报告”来扩充。

文章中的格式规定:

图:

图的名称采用中文,图名在图片下面格式为:

图1-1,后接图名。

表格:

表名在表格上面。

正文五号字

一级标题四号加粗

二级标题小四加粗

行距:

1.5倍

附录的程序:

两列

页边距:

上下2.5厘米左右2.8厘米

不要目录

需要中文摘要排版参考毕业设计论文格式(见下页)

参考文献若有可写

打印的报告里面不需要附录程序电子版里面需要

报告里面应该有各模块电路图调试现象图

刻盘要求:

最后,除了打印的,全班把每个人的程序(keil项目及hex文件)、电路(proteus文件或硬件的照片及电路原理图)和报告打包压缩后命名为“班级名-学号-姓名”(如电信091-123456-陈玮)刻盘。

散热系统

刘小杰

信息工程学院

摘要:

由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制。

通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用。

关键词:

单片机,程序,DS18B20温度传感器,LCD1602液晶显示屏,定时器,直流电机等等

1课程设计的基本内容

为实现系统能釆集当前环境温度,当温度达到一定值时触发直流风扇的转动进行主动散热,并且随着温度的变化而改变风力人小,风力与温度成正比,本系统设置了三个档来控制风力的大小,20C°—22C0为一档,22C°--24C°为二档,24C°—26C0为三档(为了演示方便而设计的三档,在实际用途中可依据要求来设置)。

本智能散热系统根据坏境温度智能调控风力的功能可以放置在一些硬件中以达到降温的功能。

2方案论证

2.1设计原理及方案选择

通过DS18B20温度传感器来采集当前坏境的温度,通过LCD1602液晶显示屏来显示温度以及工作时间,CPU根据当前温度来控制电机的速度。

2.2硬件电路设计及原理说明

使用Pl.1I1来连接电机,P0口连接LCD1602,P2.5II为读/写选择端,P2.6为命令/数据选择端,P2.7为使能端,P3.7I1为数据总线,P3.4II为定时器0,P3.5为定时器1.

温度

GNDj|

图为DS18B20原理图

LCD1602

RJI

图为LCD1602原理图

图为外部电路接线图

3设计过程论述

3.1DS18B20温度传感器

DS18b20采用单总线的结构,单总线的特点就是只有一根数据线,系统中的数据交换都由这根线进行。

DS18B20的一线工作协议流程是:

初始化fROM操作指令一存储器操作指令一数据传输。

其工作时序包括:

1、初始化时序

2、写时序

3、读时序

DS18B20的初始化

主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。

若无低电平出现一直都是高电平说明总线上无器件应答。

做为从器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。

若没有检测到就一直在检测等待

初始化时序图

初始化过程和花在脉冲"

缱型含义:

DS182OIS电平

电阻上竝

息錢I?

制器徳电平

总线控制器和仍1820同为低电平

初始化程序

unsignedcharDsl8b20Iiut()

{

unsignedmti;

DSIO=0;〃将总线拉低480us〜960us

1=70;

while(i—);//延时642us

DSIO=1;//然后拉高总线,若DS18B2O做出反应会将在15us~60us后将总线拉低

1=0;

wlule(DSIO)〃等待DS18B20拉低总线

{

i++;

1坦>50000)//等待>50MS

remni0;〃初始化失败

}

return1;//初始化成功

}

主机发出各种操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS1SB20读取0或1的过程。

写周期最少为60微秒,最长不超过120微秒。

写周期一开始做为主机先把总线拉低1微秒表示写周期开始。

随后若主机想写0,则将总线置为低电平,若主机想写1,则将总线置为高电平,持续时间最少60微秒直至写周期结束,然后释放总线为高电平至少1微秒给总线恢复。

而DS18B20则在检测到总线彼拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。

写操作时序图

向DS18B20写入一个字节

voidDsl8b20WriteByte(unsignedchardat)

{

unsignedmtij;

for(j=0j<8j++)

{

DSIO=0;//每写入一位数据之前先把总线拉低lus

i++;

DSIO=dat&0x01;//然后写入一个数据,从最低位开始

1=6;

while(i-);〃延时68ust持续时间最少60us

DSIO=1;〃然后释放总线,至少lus给总线恢复时间才能接着写入第二个数值dat»=l;

}

}

读周期是从主机把单总线拉低1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。

作为从机DS1SB20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。

若要送出1则释放总线为高电平。

主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微

秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。

采样期内总线为高电平则确认为完成一个读时序过程,至少需要60微秒才能完成

读操作时序图

 

 

 

读取一个字节

unsignedcharDs18b20ReadBvte()

{

unsignedcharbyte.bi;

unsignedmti,j;

for(j=8j>0j-)

{

DSIO=0;〃先将总线拉低lus

i++;

DSIO=1;〃然后释放总线

i++;

i++;〃延时6us等待数据稳定

bi=DSIO;〃读取数据,从最高位开始读取

byte=(byte»l)|(bi«7);/*将byte右移一位,然后或上左移7位后的bi,注意移动

之后移掉那位补0。

*/

1=4;〃读取完之后等待48us再接着读取下一个数

while(i—);

}

retinnbvte;

J7

DS18B20内部结构主要由四部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

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

64位光刻ROM的排列是:

开始8位(地址:

28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,并且每个DS18B20的序列号都不相同,因此它可以看作是该DS18B20的地址序列码;最后8位则是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。

由于每一个DS18B20的ROM数据都各不相同,因此微控制器就可以通过单总线对多个DS18B20进行寻址,从而实现一根总线上挂接多个DS18B20的目的。

晰側CRC48时列号SbilirftR(lOH)

MSBLSBMSBLSBMSBLSB

DS18B20的存储器由一个高速暂存RAM和一个非易失性、电可擦除(E2)RAM组成。

TH

TL

8&CRC

I別(0)MSB(8)

O

温度的低八位数据

5

保留(全工)

Z

温度的高八位数据

G

保留

2

高温阀值

7

保留

3

低位阀值

8

前八位CRC效验值

4

配置寄存器

DS18B20经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。

所以当我们只想简单的读取温度值的时候,只用读取暂存器中的第0和第1个字节就可以了。

简单的读取温度值的步骤如下:

1、跳过ROM操作

2、发送温度转换命令

3、跳过ROM操作

4、发送读取温度命令

5、读取温度值

抠令名称

指令代码

擋令功能

温度熒埶

44H

启动DS18曰20进行温度转换,转换时间最长垢500ms(典型光200ms)・结果有入内咅F9宇节RAM中

OBEH

读内和RAM中9手节的内容

写暂存器

4EH

发出向内咅bRAM的第3,4宇节写上,

F限温康数据命令.紧跟谚命令之后.是传送两宇节的数垢

熄制哲存器

48H

ISRAM中第3,4字苹的内容复制到EEPR

0M中

垂凋EEPROM

0B8H

EEPROM中的内容恢毘到RAM中的第3,4

字节

淒供电方式

OB4H

读DS18B2O的供电模式,寄生供电时DS18日20发送“0”,夕卜疾电源供电DS18B

■■•0W••••••••

 

指令名称

指令代码

指令功能

读ROM

33H

渎DS18B20ROM中的编碍(即读64位地址)

ROM匹酉己(符合ROM)

55H

笈出此命令之后,授着发出64位ROM编碍,访问单总銭上与编码相对应DS18B20使之作出响应'为下一步对该DS18B20的读写作准备

搜素ROM

OFOH

用于确定挂接在同一总线上DS18B20的个数和识别64位ROM地址'为操作各器件作好准备

跳过ROM

0CCH

紹略创位ROM地址,直接向DS18B20发温度吏换命令上适用于单片机工作

譬根役索

OECH

该指令执行后,只有温度超过设定值上限或下限的片子才做出响应

DS18B20fit]ROM指令集

开始转换温度

voidDs18b20ChangTemp()

{

Dsl8b20Imt0;

Delavlnis(l);

Ds18b20WiiteBvte(0xcc);〃跳过ROM操作命令

Ds18b20WiiteBvte(0x44);〃温度转换命令

Delavlnis(lOO);

}

炖读取as命令

voidDs18b20ReadTempCom()

{

Dsl8b20Imt0;

Delavlnis(l);

Ds18b20WiiteBvte(0xcc);〃跳过ROM操作命令

Ds18b20WnteByte(0xbe);〃发送读取温度命令

读取温度

mtDs18b20ReadTemp()

{

unsignedmttemp=O;

unsignedchartnilijnil;

Dsl8b2OChaiigTempO;〃先写入转换命令Dsl8b20ReadTenipCom()y/然后等待转换完后发送读取温度命令tnil=Dsl8b20ReadByteQ;〃读取温度值共16位,先读低字节tnili=Ds18b20ReadByteQ;〃再读高字节

temp=tnih;

temp«=8;

temp|=tml;

returntemp;

}3.2LCD1602液晶显示屏

LCD1602的引脚

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

DataI/O

2

VDD

电源正极

10

D3

DataI/O

3

VL

液晶显示偏压信号

11

D4

DataI/O

4

RS

数据/命令选择端(H/L)

12

05

DataI/O

5

R/W

读/写选择端(H/L)

13

06

DataI/O

6

E

使能信号

14

D7

DataI/O

7

D0

DataI/O

15

BLA

背光源正极

8

D1

DataI/O

16

BLK

背光源负极

操作步骤:

1、初始化

2、写命令(RS=L)设置显示坐标

3、写数据(RS=H)

时序参数

符号

极限值

单位

最小值

典型值

最大值

E信号周期

tc

400

ns

E脉冲宽度

tpw

150

ns

E上升沿/下降沿时间

tR,tF

25

ns

地址建立时间

tspi

30

ns

地址保持时间

tHDI

10

ns

数据建立时间(读操作)

tD

100

ns

数据保持时间(读操作)

tHD2

20

ns

数据建立时间(写操作)

tSP2

40

ns

数据保持时间(写操作)

tHD2

10

ns

写入一个字节命令

voidLcdWriteCom(unsignedchaicom)〃写入命令{

RS=0;

RW=0;

GPIO_LCD=com;

Delaylnis(10);

LCDE=1;

Delaylnis(10);

LCDE=0;

}写入一个字节数据

RS=1;

RW=0;

GPIO_LCD=dat;

Delaylnis(10);

LCDE=1;

Delaylnis(10);

LCDE=0;

}

初始化

voidLcdliiit()//LCD初始化子程序

{_

LcdWiiteCom(0x38);〃设置显示模式

LcdWiiteCom(OxOc);〃开显示不显示光标,光标不闪烁

LcdWnteCom(0x06);〃写一个指针加1

LcdWiiteCom(0x01);〃清屏

LcdWiiteCom(OxSO);〃设置数据指针起点

}

1602的指令码

指令功観

指令编码

✓us

RS

R/W

DB7

DB6

DBS

DBH

DB3

DB2

DB1

功能设定

i

0

1

01

H

F

X

X

MB

DL:

0时:

选择4位数据总线模式。

1时:

选择8位数据总线模式。

N:

0时:

选择显示一行。

1时:

选择显示两行。

F:

0选择5*7模式,1选择5勺0模式。

一般只有5*7模式。

显示开/关及按键显示

指令码

功能

0

0

0

0

1

D

C

B

D=1

C=1

B=1

开显示;D=0关显示

显7F光标;C二0不显光标光标闪烁:

A0光标不显示

0

0

0

0

0

1

N

S

N二1当读或写一个字符后地址指针加—,且光标加一

N二0当读或写一个字符后地址指针减一,且光标减一

S=1当写一个字符,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果。

s=o当写一个字符,整屏显示不移动

■数据指针设置

I指令码

mgI

■80H+地址码(0=27H,

■40H-67H)

设萱数据地址指针]

■其他设置

.指令码

功能

.01HI

显示清屏:

1•数据指针清零

2,所有显亦■清零

3.3编程调试过程出现的问题

当控制电机速度的程序放在定时器1的中断中则会导致液晶显示屏出现闪烁,这是因为每中

断一次就进入中断程序,则读取温度的程序就没有运行,所欲显示就会出错,而当控制电机的程序放在主程序中,则电机的速度则无法控制,只有转或不转。

这个问题无法突破就无法实现调节风力人小以及正确显示温度的功能,尝试了多种办法后发现在读取温度的时候先将定时器关闭,读取温度结束后就开启定时器。

4、程序清单

#iiiclude

voidTimelCoiifigQ;

/*相关字符的重定义*/

#defineuchaiunsignedchar

#defineumtunsignedmt

#defineLCD1602_DATAPINSPO

sbitLCD1602_E=P2A7;〃定义P2.7II为使能端

sbitLCD1602_RW=P2人5;

〃定义P2.5丨1为读/写选择端(H,,L)

sbitLCD1602_RS=P2'、6;

〃定义P2.611为数据/命令选择端(H.L)

sbitDSPORT=P3A7;

sbitPWM=P1T;

〃定义P3.7口为总线

〃定义P1.1为电机电压输出端

严定义一些相关变量引

unsignedchartimer1;

floattp;

mttemp.speed;

unsignedchaitabh[]={O,T,2,3丁4丁5丁6;7,'8;9};

hitil=0,nl=0jl=0,al,kl=04iil=0,flag=0.ol=0,pl=0,zl=0;

〃误差Ous

严LCD1602延时函数*/

voidLed1602_Delavlnis(umtc){

uchara.b;

for(;c>0;c—)

{

for(b=199;b>0;b—)

{

fdr(a=l;a>0;a—);}

}

}

严向LCD1602写入一个字节命令*/

voidLcdWriteCom(ucharcom)〃写入命令

{

LCD1602_E=0;〃使能

LCD1602_RS=0;〃选择发送命令

LCD1602_RW=0;〃选择写入

LCD1602.DATAPINS=com;〃放入命令

Led1602_Delay1ms

(1);//等待数据稳定

LCD1602_E=1;〃写入时序

Led1602_Delaylms(5);//保持时间

LCD1602_E=0;

}

严向LCD1602写入一个字节数据引

〃写入数据

voidLcdWriteData(uchaidat)

{

LCD1602_E=0;〃使能清零

LCD1602_RS=1;〃选择输入数据

LCD1602_RW=0;//选择写入

LCD1602.DATAPINS=dat;//写入数据Led1602_Delaylms

(1);

LCD1602_E=1;〃写入时序

Led1602_Delaylms(5);//保持时间

LCD1602_E=0;

}

严初始化LCD屏*/

voidLcdliut()//LCD初始化子程序

{_

LcdWiiteCom(0x38);〃开显示

LcdWiiteCom(OxOc);〃开显示不显示光标

LcdWnteCom(0x06);〃写一个指针加1

LcdWiiteCom(0x01);〃清屏

LcdWiiteCom(OxSO);〃设置数据指针起点

}严DS18E20的延时函数*/voidDelaylms(umty){

uiiitx;

M;y>o;y-)

for(x=110;x>0;x-);

/*DS18B20的初始化*/uchaiDsl8b20Lut()

{

uchaii;

DSPORT=0;〃将总线拉低480us〜960us

i=70;

while(i—);//延时642us

DSPORT=1;〃然后拉高总线,如果DS18B20做出反应会将在15us〜60us后总

线拉低

i=0;

while(DSPORT)〃等待DS18B20拉低总线

{

i++;

if(i>5)//等待>5MS

{

remni0;//初始化失败

}

Delavlnis(l);

}

remin1#初始化成功

}

/*向DS18B20写入一个字节*/

voidDsl8b20WriteByte(uchardat)

{

uinti,j;

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

{

DSPORT=0;〃每写入一位数据之前先把总线拉低lus

i++;

DSPORT=dat&0x01;〃然后写入一个数据,从最低位开始

1=6;

while(i—);//延时68us,持续时间最少60us

DSPORT=1;〃然后释放总线,至少lus给总线恢复时间才能接着写入第二个数值dat»=1;

}

}

/*读取一个字节*/

uchaiDs18b20ReadByte()

ucharbyte,bi;

umtij;

for(j=8;j>0;j-)

{

DSPORT=0〃先将总线拉低lus

i++;

DSPORT=iy/然后释放总线

i++;

i++;〃延时6us等待数据稳定

bi=DSPORT;〃读取数据,从最高位开始读取

/*将byte右移一位,然后与上左移7位后的bi,注意移动之后移掉那位补0。

*/byte=(byte»1)|(bi«7);

1=4;〃读取完之后等待48us再接着读取下一个数

while(i—);

}

retuinbyte;

}

/*开始转换温度*/

voidDs18b20ChangTempQ

{

Dsl8b20Imt0;

Delavlnis(l);

Ds18b20WiiteBvte(0xcc);〃跳过ROM操作命令

Ds18b20WiiteBvte(0x44);//温度转换命令

//Delaylms(lOO);〃等待转换成功,而如果你是一直刷着的话,就不用这个延时了}

/*发送读取温度命令*/

voidDs18b2OReadTempCom()

Dsl8b20Init();

Delavlnis(l);

Ds18b20WiiteBvte(0xcc);〃跳过ROM操作命令

Ds18b20WnteByte(0xbe)

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1