DS18B20温度计制作详细全过程

合集下载

使用DS18B20制作电子温度计

使用DS18B20制作电子温度计

使用DS18B20制作电子温度计——中北大学:马政贵本制作中使用单总线数字温度传感器DS18B20进行温度的测定,并通过51单片机控制1602液晶进行显示。

制作好的电子温度计如下图所示(显示当前温度为20.5摄氏度):第一部分:DS18B20的使用先介绍一下单总线的特点:单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。

单总线通常要求外接一个约为 4.7K —10K 的上拉电阻,这样,当总线闲置时其状态为高电平。

再介绍一下DS18B20的特点:( 1 )采用单总线的接口方式,与微处理器连接时,仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。

单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。

( 2 )测量温度范围宽,测量精度高: DS18B20 的测量范围为 -55 ℃ ~+ 125 ℃ ; 在 -10~+ 85°C 范围内,精度为 ± 0.5°C 。

( 3 )在使用中不需要任何外围元件。

( 4 )支持多点组网功能:多个 DS18B20 可以并联在惟一的单线上,实现多点测温。

( 5 )供电方式灵活:DS18B20 可以通过内部寄生电路从数据线上获取电源。

因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。

( 6 )测量参数可配置 DS18B20 的测量分辨率可通过程序设定 9~12 位。

( 7 )负压特性电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。

( 8 )掉电保护功能 DS18B20 内部含有 EEPROM ,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。

DS18B20 具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。

DS18B20数字温度计的设计与实现

DS18B20数字温度计的设计与实现

DS18B20数字温度计的设计与实现一、实验目的1.了解DS18B20数字式温度传感器的工作原理。

2.利用DS18B20数字式温度传感器和微机实验平台实现数字温度计。

二、实验内容与要求采用数字式温度传感器为检测器件,进行单点温度检测。

用数码管直接显示温度值,微机系统作为数字温度计的控制系统。

1.基本要求:(1)检测的温度范围:0℃~100℃,检测分辨率 0.5℃。

(2)用4位数码管来显示温度值。

(3)超过警戒值(自己定义)要报警提示。

2.提高要求(1)扩展温度范围。

(2)增加检测点的个数,实现多点温度检测。

三、设计报告要求1.设计目的和内容2.总体设计3.硬件设计:原理图(接线图)及简要说明4.软件设计框图及程序清单5.设计结果和体会(包括遇到的问题及解决的方法)四、数字温度传感器DS18B20由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。

它具有体积小,接口方便,传输距离远等特点。

1.DS18B20性能特点DS18B20的性能特点:①采用单总线专用技术,既可通过串行口线,也可通过其它I/O 口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正的只读存储器ROM ,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源。

2. DS18B20内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发的温度报警触发器TH 和TL,高速暂存器。

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

64位ROM 结构图如图2所示。

不同的器件地址序列号不同。

DS18B20的管脚排列如图1所示。

#ds18b20可调温度控制器

#ds18b20可调温度控制器

自制可调温度控制器(附原理图和源程序>自制可调温度控制器近期我发现很多DIY或是电子爱好的朋友们比较关注电子温度控制器制作的文章,前面我也发过一篇AT89C2051控制的简单温度计制作的文章,但是因为电路比较简易,而且没有调温功能.应部分朋友的要求我在此转载一篇温正伟在无线电杂志上发表过的一款可以方便调节、设定温度的控制器。

1.功能介绍笔者设计的这一款温度控制器是使用仍是比较常用的DS18B20集成温度传感器,还是用七段数码管做显示,完成温度采集与处理控制的CPU仍是AT89C2051单片机,但该电路具有电路简单,制作起来也无需调试,安装好后就可以使用等方便DIY的优点。

该电路最大的特点是用可以直观方便的调节所要限定的温度值,温度值是用3个7段共阳极数码管显示的,上电后会显示当前的温度值,按设定键时会闪烁显示设定温度值,这时可以按上/下调节键调整设定温度值,再次按下设定键时返回当前温度显示同时会对设定温度值进行保存,这个设定值会保存在DS18B20中,掉电后也不会丢失,下次上电时,单片机会自动读入上次的温度设定值。

长按设定键为关闭显示和温控,再次按下时功能再次打开。

电路中还设计了一路继电器控制,程序中设定超出设定温度时继电器被驱动吸合。

2.元器件背景及选用表一是元器件列表。

在这个电路中关键的两个元器件分别是单片机AT89C2051和温度传感传感芯片DS18B20。

AT89C2051具有2K的可多次擦写的FLASH存储器,有15个I/O口,用于做一些小型的控制显示和数据采集系统是很好的选择,本制作中2051单片机除要完成数据采集、处理、控制和显示的任务外,还要完按键值的采集、处理。

如果要用常规的数字加模拟电路实现起来就相对困难多了。

DS18B20是DALLAS半导体公司<现属MAXIM公司)设计生产的单总线数字温度传感器,单总线也就是说只用一根I/O引线完成数据的输入输出功能,所以它的体积很小,而且电压适用范围在3-5.5V,封装形式除有SO/uSO的8PIN贴片式,还有更方便的三极管形式的TO-92封装<封装形式和引脚说明请看图一)。

18b20流程图

18b20流程图

