04基于单总线的测温传感器DS18B20-PC机与单片机通信技术
- 格式:ppt
- 大小:396.00 KB
- 文档页数:25
DS18B20的工作原理DS18B20是一种数字温度传感器,采用单总线接口通信,具有高精度、低功耗和可靠性强的特点。
它广泛应用于温度测量领域,例如室内温度监控、气象观测、工业自动化等。
DS18B20传感器的工作原理如下:1. 温度测量原理:DS18B20采用基于半导体的温度测量原理,利用温度对半导体材料电阻值的影响来测量温度。
它内部集成了温度传感器和模数转换器,能够将温度转换为数字信号输出。
2. 单总线通信:DS18B20传感器采用单总线通信方式,即通过一个数据线进行数据传输和控制。
这种通信方式使得传感器的连接更加简单,只需一个数据线和一个电源线即可。
3. 工作原理:DS18B20传感器的工作原理基于温度对半导体材料电阻值的影响。
传感器内部有一个温度传感器和一个模数转换器。
当传感器接收到读取温度的指令时,它会测量温度并将其转换为数字信号。
具体的工作流程如下:- 主控设备发送启动信号,将总线拉低一段时间;- 主控设备释放总线,等待传感器的响应;- 传感器检测到总线被拉低后,开始工作;- 传感器将温度数据转换为数字信号,并通过总线发送给主控设备;- 主控设备接收到传感器发送的数据,并进行解析。
4. 温度测量精度:DS18B20传感器具有高精度的温度测量能力,可实现±0.5℃的测量精度。
它还具有可调节的分辨率,可以根据需要选择9位、10位、11位或12位的分辨率。
5. 供电方式:DS18B20传感器可以通过总线线路供电,也可以通过外部电源供电。
通过总线供电时,传感器从总线线路获取所需的电能;通过外部电源供电时,传感器需要额外的电源线路提供电能。
总结:DS18B20传感器是一种基于半导体的数字温度传感器,采用单总线通信方式,具有高精度、低功耗和可靠性强的特点。
它的工作原理是利用温度对半导体材料电阻值的影响来测量温度,并通过单总线进行数据传输和控制。
DS18B20广泛应用于各种温度测量场景,为温度监测和控制提供了可靠的解决方案。
ds18b20与单片机工作原理
DS18B20是一款数字温度传感器,常用于单片机系统中进行温度测量。
它采用了1-Wire总线协议,可以通过单一的数据线实现数据传输和供电。
DS18B20传感器内部结构包含了一个温度传感器单元、数字转换单元和存储器单元。
温度传感器单元采用了精确的模拟传感器,能够测量环境温度并输出相应的模拟信号。
数字转换单元将模拟信号转换为数字信号,并通过1-Wire总线传输给单片机。
存储器单元用于存储温度传感器的序列号、配置信息和温度数据。
DS18B20与单片机之间的通信采用了1-Wire总线协议。
这种协议通过单一的数据线实现数据传输和供电,简化了硬件连接和布线。
在通信过程中,单片机作为总线的主设备,发出读取传感器数据的指令,并通过1-Wire总线接收传感器的响应。
传感器在接收到指令后,进行温度测量并将结果转换为数字信号,然后通过1-Wire总线传输给单片机。
为了确保稳定的数据传输,DS18B20还包含了内部的电源管理电路和时序控制电路。
电源管理电路能够自行调整传感器的供电电流,并且能够自动进入休眠状态以降低功耗。
时序控制电路用于控制通信的时间序列,确保数据的准确传输。
总结而言,DS18B20与单片机通过1-Wire总线协议进行通信,实现温度数据的测量和传输。
其内部结构包含温度传感器单元、数字转换单元和存储器单元,通过精确的模拟传感器进行温度测量,并采用电源管理和时序控制电路确保稳定的数据传输。
【注意】回答中出现的具体器件、厂商及其特定信息只是为了描述清楚相关原理,并不构成对其的任何推荐或宣传。
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 ℃。
最佳答案第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时,需要把总线打底,并持续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的工作原理如下: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具有单线串行总线通信、温度转换和精度、供电和工作模式等特点。
它在许多领域中被广泛应用,如气象监测、工业自动化、家用电器等。
其高精度和简单的硬件连接使其成为一种理想的温度传感器。
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与单片机连接的电路图,用单片机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();}}}。
任务书利用数字温度传感器DS18B20与单片机结合来测量温度。
利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显示相应的温度值。
其温度测量范围为−55℃~125℃,精确到0.5℃。
数字温度计所测量的温度采用数字显示,控制器使用单片机AT89C51,测温传感器使用DS18B20,用LED数码管实现温度显示。
目录第一章、绪论 (3)1、1单片机概述 (3)1、2选题背景及设计意义 (3)1、3设计方案论证 (4)第二章、硬件设计 (6)2、1硬件电路的设计 (6)1、时钟电路 (7)2、复位电路 (8)3、显示电路 (10)2、2 元器件的介绍 (11)1、单片机AT89C51 (11)2、温度传感器DS18B20 (15)第三章、系统软件设计 (17)1、系统工作流程图 (17)2、温度传感器子程序流程图 (18)第四章、汇编语言程序部分(略) (19)第五章、调试部分 (19)参考文献 (20)第一章绪论1.1 单片机概述单片机的结构特征是将组成计算机的基本部件集成在一块晶体芯片上,构成一台功能独特的单片微型计算机。
一台典型的单片机的基本组成结构包括中央处理器(CPU),存储器(ROM和RAM),并行I/O口,串行I/O口,定时器/计数器,定时电路及元件。
由此可见,单片机在结构上突破了常规的按逻辑功能划分芯片。
由多片构成了微型计算机的设计思想,将构成计算机的许多功能集成在一块晶体芯片上。
1.2 选题背景及设计意义最早的温度计是在1593年由意大利科学家伽利略发明的。
他的第一只温度计是一根一端敞口的玻璃管,另一端带有核桃大的玻璃泡。
使用时先给玻璃泡加热,然后把玻璃管插入水中。
随着温度的变化,玻璃管中的水面就会上下移动,根据移动的多少就可以判定温度的变化和温度的高低。
这种温度计,受外界大气压强等环境因素的影响较大,所以测量误差大。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。