智能散热系统课程设计报告_第1页
智能散热系统课程设计报告_第2页
智能散热系统课程设计报告_第3页
智能散热系统课程设计报告_第4页
智能散热系统课程设计报告_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理及接口课程设计报告题目:智能散热系统专业名称:通信工程班级:创新142学号: 201411403128姓 名:刘小杰2015年 12月课程设计报告首页院、系(部)信息工程学院专业学号201411403128姓名课程名称单片机H(理及通信工程班级创新142刘小杰任课教师陈玮接口成绩评语签字: 年 月日复核人意见: 字 签月 年日课程设计报告的要求:首先应先介绍课程设计的基本内容(包括设计目标)、设计的背景及意义。 其次是方案论证:说明设计的原理并进行方案选择,再然后进行硬件电路的设计 及原理说明,和软件的流程说明。第三是过程(设计或实验)论述:对设计调试工作的详细表述。最后是结论或总结

2、:对整个研究工作进行归纳和综合、包括心得体会。大致内容按上面要求來写,也可以参考网上“单片机 课程设计报告”来扩充。 文章中的格式规定:图:图的名称采用中文,图名在图片下面格式为:图1-1,后接图名。表格:表名在表格上面。正文五号字一级标题四号加粗二级标题小四加粗行距:1.5倍附录的程序:两列页边距:上下2. 5厘米 左右2. 8厘米不要目录需要中文摘要 排版参考毕业设计论文格式(见下页)参考文献若有可写打印的报告里面不需要附录程序电子版里面需要报告里面应该有各模块电路图调试现象图刻盘要求:最后,除了打印的,全班把每个人的程序(keil项目及hex文件)、电路(proteus 文件或硬件的照片

3、及电路原理图)和报告打包压缩后命名为“班级名-学号-姓名” (如电信091-123456-陈玮)刻盘。散热系统刘小杰信息工程学院摘要:由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现 场数据的采集和控制。通过本次课程设计掌握单片机硬件和软件方面的知识,更深 入的了解单片机的实际应用。关键词:单片机,程序,DS18B20温度传感器,LCD1602液晶显示屏,定时器,直流电机等等1课程设计的基本内容为实现系统能釆集当前环境温度,当温度达到一定值时触发直流风扇的转动进行主动散 热,并且随着温度的变化而改变风力人小,风力与温度成正比,本系统设置了三个档来控制 风力的大小,20C

4、76; 22C0为一档,22C° -24C°为二档,24C° 26C0为三档(为了演示 方便而设计的三档,在实际用途中可依据要求来设置)。本智能散热系统根据坏境温度智能 调控风力的功能可以放置在一些硬件中以达到降温的功能。2方案论证2.1设计原理及方案选择通过DS18B20温度传感器来采集当前坏境的温度,通过LCD1602液晶显示屏来显示 温度以及工作时间,CPU根据当前温度来控制电机的速度。2.2硬件电路设计及原理说明使用Pl. 1 I 1来连接电机,P0 口连接LCD 1602, P2. 5 I I为读/写选择端,P2. 6为 命令/数据选择端,P2. 7为使

5、能端,P3. 7 I 1为数据总线,P3.4 I I为定时器0, P3. 5为定时 器1.温度GND.VCC图为DS18B20原理图LCD1602RJ1图为LCD1602原理图图为外部电路接线图3设计过程论述3.1 DS18B20温度传感器DS18b20采用单总线的结构,单总线的特点就是只有一根数据线,系统中的数据交换都由这 根线进行。DS18B20的一线工作协议流程是:初始化一ROM操作指令一存储器操作指令一数据传输。其工作时序包括:1、初始化时序2、写时序3、读时序DS18B20的初始化主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480 微秒时间内对总

6、线进行检测,如呆有低电平出现说明总线上有器件已做出应答。若无低电平 出现一直都是高电平说明总线上无器件应答。做为从器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平 出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出 响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待初始化时序图初始化过程和花在脉冲"vnc疫制器T/复位胱冲" 480 |is minimum-4*號廉RxDS1I82O輪15-60(118ps min imuni-D$1820Tx“花在删”460 - 240MS總总线GND厂

7、了DS182OIS 电平 电阻上竝缱型含义:息錢I?制器徳电平总线控制器和仍1820同 为低电平初始化程序unsigned char Ds!8b20Iiut()unsigned mt i;DSIO=0;将总线拉低480us960us1=70;while(i);/延时 642usDSIO=1;/然后拉高总线,若DS18B2O做出反应会将在15us60us后将总线拉低1=0;while(DSIO) 等待 DS1SB20 拉低总线i+;if(i>50000)/ 等待 >50MSremni 0;初始化失败return 1#初始化成功主机发出各种操作命令都是向DS18B20写0和写1组成的命

8、令字节,接收数据时也是从 DS1SB20读取0或1的过程。写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1微秒 表示写周期开始。随后若主机想写0,则将总线置为低电平,若主机想写1,则将总线置为 高电平,持续时间最少60微秒直至写周期结束,然后释放总线为高电平至少1微秒给总线 恢复。而DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线 采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。写操作时序图向DS18B20写入一个字节void Ds 18b20WriteByte(unsigned char dat)unsigne

9、d mt i,j;for(j=Oj<8j+)DSIO=0;/每写入一位数据之前先把总线拉低lusi+;DSIO=dat&0x01; /然后写入一个数据,从最低位开始1=6;while(i); /延时68us,持续时间最少60usDSIO=1; 然后释放总线,至少lus给总线恢复时间才能接着写入第二个数值 dat»=l;读周期是从主机把单总线拉低1微秒之后就得释放单总线为高电平,以让DS18B20把 数据传输到单总线上。作为从机DS1SB20在检测到总线被拉低1微秒后,便开始送出数据, 若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机 在一

10、开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微 秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高 电平则确认为1。完成一个读时序过程,至少需要60微秒才能完成读操作时序图% GMD 读取一个字节unsigned char Ds 18b20ReadBvte()unsigned char byte.bi;unsigned mt i,j;for(j=8j>0j-)DSIO=0;先将总线拉低lusi+;DSIO=1;然后释放总线i+;i+;延时6us等待数据稳定bi=DSIO; 读取数据,从最高位开始读取byte=(byte»

11、;l)|(bi«7); /*将byte右移一位,然后或上左移7位后的bi,注意移动 之后移掉那位补0。*/1=4;读取完之后等待48us再接着读取下一个数while(i);retiiin bvte;DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温 度报瞥触发器TH和TL、配置寄存器。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序 列码。64位光刻ROM的排列是:开始8位(地址:28H )是产品类型标号,接着的48 位是该DS18B20自身的序列号,并且每个DS18B20的序列号都不相同,因此它可以看作 是该DS18B

12、20的地址序列码;最后8位则是前面56位的循环冗余校验码(CRC=X8+X5+X4+1 )o由于每一个DS18B20的ROM数据都各不相同,因此微控制 器就可以通过单总线对多个DS18B20进行寻址,从而实现一根总线上挂接多个DS18B20 的目的。帅側CRC 4帅糊号Sbil ir代码(10H)MSB LSB MSB LSB MSBLSBDS18B20的存储器由一个高速暂存RAM和一个非易失性、电可擦除(E2) RAM组成。温嵐馳THTL8 6 CRCI 別MSB (8)O温度的低八位数据5保留(全工)温度的高八位数据G保留2高温阀值7保留3低位阀值8前八位ERC效验值4配置寄存器1DS1S

13、B20经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字 节。所以当我们只想简单的读取温度值的时候,只用读取暂存器中的第0和第1个字节就可 以了。简单的读取温度值的步骤如卞:1、跳过ROM操作2、发送温度转换命令3、跳过ROM操作4、发送读取温度命令5、读取温度值指令名称指令代码抠令功能温度变换44H启动DS18B20进行温咦转换,转换时间最 长为500ms (典型沖200ms ),结果有 入內咅B 9宇节RAM中读皆存器O6EH读内部RAM中9手节的内容写哲存第4EH发出向内部 RAM的第 3 ,4宇节写上,下限温度数堀命令.紧跟该侖令之后.昱传 送两宇节的数据短制皆存&

14、#167;849H诧中第3 > 4手节的内容复制到EEPR OM中垂凋EEPROM0B8HEEPROM中的内容恢复到RAM中的第34 字巧读供电方式0B4H读 DS18B20的供电模式,寄生供电时 DS 18B20发送“ 0 ”,外接电澹供电 DS18B; 指令名祢指令代码指令功能渎ROM33H读DS18B20ROM中的編码(即读64位地址ROM匹色己(符合ROM )55H发出此命令之后上擡薈发出64位ROM編田"访 问单总线上与编码相对应DS1 8020使之作出响 应为下一步对该 DS1802O的读写作准备捷索ROMOFOH用于确定挂接在同一总线上DS18B20的个数和 识别

15、64位 民OM地址,为操作各器件作好准备跳过ROM0CCH忍昭 64位 ROM地址,直接向 DS18B20发温度 受换命令"适用于单片机工作0ECH闕旨令执行后,只誉温度起过设定值上跟或下限的 片子才做出响应DS18B2 0 的 ROM ta令集开始转换温度void Ds 18b20ChangTempQDsl8b20Init0;Delavlnis(l);Ds 18b20WnteByte(0xcc);跳过 ROM 操作命令Ds 18b20WnteByte(0x44);/温度转换命令Delavlnis(lOO);发送读取温度命令void Ds 18b20ReadTempCom()Dsl8

16、b20Init0;Delavlnis(l);Ds 18b20WnteByte(0xcc);跳过 ROM 操作命令Ds 18b20WnteByte(0xbe);发送读取温度命令读取温度mt Ds 18b20ReadTemp()unsigned mt temp=0;unsigned char tnilijnil;Dsl8b2OChaiigTempO; 先写入转换命令Ds 18b20ReadTenipCom0y/然后等待转换完后发送读取温度命令tnil=Ds 18b20ReadBvteQ;/读取温度值共16位,先读低字节tnili=Ds 18b20ReadBvteQ; 再读高字节temp=tnih;

17、temp«=8;temp|=tml;return temp;3.2 LCD 1602液晶显示屏LCD 1602的引脚编号符号引脚说明编号符号引脚说明1vss电源地9D2Data I/O2VDD电源正极10D3Data I/O3VL液晶显示偏压信号11D4Data I/O4RS数据/命令选择端(H/L)12D5Data I/O5R/W读/写选择端(H/L)13D6Data I/O6E使能信号14D7Data I/O7DOData I/O15BLA背光源正极8DIData I/O16BLK背光源负极操作步骤:1、初始化2、写命令(RS=L)设置显示坐标3、写数据(RS=H)RSR/WED

18、BO-DB7时序参数符号极限值单位最小值典型值最大值E信号周期tc400nsE脉冲宽度tpw150nsE上升沿/下降沿时间tR, tF25ns地址建立时间tSP130ns地址保持时间tHD110ns数据建立时间(读操作)tD100ns数据保持时间(读操作)tHD220ns数据建立时间(写操作)tSP240ns数据保持时间(写操作)tHD210ns写入一个字节命令void LcdWriteCom(unsigned chai com) 写入命令 RS=0;RW=0;GPIO_LCD=com;Delavlnis(lO);LCDE=1;Delavlnis(lO);LCDE=0;写入一个字节数据写入数据

19、void LcdWriteData(unsigned char dat) RS=1;RW=0;GPIO_LCD=dat;Delavlnis(lO);LCDE=1;Delay lnis( 10);LCDE=0;初始化void Lcdliut() /LCD初始化子程序LcdWriteCom(0x3 8); 设置显示模式LcdWriteCom(OxOc); 开显示不显示光标,光标不闪烁LcdWnteCom(0x06); 写一个指针加 1LcdWriteCom(OxO 1); 清屏LcdWnteCom(OxSO); 设置数据指针起点1602的指令码指令功観指今编码/usRSR/WDB7DB6DBS08

20、4DB30B2081DB功能设定«iB1DLNFXXDL:0时:选择4位数据总线模式。1时:选择8位数据总线模式。N:0时:选择显示一行。1时:选择显示两行。F: 0选择5*7模式,1选择5*10模式。一般只有5*7模式。显示开/关及按键显示指令码功能00001DcBD=1C=1B=1开显乔;D=0关显显示光标:C二0不显示光标光标闪烁:B二0光标不显示000001NSN=1当读或写一个字符后地址指针加 ,且光标加一N=0当读或写一个字符后地址指针减 一,且光标减一S=1当写一个字符,整屏显示左移(N二1) 或右移(N=0),以得到光标不移动而屏 幕移动的效果。S=0当写一个字符,整

21、屏显示不移动数据指针设置指令码80H* 地址码(0=27H ,| 40H-67H)设萱数据地址指针其他设置指令码功能01 HI显示清屏:1数据指针清零2.所有显不清零RAM地址映射图LCD16字乂2行000102030405060708090A0B0C0D0E0F1027404142434445464748494A4B4C4D4E4F50673.3编程调试过程出现的问题当控制电机速度的程序放在定时器1的中断中则会导致液晶显示屏出现闪烁,这是因为每中 断一次就进入中断程序,则读取温度的程序就没有运行,所欲显示就会出错,而当控制电机 的程序放在主程序中,则电机的速度则无法控制,只有转或不转。这个问

22、题无法突破就无法 实现调节风力人小以及正确显示温度的功能,尝试了多种办法后发现在读取温度的时候先将 定时器关闭,读取温度结束后就开启定时器。4、程序清单# iiiclude<reg51 .h>void TimelCoiifigQ;/*相关字符的重定义*/#define uchar unsigned char#define umt unsigned mtdefine LCD1602.DATAPINS POsbit LCD1602_E=P2A7; 定义 P2.7 I I为使能端sbit LCD 1602_RW=P2A5;定义 P2.5 I I 为读/写选择端(H,L)sbit LCD

23、1602_RS=P2A6;定义 P2.6 I I 为数据/命令选择端(H/L)sbit DSPORT=P3A7;定义 P3.7 口 为总线sbit PWM=P1A1;定义Pl.l为电机电压输出端严定义一些相关变量可unsigned char tuner 1;float tp;mt temp.speed;unsigned char table=,071273l4t5,677,;8,;9,;iiit il=0,nl=0jl=0,al,kl=0jiil=0,flag=0.ol=0,pl=0,zl=0;/*LCD1602延时函数引void Led 1602_Delavlnis(uiiit c)误差 O

24、usuchar a,b;for (; c>0; c-)fbr(b=199;b>0;b) fbr(a=l;a>O;a);严向LCD 1602写入一个字节命令*/void LcdWriteCom(uchar com) 写入命令LCD1602_E = 0;使能LCD1602_RS = 0;/选择发送命令LCD1602_RW = 0; 选择写入LCD1602.DATAPINS = com;放入命令Led 1602_Delay 1 ms( 1);/等待数据稳定LCD1602_E = 1;写入时序Led 1602_Delay lms(5); 保持时间 LCD1602_E = 0;严向LC

25、D 1602写入一个字节数据引void LcdWriteData(uchai dat)写入数据LCD1602_E = 0; 使能清零LCD1602_RS= 1; 选择输入数据LCD1602_RW = 0;/选择写入LCD1602_DATAPINS = dat; 写入数据Led 1602_Delaylms( 1);LCD1602_E = 1; 写入时序Led 1602_Delaylms(5);/保持时间LCD1602_E = 0;/LCD初始化子程序严初始化LCD屏*/void Lcdliut()LcdWiiteCom(0x3 8); 开 显示LcdWiiteCom(OxOc); 开显 示不显示

26、光标LcdWnteCom(0x06); 写一个指针加 1LcdWiiteCom(OxO 1); 清屏LcdWiiteCom(OxSO); 设置数据指针起点严DS18B20的延时函数*/void Delaylms(uiiit y)uiiit x;fo【(;y>0; V-)for(x=110; x>0; X-);/*DS18B20的初始化*7uchai Dsl8b20Iiiit()uchar i;DSPORT = 0;将总线拉低 480us960us1 = 70;while(i);/延时 642usDSPORT = 1;然后拉高总线,如果DS18B20做出反应会将在15us60us后总

27、线拉低1 = 0;while(DSPORT) 等待 DS18B20 拉低总线i+;if(i>5)/ 等待 >5MSreturn 0;/初始化失败Delavlnis(l);return 1;/初始化成功严向DS18B20写入一个字节*/void Dsl 8b20WriteByte(uchar dat)umt ij;for(j=0;j<8;j+)DSPORT = 0;每写入一位数据之前先把总线拉低lus1卄;DSPORT = dat & 0x01; 然后写入一个数据,从最低位开始1=6;while(i-); 延时68us,持续时间最少60usDSPORT = 1; 然后释

28、放总线,至少lus给总线恢复时间才能接着写入第二个数值 dat »= 1;严读取一个字节可uchai Ds 18b20ReadByteQuchar byte, bi;umt ij;for(j=8; j>0; J-)DSPORT = 0先将总线拉低lusi+;DSPORT =iy/然后释放总线i+;i+;延时6us等待数据稳定bi = DSPORT; 读取数据,从最高位开始读取/*将byte右移一位,然后与上左移7位后的bi,注意移动之后移掉那位补0。*/ byte = (byte » 1) | (bi« 7);1 = 4;读取完之后等待48us再接着读取下一

29、个数while(i);retinn bvte;/*开始转换温度*/void Ds 18b20ChangTempQDsl8b20Iiiit0;Delavlnis(l);Ds 18b20WiiteBvte(0xcc);跳过 ROM 操作命令Ds 18b20WiiteBvte(0x44);/温度转换命令/Delayhns(lOO); 等待转换成功,而如果你是一直刷着的话,就不用这个延时了/*发送读取温度命令*/void Ds 18b20ReadTempCom()Dsl8b20Iiiit0;Delavlnis(l);Ds 18b20WiiteBvte(0xcc);跳过 ROM 操作命令Ds 18b20

30、WnteByte(0xbe);发送读取温度命令严读取温度*/mt Ds 18b20ReadTemp()int temp = 0; uchar tiiili, tinl;TR1=O;先写入转换命令然后等待转换完后发送读取温度命令/读取温度值共16位,先读低字节再读高字节Ds 18b20ChaiigTemp();Ds 18 b20ReadTenipC om(); tail = Dsl 8b20ReadByte(); tnili = Ds 18b20ReadByteQ; temp = tnili:temp «= 8; temp |= tnil;TR1=1;retuin temp;/*定时器

31、1的中断函数*/ void Time 1 (void) mteimpt 3 TH1 = Oxfe;TL1 = 0x0c;timer 1+;if(tunerl>100) /./PWM 周期为 100*0.5mstunerl=0;if(tunerl < speed) 直流电机的速度与speed的变化成正比PWM=1;elsePWM=0;/*设置定时器1*/void TimelCoiifigOTMOD|= 0x10; 设置定时计数器工作方式1为定时器 /-定时器赋初始值,12MHZ下定时0.5ms-TH1 = Oxfe;TL1 = 0x0c;ET1 = 1;开启定时器1中断EA= 1;T

32、RI = 1; 开启定时器/*LCD显示读取到的温度*/void LcdDisplav(iiit temp) /led 显示unsigned char datas = 0,0, 0, 0, 0; /定义数组if(temp< 0)当温度值为负数 _LcdWiiteCom(OxC 1);写地址80表示初始地址LcdWriteData(*-');显示负因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-l;temp=temp:tp=temp;temp=tp*0.0625* 100+0.5;留两个小数点就*100, +0.5是四舍五入,因为C语言浮点数转换为整型

33、的时候把 小数点后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1 了,小于 0.5的就算由?.5,还是在小数点后面。else _LcdWiiteCom(0xC6);写地址80表示初始地址LcdWriteData(,+,);显示正tp=temp;/因为数据处理有小数点所以将温度赋给一个浮点型变量 如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625* 100+0.5;if(temp>=2000 && tenip<=2200)speed=30;else if(temp>=2200 && temp&l

34、t;=2400)speed=50;else if(temp>2400)speed=70;elsespeed=0;留两个小数点就*100, +0.5是四舍五入,因为C语言浮点数转换为整型的时候把 小数点后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1 了,小于 0.5的就算加上0.5,还是在小数点后面。datas0 = temp / 10000;datasl = temp % 10000 / 1000;datas2 = temp % 1000/ 100;datas3 = temp % 100/ 10;datas4 = temp % 10;Lc dWiiteCom(0

35、xC 8);LcdWriteData(,0,+datas0);LcdWiiteCom(0xC9); LcdWriteData(,O,+datasl ); LcdWriteCom(OxCa);LcdWiiteDataCOdatas); Lc dWrite C om(0xC b); LcdWiiteDataC.1); LcdWriteCom(OxCc);LcdWriteData(O+datas3); LcdWriteCom(OxCd);写地址80表示初始地址/写地址80表示初始地址/写地址80表示初始地址/写地址80表示初始地址写地址80表示初始地址LcdWriteData(*0,+datas4)

36、; LcdWiiteCom(OxCO); LcdWiiteData(T); LcdWriteCom(OxC 1);LcdWriteData(le,);LcdWriteCom(0xC2); LcdWriteData(,m,);LcdWriteCom(0xC3); LcdWiit 亡 Data(p);LcdWriteCom(0xC4); LcdWiiteDataC;);/*1CD上一行显示时间*/ void LcddisplayOLcdWiiteCom(OxSf);LcdWriteData(table il); LcdWriteCom(0x8e); LcdWriteData(tablej 1);

37、LcdWriteCom(0x8d);LcdWnteDataC:-); LcdWriteCom(0x8c);LcdWriteData(tablekl );LcdWriteCom(0x8b);LcdWriteData(tableml );LcdWriteCom(0x8a); LcdWnteDataC:-);LcdWriteCom(0x89);LcdWriteData(tableo 1 );LcdWriteCom(0x88);LcdWriteData(tablep 1 );LcdWriteCom(0x87); LcdWnteDataC:-);LcdWriteCom(0x86);LcdWriteData(table

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论