写完8位数据?
数据右移
延时数微秒
结束
函数功能:从ds18b20读数据 函数名date>>=1;:readonechar 返回值:temp
开始
将数据线拉高,延时1微秒
将数据线拉低,延时1微秒
将数据线拉高,延时6微秒
数据右移
如果数据线=1,data和80H或,否则data和00H或
读完8位数据?
延时数微秒 返回读到的数据
将数据线拉高,延时6微秒
将数据线拉低,延时600微秒
Байду номын сангаас
释放数据线(拉高),延时30微秒
主机从数据线采样
延时数毫秒,返回采样值
函数功能:向ds18b20写数据 函数名:writeonechar 形式参数:dat
开始
将数据线拉高,延时1微秒
将数据线拉低(启动写功能)
将数据最低位写入数据线,延时30微秒
释放数据线,延时数微秒
以下是DS18b20的流程图
时序
• 1.首先启动 :打开测温功能(1.初始化2. 命令字) • 2.调用数值 :告诉18b20调温度值(0xbe) • 3.读温度 跳过rom (0xcc) 温度变换 (0x44)
函数功能:18b20的初始化 函数名:init-ds18b20 返回值:falg 开始

温度报警器ds18b20制作PPT

温度报警器ds18b20制作PPT

74HC373




型号 tPd PD 54S373/74S373 7ns 525mW 54LS373/74LS373 17ns 120mW 373 的输出端 O0~O7 可直接与总线相连。 当三态允许控制端 OE 为低电平时,O0~O7 为正常逻辑状态,可用 来驱动负载或总线。 当 OE 为高电平时,O0~O7 呈高阻态,即不驱动总线,也不为总线 的负载,但 锁存器内部的逻辑操作不受影响。 当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平 时,O 被锁存在已建立的数据电平。 当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度 被改善 400mV。
1地 GND 2触发 3输出 4复位 5控制电压 6门限(阈值) 7放电 8电源电压Vcc
ULN2003应用电路及中文资料
概述 功率电子电路大多要求具有大电流输出能力, 以便于驱动各种类型的负载。功率驱动电路 是功率电子设备输出电路的一个重要组成部 分。

输入回路的电阻有差别,ULN2003是2.7k,简单讲2003适 5v,驱动灌入电流:500mA
ne555的作用介绍
Pin 1 (接地) -地线(或共同接地) ,通常被连接到电路共 同接地。 Pin 2 (触发点) -这个脚位是触发NE555使其启动它的时间 周期。触发信号上缘电压须大于2/3 VCC,下缘须低于1/3 VCC 。 Pin 3 (输出) -当时间周期开始555的输出输出脚位,移至 比电源电压少1.7伏的高电位。周期的结束输出回到O伏左右的 低电位。于高电位时的最大输出电流大约200 mA 。 Pin 4 (重置) -一个低逻辑电位送至这个脚位时会重置定时 器和使输出回到一个低电位。它通常被接到正电源或忽略不用。 Pin 5 (控制) -这个接脚准许由外部电压改变触发和闸限电 压。当计时器经营在稳定或振荡的运作方式下,这输入能用来改 变或调整输出频率。 Pin 6 (重置锁定) - Pin 6重置锁定并使输出呈低态。当这 个接脚的电压从1/3 VCC电压以下移至2/3 VCC以上时启动这个 动作。 Pin 7 (放电) -这个接脚和主要的输出接脚有相同的电流输 出能力,当输出为ON时为LOW,对地为低阻抗,当输出为OFF时 为HIGH,对地为高阻抗。 Pin 8 (V +) -这是555个计时器IC的正电源电压端。供应电 压的范围是+4.5伏特(最小值)至+16伏特(最大值)。

DS18B20数字温度计的设计的演示稿精品PPT课件

DS18B20数字温度计的设计的演示稿精品PPT课件

(a) 寄生电源工作方式
(b) 外接电源工作方式
7. 结 论
本设计以智能集成温度传感DS18B20为例, 介绍了基DS18B20传感器的数字温度计的设计, 该设计适用于人们的日常生活及环境温度不高 于125 ℃的温度的检测与控制。
以DS18B20温度传感器设计的数字温度计线 路简单、硬件少、成本低廉、软件设计简单等 优点,有着广阔的应用前景。尤其是其具有完 善的单总线通信协议,无需复杂、繁琐的布线, 只需3 根连线就能很容易地组成多点测温系统, 因此在工农业生产和科学研究中有着广阔的应 用前景。
设计任务及具体要求
一、设计任务: 设计一个以单片机为核心的温度测量系统 。
二、 具体要求: (1)测量温度值精度为±1℃。 (2)系统允许的误差范围为1℃以内。 (3)系统可由用户预设温度值,测温范围为-55 ℃ ~+125℃。 (4)超出预置值时系统会自动报警,即发光二极管 亮。 (5)系统具有数码显示功能,能实时显示设定温度 值和测得的实际温度值。
按键显示流程图
结论
DS18B20
设计简述
人们生活与环境温度息息相关,在工业生产过程中 需要实时测量温度,在工业生产中也离不开温度的测 量,因此研究温度的测量方法和控制具有重要的意义。
测量温度的关键是温度传感器,温度传感器的发展 经历了3个阶段:传统的分立式温度传感器、模拟集 成温度传感器、智能集成温度传感器。目前,国际上 新型温度传感器正从模拟式向数字式、从集成化向智 能化、网络化的方向发展。在此以智能集成温度传感 器DS18B20为例 ,介绍DS18B20数字温度计的设计。
表1
段名称 a b c d e f g dp
I/0 口名称 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

