基于单片机的数字测速仪设计

更新时间:2024-05-29 23:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

广西大学行健文理学院

毕业设计说明书

题目:基于单片机的多点温度检测设计

学 部: 电气信息学部 专 业: 电子科学与技术 班 级: 2011级(1)班 学 号: 1138340124 学生姓名:黎卫锋 指导教师:杨凤娟

二〇一五 年 五 月

摘要

在工业生产及日常生活中,多点温度检测系统的应用十分广泛,例如消防电气的非破坏性温度检测,电力设备的过热故障预知检测,空调系统的温度检测,各类运输工具组件的过热检测,医疗与诊断设备的温度测试等。针对这一情况,本文设计了一种基于AT89C51单片机的温度检测系统,系统利用单片机获得温度传感器数据并与系统设计值进行比较,根据比较结果分别控制执行系统系统采用AT89C51单片机视作为控裁核心,进行温度采集、信息显示及执行机构的控制。温度传感器采用Dallas半导体公司的数字传感器DSl8820。为了能够提供形象的用户显示界面,系统采用图形液晶显示模块LCDl2864,显示各释字符及图形。

关键词:多点温度检测 单片机 DSl8820传感器

Abstract

In industrial production and daily life, the application of multi-point temperature detecting system is very wide, such as fire electric non-destructive testing temperature, precognition overheating fault detection of power equipment, and detect the temperature of the air conditioning system, all kinds of transport components of overheat detection, medical and diagnostic equipment, such as temperature test. Aim at this situation, this paper designs a temperature detection system based on AT89C51, using single chip computer system for temperature sensor data and comparing with values of system design, according to the comparison results, respectively, to control execution system system USES AT89C51 as control core, cutting temperature acquisition, information display and control of the actuator. The temperature sensor using digital sensor DSl8820 Dallas semiconductor company. In order to be able to provide the image of the user interface, the system adopts LCDl2864 graphic liquid crystal display module, according to the interpretation of the basic characters and graphics.

51 single chip microcomputer temperature gathering application system used in the collection of variables, and to control other variables or action in the application system, such as collection of cold storage temperature to decide whether to open or closed refrigeration, collection of greenhouse temperature decide whether to open the Windows for ventilation. In practical application, the work is often not only use one point of temperature data as a reference, need to refer to multiple point temperature data at the same time, the need to use a multi-point temperature acquisition system to complete the corresponding work. Temperature acquisition system need to pay attention to the qualitative change of including patch number, patch distance, with sampling temperature range and accuracy. So this system need to eight distance in 10 cm points within the scope of data collection, the collection temperature range in - 30 ~ 50 ℃ range, acquisition precision of 0.5 ℃.

Keywords:Multipoint temperature detectionSCMDSl8820 sensor

目录

第一章 绪论 .......................................... 1

1.1系统背景 ....................................... 1 1.2系统概述 ....................................... 1 1.3 设计任务及方案 ................................ 1 第二章 方案论证 ...................................... 3

2.1传感器部分 ..................................... 3 2.2主控制部分 ..................................... 6 2.3系统方案 ...................... 错误!未定义书签。 2.4 数码管 ........................................ 6 第三章 硬件电路的设计 ................................ 7

3.1电源以及看门狗电路 ................................................................ 7 3.2 键盘以及显示电路 .............................. 7 3.3 温度测试电路............................................................................. 3.4 串口通讯电路................................................................................ 3.5 整体电路........................................................................................ 第四章 软件设计 ..................................... 22

4.1概述 .......................................... 22 4.2 主程序方案 ................................... 22 4.3 各模块子程序设计...................................................................... 第五章 系统调试

5.1 分步调试........................................................................................ 5.2 统一调试....................................................................................... 结束语 ............................................... 29 参考文献 ............................................. 31 附录 ................................................. 32 致谢 ................................................. 41

第一章 绪论

1.1 系统背景介绍

温度是工业生产中最常见和最基本的工业参数之一,是与人类的生活、工作关系最密切的物理量,也是各学科与工程研究设计中经常遇到和必须精确测量的物理量。而随着电子技术和计算机技术的迅速发展,特别是单片微机的发展,使传统的测量仪器在原理,功能,精度及自动化水平等方面发生了巨大的变化,使很多的传统电子仪器被相应的全新的仪器类型和测试系统体系所代替。随着电子技术以及应用需求的发展,单片机技术得到了迅速的发展,在高集成度,高速度,低功耗以及高性能方面取得了很大的进展。伴随着科学技术的发展,电子技术有了更高的飞跃,我们现在完全可以运用单片机来代替人工测量,这样既省时又省力。

