04基于单总线的测温传感器DS18B20-PC机与单片机通信技术
DS18B20的工作原理

DS18B20的工作原理DS18B20是一种数字温度传感器,采用单总线接口通信,具有高精度、低功耗和可靠性强的特点。
它广泛应用于温度测量领域,例如室内温度监控、气象观测、工业自动化等。
DS18B20传感器的工作原理如下:1. 温度测量原理:DS18B20采用基于半导体的温度测量原理,利用温度对半导体材料电阻值的影响来测量温度。
它内部集成了温度传感器和模数转换器,能够将温度转换为数字信号输出。
2. 单总线通信:DS18B20传感器采用单总线通信方式,即通过一个数据线进行数据传输和控制。
这种通信方式使得传感器的连接更加简单,只需一个数据线和一个电源线即可。
3. 工作原理:DS18B20传感器的工作原理基于温度对半导体材料电阻值的影响。
传感器内部有一个温度传感器和一个模数转换器。
当传感器接收到读取温度的指令时,它会测量温度并将其转换为数字信号。
具体的工作流程如下:- 主控设备发送启动信号,将总线拉低一段时间;- 主控设备释放总线,等待传感器的响应;- 传感器检测到总线被拉低后,开始工作;- 传感器将温度数据转换为数字信号,并通过总线发送给主控设备;- 主控设备接收到传感器发送的数据,并进行解析。
4. 温度测量精度:DS18B20传感器具有高精度的温度测量能力,可实现±0.5℃的测量精度。
它还具有可调节的分辨率,可以根据需要选择9位、10位、11位或12位的分辨率。
5. 供电方式:DS18B20传感器可以通过总线线路供电,也可以通过外部电源供电。
通过总线供电时,传感器从总线线路获取所需的电能;通过外部电源供电时,传感器需要额外的电源线路提供电能。
总结:DS18B20传感器是一种基于半导体的数字温度传感器,采用单总线通信方式,具有高精度、低功耗和可靠性强的特点。
它的工作原理是利用温度对半导体材料电阻值的影响来测量温度,并通过单总线进行数据传输和控制。
DS18B20广泛应用于各种温度测量场景,为温度监测和控制提供了可靠的解决方案。
ds18b20与单片机工作原理

ds18b20与单片机工作原理
DS18B20是一款数字温度传感器,常用于单片机系统中进行温度测量。
它采用了1-Wire总线协议,可以通过单一的数据线实现数据传输和供电。
DS18B20传感器内部结构包含了一个温度传感器单元、数字转换单元和存储器单元。
温度传感器单元采用了精确的模拟传感器,能够测量环境温度并输出相应的模拟信号。
数字转换单元将模拟信号转换为数字信号,并通过1-Wire总线传输给单片机。
存储器单元用于存储温度传感器的序列号、配置信息和温度数据。
DS18B20与单片机之间的通信采用了1-Wire总线协议。
这种协议通过单一的数据线实现数据传输和供电,简化了硬件连接和布线。
在通信过程中,单片机作为总线的主设备,发出读取传感器数据的指令,并通过1-Wire总线接收传感器的响应。
传感器在接收到指令后,进行温度测量并将结果转换为数字信号,然后通过1-Wire总线传输给单片机。
为了确保稳定的数据传输,DS18B20还包含了内部的电源管理电路和时序控制电路。
电源管理电路能够自行调整传感器的供电电流,并且能够自动进入休眠状态以降低功耗。
时序控制电路用于控制通信的时间序列,确保数据的准确传输。
总结而言,DS18B20与单片机通过1-Wire总线协议进行通信,实现温度数据的测量和传输。
其内部结构包含温度传感器单元、数字转换单元和存储器单元,通过精确的模拟传感器进行温度测量,并采用电源管理和时序控制电路确保稳定的数据传输。
【注意】回答中出现的具体器件、厂商及其特定信息只是为了描述清楚相关原理,并不构成对其的任何推荐或宣传。
DS18B20温度传感器与单片机间的通信