DS18B20工作过程及时序

DS18B20工作过程及时序

DS18B20工作过程及时序DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。

高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。

初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。

初始时,计数器1预置的是与-55℃DS18B20工作过程及时序DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。

高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。

初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。

初始时,计数器1预置的是与-55℃相对应的一个预置值。

以后计数器1每一个循环的预置数都由斜率累加器提供。

为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。

计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。

DS18B20内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位。

在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25℃进行比较,若低于0.25℃,温度寄存器的最低位就置0;若高于0.25℃,最低位就置1;若高于0.75℃时,温度寄存器的最低位就进位然后置0。

这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最后位代表0.5℃,四舍五入最大量化误差为±,即0.25℃。

温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。

测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。

ds18b20程序设计傻瓜式讲解

ds18b20程序设计傻瓜式讲解

ds18b20程序设计傻瓜式讲解
DS18B20 是一款数字温度传感器,可以直接读出被测温度,并采用 9 位数字量串行输出。

下面是一个简单的 DS18B20 程序设计讲解:
1. 初始化
在 DS18B20 通信过程中,首先需要初始化数据线,即将其置为高电平。

在初始化时,需要持续至少 480 微秒的高电平。

2. 跳过 ROM
在 DS18B20 中,每个传感器都有一个唯一的 ROM 序列号,可以通过跳过ROM 操作来避免对 ROM 进行操作。

具体操作是先发出一个低电平,然后持续至少 60 微秒的高电平。

3. 发送命令
在跳过 ROM 后,需要向传感器发送命令。

常用的命令有温度转换命令和读取温度命令。

温度转换命令是 0x44,读取温度命令是 0xBE。

4. 读取数据
在发送命令后,需要等待传感器响应。

传感器响应的标志是数据线上的低电平。

在低电平持续约 60-240 微秒后,数据线将变为高电平,此时可以开始读取数据。

每次读取一位数据后,需要将数据线置为低电平,等待传感器响应。

5. 数据解析
DS18B20 的数据由 9 位数字量组成,其中最高位是符号位。

如果最高位为0,则表示温度为正数;如果最高位为 1,则表示温度为负数。

其余 8 位为温度值,可以通过一定的计算公式将其转换为实际温度值。

以上就是 DS18B20 的程序设计流程。

需要注意的是,在实际应用中,还需要考虑数据传输的校验、错误处理等问题。

DS18B20温度计精简设计

DS18B20温度计精简设计

DS18B20温度计精简设计受杜洋老师MINI48定时器制作启发,制作了本精简温度计。

材料:如下图所示DS18B20温度传感器、STC12C5A60S2单片机、40针插座一个、共阳4联排LED、12Mhz晶振、30p电容(2个)、电源接头、导线、热缩套管。

另外用到AB胶图中没有列出。

制作注意点:1、把40针插座靠近单片机电源口那个地方剪掉,便于安装电源插座,如下图显示,可以在电源座接头引线的位置先把插针取消,便于焊接,免除不必要的麻烦。

设计好位置之后,把电源座用AB胶粘在CPU背面。

2、晶振、电容焊接时候,注意检查不要有短路电路图源程序下列程序也是用网上的程序进行修改,主要改动部分是显示输出部分,而温度转换是采用的查表法(具体原理还没有看懂),但该程序经过编译,100%通过。