由于单片机具有功能强、体积小、可靠性好、和价格低廉等独特优点,且在智能仪器仪表、工业自动控制、计算机智能终端、家用电器、儿童玩具等许多方面,都已得到了很好的应用,因而受到人们高度重视,取得了一系列科研成果,成为传统工业技术改造和新产品更新换代的理想机种,具有广阔的发展前景。

51单片机温度采集应用系统常用于变量的采集,并对应用系统中的其他变量或动作进行控制,如采集冷库的温度决定是否开启或关闭制冷,采集温室的温度决定是否要开启窗户进行通风。而在实际应用中,这些工作往往不是只使用一个点的温度数据作为参考量,需要同时参考多个点的温度数据,此时需要使用一个多点的温度采集系统来完成相应的工作。温度采集系统需要关注的质变包括采集点数目、采集点距离、带采集温度范围及采集精度。因此本系统需要对8个距离在10cm范围内的点数据进行采集,其采集温度范围在-30~50℃区间,采集精度为0.5℃。

1.2 系统概述

该案由单片机、模拟温度传感器AD590、运算放大器、AD转换器、数码显示电路、集成功率放大器、报警器组成。 本方案采用模拟温度传感器AD590作为测温元件,传感器将测量的温度变换转换成电流的变化,再通过电路转换成电压的变化,使用运算放大器交将信号进行适当的放大,最

1

后通过模数转换器将模拟信号转换成数字信号,传送给单片机,单片机将温度值进行处理之后用数码显示 ,当温度值超过设置值时,系统开始报警。

1.3

1.4

1.1多点温度采集系统的工作流程图

2

图第二章 多点温度采集系统的设计思路

2.1 多点温度采集系统的工作流程

多点温度采集系统的工作流程图如图1.1所示,需要注意的是该系统并没有提供采集到的温度,来对相关量进行控制的功能。

2.2多点温度采集系统的需求分析与设计

设计多点温度采集系统,需要考虑如下几个方面

(1)需要一个能将温度数据转换为采集数据的传感器,其相关指标必须符合采集系统的需求

(2)传感器和51单片机通过任何方式来进行数据交换 (3)需要一个能显示温度数据的显示模块 (4)需要设计合适的点片机软件

2.3单片机应用系统的温度采集方法

单片机应用系统对于温度信号采集有两种常见的方法:

(1)数字温度传感器采集。通常利用两个不同温度系数的晶振控制两个计数器进行计数,利用温度对晶振精度影响的差异测量温度。

(2)PT铂电阻采集。利用PT金属在不同温度下的电阻值和不同原理来测量温度。

两种采集方法的比较参见表2.2

3

表2.2数字温度传感器和PT铂电阻的比较

需要注意的是PT铂电阻根据温度变化的只是其电阻值,所以在实际使用过程中,需要额外的辅助器件将其转换为电压信号,并且通过调整后送到模/数字转换器件。

才能让51单片机进行处理,其组成如图2.3所示

图2.3使用PT铂电阻来测量温度

在多点温度采集系统中,选择了使用1-wire总线接口的温度传感器DS18B20来测量温度,这是因为系统对采集精度要求不高,而且温度传感器没有额外的附加器件,比较方便和51单片机连接。

2.4 1-wire总线的工作原理

多点温度采集系统的51单片机使用1-wire总线和温度传感器DS18B20进行数据交互,该总线是美国达拉斯公司推出的一种总线接口技术,其技术特点是只用一根数据线,既传输时钟,也传输数据,且数据通信是双向的,还可以利用该总线给器件完成供电任务。1-wire总线具有占用I/O资源少,硬件简单的优点,在一条1-wire总线上可以挂接多个器件。这些器件既可以是主机器件。图2.4是使用1-wire总线来扩展多个51单片机系统外围器件的结构示意图。

4

