当前位置:文档之家› 智能仪表原理与设计综合训练报告

智能仪表原理与设计综合训练报告

智能仪表原理与设计综合训练报告
智能仪表原理与设计综合训练报告

智能仪表原理与设计

综合训练报告

题目:温度采集仪的设计

班级:

姓名:

学号:

指导教师:

成绩:

目录

前言 (1)

第1章课程设计任务和要求 (2)

1.1 设计任务 (2)

1.2 技术指标 (2)

第2章系统设计方案 (3)

2.1 温度采集仪总体设计方案 (3)

2.2 各模块设计方案 (3)

第3章系统硬件电路设计 (5)

3.1 单片机STC89C52简介和最小系统 (5)

3.1.1 STC89C52单片机简介 (5)

3.1.2 STC89C52单片机最小系统 (5)

3.2 数字温度传感模块设计 (7)

3.2.1 数字温度传感器DS18B20简介 (7)

3.3 显示模块设计 (9)

3.3.1 LCD1602液晶显示器的工作原理 (9)

3.3.2 LCD1602液晶显示器的设计 (10)

3.4 报警模块设计 (11)

3.4.1 蜂鸣器简介 (11)

3.5 温度上下限值电路设计 (12)

3.6 串口输出电路的设计 (13)

3.6.1 波特率的计算 (13)

3.6.2 MAX232芯片实现串行通信的电平转换 (13)

第4章系统软件电路设计 (15)

4.1 LCD液晶显示软件设计 (15)

4.2 主控模块软件设计 (17)

4.3 温度采集软件设计 (19)

4.4 报警电路软件设计 (24)

第5章系统软硬件调试结果分析 (26)

5.1 软硬件联调结果如表1-3所示 (26)

5.2 VB界面显示如图2.7所示 (26)

5.3 软硬件联调结果分析 (27)

参考文献 (28)

致谢 (29)

附录A 硬件原理图 (30)

附录B 实物图 (32)

附录C 元器件清单 (34)

前言

在日常生活及工农业生产中经常要用到温度的检测及控制,目前使用最广泛的温度测量系统一般由温度测量元件、温度变送器和温度指示仪表三个部分组成。这种结构存在两个方面的缺点:一是三个部分相互分离,不便于随身携带和进行临时性的测量;二是整个系统不易取得较高的性能价格比。传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试复杂,制作成本高。

本文提出的一种由单片集成电路构成的温度传感器的种类多,测量的精度高,响应时间短,使用方便无需变换电路等。该测温仪本身就是一个完整的温度测量系统,它不仅可以将代表被测温度值的电信号转换成温度值并显示出来,而且还将处理后的温度数值转换成电流或电压信号输出,以供计算机或其他仪表使用,即完成温度变送器的功能。

近年来,美国DALLAS公司生产DSI8B20为代表的新型单总线数字式温度传感器以其突出优点广泛使用于仓储管理、工农业生产制造、气象观测、科学研究以及日常生活中。DSI8B20集温度测量和A/D转换于一体,直接输出数字量,传输距离远,可以很方便地实现多点测量。温度采集仪增加PC机与单片机之间的通信,可以对实时温度进行远程监测与存储,此仪器可用于蔬菜大棚的监控或者工厂中的锅炉温度的采集等场合应用广泛。

第1章课程设计任务和要求

1.1 设计任务

本次课程设计要求设计出智能化温度测量仪表,要求该测量仪表能够通过温度传感器采集温度,并将温度传到单片机进行处理,并通过液晶显示,同时以单片机为核心的主控单元通过对按键的操作,设定上下限报警温度与实测温度进行比较,并判断是否报警,且与PC机通信将监测的温度发送到PC机。

温度监测界面可用VB进行编程设计实现上位机人机界面的设计,要求上位机发送的命令下位机能及时的给与响应,并且上位机能够实时准确的显示下位机所上传数据以及电机设备的运行状态;使用汇编语言完成下位机程序驱动,并且要尽量保证系统的稳定性和可靠性以及使用性。

1.2 技术指标

1.可以对0℃~+125℃温度进行实时采集并能(通过液晶)显示;

2.可以通过按键人工设定上下限报警温度并判断是否报警(蜂鸣器发出响声);