#include < STC12C5A60S2.h >#include < intrins.h >#define uchar unsigned char#define uint unsigned intbit presence ;//****************************************************************************************** *********//sbit DQ = P1^6 ; //定义DS18B20端口DQsbit LED_A =P4 ^ 4; //设置LED点阵屏连接的I/O口sbit LED_B =P0 ^ 6; //设置LED点阵屏连接的I/O口sbit LED_C =P3 ^ 0; //设置LED点阵屏连接的I/O口sbit LED_D =P3 ^ 2; //设置LED点阵屏连接的I/O口sbit LED_E =P3 ^ 3; //设置LED点阵屏连接的I/O口sbit LED_F =P4 ^ 5; //设置LED点阵屏连接的I/O口sbit LED_G =P4 ^ 7; //设置LED点阵屏连接的I/O口sbit LED_DP =P3 ^ 1; //设置LED点阵屏连接的I/O口sbit LED1= P2^7 ; //定义LED数码管位脚sbit LED2= P4^6 ;sbit LED3= P0^7 ;sbit LED4= P1^7 ;//****************************************************************************************** *********//unsigned char data temp_data[2] = {0x00,0x00} ;unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00} ;unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09} ;unsigned char code mytab[4] = {0xF9,0xB0,0x92,0x99} ;//纯粹用来测试,可删除//****************************************************************************************** *********//const uchar tab[]={ /* 根据共阴极字型编码表获取0~9,A~B字型代码*/ 0x3f,0x06,0x5b,0x4f,//0~30x66,0x6D,0x7D,0x07,//4~70x7F,0x6F,0x77,0x7C,//8~b0x39,0x5E,0x79,0x71,//c~f0x00//mie};//****************************************************************************************** *********//const uchar tab1[]={ /* 根据共阳极字型编码表获取0~9,A~B字型代码*/ 0xC0,0xF9,0xA4,0xB0,//0~30x99,0x92,0x82,0xF8,//4~70x80,0x90,0x88,0x83,//8~b0xC6,0xA1,0x86,0x8E,//c~f0xff//mie};#define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ;/*******************************************************************/void delay1(int ms){unsigned char y ;while(ms--){for(y = 0 ; y<250 ; y++){_nop_() ;_nop_() ;_nop_() ;_nop_() ;}}}/******************************************************************//*us级延时函数*//*******************************************************************/void Delay(unsigned int num) //延时6us,误差0us{unsigned char a;while(num--!=0){for(a=15;a>0;a--);}}/*void Delay(unsigned int num){while( --num ) ;}*//******************************************************************************************* **/void PUTLED (unsigned char d){ //LED段输入unsigned char i;i = d & 0x01;if(i == 0x00){ LED_A = 0;}i = d & 0x02;if(i == 0x00){ LED_B = 0;}i = d & 0x04;if(i == 0x00){ LED_C = 0;}i = d & 0x08;if(i == 0x00){ LED_D = 0;}i = d & 0x10;if(i == 0x00){ LED_E = 0;}i = d & 0x20;if(i == 0x00){ LED_F = 0;}i = d & 0x40;if(i == 0x00){ LED_G = 0;}i = d & 0x80;if(i == 0x00){ LED_DP = 0;}}/*******************************************************************/void dis_off(void){LED_A =1; //设置LED点阵屏连接的I/O口LED_B =1; //设置LED点阵屏连接的I/O口LED_C =1; //设置LED点阵屏连接的I/O口LED_D =1; //设置LED点阵屏连接的I/O口LED_E =1; //设置LED点阵屏连接的I/O口LED_F =1; //设置LED点阵屏连接的I/O口LED_G =1; //设置LED点阵屏连接的I/O口LED_DP =1; //设置LED点阵屏连接的I/O口LED1= 0 ;LED2= 0;LED3=0 ;LED4= 0 ;}/*******************************************************************/ void displayLED(void){dis_off();PUTLED(tab1[display[3]]);//显示百位LED1=1;Delay(150);dis_off();PUTLED(tab1[display[2]]);//显示十位LED2=1;Delay(150);dis_off();PUTLED(0x7f&tab1[display[1]]);//显示个位和小数点LED3=1;Delay(150);dis_off();PUTLED(tab1[display[0]]);//显示小数位LED4=1;Delay(150);dis_off();}/*******************************************************************/ /*初始化ds1820 */ /*******************************************************************/ Init_DS18B20(void){DQ = 1 ; //DQ复位Delay(8) ; //稍做延时DQ = 0 ; //单片机将DQ拉低Delay(90) ; //精确延时大于480usDQ = 1 ; //拉高总线Delay(8) ;presence = DQ ; //如果=0则初始化成功=1则初始化失败Delay(100) ;DQ = 1 ;return(presence) ; //返回信号,0=presence,1= no presence}/* 读一个字节*//*******************************************************************/ ReadOneChar(void){unsigned char i = 0 ;unsigned char dat = 0 ;for (i = 8 ; i > 0 ; i--){DQ = 0 ; // 给脉冲信号dat >>= 1 ;DQ = 1 ; // 给脉冲信号if(DQ)dat |= 0x80 ;Delay(4) ;}return (dat) ;}/* 写一个字节*//*******************************************************************/ WriteOneChar(unsigned char dat){unsigned char i = 0 ;for (i = 8 ; i > 0 ; i--){DQ = 0 ;DQ = dat&0x01 ;Delay(5) ;DQ = 1 ;dat>>=1 ;}}/* 读取温度*//*******************************************************************/ Read_Temperature(void){Init_DS18B20() ;WriteOneChar(0xCC) ; // 跳过读序号列号的操作WriteOneChar(0x44) ; // 启动温度转换Init_DS18B20() ;WriteOneChar(0xCC) ; //跳过读序号列号的操作WriteOneChar(0xBE) ; //读取温度寄存器temp_data[0] = ReadOneChar() ; //温度低8位temp_data[1] = ReadOneChar() ; //温度高8位}/* 数据转换与温度显示*/ /*******************************************************************/ Disp_Temperature(){display[4]=temp_data[0]&0x0f ;display[0]=ditab[display[4]] ; //查表得小数位的值display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;display[3]=display[4]/100 ;display[1]=display[4]%100 ;display[2]=display[1]/10 ;display[1]=display[1]%10 ;if(display[3]==0x00) //高位为0,不显示{display[3]=16 ;if(display[2]==0x00) //次高位为0,不显示display[2]=16 ;}}/* 主函数*//************************************/void main(){ P0M1=0x00;P0M0=0x80;P1M1=0x00;P1M0=0x80;P2M1=0x00;P2M0=0x80;P4M1=0x00;P4M0=0x40;P4SW = 0xff; //启动P4接口while(1){Read_Temperature() ;Disp_Temperature() ;displayLED();}}。

DS18B20温度计制作全过程

DS18B20温度计制作全过程

DS18B20温度计制作全过程(转载请注明出处,谢谢)元件盒一直躺着几只DS18B20,从没试过,决定用它做个电子温度计,说干就干......1、构思Mega8做大脑、小塑料盒做外壳、3位LED数码管显示、废弃手机电池做电源、线路板热转印制作、设2个开关(1个按键式、1个拨动式可常开)、RS232升级程序。

先想这些吧,开始干了。

