ds18b20 pdf采用什么供电方式好

基于ATmega16与DS18B20的智能温控系统的设计
> 基于ATmega16与DS18B20的智能温控系统的设计
基于ATmega16与DS18B20的智能温控系统的设计
  0 引言本文引用地址:
  在工农业生产和日常生活中,温度的测量及控制越来越重要。传统的温度控制系统采用热敏电阻器或热电偶测量温度,但是由于模拟温度传感器输出的是模拟信号,必须经过A/D转换等环节才能获得数字信号,再加上这种温度采集电路有时需要冷端补偿电路,这样增加了电路的复杂性,且电路易受干扰,使采集到的数据准确性不高。随着技术的发展,目前国际上新型温度传感器已从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展。智能化温度传感器将温度传感器、寄存器、接口电路集成在一个芯片中,能直接输出数字信号。本论文设计了以单片机和为主构成的智能温控系统,该系统的温度启控点可以根据用户需要而自行设定。
  1 系统控制原理及总体构成
  1.1 系统总体构成
  温控系统主要有2大任务;采集温度信息和能对温度实时控制。为完成控制要求,本智能温控系统的总体构成如图1所示。
  1.2 系统控制原理
  智能温控系统通过采集温度信息并将其传送到单片机中,单片机再将采集的温度信息与用户设定的温度值进行比较,从而控制加热/通风执行机构是否需要加热或降温。用户可通过键盘输入来设置温度值,LCD显示用户设定的温度值、当前采集温度值。如果发生故障时,系统发出声、光报警。
  2 系统的硬件设计
  系统硬件电路的设计主要包括4大部分:单片机核心部分、DS18B20温度采集模块、加热/通风执行机构、报警电路。
  2.1 单片机核心部分
  ATmegal6单片机采用Harvard结构,内置WDT,具有高速、低功耗,可直接驱动LED、SSR或继电器等特点,因此本系统采用该单片机作为微处理器中。单片机核心部分的设计主要包括单片机的最小系统、4&4键盘、汉字式LCD(SMG12864)液晶显示、电压检测和报警电路的设计。其中,PB2,PB3作为电压检测输入端,若系统发生欠压、失压或过压时可产生报警信号;PB6、PB7与报警电路连接,控制声、光报警;PC端8个引脚与SMG12864A连接,控制汉字式LCD显示;PC端8个引脚外接4&4键盘,使用户进行温度设定;PD4、PD5分别作为加热执行机构和通风执行机构的控制信号输出端;PA0与DS18B20的DQ进行连接,作为温度采集信号输入端。
  2.2 DS18B20温度采集模块
  在众多应用于温度监测的温敏元件中,虽然温敏电阻成本低,但后续电路复杂,且需要进行温度标定,因此本系统采用DS18B20进行温度采集。DS18B20是美国Dallas半导体公司生产的新一代1-wire总线的数字式温度传感器,测量范围在-55~+125℃,最大分辨可达0.062 5℃。
  DS18B20的TO-92封装有3个引脚:GND、DQ和VDD。DS18B20可采用2种方式供电:一种是采用电源供电方式(即GND与地线连接,DQ与ATme-ga16的PA0连接,VDD与5V电源连接);另一种是寄生电源供电方式(即VDD和GND接地,DQ与ATmega16的PA0连接)。由于外部电源供电方式,工作稳定可靠,抗干扰能力强,电路简单,因此本系统采用外部电源供电方式。外部电源供电方式的I/O线可不需要接强上拉,不存在电源电流不足的问题。
  DS18B20内部自带A/D转换器,通过内部的温度采集、A/D数据转换等过程,以形成与温度相对应的数字值,最后将该数字值由DS18B20的DQ端经PA0送给ATmega16单片机。测温原理如图2所示。
  2.3 加热/通风执行机构
  加热/通风主要是通过控制风扇转动以达到降温的目的,或者通过控制加热器加热达到升温的目的。温度的上升或下降具有一定的惯性,因此要想达到精度较高的温控效果必须要设计相应的控制电路。传统的加热/通风执行机构可能采用电磁继电器作为开关元件,其缺点是寿命短、开关速度慢、温度变化惯性大,难以满足工艺要求。本系统采用固态继电器(Solid State Relay,SSR)作为加热/通用执行机构的开关元件,它具有寿命长、可靠性高、开关速度快、电磁干扰小、无噪声、无火花等特点。
  要达到较好的温控效果,风扇的转速和通过加热器的电流大小应能发生改变,即功率可调。采用可控硅实现交流调功时通常有2种方法:一种是改变负载电压波形的导通角,即调相;另一种是负载电压波形不变而改变其电压波形在时间段内的出现次数,即PWM脉冲调功。调相调功采用移相触发,PWM脉冲调功采用过零触发。由于过零触发方式不对电网造成严重污染和干扰其它用电设备,是应用较为广泛的一种方法,因此本系统采用PWM调功。可以通过软件编程方式由ATmega16的PD4(OC1B)和PD5(OC1A)直接输出PWM波形来控制风扇的转速和加热器电流的大小。
  加热/通风执行机构的开关元件选用交流过零触发型SSR,控制方法采用过零触发,当控制信号输入后,SSR在交流电源为零电压附近导通。通风执行机构的电路如图3所示,加热执行机构的电路与此电路类似。
  2.4 报警电路
  本系统采用蜂鸣器作为声音报警电路,它由晶体管和蜂鸣器组成。采用发光二极管作为系统异常显示,它由红、绿发光二极管及限流电阻构成。单片机工作在正常情况下时,绿色发光二极管点亮,蜂鸣器不发声。当温度测量值超出给定的上、下限或者系统出现低电压时,由ATmega16单片机的PB6控制蜂鸣器发声,PB7控制绿色发光二极管熄灭,而红色发光二极管点亮。控制蜂鸣器输出不同声音而区分系统是电压异常还是测量值超出异常。
  3 系统的软件设计
  本系统采用ATmega16作为核心处理器件,上电时首先通过PB2、PB3检测系统电压是否异常,若异常发出报警信号。在电压正常情况下将经过DS18B20现场实时采集到的温度值存入ATmega16的内部数据存储器,并送SMG12864A显示,同时与设定的温度值进行比较,然后由ATme-ga16输出控制信号去控制加热/通风执行机构。进行温度控制程序设计时还应考虑越限报警。当采集到的温度值与设定的温度值进行比较后,若发现当前温度值越限,则产生报警信号。因此,本系统的软件设计主要包括:系统初始化,键盘扫描、温度读取、温度显示、报警、加热控制和通风控制等,这些操作分别由相应子程序模块完成。其软件设计流程如图4所示。
  4 结语
  该智能温控系统在Proteus上仿真成功后,进行了电路实物的制作,并成功完成了整机调试。整机在实际运行中完全达到设计要求,并具有较高的可靠性。若将该系统加以适当的扩展,可以组成功能更加强大的温控系统,能形成多点、无线传输的温度远程监控网络。
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
DS18B20数字温度计设计实验报告
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口热门版块:
DS18B20寄生电源供电
请问大神1、单个DS18B20使用寄生电源供电,不加MOS管强上拉可以正常工作吗?如下图。
2,、如果MOS管用9015三极管代替可以吗?
为啥我的程序用外部电源供电可以正常工作,用寄生电源供电就不能正常工作,开始转换后有延时500ms了呀?
#include &pic.h&
#include &ds18b20.h&
#define _XTAL_FREQ 4000000 //使用__delay_us()和__delay_ms()必须宏定义
//*************************DS18B20初始化函数************************
uchar init_ds18b20()
& & & & uchar x=0;
& & & & DQ=0;
& & & & DQ_DIR=0;& & & & & & & & & & & & //单片机将DQ拉低
& & & & __delay_us(495);& & & & & & & & //精确延时495us&&大于480us
& & & & DQ_DIR=1;& & & & & & & & & & & & & & & & //拉高总线
& & & & __delay_us(80);& & & & & & & & & & & & //延时80us& && & 大于60us
& & & & x=DQ;& && && && && &//读端口如果x=0则初始化成功 x=1则初始化失败
& & & & __delay_us(495);& && &//精确延时495us&&大于480us
& & & & DQ_DIR=1;
& & & && & & &
//***************************读一个字节函数**********************
uint read_ds18b20()
& & & & uint dat=0;
& & & & for(i=0;i&8;i++)& & & &
& & & & {& & & & & & & &
& & & & & & & & DQ_DIR=1;
& & & & & & & & DQ=0;& & & &
& & & & & & & & DQ_DIR=0;& & & & & & & & & & & & //拉低总线& &
& & & & & & & & __delay_us(7);& & & & & & & & //延时至少1us
& & & & & & & & DQ_DIR=1;& & & & & & & & & & & & //拉高总线
& & & & & & & & __delay_us(4);& & & & & & & & //延时1us以上读数
& & & && & & & & & dat&&=1;& && && && &//数据右移,读顺序(先低后高)
& & & & & & & & if(DQ)
& & & & & & & & {
& & & & & & & & & & & & dat|=0x80;
& & & & & & & & }
& & & & & & & & __delay_us(65);& & & & & & & & //保持60us以上
& & & & return(dat);
//***************************写一个字节函数**********************
void write_ds18b20(uchar dat)
& & & & for(i=0;i&8;i++)
& & & & & & & & DQ=0;& & & &
& & & & & & & & DQ_DIR=0;& & & & & & & & & & & & //拉低总线& & & &
& & & & & & & & __delay_us(5);& & & & & & & & //拉低保持1us以上
& & & & & & & & DQ=dat&0x01;& & & & & & & & //写数据,低位先写
&&& & & & & & & &&&__delay_us(65);& && & //写时序至少保持60us以上
& & & & & & & & dat&&=1;
& & & & & & & & DQ_DIR=1;& & & & & & & & & & & & //拉高总线
& & & & & & & & __delay_us(5);& & & & & & & & //两次写保持1us以上
& & & & & & & &
//***************************启动温度转换**********************
void ds18b20_startconvert()
//& & & & SETUP_DIR=1;
& & & & init_ds18b20();
& & & & write_ds18b20(ds18b20_skip_rom);
& & & & write_ds18b20(ds18b20_convert_ram);
//& & & & SETUP_DIR=0;
//& & & & SETUP=0;
& & & & __delay_ms(500);
//**********************获取温度值**************************
uint ds18b20_getconvert()
& & & & uint Temperature_L=0;
& & & & uint Temperature_H=0;
& & & & uint&&t;
//& & & & SETUP_DIR=1;
& & & & init_ds18b20();& & & & & & & && && && && &//初始化DS18B20
& & & & write_ds18b20(ds18b20_skip_rom); //跳过读序号列号的操作
& & & & write_ds18b20(ds18b20_read_ram); //读取温度寄存器等(共可读9个寄存器)前两个就是温度
& & & & Temperature_L=read_ds18b20();& & //读取低八位温度值
& & & & Temperature_H=read_ds18b20();& & //读取高八位温度值
& & & & t=(Temperature_H&&8)|Temperature_L;
& & & & t=(uint)(t*0.);& & & &
& & & & & & & &
//**********************设置报警值和分辨率**************************
void writeram_ds18b20()
& & & & init_ds18b20();& & & & & & & & & & & & & & & & & & & & & & & & //初始化DS18B20
& & & & write_ds18b20(ds18b20_skip_rom);& & & & //跳过读序号列号的操作
& & & & write_ds18b20(ds18b20_write_ram);& & & & //写RAM的操作,配置报警值上下限和分辨率
& & & & write_ds18b20(0x3c);& & & & & & & & & & & & & & & & //设定报警上限值TH为60度
& & & & write_ds18b20(0x00);& & & & & & & & & & & & & & & & //设定报警下限值TL为0度
& & & & write_ds18b20(0x1f);& & & & & & & & & & & & & & & & //设定分辨率为9位,0x1f, 0x3f, 0x5f ,0x7f(默认)温度读数
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //分辨率分别对应 0.5, 0.25, 0.125 ,0.0625(默认)
& & & & init_ds18b20();
& & & & write_ds18b20(ds18b20_skip_rom);
& & & & write_ds18b20(ds18b20_copy_ram);& & & & //把RAM的TH,TL,CFG中的内容复制到EEPROM
#include &pic.h&
#include &delay.h&
#include &display.h&
#include &ds18b20.h&
#define _XTAL_FREQ 4000000
__CONFIG(0X3F3A);
/* 11 10程序加密关,在线调试关,低压编程关,掉电复位关,延时定时器开,看门狗关,HS振荡器*/
void ds18b20_startconvert();
uint ds18b20_getconvert();
void writeram_ds18b20();
void main()
& & & & display_init();& & & &
& & & & while(1)
& & & & & & & & ds18b20_startconvert();
& & & & & & & & temp=ds18b20_getconvert();
& & & & & & & & t_hum=temp/1000 ;
& & & & & & & & t_ten=temp%;
& & & & & & & & t_bit=temp%100/10;
& & & & & & & & t_dian=temp%10;
& & & & & & & &
& & & & & & & & display(t_hum,t_ten,t_bit,t_dian,10);& &&&
& & & & }& & & & & & & &
(9.38 KB, 下载次数: 2)
15:19 上传
寄生电源供电方式在温度开始转换后需要立即把DQ拉高
还要延时750ms,12位精度500ms不够
拉高总线 拉低总线这是什么意思
站长推荐 /4
Powered by

我要回帖

更多关于 ds18b20 pdf 的文章

 

随机推荐