3.实现下位机与PC机之间的串行通信(在PC机上用VB所编写界面显示实测温度值)。

第2章系统设计方案

2.1 温度采集仪总体设计方案

单片机控制电路中使用STC89C52。温度采集电路中采用数字温度传感器DS18B20(该传感器具有测温范围广、测温准确的优点,其精确度可达到0.1摄氏度,可测量的温度范围从-55~125摄氏度)。将采集到的温度数据送到单片机,通过单片机控制的温度报警模块判断是否报警,最终将实测温度发送到液晶显示器LCD1602显示,同时很方便的完成单片机与PC机之间的串行通信(利用MAX232芯片实现电平转换功能,在VB程序编写的界面上显示监测温度)。

温度采集仪设计如图1.1所示。

图1.1 图温度采集仪设计

2.2 各模块设计方案

本设计是一个基于单片机的温度采集仪,利用单片机的功能强大且体积小、价格低、抗干扰性好等特点,根据需要完成的功能需要在本设计中实现温度的采集、显示、上下限报警温度值设定、报警和与PC机的串行通信等功能。本设计中主要分硬件与软件的设计,硬件包括:主控模块、温度传感模块、显示模块、按键模块、报警模块、通信模块等,软件包括:温度采集、按键与报警、显示、PC机上的温度界面等。

(1)主控模块:可以选用STC89C系列的单片机,这里采用的STC89C52单片机,价格便宜,使用方便,STC89C52的片内RAM已能满足存放要求。

(2)温度传感模块:由于本设计中单片机除了要完成数据采集、处理、控制和显示任务外,还要完成按键值的采集、处理。如果用常规的数字加模拟电路实现就会相对困难一

些。本设计选用的数字式集成温度传感器DS18B20。DS18B20是DALLAS半导体公司(现属MAXIM公司)设计生产的单总线数字温度传感器,其测量温度范围为-55℃~+125℃,在-10~+85℃时精度为±0.5℃。这个传感器最大的特点就是能够从一根总线直接输出二进制的温度信号,不需要A/D转换和信号放大。这样的选择使得整个电路的硬件设计更为简化,节省了单片机的资源。

(3)显示模块:可以使用数码管或者液晶显示,两者皆可。在本设计中,主要使用液晶,焊接简单且程序调用方便。

(4)按键模块:本设计采用三个按键分别用来设定上限、下限温度。

(5)报警模块:就是当设定的温度在门限温度之外,就会报警,蜂鸣器发出响声。

(6)通信模块:RS-232电平与单片机TTL电平之间的转换方式,可以使用分立元件焊接而成,也可以直接使用集成芯片MAX232芯片。从电路使用方便的角度来看直接采用集成芯片,适应性更强,加之其价格适中,硬件接口简单。

第3章系统硬件电路设计

3.1 单片机STC89C52简介和最小系统

3.1.1 STC89C52单片机简介

本设计采用的是STC公司的STC89C52单片机。其特性如下:

(1)工作频率:0~80MHz;

(2)3个标准16位定时/计数器;

(3)可编程I/O口线32条,中断源5个;

(4)8K字节快闪ROM,128字节RAM;

(5)工作电压:3~5V;

(6)40引脚,DIP封装;

STC89C52引脚图如图1.2所示。

图1.2 STC89C52引脚图

3.1.2 STC89C52单片机最小系统

最小系统包括单片机的电源、时钟电路和复位电路。

1.时钟电路

STC89C52单片允许的时钟频率的典型值12MHz或11.0592MHz,也可以是6MHz。本设计要使用串行通信,所以应采用11.0592MHz。

接到晶振两端的瓷片电容作用是使振荡器起振和对f 微调补偿,典型值为30PF,本设计中选用30PF瓷片电容。当单片机加电以后延迟约10ms的时间振荡器产生时钟,不受软件控制(XTAL2输出幅度为3V左右的正弦波)。

单片机时钟电路如图1.3所示。

图1.3 单片机时钟电路

2.复位电路

计算机在启动运行时都需要复位,使中央处理器CPU和系统中的其它部件都处于一个确定的初始状态,并从这个状态开始工作。单片机的复位引脚是RST,当振荡器起振后,该引脚上出现2个周期的高电平,是器件复位,只要RST保持高电平,单片机保持复位状态。单片机复位方式有二种:上电复位(如图1.4所示)、人工复位(如图1.5所示)。本设计中两种方法都采用。