DS18B20温度传感器与单片机间的通信线(延长线)可以多长20 [ 标签:温度传感器,单片机,通信线] 我需要延长50-100米,请问这是正常使用的距离还是要加特殊元件用它做探头,再弄个单片机,数码管,蜂鸣器成本很低吧,用两个18B20,延长线我选的是网线,当然线的成本是另算的,我指单片机读取显示部分成本就是很低?答案TS-18B20 数字温度传感器,该产品采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
1: 技术性能描述1.1 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
1.2 测温范围-55℃~+125℃,固有测温分辨率0.5℃。
1.31.4 工作电源: 3~5V/DC1.5 在使用中不需要任何外围元件1.6 测量结果以9~12位数字量方式串行传送1.7 不锈钢保护管直径Φ6 1.8 适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温1.9 标准安装螺纹M10X1, M12X1.5, G1/2”任选1.10 PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
2:应用范围2.1 该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域2.2 轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。
2.3 汽车空调、冰箱、冷柜、以及中低温干燥箱等。
2.5 供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制编辑本段|回到顶部3:产品型号与规格型号测温范围安装螺纹电缆长度适用管道TS-18B20 -55~125 无 1.5 m TS-18B20A -55~125 M10X1 1.5m DN15~25TS-18B20B -55~125 1/2”G 接线盒DN40~ 60编辑本段|回到顶部4:特点独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源测量温度范围为-55 °C至+125 ℃。
DS18B20温度传感器与单片机的接口电路