2、画电路出图电路原理图很简单,很快用PROTEL99SE画完;根据小塑料盒大小设计PCB板,布好线,这步也不复杂。

裁好热转印纸,准备出图了,我喜欢打印时选择"Show Holes",这样在焊盘上就有孔。

用我刚买的HP3050Z一体机,那天逛科技市场,看了感觉不错就搬回来了,从没用它打过转印纸,还不知道效果呢。

......图出来了,还不错!比较满意。

3、制作线路板①找块单面敷铜板, 按合适尺寸裁好,用很细很细的沙纸打磨光亮,冲洗干净,吹干。

千万别省事,一定要干净,否则转印效果不好。

也可以用稀三氯化铁擦涂一下,能提高转印效果。

②对好位置,将打好的热转印 纸盖到敷铜板上,用不干胶粘到平整的耐热材料上,强烈建议别直接放在你家的红木写字台上,我用的是铺剩的复合地板。

用电熨斗进行转印,慢慢移动,使图及板受热均匀,尤其是边缘部分,要特别照顾一下。

力量和时间我全是靠经验,大概20秒左右,稍用力。

③加热后,纸与板粘在一起了,很烫,一定小心,别烫了你的小手。

扔到洗手池里,用凉水降温,我实在等不及它自然冷却。

④板子凉了,从一边轻轻撕下转印纸,看看效果吧,很不错!是10Mil的线啊,没断一根。

⑤扔到三氯化铁熔液里腐蚀。

要想速度快,最好是热熔液+搅拌+毛刷轻刷。

应该好了吧,看看......⑥洗净炭粉。

你们都是用什么洗啊,我用汽油,气味大点,但非常好用,用纸巾蘸一点就擦干净了,擦后用肥皂洗一下板子。

什么?你没有汽油,这好办,拿个钢钉,拿把锤子,拿个瓶子,趁没人的时候到你家楼下找辆底盘高点的车,爬到车底下,在油箱上凿个洞,汽油就流出来了,接汽油的时候千万别抽烟,切记。

ds18b20工作原理

ds18b20工作原理

ds18b20工作原理1. 简介DS18B20是一种数字温度传感器,广泛应用于各种温度测量领域。

它以数字方式输出温度数据,具有精确度高、响应速度快、使用方便等特点,因此备受欢迎。

本文将详细介绍DS18B20的工作原理。

2. 传感器结构DS18B20传感器由一个温度传感单元、一个模数转换器和一个序列控制器组成。

温度传感单元采用特殊材料制成,它对温度变化非常敏感。

当温度发生变化时,温度传感单元的电阻也会发生变化。

模数转换器负责将温度传感单元的电阻变化转换为数字信号。

它能够准确测量电阻变化并将其表示为数字值。

序列控制器负责控制传感器的工作状态。

它通过传输协议与主控设备进行通信,并接收主控设备发送的指令。

3. 工作原理DS18B20使用单线制数字信号传输方式。

传感器内部有一个独特的序列号标识,主控设备可以通过这个序列号对传感器进行识别和通信。

工作过程如下:步骤1:主控设备发送复位脉冲,使DS18B20进入准备接收命令的状态。

步骤2:主控设备发送读写脉冲,将指令发送给DS18B20。

步骤3:DS18B20接收到指令后,进行相应的处理。

如果是读取温度数据的指令,则将温度数据转换为数字信号,并通过数据传输线发送给主控设备。

步骤4:主控设备接收到DS18B20发送的温度数据后,进行进一步处理和显示。

4. 优点DS18B20传感器具有以下几个优点:4.1 高精度:DS18B20能够提供高精度的温度测量结果,通常可以达到0.5℃的精度。

4.2 响应速度快:DS18B20具有快速响应的特点,能够在很短的时间内提供准确的温度测量结果。

4.3 数字输出:DS18B20以数字信号的方式输出温度数据,无需额外的模数转换器,方便与数字系统集成。

4.4 单线制:DS18B20采用单线制数字信号传输方式,减少了接口数量,节省了成本和空间。

5. 应用领域DS18B20传感器广泛应用于各种温度测量领域,如:5.1 家电领域:DS18B20被应用于空调、冰箱、洗衣机等家电产品中,用于温度控制和保护。

实验八 DS18B20数字温度显示实验

实验八    DS18B20数字温度显示实验

D S18B20数字温度显示实验1.实验目的掌握一线式数字温度传感器的使用,了解单总线的工作方式。

掌握数字温度传感器DS18B20的工作原理及温度测量方法。

2.实验原理及内容DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃。

主机控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。

必须先启动DS18B20开始转换,再读出温度转换值。

本程序仅挂接一个芯片,使用默认的12位转换精度,外接供电电源,读取的温度值高位字节送WDMSB单元,低位字节送WDLSB 单元,再按照温度值字节的表示格式及其符号位,经过简单的变换即可得到实际温度值。

图118B20封装引脚 图2相关原理接线方法:1.利用S T C89C51实验板上的I R F1插孔和排针,将D S18B20插入I R F1插孔,用一根单条数据线把D S18B20的2脚接到C P U部份的P3.0;2.用一条4P I N的排线,把7474的A B C D接到P0口的P0.0,P0.1,P0.2,0.3四个端口。

(即插入P0口的上半部份)。

3.用一条8P I N的排线。