图1.4 上电复位电路图1.5 上电复位和开关复位注:RST与Vss之间的那个电阻在NMOS型单片机中需要接,但是在CMOS型单片机中不接,本设计电路中就可以不接。

3.2 数字温度传感模块设计

3.2.1 数字温度传感器DS18B20简介

美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及

转换电路集成在形如一只三极管的集成电路内。

1. DS18B20的主要特性

(1)适应电压范围更宽,电压范围:3.0V~5.5V,在寄生电源方式下可由数据线供电。

(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

(3)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。

(4)温度范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。

(5)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。

(6)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。

(7)测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。

(8)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

2. DS18B20的外形、内部结构及引脚定义

(1)DS18B20的外形及管脚排列如图1.6所示。

a. DQ为数字信号输入/输出端;

b. GND为地线;

c. VDD为外界供电电源输入端(在寄生电源接线方式时接地)。

图1.6 DS18B20的外形及管脚排列

(2)DS18B20的内部结构图如图1.7所示。

图1.7 DS18B20的内部结构图

3. DS18B20与单片机连接电路

DS18B20与单片机连接电路如图1.8所示。

图1.8 DS18B20与单片机连接电路

3.3 显示模块设计

显示模块部分主要采用LCD1602液晶显示。主要实现的功能是通过单片机读取温度传感器转换的温度值,再将其所读取的十六进制数转换成十制数,通过静态显示,最后在LCD显示出温度数值。本设计液晶显示器选用LCD1602,将单片机输出的数据进行动态显示。将采集的温度以直观化的形象显示,与能显示作报警温度的上下范围,这样方便与实际温度进行比较,实用价值更高。

3.3.1 LCD1602液晶显示器的工作原理

字符型液晶显示模块是专门用于显示字母、数字、符号等的点阵式的LCD,目前常用的是16*1、16*2,20*2和40*2行等。本次设计中采用的1602字符型液晶显示器,一行是用来实测温度,另一行是用来显示报警温度的上下限。

1. 1602的引脚功能

1602采用标准14脚(无背光)或16脚(带背光)接口,各引脚功能如表1-1所示。

表1-1 1602引脚功能介绍

(1)VL为液晶显示器对比度调整端, 接正电源时对比度最弱, 接地时对比度最强。若对比度过高会产生“鬼影”, 使用时可以通过一只10K电阻来调整对比度。

(2)RS为寄存器选择端, RS为高电平时选择数据寄存器, 为低电平时选择指令寄存器。R/W为读写信号线, 为高电平时进行读操作, 为低电平时为写操作。当R/W和RS 同为低电平时可以写人指令或者显示地址;当RS为低电平、R/W为高电平时,可以读忙信号。当RS为高电平、R/W为低电平时,可以读写数据。

(3)E为使能端, 当E端由高电平跳变成低电平时, 液晶模块执行命令。

(4)D0~D7为8位双向数据线。

3.3.2 LCD1602液晶显示器的设计

本设计中RS,R/W,E/N分别接单片机的P2.5,P2.6,P2.7口,8个数据口接单片机的P0口,如图1.9所示。

图1.9 DS18B20与单片机连接电路

3.4 报警模块设计

报警模块由一个自我震荡型的蜂鸣器(只要在蜂鸣器两端加上超过3 V的电压,蜂鸣器就会一直响)组成,在这次设计中蜂鸣器是通过三极管放大信号.在所要求的温度达到一定的上界或者下界时(在文中设置的初始上界温度10℃,下界温度为20℃),通过三个按钮可改变上下界温度的范围,一个按钮是用来加,一个按钮是用来减,最后一个按钮是用来确定。只要温度不在其设置范围内,蜂鸣器就会发出响声。

3.4.1 蜂鸣器简介

1. 蜂鸣器的工作原理

在本设计中主要是用于超过规定温度的范围进行报警。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上

还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5V~15V直流工作电压),多谐振荡器起振,输出1.5~2.5KHz的音频信号,阻抗匹配器推动压电蜂鸣片发声。在本设计中采用的是压电式蜂鸣器。

2. 蜂鸣器连接电路