图2.4使用1-wire总线扩展51单片机系统外围器件的结构示意图 1-wire总线的接口器件通过一个漏极开路的三态端口连接到总线上,这样使得器件在不使用总线时可以释放信号线,以便于其他器件使用总线。于是漏极开路,所以1-wire要在总线上上拉一个5千欧左右的电阻到VCC,并且在使用寄生方式供电时,为了保证器件在所有工作状态下都有足够的电量,在总线上还必须提供一个MOSFET管,以存储电能。

寄生供电方式是指1-wire总线器件不适用外接电源,直接使用数据信号线作为电能传输信号线的供电方式。

1-wire总线的工作流程包括总线初始化、发送ROM命令+数据,以及发送功能命令+数据三个步骤,除了搜索ROM命令和报警搜索命令之后不能发送功能命令+数据,而是要重新初始化总线之外,其他总线操作过程必须完成这三个步骤。

总线初始化过程由主机发送的总线复位脉冲和丛机响应的答应脉冲组成,后者是通知主机该总线上有准备就绪的丛机信号。每个1-wire总线器件都有自己的地址,这是唯一一个64位数据,用于标示该器件的种类。ROM命令是和ROM代码相关的一系列命令,用于操作总线上的指定外围器件,ROM命令还可以检测总线上有多少个外围器件,以及这些外围器件的种类和是否有器件处于报警状态。ROM命令一般有5种,这些命令的长度都为一个字节,即8位。1-wire总线ROM命令的具体说明如图2.5所示

5

图2.51-wire总线ROM命令的具体说明

在主机发送完ROM后,发送需要操作的具体器件的功能命令+数据,即可以对指定的具体器件进行操作。

2.2 主控制部分 2.4 数码管

数码管也称LED数码管,晶美、光电、不同行业人士对数码管的称呼不一样,其实都是同样的产品。

数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,多一个小数点显示;按显示可分为1位、2位、3位、4位、5位、6位、7位等数码管。

按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,

6

相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮[9]。

第三章 多点温度采集系统的硬件电路的设计

3.1 多点温度采集系统的硬件模块划分

多点温度采集系统的硬件模块划分如图3.1所示。

图3.1多点温度采集系统的硬件模块 如下

他由51单片机、显示模块和DS18B20模块组成,其各个部分详细说明(1)51单片机:多点温度采集系统的核心控制器。

7

(2)DS18B20温度采集模块:采集当前各个点的温度数据。 (3)1602液晶显示器:显示用户当前各个采集点的温度信息。

3.3.1 51单片机

AT89C51单片机是宏晶科技推出的新一代超强抗干扰、高速、低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,最新的D版本内部集成MAX810专用复位电路。引脚图如图3.2所示

图3.2 AT8951引脚

VCC :电源 GND :地

P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在 flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。

8

P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。

P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89C51特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。 引脚号第二功能如表3.1所示

表 3.1 引脚号第二功能

P3.0 P3.1 P3.2 P3.3 P3.4 RXD(串行输入) TXD(串行输出) INT0(外部中断0) INT1(外部中断1) T0(定时器0外部输入) 9

P3.5 P3.6 P3.7

T1(定时器1外部输入) WR(外部数据存储器写选通) RD(外部数据存储器写选通) RST:复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。

PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。

EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。

XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端[4]。

3.3.2 DS18B20传感器

DS18B20是拉达斯(Dallas)公司出品的数字温度传感器,其使用1-wire总线接口,该器件的主要技术特点如下。

(1)工作电压范围广。3~5.5V,并且可以使用寄生电容供电方式。 (2)集成度高。所有的应用模块都集中在一个和普通三极管大小相同的芯片内,应用过程中不需要任何外围器件,使用1-wire总线接口和51单片机进行数据通信。

(3)温度测量范围大。可测量温度区间为-55~125℃,其中在-10~85℃的区间内测量精度为0.5℃。

(4)测量分辨率可变。测量分辨率可以设置为9~12位,对应的最小温度刻度为0.5℃、0.25℃、0.125℃、0.0625℃.

(5)转换速度快。在9为精度时最快,耗时93.75ms,在12位精度时则需要750ms。

(6)支持多个设备。支持在同一条1-wire总线上接挂多个DS18B20器件形成多点测试,在数据传输过程中可以跟随CRC校验。 DS18B20引脚封装结构 如图3.3所示

