远程串口温度采集系统设计Word文档下载推荐.docx
《远程串口温度采集系统设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《远程串口温度采集系统设计Word文档下载推荐.docx(40页珍藏版)》请在冰豆网上搜索。
4.1软件设计总论8
4.1.1软件设计的一般方法8
4.1.2程序流程图设计8
4.2C语言的产生及特点8
4.3总体及各分模块程序设计9
4.3.1主板主程序设计9
4.3.2分板主程序设计10
4.3.3串行通信程序设计10
4.3.4温度采集程序设计12
4.3.5LCD显示设计18
4.4软件抗干扰技术20
结论21
致谢22
附录24
第一章绪论
温度的监视和控制可以说是现代化工、农业最常用的技术,常用于农用系统、音频设备、汽车、气象控制、GPS设备、医疗装置、电信等方面。
例如进行田间温度测量,将温度传感器放置在所需测量的农田的各个位置,在土壤表面,深入到作物根系附近,放置到植物的顶端,测量同一时间内不同位置的温度,经过一段时间的采样从而分析温度对作物生长产生的影响;
还可以在粮库存储的粮食中均匀分布温度探头,监测不同位置的粮食的温度变化,防止或尽早处理霉变现象。
对于这类的温度测量需求,传统的人工测量已经远远的不能满足,而现有的大多数温度测量装置采用热电偶进行温度测量,热电偶发出模拟信号且信号比较微弱,需要先经过增益放大,再进行A/D转换,最后送交给MCU处理。
这样的系统控制多个温度探头需要考虑很多因素,而且多个探头的连接也会使整个系统的构成变得非常复杂,不利于实际应用。
18B20数字测温传感器,其不仅适用与高温或低温的环境,也适用于自然环境或接近自然温度的检测,如:
对冷冻室或冷藏室温度的监测,粮食储备的温度监测,蔬菜大棚、花房的温度监测,程控交换机室的温度监测,孵化室温度监测等等对环境温度要求较严格的场合。
DS18B20在解决各种误差、可靠性和实现系统优化等方面与传统各种温度传感器相比,有无可比拟的优越性,因而广泛应用于过程控制、环境控制、建筑物、机器设备中的温度检测。
而对于远程传输这一课题在本系统中也是不得不考虑的一个因素。
连接DS1820的总线电缆是有长度限制的。
试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。
采用何种传输协议有效地扩展测量半径是我们要解决的一个问题。
第二章远程温度测量系统设计要求与设计方案
2.1系统设计任务和要求
用单片机、18B20数字测温传感器、LCD或LED等设计一温度测量电路,该电路还能进行远距数据传输。
测量温度范围:
-55℃~+125℃;
传输距离:
大于100米。
2.2课题分析
首先,对于远程温度测量,温度探头的低功耗是十分重要的,同时还要满足易于控制的条件,测温范围也必须达到或超过题目要求。
因此选择合适的温度传感器成为本次设计的重中之重。
再次,对于传输距离大于100米的要求,如若直接将温度传感器用大于100米的普通连接线连接到单片机上,不可避免的会产生信号的衰减,甚至会由于外界的干扰造成传输误码率升高。
要解决这个问题,只能通过专用的单片机串口通信设备芯片MAX32解决
2.3方案比较与论证
2.3.1温度传感器的选择
根据题目要求,设计一温度测量电路,能够通过温度传感器测量并显示被测量点的温度,常用的温度传感器可分为3大类:
方案一:
热电偶式
热电偶具有构造简单,适用温度范围广,使用方便,承受热机械冲击能力强以及响应速度快等特点,常用于高温区域,振动冲击大等恶劣环境以及适合于微小结构测温场合;
但其信号输出灵敏度比较低,容易受到环境干扰和前置放大器温度漂移的影响,因此不适合测量微小的温度变化。
方案二:
电阻式
电阻式可用来测量-220~850℃范围内的温度,少数情况下,低温可测量至-272℃,高温可测量至1000℃,互换性差,非线性严重,在腐蚀介质中使用时,易氧化,因此,只能用于低温及无腐蚀性的介质中。
虽然测量温度范围广,但热稳定性差。
方案三:
数字式
DS18B20温度传感器。
DS18B20温度传感器为“一线式器件”,体积更小、适用电压更宽、更方便。
其测量温度范围为-55℃~+125℃,在-10℃~+85℃范围内,精度为±
0.5℃。
其内部有A/D、D/A转换装置,用户可以设置温度的上下限,并具可以直接与单片机进行通讯。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
考虑题目测温范围要求以及测量数据的准确性要求选择方案三。
2.3.2显示部分
使用液晶显示屏显示转换结果。
液晶显示屏1602LCD液晶,平面显示以及影像稳定不闪烁等优势,能显示汉字及各种符号,抗干扰能力强和显示形式灵活等优点。
使用传统的数码显示管。
数码管(LED)受外界环境影响小,显示明亮,编程简单,占用资源较少。
但是LED数码管显示单一,只能显示数字与字母,无法显示文字与曲线。
根据以上的讨论,我们采用方案一。
2.3.3主控芯片的选择
本系统初步设计为一主板加两分板的结构。
主板主要负责接收分板数据及显示任务,分板主要负责温度数据的采集及发送任务。
在综合考虑对芯片的熟悉程度及功能的实现程度上。
决定在主板上采用AT89S52单片机,AT89S52是一种低功耗、高性能的CMOS工艺的8位单片机。
它带有8KB的可在线编程的Flash存储器,该单片机采用了ATMEL公司的高密度、非易失性存储器技术,与工业上标准型80C51单片机的指令系统及引脚完全兼容;
片内的Flash存储器可在线重新编程,或使用通用的非易失性存储器编程器;
通用的8位CPU与在线可编程Flash集成在一块芯片上,从而使AT89S52功能更加完善,应用更加灵活;
具有较高的性能价格比,使其在嵌入式控制系统中有着广泛的应用前景。
虽然市面上有着功能更为强大的单片机芯片,但都价格不菲。
而本设计本着简单实用,精简节约的原则,我们选择了AT89S52单片机芯片。
2.3.4远程传输模块的选择
无线发射接收模块
无线发射模块省却了布线的步骤,使得整个系统看上去更加简洁。
但整个系统的功耗较大,而且无线传输数据易受环境影响,不能保证数据存储的稳定性。
有线通信收发器
MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。
根据以上讨论我们选择MAX232串口通信芯片进行传输数据
2.4方案选定
1.温度传感器DS18B20;
2.显示部分LCD液晶显示器;
3.主控芯片主板AT89S52,分板AT89S52;
4.MAX232串口通信芯片。
第三章远程温度测量系统的硬件设计
3.1总体设计
为完成远程温度测量系统的基本功能,我们采用了一主板加两分板的结构设计。
主板与分板之间通过通信线缆连接,有各自独立的供电模块
主板以AT89S52为主控芯片,主要负责接收来自分板的数据,并将其显示在LCD液晶显示器上。
主要模块有:
单片机最小系统模块,液晶显示模块,MAX232串口通信芯片
两个分板以AT89S52为主控芯片,负责温度的采集及输出任务。
单片机最小系统模块,温度采集模块,通信收发模块,电源模块。
3.2主板部分电路设计
3.2.1AT89S52单片机的性能及应用
AT89S52是一种低功耗、高性能的CMOS工艺的8位单片机。
3.2.2显示模块设计
本次设计选用的液晶显示器是1602液晶显示模块,1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔每行之间也有也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形
3.2.3串行通信
按总线传送信号的形式可分为二大类型:
串行总线和并行总线。
如RS-232C为串行总线,IEEE-488并行总线。
介于单片机端口数目的限制,我们采用了串行通信的方式。
3.2.4电源模块
由于本机整机功耗较小,所需电压较低(仅为5V),我们直接采用了外接稳压直流电源或电池的设计。
3.3分板电路设计
3.3.1AT89S52单片机的性能及应用
AT89S52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含2kbytes的可反复擦鞋的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM)。
器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-5l指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大。
3.3.2DS18B20芯片简介及接口设计
DS18B20是美国Dallas半导体公司的产品。
它采用1-Wire总线技术,具有节省I/O资源,结构简单、成本低廉,便于总线扩展和维护等特点。
DS18B20采用1-Wire总线技术,将地址线、数据线、控制线合为1根信号线,这就使得DS18B20与单片机的接口设计变得十分简单,只需将温度传感器的DQ端口与单片机的任意一个I/O数据口相连即可。
由于单总线为开漏所以需要外接一个4.7K的上拉电阻。
其余分板电路模块(如通信模块,电源模块,单片机最小系统模块)在主板中已做过介绍,在此不再赘述。
第四章远程温度采集系统的软件设计
4.1软件设计总论
软件设计(Programming)是指设计、编制、调试程序的方法和过程。
它是目标明确的智力活动。
由于程序是软件的本体,软件的质量主要通过程序的质量来体现,在软件研究中,程序设计的工作非常重要,内容涉及到有关的基本概念、工具、方法以及方法学等。
软件设计通常分为问题建摸,算法设计,编写代码和编译调试四个阶段。
4.1.1软件设计的一般方法
软件设计一般根据系统中功能模块进行分割,首先应确定主程序框图,然后划分软件功能模块。
程序设计中应实现模块化,子程序化。
所谓模块化就是把一个完整的程序分解成完整的程序分解成若干个功能上相对独立的较小程序块,各小程序进行单独设计和调试,最后将各程序模块连接起来进行总调试。
这种方法思路清楚,软件故障容易排除,便于移植及修改。
当软件各功能模块分别调试完毕后,即可进行主程序调试。
主程序调试主要是排除各个功能模块之间连接中可能出现的问题,如各个功能使用的RAM区域有否重叠现象,寄存器有否发生冲突,堆栈区域有否溢出等等。
4.1.2程序流程图设计
程序设计工作往往比较复杂,为了能把复杂的工作条理化、直观化,通常实用的方法是流程图法。
程序流程图是人们对解决问题的方法、思路或算法的一种描述。
流程图的优点:
1.采用简单规范的符号,画法简单;
2.结构清晰,逻辑性强;
3.便于描述,容易理解。
尤其是对于大型软件的设计,流程图会对设计过程产生事半功倍的效果
4.2C语言的产生及特点
一、C语言的产生和发展
1.1972年美国的DennisRitchie,最初用在UNIX下的DECPDP-11计算机。
由早期的BCPL(BasicCombindProgrammingLanguage)发展而来,并命名为C语言。
2.ANSIC提交给ISO后产生ISOC(内容基本一致):
3.于1989年发布了第一个C的标准:
C89
4.最新一个是1999年的:
C99
5.GCC是具体的C编译器
二、C语言的特点(原则):
1.C是中级语言(它能对计算机硬件直接操作。
当然说它是高级语言也对)
2.C是结构式语言
数据与代码区隔,以函数<
注意跟数学的函数区分,它是大函数概念>
形式(具体逻辑功能的载体,通过输入参数,进行内部黑箱操作,最后产生一个结果<
直接消化,或者返回给调用用户>
)组织代码,通过循环,条件等控制语句使程序完成的结构化
C一定会有的函数是intmain(intargc,char*argv[])//windows下main()是void返回类型。
main()是整个程序的起点和入口
3.C功能齐全,代码精简,效率高效
#include<
stdio.h>
具体功能的实现体,具体程序中没有用到的库函数,相关头文件没必要include.(包含)
4.C适用范围大
故本次编程用C语言进行编程。
4.3总体及各分模块程序设计
4.3.1主板主程序设计
主板工作过程为:
在进行系统初始化后主机向两分板发送选择地址,等待分板响应,若分板未连接或无响应,则继续向外发送选择地址。
有响应,将接收到的数据存储到内存单元,调用显示程序显示温度。
周而复始,完成工作。
图4-1主板主程序流图
4.3.2分板主程序设计
分板工作过程:
采集温度数据到内存单元,接收主机发送到的选择地址与自身地址进行比较。
若相同,向主板发送数据;
不同继续等待接收选择地址。
图4-2分板主程序流图
4.3.3串行通信程序设计
本设计为系统设计,必然要考虑信道的利用问题。
但在本系统设计中我们采用了主从式的网络设计。
在主从式网络中,信道由主机进行控制,不存在竞争信道的问题。
52单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据。
但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,它们的地址为99H。
SCON控制寄存器,它是一个可寻址的专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下:
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
下面我们对各控制位功能介绍如下:
1.SM0、SM1:
串行口工作方式控制位。
SM0,SM1
工作方式
00
方式0
01
方式1
10
方式2
11
方式3
2.SM2:
多机通信控制位。
多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。
接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。
当SM2=0时,就不管第位数据是0还是1,都难得数据送入SBUF,并发出中断申请。
工作于方式0时,SM2必须为0。
3.REN:
允许接收位。
REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。
4.TB8:
发送接收数据位8。
在方式2和方式3中,TB8是要发送的——即第9位数据位。
在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。
5.RB8:
接收数据位8。
在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。
6.TI:
发送中断标志位。
可寻址标志位。
方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。
7.RI:
接收中断标志位。
接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。
电源管理寄存器PCON
PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是87H,其结构格式如下
SMOD
在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。
系统复位默认为SMOD=0。
串行口的初始化主要就是对这两个位进行设置。
单片机通过对DE和/RE的置位或复位控制接收状态或发送状态。
图4-3主板串行口程序流图图4-4分板串行口程序流图
4.3.4温度采集程序设计
部分温度采集程序及其发送端口初始化程序:
/************************************************************************
以下是DS18B20的操作程序
************************************************************************/
sbitDQ=P3^3;
unsignedchartime;
//设置全局变量,专门用于严格延时
/*****************************************************
函数功能:
将DS18B20传感器初始化,读取应答信号
出口参数:
flag
***************************************************/
bitInit_DS18B20(void)
{
bitflag;
//储存DS18B20是否存在的标志,flag=0,表示存在;
flag=1,表示不存在
DQ=1;
//先将数据线拉高
for(time=0;
time<
2;
time++)//略微延时约6微秒
;
DQ=0;
//再将数据线从高拉低,要求保持480~960us
200;
time++)//略微延时约600微秒
//以向DS18B20发出一持续480~960us的低电平复位脉冲
//释放数据线(将数据线拉高)
10;
time++)
//延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)
flag=DQ;
//让单片机检测是否输出了存在脉冲(DQ=0表示存在)
time++)//延时足够长时间,等待存在脉冲输出完毕
return(flag);
//返回检测成功标志
}
从DS18B20读取一个字节数据
dat
***************************************************/
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat;
//储存读出的一个字节数据
for(i=0;
i<
8;
i++)
{
DQ=1;
//先将数据线拉高
_nop_();
//等待一个机器周期
DQ=0;
//单片机从DS18B20读书据时,将数据线从高拉低即启动读时序
//等待一个机器周期
DQ=1;
//将数据线"
人为"
拉高,为单片机检测DS18B20的输出电平作准备
for(time=0;
//延时约6us,使主机在15us内采样
dat>
>
=1;
if(DQ==1)
dat|=0x80;
//如果读到的数据是1,则将1存入dat
else
dat|=0x00;
//如果读到的数据是0,则将0存入dat
//将单片机检测到的电平信号DQ存入r[i]
;
//延时3us,两个读时序之间必须有大于1us的恢复期
}
return(dat);
//返回读出的十六进制数据
向DS18B20写入一个字节数据
入口参数:
WriteOneChar(unsignedchardat)
unsignedchari=0;
for(i=0;
i<
i++)
DQ=0;
//将数据线从高拉低时即启动写时序
DQ=dat&
0x01;
//利用与运算取出要写的某位二进制数据,
//并将其送到数据线上等待DS18B20采样
time++)
;
//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样
DQ=1;
//释放数据线
1;
//延时3us,两个写时序间至少需要1us的恢复期
dat>
//将dat中的各二进制位数据右移1位
}
4;
//稍作延时,给硬件一点反应时间
做好读温度的准备
voidReadyReadTemp(void)