当P3.2输出高电平时,三极管截止,没有电流流过线圈,蜂鸣器不发声;当P3.2输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,可以通过程序控制P3.2脚的电平来使蜂鸣器发出声音和关闭。

蜂鸣器与单片机连接电路如图2.0所示。

图2.0 蜂鸣器与单片机连接电路

3.5 温度上下限值电路设计

在本设计中主要选用了单片机的P1.0,P1.1,P1.2口进行上限温度、下限温度及温度的确定。本设计中的温度上下值按键控制电路如图2.1所示。

图2.1 温度上下值按键控制电路

3.6 串口输出电路的设计

串口输出电路部分主要是利用MAX232实现RS232的串行协议的电平转换,以保证采样参数的设置和温度向PC机正常发送。主要实现的功能是利用STC89C52的UART串行通信口和上位PC机实现串行通信。

3.6.1 波特率的计算

单片机或计算机在串口通信时的速率用波特率表示,它定义为每秒传输二进制代码的位数,即1位秒表1位/秒,单位是bps(位/秒)。如每秒传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这是的波特率为10位*240个/秒=2400bps. 如数据传送的波特率为1200 波特,采用N.8.1 帧格式(10 位),则每秒传送字节为120 个,而字节中每一位传送时间即为波特率的倒数:T=I/1200=0.833ms。

同样,如数据传送的波特率为9600 波特,则字节中每一位传送时间为T=1/9600=0.104 ms。根据数据传送的波特率即字节中每一位的传送时间,我们便可用普通I/O 口来模拟实现串行通信的时序。

3.6.2 MAX232芯片实现串行通信的电平转换

MAX232芯片引脚如图2.2所示。

图2.2 MAX232芯片引脚图

MAX232的相关参数如表1-2所示。

表1-2 MAX232引脚功能介绍

第4章系统软件电路设计

本设计单片机软件采用C51语言编写,C51语言是ANSI C的扩展集,其语法结构、关键字等与ANSIC绝大部分是相同的。

系统程序包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序、显

示程序、报警程序、PC机串行通信程序等。在编写PC机与单片机进行串行通信时采用VB语言编写程序。

从有利于实现较复杂的算法(显示效果处理)和有利于程序结构化考虑,程序适宜采用C51语言编写。

4.1 LCD液晶显示软件设计

液晶显示主要实现的功能就是对实测温度,报警温度上下限值进行显示。

液晶显示子程序流程图如图2.3所示。

图2.3 液晶显示子程序流程图

液晶显示子程序

void write_com(uchar com) //液晶写命令程序

{ // while(BusyTest()==1); //如果忙就等待

rs=0; //等0输入命令

rw=0;

en=0; //液晶使能信号初始化

P0=com; //把com参数,液晶的命令值送到P0口

en=1; //使能信号,0到1表示上升沿打开可以写命令数据到液晶里

delay(100); //延时,按照液晶的时序图的要求

en=0; //使能信号回复

delay(100);

}

void write_data(uchar date) //液晶写数据程序

{ // while(BusyTest()==1); //如果忙就等待

rs=1; //等1表示输入数据

rw=0;

en=0;

P0=date; //把date参数,液晶的数据送到P0口

en=1;

delay(100);

en=0;

delay(100);

}

void init() //液晶初始化程序

{ en=0;

write_com(0x38); //设置16X2显示,5X7点阵,8位数据口write_com(0x0c); //设置开显示,不显示光标

write_com(0x06); //写一个字符后地址指针加1

write_com(0x01); //显示清0,数据指针清0

}

void writeString(uchar *str, uchar length)

{

uchar i;

for(i = 0; i < length; i++)

{

write_data(str[i]);

}

}

4.2 主控模块软件设计

主程序的功能是负责温度的实时显示、读出并处理DS18B20测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其主程序流程图如图2.4所示。

图2.4 主程序流程图

//获取当前温度值

int getTmpValue()

{

unsigned int tmpvalue;

int value; //存放温度数值

float t;

unsigned char low, high;

sendReadCmd();

//连续读取两个字节数据

low = readByte();

high = readByte();

//将高低两个字节合成一个整形变量

//计算机中对于负数是利用补码来表示的

//若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的value

tmpvalue = high;

tmpvalue <<= 8;

tmpvalue |= low;

value = tmpvalue;

//使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度

t = value * 0.0625;

//将它放大100倍, 使显示时可显示小数点后两位, 并对小数点后第三进行4舍5入

//如t=11.0625, 进行计数后, 得到value = 1106, 即11.06 度

//如t=-11.0625, 进行计数后, 得到value = -1106, 即-11.06 度

value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0减0.5

return value;

}