最佳答案第2章硬件电路详细设计DS18B20的性能特点:1、采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),2、测温范围为-55℃-+125℃,测量分辨率为0.0625℃,3、内含64位经过激光修正的只读存储器ROM,4、适配各种单片机或系统机,5、用户可分别设定各路温度的上、下限,6、内含寄生电源。
温度传感器DS18B20连接方式:在寄生电源供电方式下,DS18B20从单线信号线上汲取能量,在信号线DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。
如图2.3所示。
2.4 复位电路的设计本设计采用人工复位,将一个按扭开关并联于上电自动复位电路按一下开关就在RST端出现一段时间的高电平,即器件复位。
2.5 晶振电路的设计2.6 DS18B20温度传感器与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。
另一种是寄生电源供电方式,如所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。
采用寄生电源供电方式时VDD端接地。
由于单线制只有一根线,因此发送接口必须是三态的。
2.7 温度测量系统整体硬件电路Wei1 BIT P3.0 ;;数码管第1位Wei2 BIT P3.1 ;;数码管第2位Wei3 BIT P3.2 ;;数码管第3位Wei4 BIT P3.3 ;;数码管第4位Dian EQU 20H ;;小数点状态状态保存字节DisData1 EQU 30H ;;第1位显示数据DisData2 EQU 31H ;;第2位显示数据DisData3 EQU 32H ;;第3位显示数据DisData4 EQU 33H ;;第4位显示数据DisTime EQU 34H ;;设置显示几次后读取温度值;;温度数据存储单元标号定义TempL EQU 35H ;;温度高位TempH EQU 36H ;;温度低位;;与DS18B20通迅部分存储单元及标号定义DS18B20 BIT P1.0 ;;与DS18B20通迅的位地址RFail BIT 21H.0 ;;复位失败标记Var EQU 22H ;;变量字节,温度数据处理时用到Var2 EQU 3FH ;;变量字节主程序部分:ORG 00HLJMP STARTORG 100HSTART: ;;-----初始化MOV SP,#60H ;;初始化堆栈指针Set18B20:;;-----DS18B20初始化;;DS18B20复位ACALL ResetJB RFail,LOOP ;;复位失败则直接跳至显示部分;;对DS18B20发出Skip ROM命令MOV A,#0CCHACALL Write;;对DS18B20发出温度转换命令MOV A,#44HACALL WriteSetDisT:MOV DisTime,#3 ;;设置下一个循环体的循环8次LOOP:ACALL Display ;;显示JB RFail,Set18B20 ;;DS18B20复位失败时,在显示完一次后重新复位DJNZ DisTime,LOOPJNB DS18B20,$ ;;判断DS18B20是否已完成温度转换ACALL GetTemp ;;从DS18B20读出温度值ACALL DealTemp ;;温度值处理ACALL SendDisDT ;;根据当前系统状态设置显示内容SJMP SetDisT ;;;;;;;;;根据当前状态给显示模块设置显示参数SendDisDT:MOV Dian,#7FH ;;最高位为0代表显示小数点;;传送温度值MOV A,TempH ;;送高位数据MOV VAR,TempL ;;送低位数据ACALL TransDataRET;;A中保存高位值,Var中保存低位值TransData:;;取个位值MOV B,#10DIV ABMOV DisData2,B;;取十位值JZ HavNot1 ;;判断商是否为0MOV B,#10DIV ABMOV DisData3,BJZ HavNot2 ;;判断商是否为0MOV DisData4,ASJMP XiaoShu ;;跳至百位符号处理部分HavNot1:MOV DisData3,#10 ;;十位开始没有数字HavNot2:MOV DisData4,#10 ;;百位开始没有数字SignJudge:;;符号处理部分JNB VAR.7,XiaoShu ;;当为负数显示符号MOV A,#10CJNE A,DisData3,BWSignMOV DisData3,#11 ;;负号在十位SJMP XiaoShuBWSign:MOV DisData4,#11 ;;负号在百位XiaoShu:;;小数处理部分,用查表法获取小数值,精确到小数点后1位MOV A,VARANL A,#0FHMOV DPTR,#XSTabMOVC A,@A+DPTRMOV DisData1,ARTransTemp:RETXSTab: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9DS18B20通迅模块组-------复位模块Reset: ;;3微秒高电平SETB DS18B20MOV R7,#250CLR RFail ;;清0复位失败标记CLR DS18B20;;延迟501uSDJNZ R7,$SETB DS18B20 ;;释放总线(拉高数据线);;等待DS18B20作出复位成功反应,最大等待时间为69uSMOV R7,#17Wait:JNB DS18B20,RReset ;;若DS18B20在作出复位成功反应,不再等待DJNZ R7,WaitSETB RFail ;;70uS内DS18B20作出复位成功反应,置1复位失败标记RReset:;;延迟350UsMOV R7,#174DJNZ R7,$SETB DS18B20RET/;;-------向DS18B20写一个字的模块,要写的内容提前装入ACC中Write:MOV R6,#8 ;写8位WriteBit:;;2微秒高电平SETB DS18B20MOV R7,#3;;7微秒低电平CLR DS18B20DJNZ R7,$;;ACC低位送至DS18B20RRC AMOV DS18B20,C;;延迟60UsMOV R7,#28DJNZ R7,$;;是否已写完8位DJNZ R6,WriteBitRWrite:SETB DS18B20RET; /;;-------从DS18B20读回一个字节的内容,读回的内容装入ACC中Read:MOV R6,#8 ;;读回8位MOV A,#0 ;;读回的内容装入ACC中ReadBit:;;2微秒高电平SETB DS18B20MOV R7,#7;;2微秒低电平CLR DS18B20NOP;;16微秒高电平SETB DS18B20DJNZ R7,$;;读回一位数据放入ACC中MOV C,DS18B20RRC A;;延迟66UsMOV R7,#33DJNZ R7,$;;是否已读完8位DJNZ R6,ReadBitRRead:SETB DS18B20RET/;;-------与DS18B20通迅,读回两字节温度值,并装入ACC中TempL和TempH 中GetTemp:ACALL Reset ;;复位JB RFail,RGetTemp ;;判断复位是否成功;;复位成功;;对DS18B20发出Skip ROM命令MOV A,#0CCHACALL Write;;对DS18B20发出读命令MOV A,#0BEHACALL Write;;从DS18B20读回低8位温度值ACALL ReadMOV TempL,A;;从DS18B20读回高8位温度值ACALL ReadMOV TempH,AACALL Reset ;;复位JB RFail,RGetTemp ;;判断复位是否成功;;对DS18B20发出Skip ROM命令MOV A,#0CCHACALL Write;;对DS18B20发出温度转换命令MOV A,#44HACALL WriteRGetTemp:RET温度数据处理模块DealTemp:;;将整数的二进制数部分移到一个字节,符号位和小数部分移到一个字节MOV R1,#VarMOV Var,TempHMOV A,TempLXCHD A,@R1 ;;符号位、小数部分至VAR(@R1),整数部分至ACC SWAP A;;整数部分处理JNB Var.7,NotNeg ;;判断是否为负数CPL A ;;为负数,取反后加1得其绝对值;;小数部分取反XRL Var,#1FH ;;INC VarNotNeg:MOV TempH,AMOV TempL,VarRET显示模块-------显示DisData(30H)从开始的三个字节保存显示信息Display:MOV DPTR,#Tab;;**显示小数部分MOV A,DisData1MOVC A,@A+DPTRMOV P2,ACLR Wei1ACALL DelaySETB Wei1;;**显示个位MOV A,DisData2MOVC A,@A+DPTR;;小数点处理ANL A,DianMOV P2,ACLR Wei2ACALL DelaySETB Wei2;;**显示十位MOV A,DisData3MOVC A,@A+DPTRMOV P2,ACLR Wei3ACALL DelaySETB Wei3;;**显示百位MOV A,DisData4MOVC A,@A+DPTRMOV P2,ACLR Wei4ACALL DelaySETB Wei4RETTab: ;;0~9、空白、负号的编码DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH ;;延迟Delay:MOV R6,#6DD1:MOV R5,#250DJNZ R5,$DJNZ R6,DD1RETEND这里面插不了图,我有这个的整套课程设计报告,想要找我,mingchaofu@。
单总线控制DS18B20温度传感器

