传感器课程设计1Word格式文档下载.docx
- 文档编号:17016097
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:11
- 大小:117.44KB
传感器课程设计1Word格式文档下载.docx
《传感器课程设计1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《传感器课程设计1Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
DS18B20的写时序,对于DS18B20的写时序仍然分为写0时序和写1时序两个过程,对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单线。
初始化端口A的1号引脚,定义为输出一个高电平,设置A端口的1号引脚状态为低,进行复位,发送读数据。
三、总体设计及分析
1、总体内容
DS18B20有三只引脚:
DQ数字信号输入/输出端,和VDD电源输入端,GND接地。
提及到温度的检测,我们首先会考虑传统的测温元件有热电偶和热电阻,而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试也复杂,制作成本高。
因此,本数字温度计设计采用智能温度传感器DS18B20作为检测元件,测温范围为-55°
C至+125°
C,最大分辨率可达0.0625°
C。
DS18B20可以直接读出被测量的温度值,而采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。
通过KL25芯片,面包板,温度传感器DS18B20,导线等将电路连接起来,温度传感器DS18B20采集到的温度通过PC机界面显示出来。
2、仿真图及原理图
图1DS18B20仿真图
DS18B20有三只引脚:
图2DS18B20的读写时序图
(1)DS18B20写逻辑的步骤:
写逻辑0,单片机拉低电平大约10-15us,单片机持续拉低电平大约20-45us的时间,释放总线;
写逻辑1,单片机拉低电平大约10-15us,单片机拉高电平大约20-45us的时间,释放总线。
(2)DS18B20读逻辑的步骤:
读逻辑0,在读取的时候单片机拉低电平大约1us,单片机释放总线,然后读取总线电平,这时候DS18B20会拉低电平,读取电平过后,延迟大约40-45微妙;
读逻辑1,在读取的时候单片机拉低电平大约1us,单片机释放总线,然后读取总线电平,这时候DS18B20会拉高电平,读取电平过后,延迟大约40-45微妙。
3、工作原理
我们使用单点,单线总线上仅有一个DS18B20存在,不需要刻意读取ROM里面的序列号来,然后在匹配DS18B20而是更直接的跳过ROM指令,然后直接执行DS18B20功能指令。
DS18B20复位,在,某种意义上就是一次访问DS18B20的开始,也就是开始信号。
ROM指令,就是访问,搜索匹配,DS18B20的64位序列号的动作。
使能Systick定时器(即向控制及状态寄存器的第0位写1),开始延时。
监控控制及状态寄存器的16位,如该位为1,失能Systick定时器(即向控制及状态寄存器的第0位写0),完成延时。
4、串口测试结果
图3串口测试图
PC机界面显示:
步骤一、将芯片串口引脚与电脑连接,给芯片通电,然后选择串口,波特率后按打开串口按钮。
步骤二、按下采集温度按钮之后开始采集芯片温度。
步骤三、显示十进制温度
四、实验器材
1、器件:
传感器DS18B20、电阻、面包板、KL25芯片、若干导线。
2、DS18B20的特点:
DS18B20是单线数字温度传感器,它的体积更小,适用电压更宽,更经济。
DS18B20的性能特点如下:
(1)独特的单线接口仅需要一个端口引脚进行通信;
(2)多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
(3)无须外部器件;
(4)可通过数据线供电,电压范围为3.0-5.5V;
(5)零待机功耗;
(6)温度以9或12位数字;
(7)用户可定义报警设置。
五、程序代码及分析
main.c
#include"
includes.h"
//包含总头文件
intmain(void)
{
unsignedinti=0;
unsignedintt=0;
unsignedinte=0;
DISABLE_INTERRUPTS;
uart_init(UART_1,BUSCLK,9600);
Uart_enable_re_i(UART_1);
//enable_pit_int();
ENABLE_INTERRUPTS;
//主循环开始
for(;
;
)//一个死循环
{
i=getTmpValue();
//获取温度函数调用
t=i/10;
//表示整数
e=i%10;
//表示小数
//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
//主循环结束==============================================================
return0;
}
ds18b20.c
ds18b20.h"
delay.h"
voidDS18B20_Rset()//复位
gpio_init(PORTA|
(1),OUT,High);
//初始化端口A的1号引脚,定义为输出一个高电平
gpio_set(PORTA|
(1),Low);
//设置A端口的1号引脚的状态为低
Delay_750us();
//延时750us
gpio_set(PORTA|
(1),High);
//设置A端口的1号引脚的状态为高
Delay_15us();
////延时15us
}
unsignedcharreadBit()//读取一个位
unsignedcharb;
//初始化端口A的1号引脚定义为输出一个高电平
Delay_2us();
//延时2us
gpio_init(PORTA|
(1),IN,High);
Delay_12us();
//延时12s
b=gpio_get(PORTA|
(1));
//获取A端口的1号引脚的状态赋值给b
Delay_50us();
//延时50us
returnb;
//返回获取的状态b
unsignedcharreadByte()//读取一个字节
unsignedinti;
unsignedcharj,dat;
dat=0;
for(i=0;
i<
8;
i++)
j=readBit();
dat=(j<
<
7)|(dat>
>
1);
returndat;
voidwriteByte(unsignedchardat)//写一个字节dat
unsignedcharj;
//初始化端口A的1号引脚,定义为输出一个高电平
for(j=0;
j<
8;
j++)
b=dat&
0x01;
dat>
=1;
//dat右移1位后赋给dat
if(b)//如果b=1写入1,否则写0
Delay_60us();
//延时60us
else
voidsendChangeCmd()//开始温度转换
DS18B20_Rset();
//复位
Delay_ms
(1);
//延时1ms
writeByte(0xcc);
//跳过ROM,直接向DS18B20发温度转换命令
writeByte(0x44);
//启动DS18B20进行温度转换
voidsendReadCmd()
writeByte(0xbe);
//读内部数据
shortgetTmpValue()
unsignedinttmpvalue;
intvalue=0;
unsignedcharlow,high;
sendChangeCmd();
//开始转换指令
Delay_ms(1000);
//温度转换时间需要750ms以上
sendReadCmd();
//发送读数据
low=readByte();
high=readByte();
tmpvalue=high;
tmpvalue<
=8;
//左移八位
tmpvalue|=low;
value=(float)tmpvalue*0.625;
returnvalue;
ds18b20.h
#ifndefSOURCE_DS18B20_H_
#defineSOURCE_DS18B20_H_
gpio.h"
#defineHigh1
#defineLow0
#defineOUT1
#defineIN0
voidDS18B20_Rset();
//复位
unsignedcharreadBit();
//读取一个位
unsignedcharreadByte();
//读取一个字节
voidwriteByte(unsignedchardat);
//写一个字节dat
voidsendChangeCmd();
//开始温度转换
voidsendReadCmd();
shortgetTmpValue();
voidDelay_50us();
#endif/*08_SOURCE_DS18B20_H_*/
初始化端口A的1号引脚,定义为输出一个高电平,设置A端口的1号引脚状态为低,初始化端口A的1号引脚,定义状态为低,赋值后进行复位,跳过ROM直接向DS18B20发送转换命令,读内部数据,再次复位,开始温度转换。
六、总结
通过此次传感器原理及应用课程设计,我根据传感器原理这门科目很好的应用起来完成,在课程设计期间,主要是运用DS18B20来完成实验,KL25微秒级延时,编写程序代码并进行修改,程序代码主要0是低电平,1是高电平,每次读要复位,读设置为输入,写设置为输出。
编写完成程序代码运行中出现了好多个错误和警告,与同学讨论之后改正了几个错误但是还存在错误没有修改完,后面又问了其他同学加上自己查阅资料,找出了错误的出处是由于引脚在程序中填写错误,有的引脚是不可以用的。
在这次课程设计中让我更加的掌握了这门课程中平时所没有掌握的知识,并且能够把传感器原理应用在实验中是很好的,把这门课程所学的知识点相运用起来,也提高了我的知识领域。
结束了一周的课程设计,也让我从课程设计中学到了一些在平时学习中所没有掌握住的知识点,而且在课程设计期间也去图书馆查阅了大量的资料,去了解更多关于温度传感器DS18B20的知识。
课程设计也教会我们做事情一定要坚持,就比如在课程设计的时候,我刚开始的程序代码是运行不出来的,经过几天的修改总算可以运行了,和同学讨论也是避免不了的。
七、参考文献
[1]李广弟.单片机基础.北京:
北京航空航天大学出版社,199.
[2]韩颖;
Proteus在单片机技术实训教学中的应用[J];
中国科教创新导刊;
2008年31期.
[3]谭浩强.C程序设计教程[M].清华大学出版社,2007.
[4]余孟尝.数字电子技术基础[M].高等教育出版社.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 传感器 课程设计