10

图3.3 DS18B20的引脚封装图

(1)VCC:电源输入引脚,如果使用寄生供电方式,该引脚直接链接到GND。

(2)GND:电源地引脚。

(3)DQ:数据输入/输出引脚。

DS18B20内部有一个64位的ROM空间用于存放序列号,序列号由8位产品种类编号(0x28)、48位产品序列号和8位CRC校验位组成,每一个DS18B20都有一个唯一的序列号,可用于区别其他的DS18B20。

DS18B20可以将温度转换成两个字节的数据,可以配置设定为9~12为精度,表10.7是12位精度的数据存储结构,其中S为符号位,当温度高于0℃是S为0,此后11位数据直接乘以温度分辨率0.0625,则为实际温度;当温度低于0℃是S为1,此时后11位数据为温度数据的补码,需要取反加一之后再乘与温度分辨率才能得到实际的温度。

DS18B20的温度分辨率只和采样的精度位数有关,9位采样精度时对应的分辨率为0.5℃,10位为0.25℃,11位为0.125℃,12位为0.625℃。用两

11

通过整个硬件电路的仿真以及设置不同频率后仿真结果的比较,基本上可以确定电路的显示和单片机部分都是能够正常切正确工作的;仿真没有问题之后,接着就可以进行元器件的焊接,然后对焊接出来的成品进行硬件的调试。

4.2.3 系统硬件的调试

将元器件全部焊接到电路板上后,检查一下整个电路有木有出现虚焊、漏焊以及带有正负极的元器件接反等现象,在检查一切无误后,便可以开始通电进行测试。

图4-10为最终焊接出来的实物的正面,图4-11是实物的反面,由于自己对PCB元器件布线的生疏,所以产生了几根跳线,但并不影响整个电路及测试结果。

图 4-10 实物图正面

图 4-11 实物图反面

27

电路通电后,D1灯点亮,数码管点亮,因为没有小磁钢切割,所以数码管显示0000,D2灯也是灭的。如图4-12所示。

图 4-12 通电后的电路板

当小磁钢靠近霍尔元器件时,D2灯被点亮,因没有移动小磁钢进行切割,所以数码管上依旧是0000,数值没有出现任何变化。如图4-13所示。

图 4-13 小磁钢靠近霍尔元件时

28

围绕霍尔传感器滑动小磁钢时,每当小磁钢划过霍尔开关,霍尔开关便输出一个脉冲,然后根据所编程序计算出单位时间的脉冲数,最后在数码管上显示,说明调试成功。如图4-14所示。

图 4-14 小磁钢对霍尔元件进行切割

4.3 各模块主程序设计

29

第五章 系统调试

5.1 分部调试 5.2 统一调试

结束语

本次基于AT89C51单片机的数字测速仪设计是采用霍尔传感器的测量方法,通过小磁钢在霍尔传感器周围来回切割,产生脉冲信号,然后将产生的脉冲信号送入单片中计数,最后计算出脉冲数并通过数码管用四位数字显示出来。数字测速设计中的关键问题,就是采集样本的问题,所以设计中的采样源为一块小磁钢,不仅降低成本、方便携带、环保,还可以做到只要通电就能实现测速的效果。

通过本次毕业设计,让我重新认识到了自己对曾经所学知识掌握不牢固带来的种种坏处,深深自责,当然经过这次毕业设计,让我在理论知识跟动手实践能力更强了,做事的逻辑性也加强了不少,了解常用数字测速的各种方法,及各自的优缺点,通过相互的比较,确定设计方案,并对所用传感器进行选型,同时加以电路的设计与分析,完成设计任务;知识上的收获虽然重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次毕业设计必将成为我人生旅途上一个非常美好的回忆。

30

参考文献

[1] 李建忠.单片机原理及应用.西安: 西安电子科技大学出版社,2002. 106-155

[2] 蓝江桥,曹汉房.现代数字电路设计.北京: 高等教育出版社,2006. 55-70

[3] 张鹏,王雪梅.单片机原理与应用实例教程.北京: 海洋出版社,2008. 221-226

[4] 刘同法.单片机C语言编程基础与实践. 北京: 北京航空航天大学出版社,2009.84-94

[5] 杨居义,杨晓琴,王益斌等.单片机课程设计指导.清华大学出版社,2009.135-141

