单片机串口温度测量系统设计.docx
《单片机串口温度测量系统设计.docx》由会员分享,可在线阅读,更多相关《单片机串口温度测量系统设计.docx(17页珍藏版)》请在冰豆网上搜索。
单片机串口温度测量系统设计
1、设计任务书
1.设计题目:
基于串行口收发电路的温度测量单片机系统设计
2目的意义:
(1)综合运用并巩固所学单片机设计知识;
(2)采用编程的方法实现基于串行口收发电路的温度测量单片机系设计。
2、具体设计
如上图,数字温度传感器采集数据后,经过信号调理电路,将数据送至AT89C51。
此后AT89C51换算整理数据,将所算得的温度送至显示电路,或传送到PC终端。
按键模块可以实现对AT89C51的复位、总开关、串行口的开启等的控制。
3、电子元器件的选择
3、1单片机的选择
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
3、2串口通信元器件选择
3.2.1C51串行通信基本原理
串行通信是一种能把二进制数据按位传送的通信,故它所需传输线条数极少,特别适用于远程通信之中。
串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线上,以每次一个二进制位移动的。
它的优点是只需一对传输线进行传送信息,因此其成本低,适用于远距离通信;它的缺点是传送速度低。
串行通信有异步通信和同步通信两种基本通信方式。
同步通信适用于传送速度高的情况,其硬件复杂。
而异步通信应用于传送速度在50到19200波特之间。
是比较常用的传送方式。
在异步通信中,数据是一帧一帧传送的,每一串行帧的数据格式由一位起始位,5~8位的数据位,一位奇偶校验位(可省略)和一位停止位四部分组成。
在串行通信前,发送方和接收方要约定具体的数据格式和波特率(通信协议)。
串口通信示意图如下图所示。
3.2.2MAX232与RS232
▲MAX232芯片简介
MAX232芯片是MAXIM公司生产的低功耗、单电源双RS232发送/接收器。
适用于各种EIA-232E和V.28/V.24的通信接口。
MAX232芯片内部有一个电源电压变换器,可以把输入的+5V电源变换成RS-232C输出电平所需±10V电压,所以采用此芯片接口的串行通信系统只要单一的+5V电源就可以。
MAX232外围需要4个电解电容C1、C2、C3、C4,是内部电源转换所需电容。
其取值均为1μF/25V·宜选用钽电容并且应尽量靠近芯片。
C5为0.1μF的去耦电容。
MAX232的引脚T1IN、T2IN、R1OUT、R2OUT为接TTL/CMOS电平的引脚。
引脚T1OUT、T2OUT、R1IN、R2IN为接RS-232C电平的引脚·因此TTL/CMOS电平的T1IN、T2IN引脚应接MCS-51的串行发送引脚TXD;R1OUT、R2OUT应接MCS-51的串行接收引脚RXD。
与之对应的RS-232C电平的T1OUT、T2OUT应接PC机的接收端RD;R1IN、R2IN应接PC机的发送端TD。
▲RS232简介
RS232是个人计算机上的通信接口之一,由电子工业协会(ElectronicIndustriesAssociation,EIA)所制定的异步传输标准接口。
通常RS-232接口以9个引脚(DB-9)或是25个引脚(DB-25)的型态出现
在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。
RS-232标准规定的数据传输速率为每秒150、300、600、1200、2400、4800、9600、19200波特。
RS-232标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。
传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于15m以内的通信。
同时RS232是点对点(即只用一对收、发设备)的通信,因此PC机课直接对一个下位机进行远距离通信。
3.3温度传感器的选择
随着科技的发展,现在市场的温度的传感器种类越来越多,有数字传感器和模拟传感器。
而模拟传感器需要信号放大电路、A/D转换电路和采样保持电路,设计较为复杂,并且信号有时不稳定,因此我选择的是DS18B20数字传感器,价格便宜,信号调理电路简单。
本课程设计的传感器模块采用了DS18B20芯片。
传统的温度检测可以使用热敏电阻作为温度敏感元件,热敏电阻主要优点是成本低,但需后续信号处理电路,而且可靠性相对较差,准确度和精度都较低。
美国Dallas公司最新推出的DS18B20数字式温度传感器,与传统的热敏电阻温度传感器不同,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式,可以分别在93.75ms和750ms内将温度值转化9位和12位的数字量。
因而使用DS18B20可使系统结构更简单,可靠性更高。
芯片的耗电量很小,从总线上“偷”一点电存储在片内的电容中就可正常工作,一般不用另加电源。
最可贵的是这些芯片在检测点已把被测信号数字化了,因此在单
总线上传送的是数字信号,这使得系统的抗干扰性好、可靠性高、传输距离远。
4、硬件设计
4.1DS18B20调理电路设计
DS18B20和单片机之间的外围电路是很简单的,如下图示。
系统有如下特点:
(1)单线接口,只有一根信号线与CPU连接单总线器件,具有线路简单,体积小的特点;
(2)不需要备份电源,可通过信号线供电,电源电压范围从3.3~5V;
(3)传送串行数据,不需要外部元件;
(4)温度测量范围从-55℃~+125℃,-10~+85℃时测量精度为±0.5℃;
(5)通过编程可实现9~12?
位的数字值读数方式(出厂时被设置为12位);
(6)零功耗等待;
(7)现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如环境控制、设备或过程控制、测温类消费电子产品等。
4.2串口收发电路设计
如图所示,MAX232外围需要4个点解电容C1、C2、C3、C4,是内部电源转换所需电容。
其取值均为1uF/25V。
应尽量靠近芯片。
C5为0.1uF的去耦电容。
引脚T1OUT、T2OUT、R1IN、R2IN为接RS-232C电平的引脚。
在本系统中TTL/CMOS电平的T1IN引脚应接MCS-51的串行发送引脚TXD;R1OUT应接MCS-51的串行接收引脚RXD,与之对应的RS-232C电平的T1OUT应接PC机的接收端RXD,R1IN应接PC机的发送端TXD。
因为MAX232具有驱动能力,所以不需要外加驱动电路。
4.3显示接口
本系统采用8个LED数码管为显示单元,其中3个为温度数值,一个为温度单位。
如图所示,驱动芯片采用74LS245芯片。
用来连接数码管和单片机,传输的是数码管的段选信号(我采用的是8段数码管)。
74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。
74LS245还具有双向三态功能,既可以输出,也可以输入数据。
当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)DIR=“1”,信号由A向B传输;(发送)当CE为高电平时,A、B均为高阻态。
由于P2口始终输出地址的高8位,接口时74LS245的三态控制端1G和2G接地,P2口与驱动器输入线对应相连。
P0口与74LS245输入端相连,E端接地,保证数据线畅通。
8051的/RD和/PSEN相与后接DIR,使得RD和PSEN有效时,74LS245输入(P0.1←D1),其它时间处于输出(P0.1→D1)。
4.4按键接口
本系统设置的按键接口包括80C52复位,电路总开关,串行口通信控制。
如下是复位控制图.
如下式电路总开关。
VCC是各电路标号VCC是5V电源信号。
如下图是串行口控制开关。
接P3.5口,但开关不按下时保持通信,按下时关闭通信。
5、软件设计
5.1下位机程序流程图
系统由AT89S52单片机作为中央控制器,控制各功能模块的正常工作及数据的接收和处理。
整个软件系统是这样来设计的:
首先上位机编辑好源程序再转换为相应的可执行的二进制代码文件由编程下载电路传送到单片机中存储。
通过按键来控制系统的功能,主程序的流程图如下图所示。
5.2上位机PC部分软件设计
上位机这部分,可以使用超级终端、VB、LABVIEW等软件工具进行串口通信。
在此介绍下VB串口通信。
在VB中使用MSComm控件。
MSComm控件具有功能完善的串口数据发送和接受功能,有两种处理通信的方式,即事件驱动方式和查询方式,事件驱动方式是利用MSComm控件的OnComm事件捕获并处理通信错误事件,是处理串行端口交互作用的一种非常有效的方法;查询方式是通过检查CommEvent属性的值来判断事件和错误。
几个重要属性:
⑴InputMode确定Input属性的类型,即什么形式读出所收的数据。
⑵Rthreshold用于确定收到多少字符才产生OnComm事件。
⑶Sthreshold如果在发送缓冲区中的字符数由大于Sthreshold变到小于Sthreshold时,将产生OnComm事件。
⑷InBuffercount用以告诉用户,已收到多少字节的数据。
⑸Settings以字符串形式设置或返回串口的波特率、奇偶校验位。
数据位长度。
停止位。
⑹InBufferSize和OutBufferSize分别指定接收缓冲区和发送缓冲区的大小。
1、原理图
2、总程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P2^4;
unsignedcharflag;
ucharcodescan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
ucharcodetable[13]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x39,0x00};
ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09};
uchardispbuf[8];
uchartemper[2];
voiddelay(unsignedintus)
{
while(us--);
}
voidreset(void)
{
ucharx=0;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(14);
x=DQ;
delay(20);
}
ucharreadbyte(void)
{
uchari=0;
uchardat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
DQ=1;
dat|=0x80;
delay(4);
}
return(dat);
}
voidwritebyte(unsignedchardat)
{
uchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
voidreadtemp(void)
{
uchara=0,b=0;
reset();
writebyte(0xCC);
writebyte(0x44);
reset();
writebyte(0xCC);
writebyte(0xBE);
a=readbyte();
b=readbyte();
if(b>0x0f)
{
a=~a+1;
if(a==0)
b=~b+1;
elseb=~b;
flag=10;
}
elseflag=12;
temper[0]=a&0x0f;
a=a>>4;
temper[1]=b<<4;
temper[1]=temper[1]|a;
}
voidscandisp()
{
unsignedchari,value;
for(i=0;i<8;i++)
{P3=0xff;
value=table[dispbuf[i]];
if(i==3)
value|=0x80;
P0=value;
P3=scan[i];
delay(50);
}
}
voidmain()
{
uchartemp,temp1;
while
(1)
{
scandisp();
readtemp();
temp1=temper[0];
temp=temper[1];
dispbuf[4]=ditab[temp1];
dispbuf[1]=temp/100;
dispbuf[3]=temp%100;
temp=temp/10;
dispbuf[2]=temp%10;
dispbuf[0]=flag;
dispbuf[5]=11;
}
}