温度测量仿真+pcb.docx
《温度测量仿真+pcb.docx》由会员分享,可在线阅读,更多相关《温度测量仿真+pcb.docx(18页珍藏版)》请在冰豆网上搜索。
温度测量仿真+pcb
1.前言
目前,单片机已经在测控领域获得了广泛的应用,它除了可以测量电信号以外,还可以用于温度,湿度等非电信号的测量。
能独立工作的单片机温度检测和温度控制系统已经广泛用于很多领域。
单片机是一种特殊的计算机,它是在一块半导体的芯片上集成了CPU,存储器,RAM,ROM及输入与输出接口电路,这种芯片成为:
单片机。
由于单片机的集成度高,功能强,通用性好,特别它具有体积小,重量轻,能耗低,价格便宜,抗干扰能力强和使用仿版等方面的优点,是它迅速的得到了推广和应用,目前已经成为测量控制系统中的优良机种和新电子产品中的关键部件。
单片机已不仅仅局限于小系统的概念,现已广泛应用于家用电器,机电产品,办公自动化产品,机器人,儿童玩具,航天器等领域。
这次温度测量系统,就是用的单片机实现温度的测量,传统的温度传感器大多以热敏电阻作为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。
本次我和陆路裕同学采用的正是DS18B20数字温度传感器来实现基于51单片机的温度计的设计。
传统的温度计有发映速度慢,读数麻烦,测量精度不高,误差大等缺点而下面利用集成温度传感器DS18B20设计并制作了一款基于AT89C51的4位数码管现实的数字温度计,其电路简单,软硬件结构模块化,易于实现。
该数字温度计利用温度传感器及接口电路完成温度的测量并转换成模拟电压信号,经由模数转换器转换成单片机能够处理的数字信号,然后送到单片机中进行处理变换,最后将温度值显示在数码管上。
系统以单片机为系统核心,加上DS18B20温度传感器,两位位温度数据显示的共阴极数码管,及晶振电路和复位电路组成。
2.所需硬件
2.1AT89C52单片机
图2-1PDIP封装的AT89C52引脚图图2-2AT89C52PDIP封装芯片
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
主要功能特性
1、兼容MCS51指令系统
2、8k可反复擦写(大于1000次)FlashROM;
3、32个双向I/O口;
4、256x8bit内部RAM;
5、3个16位可编程定时/计数器中断;
6、时钟频率0-24MHz;
7、2个串行中断,可编程UART串行通道;
8、2个外部中断源,共8个中断源;
9、2个读写中断口线,3级加密位;
10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;
11、有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。
引脚功能及管脚电压
AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。
P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
P0口
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。
P2口
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。
Flash编程或校验时,P2亦接收高位地址和一些控制信号。
P3口
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
RST
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
XTAL1
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2
振荡器反相放大器的输出端。
时钟振荡器
AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路。
外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,如果使用石英晶体,我们推荐电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10pF。
用户也可以采用外部时钟。
采用外部时钟的电路如图10右图所示。
这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
2.2DS18B20温度传感器
图2-3DS18B20传感器
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
主要根据应用场合的不同而改变其外观。
封装后的DS18B20可用于电缆
沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。
耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
DS18B20工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
高速暂存存储器
高速暂存存储器由9个字节组成,其分配如表5所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。
对应的温度计算:
当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。
第九个字节是冗余检验字节。
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
技术性能描述
1、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
2、测温范围-55℃~+125℃,固有测温分辨率0.5℃。
3、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
4、工作电源:
3~5V/DC
5、在使用中不需要任何外围元件
6、测量结果以9~12位数字量方式串行传送
7、不锈钢保护管直径Φ6
8、适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温
9、标准安装螺纹M10X1,M12X1.5,G1/2”任选
10、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
DS18B20的主要特性
1、适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电
2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
7、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
8、测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
9、负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
应用范围
1该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域
2轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。
3汽车空调、冰箱、冷柜、以及中低温干燥箱等。
4供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制
3.设计方案
方案一:
提到温度的检测,我首先会考虑到传统的测温元件有热电阻和热电偶,而热点阻和热电偶测出的一般都是电压,进行A/D转换后,这样可以用单片机进行数据的处理,在显示电路上就可以将温度显示出来,但这需要比较多的外部的硬件的支持,硬件电路复杂(需要用到A/D转换电路,感温电路),软件调试也复杂,准确度也不高。
方案二:
温度传感器是在单片机电路设计中,使用较多的传感器。
所以可以采用一只温度传感器DS18B20,此温度传感器,可以很容易读出温度值,进行转换,就可以满足设计要求,可以实时测出系统温度。
将两个方案进行比较可以看出,方案二原理简明易行,测量精度高,故采用方案二。
3.1方案的总体设计框图
根据系统的设计要求,选择DS18B20作为本系统的温度传感器,选择单片机AT89C51为测控系统的核心来完成数据采集、处理、显示功能。
选用数字温度传感器DS18B20,省却了采样/保持电路、运放、数/模转换电路以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。
该系统的总体设计思路如下:
温度传感器DS18B20把所测得的温度发送到AT89C51单片机上,经过51单片机处理,将把温度在显示电路上显示,本系统显示器用两位共阴LED数码管以动态扫描法实现。
检测范围0摄氏度到85摄氏度。
数字温度计总体电路结构框图如图2-1所示。
图3-1
3.2电路设计
4.程序设计
DSl8820的主要数据元件有:
64位激光LaseredROM,温度灵敏元件和非易失性温度告警触发器TH和TL。
DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。
此外,还可外接5V电源,给DSl8820供电。
DSl8820的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。
图4-1为读取数据流程图。
图4-1读取数据的流程图
读出温度数据后,LOW的低四位为温度的小数部分,可以精确到0.0625℃,LOW的高四位和HIGH的低四位为温度的整数部分,HIGH的高四位全部为1表示负数,全为0表示正数。
所以先将数据提取出来,分为三个部分:
小数部分、整数部分和符号部分。
小数部分进行四舍五入处理:
大于0.5℃的话,向个位进1;小于0.5℃的时候,舍去不要。
当数据是个负数的时候,显示之前要进行数据转换,将其整数部分取反加一。
还因为DS18B20最低温度只能为-55℃,所以可以将整数部分的最高位换成一个“-”,表示为负数。
图4-2为温度数据处理程序的流程图。
图4-2温度数据处理流程图
5.总结与体会
作为一名即将大四的测控学生,我觉得做单片机方面的课程设计是很有意义的,而且也是必要的。
通过这次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的实际资料是十分必要的,也是必不可少的。
其次,在这次课程设计中,我们运用了许多专业软件,如:
proteus仿真、AltiumDesigner等。
虽然过去我从未独立应用过他们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
最后,要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,这样为资料的保留和交流提供了方便;在设计中遇到的问题要记录,以免下次遇到同样的问题。
在这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经常写与读的过程中才能提高,这就是这次课程设计的最大收获。
附录1软件仿真
附录2制板图
附录3程序源代码
DATA_BUSBITP3.3
FLAGBIT00H;标志位
TEMP_LEQU30H;温度值低字节
TEMP_HEQU31H;温度值高字节
TEMP_SWEQU35H;温度十位数
TEMP_GWEQU36H;温度个位数
DIS_BWEQU37H;显示百位数
DIS_SWEQU38H;显示十位数
DIS_GWEQU39H;显示个位数
DIS_ADDEQU3BH;显示地址
ORG0000H
AJMPSTART
ORG0050H;初始化
START:
MOVSP,#40H
MAIN:
LCALLREAD_TEMP;调读温度程序
LCALLPROCESS;调数据处理程序
AJMPMAIN
;读温度程序
READ_TEMP:
LCALLRESET_PULSE;调用复位脉冲程序
MOVA,#0CCH;跳过ROM命令
LCALLWRITE
MOVA,#44H;读温度
LCALLWRITE
LCALLDISPLAY;显示温度
LCALLRESET_PULSE;调用复位脉冲程序
MOVA,#0CCH;跳过ROM命令
LCALLWRITE
MOVA,#0BEH;读缓存命令
LCALLWRITE
LCALLREAD
RET
;复位脉冲程序
RESET_PULSE:
RESET:
SETBDATA_BUS
NOP
NOP
CLRDATA_BUS
MOVR7,#255
DJNZR7,$
SETBDATA_BUS
MOVR7,#30
DJNZR7,$
JNBDATA_BUS,SETB_FLAG
CLRFLAG
AJMPNEXT
SETB_FLAG:
SETBFLAG
NEXT:
MOVR7,#120
DJNZR7,$
SETBDATA_BUS
JNBFLAG,RESET
RET
;写命令
WRITE:
SETBDATA_BUS
MOVR6,#8
CLRC
WRITING:
CLRDATA_BUS
MOVR7,#5
DJNZR7,$
RRCA
MOVDATA_BUS,C
MOVR7,#30H
DJNZR7,$
SETBDATA_BUS
NOP
DJNZR6,WRITING
RET
;循环显示段位
DISPLAY:
MOVR4,#200
DIS_LOOP:
MOVA,DIS_DP
MOVP2,#0FFH
MOVP0,A
CLRP2.7
LCALLDELAY2MS
MOVA,DIS_GW
MOVP2,#0FFH
MOVP0,A
SETBP0.7
CLRP2.6
LCALLDELAY2MS
MOVA,DIS_SW
MOVP2,#0FFH
MOVP0,A
CLRP2.5
LCALLDELAY2MS
MOVA,DIS_BW
MOVP2,#0FFH
MOVP0,A
MOVA,TEMP_BW
CJNEA,#0,SKIP
AJMPNEXTT
SKIP:
CLRP2.4
LCALLDELAY2MS
NEXTT:
NOP
DJNZR4,DIS_LOOP
RET
;读命令
READ:
SETBDATA_BUS
MOVR0,#TEMP_L
MOVR6,#8
MOVR5,#2
CLRC
READING:
CLRDATA_BUS
NOP
NOP
SETBDATA_BUS
NOP
NOP
NOP
NOP
MOVC,DATA_BUS
RRCA
MOVR7,#30H
DJNZR7,$
SETBDATA_BUS
DJNZR6,READING
MOV@R0,A
INCR0
MOVR6,#8
SETBDATA_BUS
DJNZR5,READING
RET
;数据处理
PROCESS:
MOVR7,TEMP_L
MOVA,#0FH
ANLA,R7
MOVTEMP_DP,A
MOVR7,TEMP_L
MOVA,#0F0H
ANLA,R7
SWAPA
MOVTEMP_L,A
MOVR7,TEMP_H
MOVA,#0FH
ANLA,R7
SWAPA
ORLA,TEMP_L
MOVB,#64H
DIVAB
MOVTEMP_BW,A
MOVA,#0AH
XCHA,B
DIVAB
MOVTEMP_SW,A
MOVTEMP_GW,B
MOVA,TEMP_DP
MOVDPTR,#TABLE_DP
MOVCA,@A+DPTR
MOVDPTR,#TABLE_INTER
MOVCA,@A+DPTR
MOVDIS_DP,A
MOVA,TEMP_GW
MOVDPTR,#TABLE_INTER
MOVCA,@A+DPTR
MOVDIS_GW,A
MOVA,TEMP_SW
MOVDPTR,#TABLE_INTER
MOVCA,@A+DPTR
MOVDIS_SW,A
MOVA,TEMP_BW
MOVDPTR,#TABLE_INTER
MOVCA,@A+DPTR
MOVDIS_BW,A
RET
DELAY2MS:
MOVR6,#3
LOOP3:
MOVR5,#250
DJNZR5,$
DJNZR6,LOOP3
RET
TABLE_DP:
DB00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB06H,07H,08H,08H,09H,09H
TABLE_INTER:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,7H,7FH,6FH
END