4.3 温度采集软件设计

1.读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。

2.温度转换命令子程序主要是法温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换完成。温度转换命令子程序流程图如图2.5所示。

图2.5 子程序流程图

温度采集仪的子程序

//让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动

void dsInit()

{

//对于11.0592MHz时钟, unsigned int型的i, 作一个i++操作的时间大于us unsigned int i;

ds = 0;

i = 100; //拉低约800us, 符合协议要求的480us以上

while(i>0) i--;

ds = 1; //产生一个上升沿, 进入等待应答状态

i = 4;

while(i>0) i--;

}

void dsWait()

{

unsigned int i;

while(ds);

while(~ds); //检测到应答脉冲

i = 4;

while(i > 0) i--;

}

//向DS18B20读取一位数据

//读一位, 让DS18B20一小周期低电平, 然后两小周期高电平,

//之后DS18B20则会输出持续一段时间的一位数据

bit readBit()

{

unsigned int i;

bit b;

ds = 0;

i++; //延时约8us, 符合协议要求至少保持1us

ds = 1;

i++; i++; //延时约16us, 符合协议要求的至少延时15us以上

b = ds;

i = 8;

while(i>0) i--; //延时约64us, 符合读时隙不低于60us要求return b;

}

//读取一字节数据, 通过调用readBit()来实现

unsigned char readByte()

{

unsigned int i;

unsigned char j, dat;

dat = 0;

for(i=0; i<8; i++)

{

j = readBit();

//最先读出的是最低位数据

dat = (j << 7) | (dat >> 1);

}

return dat;

}

//向DS18B20写入一字节数据

void writeByte(unsigned char dat)

{

unsigned int i;

unsigned char j;

bit b;

for(j = 0; j < 8; j++)

{

b = dat & 0x01;

dat >>= 1;

//写"1", 将DQ拉低15us后, 在15us~60us内将DQ拉高, 即完成写1

if(b)

{

ds = 0;

i++; i++; //拉低约16us, 符号要求15~60us内

ds = 1;

i = 8; while(i>0) i--; //延时约64us, 符合写时隙不低于60us要求

}

else //写"0", 将DQ拉低60us~120us

ds = 0;

i = 8; while(i>0) i--; //拉低约64us, 符号要求

ds = 1;

i++; i++; //整个写0时隙过程已经超过60us, 这里就不用像写1那样, 再延时64us了

}

}

//向DS18B20发送温度转换命令

void sendChangeCmd()

{

dsInit(); //初始化DS18B20, 无论什么命令, 首先都要发起初始化

dsWait(); //等待DS18B20应答

delay(1); //延时1ms, 因为DS18B20会拉低DQ 60~240us作为应答信号

writeByte(0xcc); //写入跳过序列号命令字Skip Rom

writeByte(0x44); //写入温度转换命令字Convert T

}

//向DS18B20发送读取数据命令

void sendReadCmd()

{

dsInit();

dsWait();

delay1(1);

writeByte(0xcc); //写入跳过序列号命令字Skip Rom

writeByte(0xbe); //写入读取数据令字Read Scratchpad

}

4.4 报警电路软件设计

报警电路软件主要实现的功能主要是对温度的上下限值可自由的进行设定,如实测温度不在此范围内,蜂鸣器就会发出响声。温度上下值范围初始状态为:10~20℃。

报警电路程序流程图如图2.6所示。

图2.6 报警电路程序流程图

报警电路程序

/*void warn(uint tempwarn)//温度报警程序

{ if(tempwarn<16) //返回的值是温度的值,如果温度小于16度就报警

{ Alam=0;

delay1(500);//蜂鸣器的声音响的时间

Alam=1;

delay1(500); //蜂鸣器的声音不响的时间

}

else if(tempwarn>24)//如果温度大于24度并且启动报警

{ Alam=0;

delay1(500);

Alam=1;

相关主题
文本预览
相关文档 最新文档