把数码管译码部份的输出端接到数码管部份的数据口;4.用一条4P I N的排线,把74138的输入端接到P0口的P0.4,P0.5,P0.6,07四个端口。

(即插入P0口的下半部份)。

5.用一条8P I N的排线。

把38译码部份的输出端接到数码管部份的显示位口。

在本系统中,为了简化程序, 采用了74L S47(数码管译码)74L S138(三八译码)。

即P0口的P0.0,P0.1,P0.2,P0.3四个端口接到74L S47进行硬件数码管译码,然后输出到数码管部分的数据口。

P0.4,P0.5,P.0.6三个端口接到74L S138进行38译码,然后输出到数码管的位控制。

DS18B20温度传感器流程图

DS18B20温度传感器流程图

Y
发温度转换 开始 命令
1 a1
1 a1
பைடு நூலகம்2 a2
3 a3
4 a4
5 b1
6 b2
7 b3
8 b4
2 b1
2 b1
5 b1
6 b2
7 b3
8 b4
开始
温度零 下?
Y
温度值取补码 置“-”标志
计算小数位温 度BCD码
N 置“+”标志
计算整数位温 度BCD码
结束
DS18B20
主控制器
AT89C2051
显示器 扫描驱动
预置 低温度系数振荡器
发DS18B20复位命令
发跳过ROM命令
CRC校验正确?
Y
发读取温度命令
移入温度暂存器 N
Y
读取操作,CRC校验 N
结束
9字节完?
温度子程序
64位ROM和单线接口 存缓速高
存储器与控制逻辑
温度传感器 温度触发器 TH 低温触发器 TL
配置寄存器 8位CRC发生器
1 a1
2 a2
3 a3
4 a4
1 a1
斜率累加器 减法计数器
计数比较器 预置
高温度系数振荡器
减到0
增加
减法计数器2
温度寄存器
停止
减到0
I/O C
Vdd
64位ROM和单线接口 存缓速高
存储器与控制逻辑
温度传感器 温度触发器 TH 低温触发器 TL
配置寄存器 8位CRC发生器
温度数据移入 显示寄存器
发DS18B20复位命令 发跳过ROM命令
发温度转换开始命令
十位数0?
Y
百位数0?

DS18B20的具体操作流程

DS18B20的具体操作流程

DS18B20的具体操作流程
一,DS18B20的初始化
(1)先将数据线置高电平“1”。

(2)延时(该时间要求的不是很严格,但是尽可能的短一点)
(3)数据线拉到低电平“0”。

(4)延时750微秒(该时间的时间范围可以从480到960微秒)。

(5)数据线拉到高电平“1”。

