1、 课程设计(大作业)报告课程名称: 传感器原理及应用 设计题目: 利用 DS18B20 采集温度 摘要利用 DS18B20采集温度,本次传感器原理及应用课程设计,就是用 KL25芯片实现温度控制,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。本次采用 DS18B20数字温度传感器来实现温度计的设计。显示传感器 DS18B20 开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是温度传感DS18B20 的数据采集过程。本文主要是运用 DS18B20来
2、完成实验,KL25 微秒级延时,编写程序代码并进行修改,程序代码主要 0是低电平,1 是高电平,每次读要复位,读设置为输入,写设置为输出。关键词: DS18B20 传感器、KL25 微妙延时、数据采集。目录课程设计(大作业)报告 1一、 题目分析 .1二、 基本理论 .1三、 总体设计及分析 .11、 总体内容 12、 仿真图及原理图 23、 工作原理 34、 串口测试结果 4四、 实验器材 .51、器件 .52、DS18B20 的特点 5五、 程序代码及分析 .5六、 总结 .9七、 参考文献 10昆明学院信息技术学院课程设计(大作业)报告1课程设计(大作业)报告一、 题目分析利用 DS18
3、B20采集温度,本次传感器原理及应用课程设计,就是用 KL25芯片实现温度控制,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。本次采用 DS18B20数字温度传感器来实现温度计的设计。利用 DS18B20采集温度,显示传感器 DS18B20 开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是温度传感器 DS18B20 的数据采集过程。温度传感器 DS18B20 的数据采集,把程序代码烧到 KL25 芯片,连接面包板上的电路,与芯片相连接,通过串口
4、采集,显示十进制,把环境温度采集到串口上显示出来。KL25 芯片自身就有温度传感器,可以通过引脚配置,采集传感器监测到的温度,但是此时监测到的温度并不能用摄氏度进行显示,得到的数据只是原始数据,无法与真实的温度联系在一起,因此我们需要采用回归的方法,将采集到的数据转换为我们所广泛认知的摄氏温度,从而显示在 PC界面中。二、 基本理论对于 DS18B20的读时隙是从主机把单总线拉低之后,在 15秒之内就得释放单总线,以让 DS18B20把数据传输到单总线上。DS18B20 在完成一个读时序过程,至少需要 60us才能完成,每完成一次都需要复位。DS18B20的写时序,对于 DS18B20的写时序
5、仍然分为写 0时序和写 1时序两个过程,对于 DS18B20写 0时序和写 1时序的要求不同,当要写 0时序时,单总线要被拉低至少 60us,保证 DS18B20能够在 15us到 45us之间能够正确地采样 IO总线上的“0”电平,当要写 1时序时,单总线被拉低之后,在 15us之内就得释放单线。昆明学院信息技术学院课程设计(大作业)报告2初始化端口 A的 1号引脚,定义为输出一个高电平,设置 A端口的 1号引脚状态为低,进行复位,发送读数据。三、 总体设计及分析1、总体内容DS18B20有三只引脚:DQ 数字信号输入/输出端,和 VDD电源输入端,GND接地。提及到温度的检测,我们首先会考
6、虑传统的测温元件有热电偶和热电阻,而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试也复杂,制作成本高。因此,本数字温度计设计采用智能温度传感器 DS18B20作为检测元件,测温范围为-55C 至+125C,最大分辨率可达 0.0625C。DS18B20 可以直接读出被测量的温度值,而采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。通过 KL25芯片,面包板,温度传感器 DS18B20,导线等将电路连接起来,温度传感器 DS18B20采集到的温度通过 PC机界面显示出来。2、仿真图及原理图昆明学院信息技术学院课程设计
7、(大作业)报告3图 1 DS18B20 仿真图DS18B20有三只引脚:DQ 数字信号输入/输出端,和 VDD电源输入端,GND 接地。昆明学院信息技术学院课程设计(大作业)报告4图2 DS18B20的读写时序图(1)DS18B20写逻辑的步骤:写逻辑0,单片机拉低电平大约10-15us,单片机持续拉低电平大约20-45us的时间,释放总线;写逻辑1,单片机拉低电平大约10-15us,单片机拉高电平大约20-45us的时间,释放总线。(2)DS18B20读逻辑的步骤:读逻辑0,在读取的时候单片机拉低电平大约1us,单片机释放总线,然后读取总线电平,这时候DS18B20会拉低电平,读取电平过后,
8、延迟大约40-45微妙;读逻辑1,在读取的时候单片机拉低电平大约1us,单片机释放总线,然后读取总线电平,这时候DS18B20会拉高电平,读取电平过后,延迟大约40-45微妙。DS18B20的写时序,对于 DS18B20的写时序仍然分为写 0时序和写 1时序两个过程,对于 DS18B20写 0时序和写 1时序的要求不同,当要写 0时序时,单总线要被拉低至少 60us,保证 DS18B20能够在 15us到 45us之间能够正确地采样 IO总线上的“0”电平,当要写 1时序时,单总线被拉低之后,在 15us之内就得释放单线。昆明学院信息技术学院课程设计(大作业)报告53、工作原理我们使用单点,单
9、线总线上仅有一个 DS18B20存在,不需要刻意读取 ROM里面的序列号来,然后在匹配 DS18B20而是更直接的跳过 ROM指令,然后直接执行 DS18B20功能指令。DS18B20 复位,在,某种意义上就是一次访问 DS18B20的开始,也就是开始信号。ROM 指令,就是访问,搜索匹配,DS18B20 的 64位序列号的动作。使能 Systick 定时器(即向控制及状态寄存器的第 0 位写 1) ,开始延时。监控控制及状态寄存器的 16 位,如该位为 1,失能 Systick 定时器(即向控制及状态寄存器的第 0 位写 0) ,完成延时。DS18B20的写时序,对于 DS18B20的写时序
10、仍然分为写 0时序和写 1时序两个过程,对于 DS18B20写 0时序和写 1时序的要求不同,当要写 0时序时,单总线要被拉低至少 60us,保证 DS18B20能够在 15us到 45us之间能够正确地采样 IO总线上的“0”电平,当要写 1时序时,单总线被拉低之后,在 15us之内就得释放单线。初始化端口 A的 1号引脚,定义为输出一个高电平,设置 A端口的 1号引脚状态为低,进行复位,发送读数据。4、串口测试结果昆明学院信息技术学院课程设计(大作业)报告6图 3 串口测试图PC机界面显示:步骤一、将芯片串口引脚与电脑连接,给芯片通电,然后选择串口,波特率后按打开串口按钮。步骤二、按下采集
11、温度按钮之后开始采集芯片温度。步骤三、显示十进制温度4、实验器材1、器件:传感器 DS18B20、电阻、面包板、KL25 芯片、若干导线。2、DS18B20 的特点:DS18B20是单线数字温度传感器,它的体积更小,适用电压更宽,更经济。DS18B20的性能特点如下:昆明学院信息技术学院课程设计(大作业)报告7(1)独特的单线接口仅需要一个端口引脚进行通信;(2)多个 DS18B20可以并联在惟一的三线上,实现多点组网功能;(3)无须外部器件;(4)可通过数据线供电,电压范围为 3.0-5.5;(5)零待机功耗;(6)温度以 9或 12位数字;(7)用户可定义报警设置。5、程序代码及分析mai
12、n.c#include “includes.h“ /包含总头文件int main(void)unsigned int i=0;unsigned int t=0;unsigned int e=0;DISABLE_INTERRUPTS;uart_init(UART_1,BUSCLK, 9600);Uart_enable_re_i(UART_1);/enable_pit_int();ENABLE_INTERRUPTS;/主循 环开始for(;) /一个死循环昆明学院信息技术学院课程设计(大作业)报告8i=getTmpValue(); /获取温度函数调用t=i/10; /表示整数e=i%10;/表示小
13、数/ i=(float)t+0.1*e;uart_send1(UART_1,t);uart_send1(UART_1,e);/sprintf(UART_1,“%d.%d t“,t,e);/主循环 end_for/主循环结束=return 0;ds18b20.c#include “ds18b20.h“#include “delay.h“void DS18B20_Rset()/复位gpio_init(PORTA|(1), OUT, High);/初始化端口 A 的 1 号引脚,定义为输出一个高电平gpio_set(PORTA|(1),Low); /设置 A 端口的 1 号引脚的状态为低Delay_
14、750us(); /延时 750usgpio_set(PORTA|(1),High); /设置 A 端口的 1 号引脚的状态为高Delay_15us(); /延时 15us昆明学院信息技术学院课程设计(大作业)报告9unsigned char readBit()/读取一个位unsigned char b;gpio_init(PORTA|(1), OUT, High);/初始化端口 A 的 1 号引脚定义为输出一个高电平gpio_set(PORTA|(1),Low); /设置 A 端口的 1 号引脚的状态为低Delay_2us(); /延时 2usgpio_set(PORTA|(1),High)
15、; /设置 A 端口的 1 号引脚的状态为高gpio_init(PORTA|(1), IN, High);/初始化端口 A 的 1 号引脚,定义为输出一个高电平Delay_12us(); /延时 12sb = gpio_get(PORTA|(1); /获取 A 端口的 1 号引脚的状态赋值给 bDelay_50us(); /延时 50usreturn b; /返回获取的状态 bunsigned char readByte()/读取一个字节unsigned int i;unsigned char j, dat;dat = 0;for(i=0; i 1);return dat;void write
16、Byte(unsigned char dat)/写一个字节 datunsigned char j;unsigned char b;gpio_init(PORTA|(1), OUT, High); /初始化端口 A 的 1 号引脚,定义为输出一个高电平for(j = 0; j = 1; /dat 右移 1 位后赋给 datif(b) /如果 b=1 写入 1,否则写 0gpio_set(PORTA|(1),Low); /设置 A 端口的 1 号引脚的状态为低Delay_2us(); /延时 2usgpio_set(PORTA|(1),High); /设置 A 端口的 1 号引脚的状态为高Dela
17、y_60us(); /延时 60uselsegpio_set(PORTA|(1),Low); /设置 A 端口的 1 号引脚的状态为低昆明学院信息技术学院课程设计(大作业)报告11Delay_60us(); /延时 60usgpio_set(PORTA|(1),High); /设置 A 端口的 1 号引脚的状态为高Delay_2us(); /延时 2usvoid sendChangeCmd() /开始温度转换DS18B20_Rset(); /复位Delay_ms(1); /延 时 1mswriteByte(0xcc); /跳过 ROM,直接向 DS18B20发温度 转换命令writeByte(
18、0x44); /启动 DS18B20进行温度转换void sendReadCmd()DS18B20_Rset();Delay_ms(1);writeByte(0xcc); /跳过 ROM,直接向 DS18B20发温度转换命令writeByte(0xbe); /读内部数据short getTmpValue()unsigned int tmpvalue;int value=0;unsigned char low, high;昆明学院信息技术学院课程设计(大作业)报告12sendChangeCmd();/开始转换指令Delay_ms(1000);/温度 转换时间需要 750ms 以上sendRead
19、Cmd(); /发送读数据low = readByte();high = readByte();tmpvalue = high;tmpvalue = 8; /左移八位tmpvalue |= low;value = (float)tmpvalue* 0.625;return value;ds18b20.h#ifndef SOURCE_DS18B20_H_#define SOURCE_DS18B20_H_#include “includes.h“ /包含总头文件#include “gpio.h“#define High 1#define Low 0#define OUT 1#define IN 0
20、void DS18B20_Rset();/复位昆明学院信息技术学院课程设计(大作业)报告13unsigned char readBit();/读取一个位unsigned char readByte();/读取一个字节void writeByte(unsigned char dat);/写一个字节 datvoid sendChangeCmd(); /开始温度转换void sendReadCmd();short getTmpValue();void Delay_50us();#endif /* 08_SOURCE_DS18B20_H_ */初始化端口 A的 1号引脚,定义为输出一个高电平,设置 A
21、端口的 1号引脚状态为低,初始化端口 A的 1号引脚,定义状态为低,赋值后进行复位,跳过 ROM直接向 DS18B20发送转换命令,读内部数据,再次复位,开始温度转换。6、总结通过此次传感器原理及应用课程设计,我根据传感器原理这门科目很好的应用起来完成,在课程设计期间,主要是运用 DS18B20来完成实验,KL25 微秒级延时,编写程序代码并进行修改,程序代码主要 0是低电平,1 是高电平,每次读要复位,读设置为输入,写设置为输出。编写完成程序代码运行中出现了好多个错误和警告,与同学讨论之后改正了几个错误但是还存在错误没有修改完,后面又问了其他同学加上自己查阅资料,找出了错误的出处是由于引脚在
22、程序中填写错误,有的引脚是不可以用的。在这次课程设计中让我更加的掌握了这门课程中平时所没有掌握的知识,并且能够把传感器原理应用在实验中是很好的,把这门课程所学的知识点相运用起来,也提高了我的知识领域。结束了一周的课程设计,也让我从课程设计中学到了一些在平时学习中所没有掌握住的知识点,而且在课程设计期间也去图书馆查阅了大量的资料,去昆明学院信息技术学院课程设计(大作业)报告14了解更多关于温度传感器 DS18B20的知识。课程设计也教会我们做事情一定要坚持,就比如在课程设计的时候,我刚开始的程序代码是运行不出来的,经过几天的修改总算可以运行了,和同学讨论也是避免不了的。7、参考文献1李广弟.单片机基础. 北京:北京航空航天大学出版社,199.2韩颖; Proteus在单片机技术实训教学中的应用J;中国科教创新导刊;2008年 31期.3 谭浩强. C 程序设计教程M. 清华大学出版社,2007.4 余孟尝. 数字电子技术基础M.高等教育出版社.