单总线控制DS18B20温度传感器一DS18B20通过单总线初始化时序如下:由上图可见,当主机要操作DS18B20时,需要把总线打底,并持续480us以960us 然后释放总线(即拉高),当时间流逝15-60us的时候,DS18B20若存在且没有坏的话,它会把总线拉低,并持续60-240us .在这段时间主机可以查看总线状态,来确定初始化完成 .二DS18B20通过单总线读写时序如下:由上图可以看出,主机要读或写DS18B20时,需要要将总线接低并持续15us,上面的两个时序是写的时序,主机在接低总线的15us后继续拉低总线,持续15-30us. 在这个时间内DS18B20采样0,完成0的写入.主机拉低总线15us后拉高总线然后持续15-30us等待DS18B20采样完成 1的写入.下面的两个图是读的时序图.主机拉低总线并持续15us后,释放总线.如果DS18B20要输出0就继续拉低总线,若要输出1 就拉高总线,并持续15-30us,等待主机查询总线状态完成 0或者1的读写.三DS18B20的ROM操作命令如下:四DS18B20的存储器操作命令如下:五DS18B20内部9个字节存储器以及E2RAM:六DS18B20内部存储温度字节格式:七DS18B20操作的C语言程序:/*************************此部分为18B20的驱动程序*************************************/#include <reg52.H>#include <intrins.h>sbit D18B20=P3^7;#define NOP() _nop_() /* 定义空指令 */#define _Nop() _nop_() /*定义空指令*/void TempDelay (unsigned char idata us);void Init18b20 (void);void WriteByte (unsigned char idata wr); //单字节写入void read_bytes (unsigned char idata j);unsigned char CRC (unsigned char j);void GemTemp (void);void Config18b20 (void);void ReadID (void);void TemperatuerResult(void);bit flag;unsigned int idata Temperature,D[10];unsigned char idata temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节unsigned char idata id_buff[8];unsigned char idata *p,TIM;unsigned char idata crc_data;unsigned char code CrcTable [256]={0, 94,188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102,229, 187, 89, 7,219, 133,103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 1 96, 154,217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,248, 166,68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 2 31, 185,140, 210,48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,175, 241,19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,202, 148,118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 2 13, 139,87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};///*************************************************************Function:延时处理*parameter:*Return:*Modify:*************************************************************/void TempDelay (unsigned char idata us){while(us--);}/*************************************************************Function:18B20初始化*parameter:*Return:*Modify:*************************************************************/void Init18b20 (void){_nop_();D18B20=0;TempDelay(50); //delay 530 uS//80_nop_();D18B20=1;TempDelay(10); //delay 100 uS//14_nop_();_nop_();_nop_();if(D18B20==0)flag = 1; //detect 1820 success!elseflag = 0; //detect 1820 fail!TempDelay(15); //20_nop_();_nop_();D18B20 = 1;}/************************************************************ *Function:向18B20写入一个字节*parameter:*Return:*Modify:*************************************************************/ void WriteByte (unsigned char idata wr) //单字节写入{unsigned char idata i;for (i=0;i<8;i++){D18B20 = 0;_nop_();D18B20=wr&0x01;TempDelay(3); //delay 45 uS //5_nop_();_nop_();D18B20=1;wr >>= 1;}}/************************************************************ *Function:读18B20的一个字节*parameter:*Return:*Modify:*************************************************************/ unsigned char ReadByte (void) //读取单字节{unsigned char idata i,u=0;for(i=0;i<8;i++){D18B20 = 0;u >>= 1;D18B20 = 1;if(D18B20==1)u |= 0x80;TempDelay (2);_nop_();}return(u);}/************************************************************ *Function:读18B20*parameter:*Return:*Modify:*************************************************************/ void read_bytes (unsigned char idata j){unsigned char idata i;for(i=0;i<j;i++){*p = ReadByte();p++;}}/************************************************************ *Function:CRC校验*parameter:*Return:*Modify:*************************************************************/ unsigned char CRC (unsigned char j){unsigned char idata i,crc_data=0;for(i=0;i<j;i++) //查表校验crc_data = CrcTable[crc_data^temp_buff[i]];return (crc_data);}/************************************************************ *Function:读取温度*parameter:*Return:*Modify:*************************************************************/ void GemTemp (void){read_bytes (9);if (CRC(9)==0) //校验正确{Temperature = temp_buff[1]*0x100 + temp_buff[0];// Temperature *= 0.625;Temperature /= 16;TempDelay(1);}}/************************************************************ *Function:内部配置*parameter:*Return:*Modify:*************************************************************/ void Config18b20 (void) //重新配置报警限定值和分辨率{Init18b20();WriteByte(0xcc); //skip romWriteByte(0x4e); //write scratchpadWriteByte(0x19); //上限WriteByte(0x1a); //下限WriteByte(0x7f); //set 11 bit (0.125)Init18b20();WriteByte(0xcc); //skip romWriteByte(0x48); //保存设定值Init18b20();WriteByte(0xcc); //skip romWriteByte(0xb8); //回调设定值}/************************************************************ *Function:读18B20ID*parameter:*Return:*Modify:*************************************************************/ void ReadID (void)//读取器件 id{Init18b20();WriteByte(0x33); //read romread_bytes(8);}/************************************************************ *Function:18B20ID全处理*parameter:*Return:*Modify:*************************************************************/ void TemperatuerResult(void){p = id_buff;ReadID();Config18b20();Init18b20 ();WriteByte(0xcc); //skip romWriteByte(0x44); //Temperature convertInit18b20 ();WriteByte(0xcc); //skip romWriteByte(0xbe); //read Temperaturep = temp_buff;GemTemp();}unsigned int TempTick=0;void GetTemp(){if(TIM==1){ TIM=0;TemperatuerResult();D[5]=Temperature;}}/*************************************[ t1 (0.5ms)中断] 中断中做 PWM 输出------------1000/(0.02ms*250)=200Hz*************************************/void T1zd(void) interrupt 3{TH1 = 0xfe; //11.0592TL1 = 0x33;TIM++;}。
DS18B20的工作原理