(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。

据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。

(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。

(8)将数据线再次拉高到高电平“1”后结束。

二,DS18B20的写操作
(1)数据线先置低电平“0”。

(2)延时确定的时间为15微秒。

(3)按从低位到高位的顺序发送字节(一次只发送一位)。

(4)延时时间为45微秒。

(5)将数据线拉到高电平。

(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。

(7)最后将数据线拉高。

三,DS18B20的读操作
(1)将数据线拉高“1”。

(2)延时2微秒。

(3)将数据线拉低“0”。

(4)延时15微秒。

(5)将数据线拉高“1”。

(6)延时15微秒。

(7)读数据线的状态得到1个状态位,并进行数据处理。

(8)延时30微秒。

51单片机DS18B20温度测量制作

51单片机DS18B20温度测量制作

51单片机DS18B20温度测量制作51单片机DS18B20温度测量制作(有程序电路)硬件原理图图 6 硬件原理图软件代码/************************************ ************************************* **//*DS18B20演示程序 *//*目标器件:AT89S51 *//*晶振:11.0592MHZ *//*编译环境:Keil 7.50A *//************************************ ************************************* **//********************************* 包含头文件********************************/#include <reg51.h>/******************************* 共阳LED 段码表*******************************/unsigned char codetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90};/********************************* 端口定义**********************************/sbit DQ=P3^3; // 数据传输线接单片机的相应的引脚/********************************* 定义全局变量******************************/unsigned char tempL=0; // 临时变量低位unsigned char tempH=0; // 临时变量高位float temperature; // 温度值/************************************ ************************************* ***函数功能 : 延时子程序出口参数 :************************************* ************************************* **/void delay(unsigned int k){unsigned int n;n=0;while(n < k){n++;}return;}/************************************ ************************************* ***函数功能 : 数码管扫描延时子程序出口参数 :************************************* ************************************* **/void delay1(void){int k;for(k=0;k<400;k++);}/************************************ ************************************* ***函数功能 : 数码管显示子程序入口参数 :k出口参数 :************************************* ************************************* **/void display(int k){P2=0xfe;P0=tab[k/1000];delay1();P2=0xfd;P0=tab[k%1000/100];delay1();P2=0xfb;P0=tab[k%100/10];delay1();P2=0xf7;P0=tab[k%10];delay1();P2=0xff;}/************************************ ************************************* ***函数功能 :DS18B20 初始化子程序入口参数 :出口参数 :************************************* ************************************* **/Init_DS18B20(void){unsigned char x=0;DQ=1; //DQ 先置高delay(8); // 延时DQ=0; // 发送复位脉冲delay(85); // 延时( >480ms)DQ=1; // 拉高数据线delay(14); // 等待( 15~60ms)}/************************************ ************************************* ***函数功能 : 向 DS18B20 读一字节数据入口参数 :出口参数 :dat************************************* ************************************* **/ReadOneChar(void){unsigned char i=0;unsigned char dat=0; for (i=8;i>0;i--) {DQ=1;delay(1);DQ=0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay(4);}return(dat);}/************************************ ************************************* ***函数功能 : 向 DS18B20 写一字节数据入口参数 :dat出口参数 :************************************* ************************************* **/WriteOneChar(unsigned char dat){unsigned char i=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat>>=1;}delay(4);}/************************************ ************************************* ***函数功能 : 向 DS18B20 读温度值入口参数 :出口参数 :temperature************************************* ************************************* **/ReadTemperature(void){Init_DS18B20(); // 初始化WriteOneChar(0xcc); // 跳过读序列号的操作WriteOneChar(0x44); // 启动温度转换delay(125); // 转换需要一点时间,延时Init_DS18B20(); // 初始化WriteOneChar(0xcc); // 跳过读序列号的操作WriteOneChar(0xbe); // 读温度寄存器(头两个值分别为温度的低位和高位)tempL=ReadOneChar(); // 读出温度的低位LSBtempH=ReadOneChar(); // 读出温度的高位MSB// 温度转换,把高低位做相应的运算转化为实际温度temperature=((tempH*256)+tempL)*0.062 5;delay(200);return(temperature);}/************************************ ************************************* ***函数功能 : 主程序入口参数 :出口参数 :************************************* ************************************* **/void main(){float i;while(1){i=ReadTemperature(); display(i);}}。

STM32制作DS18B20-温度传感器

STM32制作DS18B20-温度传感器

折腾了一晚上,才把DS18B20的驱动移植到STM32上来。

以前在51上使用过单个和多个连接的DS18B20,有现成的程序了,以为很快就能弄好,结果还是被卡住了,下面说下几个关键点吧:首先是延时的问题,STM32上若用软件延时的话不太好算时间,所以要么用定时器要么用SysTick这个定时器来完成延时的计算。

相比之下用SysTick来的简单方便点。

接着是STM32 IO脚的配置问题,因为51是双向的IO,所以作为输入输出都比较方便。

STM32的IO是准双向的IO,网上查了下资料,说将STM32的IO配置成开漏输出,然后外接上拉即可实现双向IO。

于是我也按规定做了,但调了老半天都不成功,是因为DS18B20没有响应的信号。

在烦躁之际只有试下将接DQ的IO分别拉低和拉高看能不能读入正确的信号。

结果果然是读入数据不对,原来我将IO配成开漏输出后相当然的以为读数据是用GPIO_ReadOutputDataBit(),这正是问题所在,后来将读入的函数改为GPIO_ReadInputDataBit()就OK了。

现在温度是现实出来了,但跟我家里那台德胜收音机上显示的温度相差2度,都不知道是哪个准了,改天再找个温度计验证下。

下面引用一段DS18B20的时序描述,写的很详细:DS18B20的控制流程根据DS18B20的通信协议,DS18B20只能作为从机,而单片机系统作为主机,单片机控制DS18B20完成一次温度转换必须经过3个步骤:复位、发送ROM指令、发送RAM指令。

每次对DS18B20的操作都要进行以上三个步骤。

复位过程为:单片机将数据线拉低至少480uS,然后释放数据线,等待15-60uS让DS18B20接收信号,DS18B20接收到信号后,会把数据线拉低60-240uS,主机检测到数据线被拉低后标识复位成功;发送ROM指令:ROM指令表示主机对系统上所接的全部DS18B20进行寻址,以确定对那一个DS18B20进行操作,或者是读取某个DS18B20的ROM序列号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DS18B20温度计制作详细全过程
发布: 2009-9-09 10:34 | 作者: 玲珑 | 查看: 200次
元件盒一直躺着几只DS18B20,从没试过,决定用它做个电子温度计,说干就干......
1、构思
Mega8做大脑、小塑料盒做外壳、3位LED数码管显示、废弃手机电池做电源、线路板热转印制作、设置2个开关(1个按键式、1个拨动式可常开)、RS232升级程序。

先想这些吧,开始干了。

2、画电路出图
电路原理图很简单,很快用PROTEL99SE画完;
根据小塑料盒大小设计PCB板,布好线,这步也不复杂。

裁好热转印纸,准备出图了,我喜欢打印时选择"Show Holes",这样在焊盘上就有孔。

用我刚买的HP3050Z一体机,那天逛科技市场,看了感觉不错就搬回来了,从没用它打过转印纸,还不知道效果呢。

......图出来了,还不错!比较满意。

3、制作线路板
①找块单面敷铜板,按合适尺寸裁好,用很细很细的沙纸打磨光亮,冲洗干净,吹干。

千万别省事,一定要干净,否则转印效果不好。

也可以用稀三氯化铁擦涂一下,能稍微提高转印效果。

②对好位置,将打好的热转印纸盖到敷铜板上,用不干胶粘到平整的耐热材料上,强烈建议别直接放在你家的红木写字台上,我用的是铺剩的复合地板。

用电熨斗进行转印,慢慢移动,使图及板受热均匀,尤其是边缘部分,要特别照顾一下。

力量和时间我全是靠经验,大概20秒左右,稍用力。

③加热后,纸与板粘在一起了,很烫,一定小心,别烫了你的小手手。

扔到洗手池里,用凉水降温,我实在等不及它自然冷却。

④板子凉了,从一边轻轻撕下转印纸,看看效果吧,很不错!是10Mil的线啊,没断一根。

⑤扔到三氯化铁熔液里腐蚀。

要想速度快,最好是热熔液+搅拌+毛刷轻刷。

应该好了吧,看看......
⑥洗净炭粉。

你们都是用什么洗啊,我用汽油,气味大点,但非常好用,用纸巾蘸一点就擦干净了,擦后用肥皂洗一下板子。

什么?你没有汽油,这好办,拿个钢钉,拿把锤子,拿个瓶子,趁没人的时候到你家楼下找辆底盘高点的车,爬到车底下,在油箱上凿个洞,汽油就流出来了,接汽油的时候千万别抽烟,切记。

接完汽油后,别忘了给人家油箱用什么东西堵上,以免漏光油耽误人家办急事。

(取油方法仅限于想象,请勿模仿,哈哈)
4、线路板钻孔,学学CNC
线路板手动钻孔是件麻烦事,特别是IC脚的排孔,往往钻不垂直钻不整齐。

今天试试用雕刻机自动钻孔,开始了......
①用PROTEL99SE将PCB输出PDF格式文件,分辨率设置为600DPI,如果你装了虚拟图形打印机,当然也可以直接输出BMP格式图像文件,我用的是PdfCreator虚拟打印机。

用PhotoShop CS2打开PDF文件,分辨率输入600DPI......
②处理图像
将图像水平翻转,将角上4个螺丝孔的焊盘染为另一种颜色,我将它染成了绿色,存为BMP格式文件。

③生成刀路文件
启动ArtCAM Pro 8.1,打开刚才处理好的BMP格式文件,不要使用快捷方式<通过图像产生模型>,否则调入的图像会转换为灰度,要使用菜单的[文件]-[打开]或打开文件按钮。

确定后,会蹦出模型尺寸设置对话框,设置为600DPI,单位毫米......
双击绿色焊盘,选择绿色图形,然后在对话框上点<关闭>......
在<助手>里的<矢量-位图>点<位图到矢量>小图标......
退出通过位图产生矢量对话框,点<接受>即可。

这时4个绿色焊盘会由虚线框住。

下面要生成刀路文件了。

在<刀具路径>的<二维刀具路径>里点击<钻孔>图标
在<钻孔>设置里,开始深度0,结束深度2.5,随便选择个尖刀,设置下切步距3,钻孔中心位于全部已选矢量,材料厚度3,起个名称叫“定位”吧,点击<现在>,再点<关闭>,在<刀具路径>框上方就出现了[定位]的名称,单击它变成蓝色,点击<保存刀具路径>......
选择Tryax格式,起个名字,还是叫“定位”吧,保存刀具路径文件。

******焊盘钻孔的刀具路径与以上方法相同,不再赘述******
④开始自动钻孔啦
启动MACH2,调入“定位的.tap”,我喜欢用诊断模式,可以输入XYZ值控制主轴位置,按<Alt+7>进入诊断模式。

将线路板放到雕刻机工作面上,操控刻刀到线路图左下角位置,刀尖离板3mm,置XYZ全零。

不用开主轴电机,空跑一遍试试,看刀是否落位准确,根据偏差调整线路板位置,直到4个点能落位准确,用热熔胶固定线路板。

刀置于X0,Y0位置。

调入钻孔刀路文件。

换上0.8mm钻头,控制主轴下降,将钻头尖贴近线路板,将Z 置零,打开主轴电机,点<启动>,雕刻机开始自动钻孔了......
外壳开孔的加工方法同上,测量好开孔位置,用雕刻机尖刀开孔......
***(本论坛不支持WMV视频文件格式,有兴趣的可访问作者的
)***
5、制作测温头
找个大小合适的电解电容。

首先脱了它的衣扒了它的皮,然后抽了它的筋剔了它的肉,剩下个骨头架;
然后将里面灌上导热硅脂,把焊上线的DS18B20放进去,呵呵,有点象寄居蟹;
找根粗细合适的圆珠笔杆,将测温头用环氧树脂胶固定住,这样能测量液体温度,没事就测测水烧开了没有。

6、开始总装了
将半成品运到总装车间,在总工程师领导下,各部门协调有序地运作起来。

动力部门找了块原装名牌废手机锂电池,其实还能用,就是待机时间太短;
机械部门找来了一颗钢珠,用做按钮开关的按键,说是增加温度计金属感,提高档次,再者这么白白滑滑的,摸着也舒服;
线路板元件很少,几只电阻、1个按钮开关、1个拔动开关、1只Mega8、引出排线接LED数码管,再连上DS18B20的3根线......很快就焊接完毕。

把盖子安上,怎么样,不错吧!
还有2个接口需要交待,一个是充电口,一个是RS232口。

Mega8里烧进了BootLoader升级程序,用RS232口更新程序。

请看下面这个图,右边是充电接口,中间是电源拔动开关,左边是RS232接口。

7、电路及程序
电路非常简单,这是电路图:
程序用BASCOM-AVR编写,也是比较简单,以前从没用过DS18B20,现学现编。

采用9位精度,设置好后存入DS18B20的EEPROM。

程序没仔细推敲,只是完成简单的显示温度功能。

最多显示3位数字,(-10,100)显示1位小数,其它区间显示整数。

相关文档
最新文档