1、(1)方案一采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成,热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。数据采集部分则使用带有A/D 通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D 转换电路,感温电路比较麻烦。系统主要
2、包括对A/D0809 的数据采集,自动手动工作方式检测,温度的显示等,这几项功能的信号通过输入输出电路经单片机处理。此外还有复位电路,晶振电路,启动电路等。故现场输入硬件有手动复位键、A/D 转换芯片,处理芯片为51 芯片,执行机构有4 位数码管、报警器等。(2)方案二采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0100 摄氏度时,最大线形偏差小于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89
3、C51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC 机通信上传数据,另外AT89C51 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。该系统利用AT89C51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。此温度控制系统先是DS18B20中数据经自身A/D转换后送入到
4、单片机,然后经8255显示输出,如果需要修改温度参数或者是查看设置和其他功能,软件写入相关命令。总体框图如图1.1所示。 图1.1 DS18B20温度测温系统框图从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大。方案二的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用了方案二。1.4 设计原理此系统是为多子系统的综合性控制系统,设计过程中也是分块实现设计调试,最后进行综合实现,以下就从各子系统的工作原理进行分别进行说明。如图1.2所示,首先器件上电复位,温度检测芯片DS18B20检测当前温度。单片机从DS18B20中读出温度值,并与DS
5、18B20非易失性存储器中的TH,TL值比较(其中TH为设定温度最高值,TL为设定温度最低值),经DS18B20显示输出当前温度值。图1.2 系统总体流程图 2 硬件系统的设计2.1 硬件系统各模块功能简要介绍2.1.1 单片机主控制器AT89C51AT89C51是一种带4K字节闪烁可编程可擦除只读存储器,高性能CMOS 8位微处理器。AT89C51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中
6、,ATMEL的AT89C51是一种高效微控制器。外形及引脚排列如图2.1所示 主要特性:与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24MHz 三级程序存储器锁定 1288位内部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 图2.1 AT89C51引脚图 2.1.2 可编程并行接口芯片8255 8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚),如图2.2所
7、示。其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口A、B、C口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。(1)一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口. (2)具有24个可编程设置的I/O口,即使3组8位的I/O口为PA口,PB口和PC口.它们又可分为两组12位的I/O口,A组包括A口及C口(高4位
8、,PC4PC7), B组包括B口及C口(低4位,PC0PC3).A组可设置 为基本的I/O口,闪控(STROBE)的I/O闪控式, 双 向I/O3种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器 的控制字决定。 图2.2 8255引脚图 2.1.3 时钟电路模块时钟电路由一个晶体振荡器12MHz和两个33pF的瓷片电容组成。如图2.3所示,时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地作。图2.3时钟电路单片机内
9、部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。电容器C1和C2的作用是稳定频率和快速起振,电容值的范围在50pF30pF,典型值为30pF。晶振的频率通常选择两种6MHz和12MHz。只要在单片机的XTAL1和XTAL2引脚外接晶体振荡器就构成了自激振荡器并在单片机内部产生时钟脉冲信号。2.1.4 复位电路模块复位电路是使单片机的CPU或系统中的其他部件处于某一确定的初始状态,并从这上状态开始工作,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统
10、处于死锁状态时,为摆脱困境,也需按复位电路以重新启动。本设计采用的是按键复位(如图2.4所示)。按键复位是使复位端接电阻与VCC电源接通来实现的。图2.4复位电路2.1.5 显示电路模块本次设计中,采用LED四位一体数码管,共有四个位控,八个段控,其中第一位为小数位,第二、三、四位分别为个、百位。设计中采用共阳极接法,PB口做段控输出口,PA口做位控输出口,使用74LS244驱动。此电路模块主要是用于显示温度,如图2.5所示。 图2.5显示电路2.1.6 温度传感模块(1) DS18B20的介绍DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏
11、电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以或位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会发热烧毁,但不能正常工作;DS18B20采用脚PR35封装或脚SOIC封装,其内部结构框图如图2.6所示。 DQ 图2.6 DS18B20结构框图(2) DS18B20的工作原理DS18B20的测
12、温原理:器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数器的预置将重新被装入,减法计数器重
13、新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20发ROM功能命令发存储器操作命令处理数据。(3) DS18B20与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电
14、源。另一种是寄生电源供电方式。为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。本设计采用电源供电。双向数据传输口通过直接与单片机的I/O口相连,进行单片机控制DS18B20的初始化、读、写操作。DS18B20与单片机的接口电路如图2.7所示。图2.7 DS18B20与单片机的接口电路(4) 温度传感模块的功能DS18B20温度传感器负责采集外部环境的温度,通过单种线,由严格的时序控制将温度数据传给单片机。2.1.7 控制电路模块在单片机控制电路中,可把单片机使用的键盘分为独立式和矩阵式两种。独立式实际上就是一组独立的按键,这些按键可直接与单片机的
15、I/O口连接,即每个按键独占一条口线,这种接法简单。矩阵式键盘也称行列式键盘,因为键的数目较多,所以键按行列组成矩阵。本设计中键盘数目较少,且为安装方便,因此在本设计中采用独立式接法。其中P3.2接的开始键,P3.3接的结束键。如图2.8所示。 图2.8 控制电路模块 2.2 总体电路图、PCB图及元器件布局图2.2.1 总体电路图总体电路图见附录一。2.2.2 PCB图PCB图见附录二。2.2.3 元器件布局图元器件布局图见附录三。2.3 元器件清单 元器件清单见附录四。3 软件系统的设计3.1 使用硬件资源的情况本次数字温度计的设计使用到的硬件资源如下:(1)P3.5口接ds18b20,P
16、3.2为开始键,P3.3为结束键;(2)P0口与8255总线接口电路相连,以最低两位地址作为8255的口选择端,对应A0和A1;(3)P2.7作为连接8255片选信号接口;(4)使用8255,四位LED显示器接口电路,PB口接数码管段控,PA口(PA1PA3)接数码管位控;3.2 各模块功能简要介绍3.2.1 单片机主控制模块功能:AT89C52通过上电复位显示P.,按开始键后,启动DS18B20,然后读取DS18B20,将温度进行处理后经8255送给数码管,显示出对应温度值。3.2.2 温度传感器DS18B20模块DS18B20通过对总线的控制进行初始化、写时序、读时序。最后读出LSB、MS
17、B字节中的温度数据。通过总线传递给单片机。3.2.3 数码管显示模块把从ds18b20读取的数据经过查表处理得到相应位断码后经8255把数据送到数码管显示出来。3.3 程序流程框图(1)单片机主体控制流程框图3.1所示(2)温度传感器DS18B20初始化程序流程图3.2所示。(3)向温度传感器DS18B20写一字节程序流程图3.3所示。(4)温度传感器DS18B20读出一字节程序流程图3.4所示。(5)温度传感器DS18B20读取温度程序流程图3.5所示。 图3.1主程序流程图 图3.2 DS18B20初始化程序流程图 图3.3 DS18B20写一字节程序流程图 图3.4 DS18B20读一字
18、节程序流程图图3.5 DS18B20读取温度程序流程图3.4 程序清单#includeabsacc.hintrins.h#define uint unsigned int#define uchar unsigned char#define PA 0x7ffc /PA口位控#define PB 0x7ffd /PB口段控 #define con 0x7fff /控制字 sbit A8=P00; /地址线A0 sbit A9=P01; /地址线A1sbit cs=P27; /片选;低电平有效sbit wr=P36; /读端口uint temp;/温度数值uchar tplsb,tpmsb; / 温
19、度值低位、高位字节sbit date=P35; /数据通信线uchar code tableshi=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/数码管段选 十位供阴1有效uchar code tablege=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/数码管段选 个位 带小数点,即dp=1/uchar code tablewei=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/数码管位选*延时子程序*void delay(uchar i) uchar j,k; fo
20、r(j=i;j0;j-) for(k=125;kk-);*DS18B20复位子程序*void init() uint i; date=1; delay(1); date = 0; i = 100; /拉低约900us while (i0) i-; date= 1; / 产生上升沿 i = 4;*等待应答脉冲子程序*void wait() while(date); while(date); / 检测到应答脉冲*DS18B20读取一个位子程序*bit readbit() bit b; i+; date = 1;i+; / 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效 b
21、= date; i = 8; while(i return (b);*DS18B20读取一个字节*uchar readbyte() uchar i,j,b; b = 0; for (i=1;i=8;i+) j = readbit(); b = (j1);/读出的数据最低位在最前面,这样刚好一个字节在DATE里 return(b);*DS18B20写一个字节子程序*void writebyte(uchar b)/ uchar j; bit btmp; for(j=1;j1; / 取下一位(由低位向高位) if (btmp) / 写1 / 延时,使得15us以内拉高 / 整个写1时隙不低于60us
22、 else / 写0 / 保持低在60us到120us之间*温度转换子程序*void convert() init(); / 产生复位脉冲,初始化DS18B20 wait(); / 等待DS18B20给出应答脉冲 / 延时 writebyte(0xcc); / 跳过rom 命令 writebyte(0x44); / convert T 命令转换温度*DS18B20读取温度子程序*uint readtemp() float tt; writebyte(0xcc); / 跳过rom命令 ritebyte(0xbe); / read scratchpad 读暂存器命令 tplsb=readbyte(
23、); / 温度值低位字节(其中低4位为二进制的小数部分) tpmsb=readbyte(); / 温度值高位字节(其中高5位为符号位) temp=tpmsb; temp /合成一个字 temp=temp|tplsb; tt=temp*0.0625; temp=tt*10+0.5; return temp;*显示子程序*void display(uint temp) uchar A1,A2,A3; A1=temp/100;百位 A2=temp/10%10;十位 A3=temp%10;个位 wr=1; XBYTEPA=0x20; /选通第一位数码管 wr=0; XBYTEPB=tableshiA1; /显示百位 delay(10); XBYTEPA=0x00; /关掉显示百位 XB
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1