DS18B20的工作原理DS18B20是一种数字温度传感器,可以通过一根单线串行总线与微处理器或者其他设备进行通信。
它采用了数字温度传感技术,可以准确地测量环境温度,并将温度数据以数字形式传输给主设备。
DS18B20的工作原理如下:1. 温度测量原理:DS18B20使用了一个精确的温度传感器,该传感器基于温度对半导体材料电阻值的影响。
在DS18B20中,温度传感器是由一对金属电极和一个细丝电阻器组成的。
当温度升高时,电阻值增加,反之亦然。
通过测量电阻值的变化,可以确定环境温度。
2. 单线串行总线通信:DS18B20通过单线串行总线与主设备通信,这意味着只需要一根数据线就可以实现数据传输。
通信过程中,主设备发送指令给DS18B20,DS18B20将温度数据以数字形式传输回主设备。
这种通信方式简化了硬件连接,降低了成本。
3. 温度转换和精度:DS18B20将温度数据转换为数字形式,并以12位精度表示。
它可以测量的温度范围为-55℃至+125℃,精度为±0.5℃。
DS18B20还具有可编程的分辨率功能,可以选择9位、10位、11位或者12位的温度分辨率。
4. 供电和工作模式:DS18B20可以通过总线路线提供供电,也可以通过外部电源提供供电。
它还具有多种工作模式,包括连续转换模式和温度警报模式。
在连续转换模式下,DS18B20可以周期性地测量温度并发送数据。
在温度警报模式下,DS18B20可以设置上下限温度阈值,当温度超过或者低于设定阈值时,会触发警报信号。
总结:DS18B20是一种数字温度传感器,采用了数字温度传感技术。
它通过测量温度对半导体材料电阻值的影响来测量环境温度,并将温度数据以数字形式传输给主设备。
DS18B20具有单线串行总线通信、温度转换和精度、供电和工作模式等特点。
它在许多领域中被广泛应用,如气象监测、工业自动化、家用电器等。
其高精度和简单的硬件连接使其成为一种理想的温度传感器。
基于DS18B20的单总线数字温度计毕业设计