[6] 宋戈.51单片机应用开发范例大全.北京: 人民邮电出版社,2010. 133-139

[7] 周润景.单片机电路设计、分析与制作,北京: 机械工业出版社.2010.64-85

[8] 陈梓城,汪临伟,胡敏敏.实用电子电路域调试: 模拟电路.北京:中国电力出版社,2011.120-155

[9] 陆利忠.电子线路与电子系统.北京: 国防工业出版社.2013.111-136 [10] 元增民,张文希.单片机原理与应用基础.国防科技大学出版社,2006.205-266

[11] 谭浩强.C程序设计(第四版).北京:清华大学出版社,2010.23-108

[12] D Shen,P W Lehn.Fixed-frequency Space Vector Modulation Control for Three-phase Four-leg Active Power Filters.IEE Proe. 2002,(4).268-274

31

附录

1、系统原理图及PCB

32

33

2、程序代码 #include #include\

//==============主函数================ void main() { }

time0_int0_init();//定时器0和外部中断0的初始化 while(!TR0) //上电一直未切割时就显示 0.0.0.0 { init_display(); }

while(1) { }

if(!change)//按下切换按键显示里程 { }

delay1m(5); if(!change) { flag = ~flag; }

while(!change);

//===============定时器0中断函数================ void time0_interrupt()interrupt 1

{

TL0 = (65536 - 5000) % 256;// 12M晶振,5ms定时 TH0 = (65536 - 5000) / 256; display_function(); time_counter++; time_counter8++;

34

{ }

if(time_counter8 >= 1600)//大于8s没切割,车子视为停下了,速度

为:0,但里程还记着

}

time_counter8 = 0; speed = 0;//速度为 0

point1 = 0;

buf1[3] = speed;buf1[2] = speed/10;

buf1[1] = speed/100;buf1[0] = speed/1000;

//===================外部中断0中断函数====================== void int0_interrupt()interrupt 0 { external_counter++; {

if(external_counter ==1 )TR0 = ~TR0;//第一次切割打开定时器0 if(external_counter == 65535)external_counter = 0; time_counter8 = 0; //只要8秒内有切割,车子就任在运行

if(external_counter % 2 == 0)//切割2次 更新下速度

//*5是因为

中断一次是5MS

if(flag1==0){speed =((ulong)(36000)*zhouchang)/(time_counter * 5);flag1=1;} else if(flag1==1){speed =((ulong)(36000)*2*zhouchang)/(time_counter * 5);}//速度:单位为 m/h ,*1000的目的是不出现浮点数 数

if((speed >= 100)&&(speed < 1000)) //100 ---- 1000 3位整{ point1 = 1;buf1[3] = speed;buf1[2] = speed/10; buf1[1] = speed/100;buf1[0] = 0;}

else if((speed >= 1000)&&(speed < 10000)) //1000 ---- 10000

35

4位整数

} {

s = (ulong)external_counter * zhouchang; //里程:单位为 cm if((s >= 1000)&&(s < 10000)) { point2 = 1; // 0.012 001212 buf2[3] = s/100;buf2[2] = s/1000;

buf2[1] = 0;buf2[0] = 0;}// 4位整数

else if((s >= 10000)&&(s < 100000)) { point2 = 1; buf2[3] = s/100;buf2[2] = s/1000;

buf2[1] = s/10000;buf2[0] = 0;}// 5位整数

{ point1 = 1;speed = (uint)speed; buf1[3] = speed;buf1[2] = speed/10; buf1[1] = speed/100;buf1[0] = speed/1000;} else if((speed >= 10000)&&(speed < 100000)) //10000 ----{ point1 = 2; buf1[3] = speed/10;buf1[2] = speed/100; buf1[1] = speed/1000;buf1[0] = speed/10000;} else if((speed >= 100000)&&(speed < 1000000)) //100000 ------ { point1 = 3; buf1[3] = speed/100;buf1[2] = speed/1000; buf1[1] = speed/10000;buf1[0] = speed/100000;} time_counter = 0;

- 100000 5位整数

1000000 6位整数

if(external_counter % 8 == 0)//每切割8次 更新下里程

0.123 012345

36

本文来源:https://www.bwwdw.com/article/okc6.html

Top