1 前言在日常生活及工农业生产中,经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。
而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持。
其缺点如下:硬件电路复杂;软件调试复杂;制作成本高。
针对以上问题,采用一种改进型智能温度传感器作为检测元件,测温范围为-55~+125 ℃,最高分辨率可达0.0625℃,误差 +0.5℃以内。
数字温度计传感器可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。
本数字温度计设计采用一种改进型智能温度传感器作为检测元件,测温范围为-55~125 ℃,最高分辨率可达0.0625℃,误差 +0.5℃以内。
而传统的温度计,如热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持。
硬件电路复杂,软件调试困难,制作成本高等缺点都给科技、工业、农业等诸多领域带来许多问题,尤其在生物学,珊瑚以其独特的生物学及生态学特性成为研究热带海洋环境的重要信息载体.阐明了珊瑚微量元素Sr/Ca、Mg/Ca温度计的建立基础、测定方法、研究成果、环境意义、争论问题及进一步研究的设想.多种海表温度计的对比研究,为现代和古海洋环境的重建、探索气候的变率与特征事件(冷暖、旱涝、ENSO等)的关联以及为预测未来气候变化的趋势提供科学的判据。
因此,鉴于以上问题主要设计测温范围为-55~125 ℃,精度为0.1℃的数字温度计。
2 系统硬件的设计本数字温度计设计采用美国DALLAS 半导体公司继DS18B20之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~+125 ℃,最高分辨率可达0.0625℃.DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。
按照系统设计的功能和要求,确定系统由3个模块组成:主控制器,测温电路和显示电路[1]。
(完整版)单片机与DS18B20传感器连接.

案例单片机与DS18B20传感器连接下图给出了DS18B20与单片机连接的电路图,用单片机AT89C52的P0.7口线经上拉后接至DS18B20的引脚2数据端,引脚1接电源地端,引脚3接+5V电源端。
单片机与DS18B20的连接电路图下面给出对DS18B20的操作用C51编写的具体程序。
应该说明的是,程序对应于单片机的时钟频率为12MHz,如改用其它时钟频率,程序中的延时应重新调整。
#include <reg51.h>#include <intrins.h>sbit LE = P2^5;sbit DQ = P0^7;bit DS_IS_OK = 1;unsigned char seg[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //字段数组定义了12个元素,其中第11个元素是负号"-"的字段码//第12个元素为不显示的字段码,用于显示正温度值unsigned char buf[4];unsigned int temperature;void delay(unsigned int time) //延时函数{while(time--);}unsigned char Init_Ds18b20() //DS18B20初始化函数{unsigned char status;DQ = 1; delay(8);DQ = 0;delay(90);DQ = 1;delay(5);status = DQ;delay(60);return status;}unsigned char read() //读字节函数{unsigned char i = 0;unsigned char dat = 0;DQ=1;_nop_();for(i=8; i>0; i--){DQ = 0;dat >>= 1;DQ = 1;_nop_();_nop_();if(DQ) dat |=0x80;delay(30); DQ = 1;}return(dat);}void write(unsigned char dat) //写字节函数{unsigned char i;for(i=8;i>0;i--){DQ = 0;DQ = dat & 0x01;delay(5);DQ=1; dat >>=1;}}void ReadTemperature() //采样温度函数{unsigned char tempL=0;unsigned char tempH=0;if(Init_Ds18b20() == 1) //DS18B20故障DS_IS_OK = 0;else{DS_IS_OK = 1;write(0xcc);write(0x44);Init_Ds18b20();write(0xcc);write(0xbe);tempL = read();tempH = read();temperature = (tempH<<8)|tempL;}}void dispute() //温度值显示处理函数{unsigned int temp,temp1; //用于中途的数据转换//以下if语句用于处理负温度值,因为保存的是温度值的补码if((temperature & 0xf800) == 0xf800){temperature = ~temperature+1;buf[0]=10;}else buf[0]= 11;temp=temperature/16.0*100;//转换成实际温度值并放大100倍,用于对百分位四舍五入if(temp <10) buf[0] = 11; //处理0度,温度是0度时保证不出现负号else{temp1 = temp % 10;if(temp1>=5) //四舍五入temp += 10;}temp /= 10 ; //去掉温度值的百分位if(temp>=1000) //如果温度>=100度,则显示四位{buf[0]=temp/1000;buf[1]=temp/100%10;buf[2]=temp/10%10;buf[3]=temp%10;}else {buf[1]=temp/100;buf[2]=temp/10%10;buf[3]=temp%10;}}void display() //显示函数.{int i,j;unsigned char temp=0xfe;for(j=0;j<30;j++) //由于是动态显示方式,因此必须多次循环才能成功显示,很关键,处理不好温度值将显示不成功{temp=0xfe;for(i=0;i<4;i++){LE=0; P2=temp;if(i==2)P1=seg[buf[i]]+0x80;else P1=seg[buf[i]];LE=1;LE=0;delay(10);temp=(temp<<1)|1;}P2=temp; //关显示,进行下一次测试}}void main(){ReadTemperature();delay(50000);delay(50000);while(1){if(DS_IS_OK ==1){ReadTemperature();dispute();display();}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1)DS18B20的复位时序
所有时序都是 将主机作为主设备,单总线器件 作为从设备。而每一次命令和数据的传输都是从主 机主动启动写时序开始,如果要求单总线器件回送 数据,在进行写命令后,主机需 启动读时序完成 数据接收。数据和命令的传输都是低位在先。
(2)DS18B20的读数据时序
18B20的读时序是从主机把单总线拉 低之后,在15us之内就得释放单总线,以让 DS18B20把数据传输到单总线上。DS18B20在完成一 个读时序过程,至少需要60us才能完成。下图为 DS18B20的读取数据时序图。
1、单总线概述
目前常用的微机与外设之间进行数据传 输的串行总线主要有I2C总线、SPI总线和 SCI总线。这些总线至少需要两条或两条以 上的信号线。
近年来,美国的达拉斯半导体(DALLAS SEMICONDUCTOR)推出了一项特有的数据传 输技术。该技术与上述总线不同,它采用 单根信号线,既可传输时钟,又能传输数 据,而且数据传输是双向的。这种具有线 路简单,硬件开销 ,成本低廉,便于总线 扩展和维护的数据传输技术被称之为单总 线技术
TO-92封装的DS18B20的引脚排列见图
DS18B20的引脚排列图 其引脚功能如下 GND:信号地 DQ :数据输入/输出引脚。开漏单总线接口引脚。 当被用着在寄生电源下,也可以向器件提供电源。 VDD:可选择的VDD引脚。当工作于寄生电源时,此 引脚必须接地。
2)DS18B20的读写方法
由于DS18B20是在一根I/O线上读写数据,因此, 对读写的数据位有着严格的时序要求,DS18B20 有严格的通信协议来保证各位数据传输的正确性 和完整性。该协议定义了几种信号的时序:初始 化时序、读时序、写时序。 所有时序都是 将主 机作为主设备,单总线器件作为从设备。而每一 次命令和数据的传输都是从主机主动启动写时序 开始,如果要求单总线器件回送数据,在进行写 命令后,主机需 启动读时序完成数据接收。数据 和命令的传输都是低位在先。
主机和从机之间的通信可通过3个步骤 完成,分别为初始化单总线器件、识别单 总线器件和交换数据。由于它们是主从结 构,只有主机呼叫从机时,从机才能应答, 因此主机访问单总线器件都必须严格遵循 单总线命令序列,即初始化、ROM、命令功 能命令。如果出现序列混乱,单总线器件 将不响应主机(搜索ROM命令,报警搜索命 令除外)。
3、通过完成项目,了解单线多点测控系统的 基本原理。
【项目知识点与技能点】
1、单总线的通信协议。
2、使用单总线技术控制多个从机设备的 基本原理。
3、单总线器件DS18B20的相关知识。
【项目知识准备】
1、单总线概述 2、单总线的工作原理 3、使用单总线技术控制多个从机设备的基本
原理及示意 4、单总线器件DS18B20的相关知识
基于DS18B20测温传感器的单总线
• 项目功能 • 项目知识点与技能点 • 项目知识准备 • 软件设计 • 硬件电路 • 项目实施
【项目功能】
1、完成单片机读取单总线数字式温度传感器 DS18B20,并将所得到的温度数据通过数 码管显示出来。
2、通过完成项目,了解单总线器件的控制及 读取原理,并掌握其基本应用。
3、使用单总线技术控制多个从机设备的基本 原理及示意
单总线适用于单主机系统,能够控制一 个或多个从机设备。主机可以是微控制器, 从机可以是单总线器件,它们之间的数据交 换只通过一条信号线。当只有一个从机设备 时,系统可按单节点系统操作;当有多个从 机设备时,系统则按多节点系统操作。下图 所示是单总线多节点系统的示意图。
a、只要求一个端口即可实现通信。 b、在DS18B20中的每个器件上都有独一无二的 序列号。 c、实际应用中不需要外部任何元器件即可实 现测温。 d、测量温度范围在-55℃到+125℃之间。 e、数字温度计的分辨率用户可以从9位到12位 选择。 f、内部有温度上、下限告警设置。
(2)、DS18B20的引脚介绍
4、单总线器件DS18B20的相关知识
1)DS18B20基本知识
DS18B20数字温度传感器是DALLAS公司生 产的1-Wire,即单总线器件,具有线路简 单,体积小的特点。因此用它来组成一个 测温系统,线路简单,在一根通信线可以 挂很多这样的数字温度字温度传感器,十 分方便。
(1)DS18B20产品的特点
(2)DS18B20的使用注意事项
A、在对DS1820进行读写编程时,必须严格的保证读写时序, 否则将无法读取测温结果。在使用PL/M、C等高级语言进行 系统程序设计时,对DS1820操作部分最好采用汇编语言实现。 B、当单总线上所挂DS1820超过8个时,就需要解决微处理器 的总线驱动问题,这一点在进行多点测温系统设计时要加以注 意。 C、连接DS1820的总线电缆是有长度限制的。当采用普通信号 电缆传输长度超过50m时,读取的测温数据将发生错误。当 将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达 150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正 常通讯距离进一步加长。这种情况主要是由总线分布电容使信 号波形产生畸变造成的。因此,在用DS1820进行长距离测温 系统设计时要充分考虑总线分布电容和阻抗匹配问题。
DS18B20的写数据时序图如图
3)DS18B20测量数据存放格式及使用注意事 项
(1)DS18B20的数据存放格式
18B20中的温度传感器可独立完成对温度的 测量,以12位转化为例:用16位符号扩展的二 进制补码读数形式提供,以0.0625℃/LSB形 式表达,其中S为符号位。这是12位转化后得 到的12位数据,存储在DS18B20的两个8比特 的RAM中,二进制中的前面5位是符号位,如 果测得的温度大于0,这5位为0,只要将测到 的数值乘于0.0625即可得到实际温度;如果 温度小于0,这5位为1,测到的数值需要取反 加1再乘于0.0625即可得到实际温度。例如 +125℃的数字输出为07D0H,+25.0625℃的数 字输出为0191H,-25.0625℃的数字输出为 FF6FH,-55℃的数字输出为FC90H。
2、单总线的工作原理
简单的说,单总线即只有一根数据线, 系统中的数据交换、控制都由这根线完成。 设备(主机或从机)通过一个漏极开路或 三态端口连至该数据线,以允许设备在不 发送数据时能够释放总线,而让其它设备 使用总线。单总线通常要求外接一个约为 4.7kΩ 的上拉电阻,这样,当总线闲置时, 其状态为高电平。
通常把挂在单总线上的器件称之为单总线器 件,单总线器件内一般都具有控制、收/发、存储 等电路。为了区分不同的单总线器件,厂家生产 单总线器件时都要刻录一个64位的二进制ROM代码, 以标志其ID号。对于每一个单总线器件,都有一 个唯一的ID号与之相对应。在主机对其进行操作 时,先对单总线上所有的单总线器件进行ID识别, 然后确定要操作的单总线器件并匹配其ID号,最 后通过读写指令对其进行操作。这样,便能保证 所有单总线上各点与主机之间通讯畅通无阻、准 确无误。
(3)DS18B20的写数据时序
DS18B20的写数据时序同样可以分为写0和写1 两个过程,但在时序操作上与读取数据时序有所不 同。当要写0时序时,单总线要被拉低至少60us, 保证DS18B20能够在15us到45us之间能够正确地采 样IO总线上的“0”电平,当要写1时序时,单总线 被拉低之后,在15us之内就得释放单总线。
D、在DS1820测温程序设计中,向DS1820发出温度转换 命令后,程序总要等待DS1820的返回信号,一旦某个 DS1820接触不好或断线,当程序读该DS1820时,将没 有返回信号,程序进入死循环。建议采用看门狗解决一问 题。
E、测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地 线与信号线,另一组接VCC和地线,屏蔽层在源端单点接 地。
【软件设计】
程序流程图
【硬件电路】
单总线器件DS18B20测温显示原理图
原理图说明:
单片机读取单总线器件DS18B20 温度传感器所 测量的数据,并通过数码管显示出来。DS18B20 的单总线与单片机的PD6管脚相连接。显示部分 为以74LS164主器件的5位数码管,PC4为显示数 据输入端,PC5为时钟端。这样就构成了以 ATmega16单片机为核心、DS18B20为测量器件 的温度测量系统。
【项目实施】