超声波测距毕业设计
前言
单片机(Microcontroller,徽控制器)的出现无疑是近代计算机技术发展史上的重要事件,它使嵌入式计算机系统实现了单片集成,并促进通用微处理器(CPU)向嵌入式微处理器发展,如今,嵌入式微控制器与嵌入式微处理器形成了嵌入式系统中两个重要组成部分。它的形成与发展,使现代电子技术进入到一个崭新的智能化时代,并推动了计算机外围器件的发展。这些外围器件包括诸如传感器接口通道的大信号输出的传感器,数字化、智能化、集成化传感器、各种类型的模数转换器,集成化数据采集器,V/F转换器、跟踪/保持器、多路选择器、基准电源等,人机对话的各种键盘驱动器、LED/LCD 显示驱动器及相应的显示模块,语音合成器件、伺服控制通道接口的数据转换器、F/I转换器、以及形形色色的电子电力集成器件、数据通信通道接口各类电平转换与驱动等等。
而单片机作为嵌入式控制模块,它应用于许多电器之中,如冰箱、微波炉、彩电、空调等,还有其他大型电器。单片机已成为高科技领域中的有力工具,已开始在工业测、控系统,机器人感觉系统、行走系统,分布式测控系统,快速多机实时处理系统和图像系统中成为不可缺少的重要组成部分。
超声波传感技术可以方便的应用在工业测、控系统,机器人感觉系统、行走系统中。
人类的耳朵只能分辨频率为20至2万赫兹的声音,频率比人的听频范围高的声波就叫做超声波。不同的动物可听到的声波频率范围不尽相同。超声波对于蝙蝠更为重要,这种动物是靠超声波来“看”世界! 蝙蝠先会发出一连串超声的尖叫声,声波遇到障碍物便会反射,就像我们向山谷拍手会听到回声一样。由于超声波的频率高,相对较少出现绕射现象,所以回声十分清晰。蝙蝠分析回声的方向和回传时间,便可以知道环境的精确图像。同样的道理,可以更改频率获得能在空气中传播的超声波,这样的声波遇到障碍物的时候返回,因此,通过分析时间间隔的大小可以获得本体与障碍物间的距离,这样的检测称为无接触测量技术,有广泛的运用场合。
因此超声波装置尤其适用于存在/非存在监测、精确距离监测,或其它类型传感技术不能很好的发挥作用的应用领域,如监测透明或发光物体、充满雾气或尘埃的空气,或是喷射状液体,而且随着性能的提升,可以进一步取代其他的检测方式,以其便捷性和精度高等优势成为一种理想和被推荐的检测,有更广的应用前景。
目前,人们已经制成了许多超声波发生器。超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前较为常用的是压电式超声波发生器。
1方案选择的论证和选择
1.1设计方案一:采用单片机来控制的超声波测距仪
采用单片机来控制的超声波测距仪是先由单片机产生一个信号,经过信号
线,把信号引入到与超声波发射器相连的信号引脚上,再由超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:
DCT/2
原理框图如1-1所示:
图1-1采用单片机来控制的超声波测距仪
1.2设计方案二:采用CPLD来控制的超声波测距仪
采用CPLD来控制的超声波测距仪,主要是在软件上运用VHDL(Very Hi
gh Speed Integrated Circuit Hardware Description Language)编写程序使用MAX+plus II软件进行软硬件设计的仿真和调试,最终实现测距功能。使用本方案的优点在于在超声波测距仪设计中采用的是MAX7000s系列中的EPM7128SLC84-15的CPLD器件,其最高频率可达175.4MHz,可用于组合逻辑电路、时序逻辑电路、算法、双端口RAM等的设计。充分利用了其多达128个宏单元、68pin可编程I/O口,使该器件可以将分频功能、计数功能、显示编码功能、振荡功能全部集于一体。又因其延时平均的特点,保证了测距结果精度高、响应速度快。缺点是方案中需要一块FPGA,一块双口RAM,还需要一块用来存储波形数据的EEPROM,那么设计的成本较高。同时在FPGA中还要用硬件描述语言(V
HDL语言)编写程序来实现硬件电路功能。由于EPM7128SLC84-15的算法复杂,所以在软件实现起来编程也复杂。
1.3 方案设计三:采用锁相环频率合成技术
采用锁相环频率合成技术,也可以实现我们所需要的超声波测距仪。具体方
案如下:首先通过频率合成技术产生超声波所需要的频率,在通过信号线将采用
锁频率相合成技术得到的频率引到超声波的发射头上,这样就可以实现超声波测
距。它的优点就是工作频率可调,也可以达到很高的频率分辨率;缺点是要求使
用的滤波器通带可变,实现很困难。它的原理如图1-2所示:
图1-2
综上所述,因此选择第一种设计方案。
2工作原理
我们做的是基于单片机的超声波测距仪。用单片机控制超声波的发射、接
受电路以及进行数据处理,再用液晶显示屏进行数据的显示。因为声音的速度会
随着温度的变化而改变,所以,我们增加了温控装置,即通过温度传感器
(18B20),把当前的温度信息传给单片机,再通过一定的算法,得到当前的声
音速度。操作者可以通过几个简单的按键完成测量方式的选择(实时监测、手动
测量)。
由单片机产生一个信号,经过信号线,把信号引入到与超声波发射器相连的
信号引脚上,在由超声波发射器向某一方向发射超声波,在发射时刻的同时开始
计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到
反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记
录的时间t,就可以计算出发射点距障碍物的距离(s),即:DCT/2
其中,D为换能器与障碍物之间的距离,C为波声传播速度,T为超声波发
射到返回的时间间距。
本次设计包含硬件设计与软件设计两部分,根据设计任务要求,采用
AT89C52单片机,配置时钟电路,复位电路构成单片机最小系统,由模拟电路
和数字电路构成超声波发射、接收模块。由键盘,LED显示构成人机对话通道,以及温度传感器来构成由单片机最小系统来控制的超声波测距仪,其结构框图如
下:
图2-1总结构框图
3部分芯片介绍
3.1 AT89S52的简介
AT89S52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反
复擦写的只读程序存储器(PEROM)和256 bytes的随机存取数据存储器(RAM),
器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指
令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89S52单
片机可为您提供许多较复杂系统控制应用场合。
AT89S52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2
个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,
AT89S52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和
Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成
本。AT89S52芯片的管脚、引线与功能AT89S52芯片图如图3-1:
3.1.1引脚信号介绍:
P00~P07 :P0口8位双向口线
P10~P17 :P1口8位双向口线
P20~P27 :P2口8位双向口线
P30~P37 :P3口8位双向口线
当EAEA访问程序存储器控制信号:信号为低电平时,对ROM的读操作限定在外部程序存储器;而当EA信号为高电平
时,则对ROM的读操作是从内部程序存储
器开始,并可延至外部程序存储器。
ALE地址锁存控制信号:在系统扩展时,ALE用于控制把P0口输出低8位地址
锁存起来,以实现低位地址和数据的隔离。此外由于ALE是以晶振六分之一的固
定频率输出的正脉冲,因此可作为外部时钟或外部定时脉冲作用。
PSEN外部程序存储器读选取通信号:在读外部ROM时PSEN有效(低电平),
以实现外部ROM单元的读操作。
XTAL1和XTAL2外接晶体引线端:当使用芯片内部时钟时,此二引线端用于外
接石英晶体和微调电容;当使用外部时钟时,用于拉外部的时钟脉冲信号。
RST复位信号:当输入的复位信号延续2个机器周期以上高电平时即为有效,
用以完成单片机的复位初始化操作。
VSS:地线
VCC:+5V电源
3.1.2 P3口的第二功能如表3-1
表3-1 P3口的第二功能
3.1.3 AT89S52的总线结构
AT89S52的管脚除了电源、复位、时钟接入、用户I/O口部分P3外,其余管
脚都是为实现系统扩展而设置的。这些管脚构成了三总线形式,即:
(1)地址总线(AB):地址总线宽度为16位,因此,其外部存储器直接地
址外围为64K字节。16位地址总线由P0经地址锁存器提供低8位地址(A0~A7);
P2
口直接提供高8位地址(A8~A15)。
(2)数据总线(DB)
:数据总线宽度为8位,由P0口提供。
(3) 控制总线 (CB):由部分P3口的第二功能状态和4根独立控制线RESET、
EA、ALE、PSE组成。AT89C52结构框图如图3-2所示:
3.2温度传感器DS18B20
经过综合考虑,我们采用美国达拉斯(Dallas)公司的单线数字温度计
传感器芯片DS18B20作为温度传感器,与传统的热敏电阻有所不同,
DS18B20可直接将被测温度转化成数字信号,以供单片机处理,它还具有
微型化、低功耗、高性能、抗干扰能力强等优点。
DS18B20具有以下特点。
① 采用单线技术,与单片机通信只须一个引脚;
② 通过识别芯片各自唯一的产品序列号从而实现单线多挂接,简化
了分布式温度检测的应用。
③ 实际应用中不需要外部任何元器件即可实现测温。
④ 可通过数据线供电,电压范围为3~5.5V;
⑤ 不需备份电源;
⑥ 测量范围为-55~+125度,在-10~+82度范围内的误差为±0.5度
⑦ 数字温度计的分辨率用户可以从9位到12位选择,可配置实现
9~12V的温度读数;
⑧ 将12位的温度值转换为数字量所需时间不超过750ms;
⑨ 用户定义的、非易失性的温度告警设置,用户可自行设定告警的
上下限温度;
⑩ 告警寻找命令可以识别和寻址那些温度超出设计预设告警界限的
器件。
3.2.1温度传感器(DS18B20)的引脚分布图及其功能
单片机选用Atmel公司常用的单片机芯片AT89S52,它完全可以满足采集、控制、数据
处理的需要。
芯片引脚如图
3-3
图3-3温度传感器引脚图
引脚功能说明:
NC(1、2、6、7、8脚):空引脚,悬空不使用;
VDD(3脚):可选电源脚,电源电压范围3~5.5V。当工作于寄生电源时,此引脚必
须接地。
DQ(4脚):数据输入/输出脚。漏极开路,常态下高电平。
3.2.2单线(1-wire)技术
目前常用的微机和外设之间数据输出的串行总线有I2C总线,SPI总线等,
其中,I2C总线采用同步串行两线(一根时钟线,一根数据线)方式,而SPI总
线采用同步串行三线(一根时钟线,一根输入线,一根数据输出线)方式。这两
种总线需要至少两根或两根以上的信号线。美国达拉斯半导体公司推出了一项特
有的单线(1-wire)技术,该技术与上述总线不同,它采用单根信号线,即可传输
时钟,又能传输数据,而且数据传输是双向的,因而这种单线技术具有线路简单、硬件开销小、成本低、便于扩展的优点。
单线技术适用于单主机系统,单主机能控制一个或多个从机设备。主机可以
是微控制器,从机可以是单线器件,它们之间的数据交换、控制都由这根线完成。主机或从机通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数
据时能够释放该线,而让其他设备使用。单线通常要求外接一个约5K的上拉电
阻,这样,当该线闲置时,其状态为高电平。
主机和从机之间的通信主要分为3个步骤:初始化单线器件、识别单线器件
和单线数据传输。由于只有一根线通信,所以它们必须是严格的主从结构,只有
主机呼叫从机时,从机才能答应,主机访问每个单线器件都必须严格遵循单线命
令序列。
所有的单线器件都要遵循严格的协议,以保证数据的完整性。1-wire协议由
复位脉冲、应答脉冲、写0、写1、读0和读1这几种信号类型组成。这些信号
中,除了应符答脉冲,其他均由主机发起,并且所有命令和数据都是字节的低位
在前。
3.2.3 DS18B20有两种供电方式:寄生电源和外部电源。
寄生电源简单说起来就是器件从单线数据线中“窃取”电源,在信号线为高电平
的时间周期内,把能量储存在内部的电容器中,在单信号线为低电平时的时间期
内断开些电源,直到信号线变为高电平,重新接上寄生(电容)电源为止。寄生
电源有两个优点。
²可实现远程温度检测而无须本地电源。
²没有正常电源条件下也可以读ROM。
为了使DS18B20能完成准确的温度变换,当温度变换发生时,DQ线上必须提
供足够的功率。因为DS18B20工作电流1。5mA,4.7K的上拉电阻将使得DQ
线没有足够的驱动能力。如果多个DS18B20连接,而且同时变换时,这一问题
将变得更为突出。解决的方法是在发生温度变换时,在DQ线上提供强的上拉,比如用MOSFET管把DQ线直接拉到电源。
当面作用寄生电源时,VDD引脚必须接地。
DS18B20的另一种的供电方式是将VDD引脚接外部电源(3~5.5V)。这种
方法的优点是在DQ线上不要求强的上拉。总线上的主机在温度变换期间不需要
一直使DQ线保持高电平,这就允许在变换期间内其他数据在单线上传送。而且,在单线上可以放置多个DS18B20。如果它们都使用外部电源,那么通过发起“跳
过ROM”命令,接着执行“温度变换”命令就可以同时完成各自的温度变换。
采用外部电源这种方式时,GND(地)引脚不可悬空。
DS18B20的单线协议和命令:
²初始化
单线总线上所有操作均从初始化开始。初始化过程如下:主机通过拉低单线
480us以上,产生复位脉冲,然后释放该线,进入RX接收模式。主机释放总线
时,会产生一个上升沿。单线器件DS18B20检测到该上升沿后,延时15~60us,通过拉低总线60~240us来产生应答脉冲。主机接收到本机的应答脉冲后,说明
有单线器件在线。
²ROM操作命令
一旦总线主机检测到应答脉冲,便可以发起ROM操作命令。共有5位ROM操作命令,如下表所示
在成功执行了ROM操作命令之后,才可以使用内存操作命令。主机可提供6种内存操作
首先来看写时隙。当主机将数据线从高电平拉至低电平时,产生写时隙。有
2种类型的写时隙:写“1”和写“0”。所有写时隙必须在60us以上(即由高拉
低后持续60us以上),各个写时隙之间必须保证最短1us的恢复时间。DS18B20
在DQ线变低后的15~60us的窗口对DQ线进行采样,如果为高电平,就为写“1”;如果为低电平就为写“0”。对于主机产生写“1”时隙的情况,数据线必须先拉
低,然后释放,在写时隙开始后的15us,允许DQ线拉至高电平。对于主机产生
写“0”时隙的情况,DQ线必须被拉至低电平且至少保持低电平60us。
再来看读时隙。当主机从DS18B20读数据时,把数据线从高电平拉至低电平
时,产生读时隙。数据线DQ必须保持低电平至少1us,来自DS18B20的输出数
据在读时隙下降沿之后15us内有效。因此,在些15us内,主机必须停止将DQ
引脚置低。在读时隙结束时,DQ引脚将通过外部上拉电阻拉回至高电平。所有
的读时隙最短持续在60us,各个读时隙之间必须保证最短1us的恢复时间。
所有的读写时隙至少需要60us,且每两个独立的时隙之间至少需要1us的恢
复时间。在写时隙中,主机将在拉低总线15us内释放总线,并向DS18B20写“1”。若主机拉低总线后能保持至少60us的低电平,则向单总线器件写“0”。 DS18B20
仅在主机发出读时隙时才向主机传输数据,所以,当主机向DS18B20发出读数
据命令扣,必须马上产生读时隙,以便DS18B20能传输数据。
3.3 LCD显示器
LCD显示器是利用液晶经过处理后能改变光线的传输方向特性实现显示信
息的。液晶显示器具有体积小、重量轻、功耗极低,显示内容丰富等特点,在单
片机应用系统中得到了日益广泛的应用。液晶显示器按其功能可以分为三类:笔
段式液晶显示器、字符点阵式液晶显示器和图形点阵式液晶显示器。前两种可以
显示数字、字符和符号等。而图形点阵式液晶显示器还可以显示汉字和任意图形,达到图文并茂的效果。
字符形液晶显示模块是一种专门用于显示字母、数字、符号等的点阵式液晶
显示模块。它是由若干个5*7或者是5*11等点阵符位组成的,每个点阵字符位
都可以显示一个字符。点阵字符位之间,有一定点距间隔,这样就起到了字符间
距和行距的作用。
要使用点阵型LCD液晶显示器,必须要有相应的LCD控制器、驱动器来对
LCD液晶显示器进行扫描、驱动,以及一定空间的ROM和RAM来存储的写入
的命令和显示字符的点阵。现在往往将LCD控制器、驱动器、RAM、ROM和
LCD显示器连接在一起,称为液晶显示模块LCM。使用时只要向LCM送入相
应的命令和数据就可以显示所需的信息。
目前市面上常用的有16字*1行、16字*2行、20字*2行和40字*2行等的
字符液晶显示模块。这些LCM虽然显示字数各个相同,但是都具有相同的输入
输出界面。
3.3.1字符型液晶显示模块RT-1602C的引脚功能
RT-1602C采用标准的16脚接口,各引脚情况如下:
第1脚:VSS,电源地;
第2脚:VDD,+5V;
第3脚:VL,液晶显示偏置电压;
第4脚:RS,数据/命令选择端,高电平时选择数据寄存器,低电平时选择指令寄存器。
第5脚:R/W读/写选择,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址;当RS为低电平R/W为高电平时可以读忙信号;当RS为高电平时R/W为低电平时可以写入数据。
第6脚:E,为使能端,当E端由高电平跳变为低电平时,液晶模块执行命令。 第7至14脚:D0至D7,为8位双向数据线。
第15脚:BLA,背光源正极
第16脚:BLK,背光源负极
3.3.2 字符型液晶显示模块RT-1602C的内部结构
液晶显示模块RT-1602C的内部结构可以分为三部分:一、LCD控制器,二、为LCD驱动器,三、LCD显示装置。如图3-4所示。
Vss
R/WE
图3-4 晶显示模块RT-1602C的内部结构
控制器采用HD44780,驱动器采用HD44100。HD44100是集控制器、驱动器于一体,专用于字符显示控制驱动集成电路。HD44100是作扩展显示字符位的。HD44780是字符型液晶显示控制器的代表电路。
HD44780集成电路的特点:
(1)可选择5*7或5*10点字符。
(2)HD44780不仅可以作为控制器,而且还具有驱动16*40点阵液晶像素能力,并且HD44780
的驱动能力可通过外接驱动器扩展360列驱动
HD44780可控制的字符高达每行80个字,也就是5*80=400点,HD44780内藏有16路行驱动器和40路列驱动器,所以HD44780本身就具有驱动16*40点阵LCD的能力(即单行16个字符或两行8个字符)。如果在外部一HD44100外扩展多40路/列驱动,则可驱动16*2LCD。
(3)HD44780的显示缓冲区DDRAM、字符发生存储器(ROM)及用户自定义的字符发生器CGRAM全部内藏在芯处内。
HD447803有80个字节的显示缓冲区,分两行,地址分别为00H-27H,40H-67H,它们实际显示地址的顺序跟LCD的型号有关,液晶显示模块RT-1602C的显示地址与实际显示位置关系如图所示。
这些字符有阿拉伯数字、英文字母的大小写、常用的符号和日文假名等,每
一个字符教都有一个固定的代码。如数字“1”的代码是00110001B(31H),又如大写的英文字母“A”的代码是01000001B(41H),可以看出英文字母的代码与ASCII编码相同。要显示“1”时,只需将ASCII码31H存入DDRAM指定的位置,显示模块将在相应的位置把数字“1”的点阵字符图形显示出来,我们就能看到数字“1”了。 (4)HD44780具有8位数据和4位数据传输两种方式,可与人4/8位CPU相连。 (5)HD44780具有简单而功能较强的指令集,可实现字符移动、闪烁等显示功能。
3.3.3指令格式与指令功能
LCD控制器HD44780内有多个寄存器,通过RS和R/W引脚共同决定选择哪一个寄存器选择情况见表
(1)清屏命令
光标复位,回到显示器的左上角。 地址计数器AC清零。 (2)光标复位命令
功能:光标复位,回到显示器的左上角。 地址计数器AC清零。
显示缓冲区DDRAM的内容不变。 (3)输入方式设置命令
格式:
功能:设定当写入一个字节后,光标的移动方向以及后面的内容是移动的。 当I/D=1时,光标从左向右移动,I/D=0时,光标从右向左移动。 当S=1时,内容移动,S=0时,内容不移动。 (4)显示开关控制命令
功能:控制显示的开关,当D=1时显示,D=0时不显示。
控制光标开关,当C=1时光标显示,C=0时光标不显示。 控制字符是否闪烁,当B=1时字符闪烁,B=0时字符不闪烁。 (5)光标移位置命令
格式:
功能:移动光标或整个显示字幕移位。
当S/C=1时整个显示字幕移位,当S/C=0时只光标移位。 当R/L=1时光标右移,R/L=0时光标左移。 (6)功能设置命令
格式:
设置显示行数,当N=1时双行显示,
N=0时单行显示。 设置字形大小,当F=1时5*10点阵,F=0时为5*7点阵。 (7)设置字库CGRAM地址命令
功能:设置用户自定义CGRAM的地址,对用户自定义CGRAM的访问时,要先设定CGRAM的地址,地址范畴为0-63。 (8)显示缓冲区DDRAM地址设计命令
格式:
功能:设置当前显示缓冲区DDRAM的地址,对DDRAM访问时,要先设定DDRAM的地址,地址范畴为0~127。 (9)读忙标志及地址计数器AC命令
功能:读忙标志及地址计数器AC命令。
当BF=1时表示忙,这时不能接收命令和数据:BF=0时表示不忙。 低7位为读出的AC的地址,值为0~127。 (10)写
DDRAM或CGRAM命令
功能:向DDRAM或CGRAM当前位置写入数据。对DDRAM或CGRAM写入数据之前必须设定DDRAM或CGRAM的地址。 (11)读
DDRAM或CGRAM命令
时,先须设定DDRAM或CGRAM的地址。
3.3.4 LCD显示器的初始化
LCD使用之前须对它进行初始化,初始化可通过复位完成,也在复位后完成,初始化过程如下: (1) 清屏。 (2) 功能设置。
(3) 开/关显示设置。 (4) 输入方式设置。
4单元电路设计说明
4.1.1直流稳压电源
小功率稳压电源由电源变压器、整流电路、滤波电路和稳压电路四个部分组成,如图4-1所示。
电 源 整 流 滤 波 稳 压 u1 u2 u3 uI U0 _ 变压器 _ 电 路 _ 电 路 _ 电 路 _
图4-1稳压电源的组成框图
u uu3
图4-2 整流与稳压过程
图1稳压电源的组成框图及整流与稳压过程
本次的设计的稳压电源电路原理图如图所示:
图4-3
4.1.2 电源变压器部分电路设计
电源变压器作用是将电网220V的变流电压V1变换成整流滤波电路所需的
XTAL2。而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。
电容器C1和C2的作用是稳定频率和快速起振,电容值的范围在5pF∽30pF,典型值为30pF。晶振的频率通常选择两种6MHz和12MHz。只要在单片机的XTAL1和XTAL2引脚外接晶体振荡器就构成了自激振荡器并在单片机内部产生时钟脉冲信号。
(2)时钟振荡电路如图4-4所示。
4.3单片机复位电路
复位电路是使单片机的CPU或系统中的其他部件处于某一确定的初始状态,并从这上状态开始工作。 (1)单片机常见的复位电路
通常单片机复位电路有两种:上电复位电路,按键复位电路。上电复位电路:上电复位是单片机上电时复位操作,保证单片机上电后立即进入规定的复位状态。它利用的是电容充电的原理来实现的。按键复位电路:它不仅具有上电复位电路的功能,同时它的操作比上电复位电路的操作要简单的多。如果要实现复位的话,只要按下RESET键即可。它主要是利用电阻的分压来实现的
在此设计中,采用的按键复位电路。按键复位电路如图4-5所示: (2)复位电路工作原理
上电复位要求接通电源后,单片机自动实现复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。
上电与按键均有效的复位电路不仅在上电时可以自动复位,而且在单片机运行期间,利用按键也可以完成复位操作。
故本设计选用第二种上电复位与按键均有效的各单位电路。
4.4单片机键盘电路
键盘电路是很多设计中很重要的组成部分。它主要是输入设备。 单片机应用系统中键盘有独立式和行列式两种。
独立式键盘:独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。I/O口内部有上拉电阻时,外部可不接上拉电阻。
行列式键盘:行列式键盘键数比较多,从按一个键到键功能被执行主要包括两项工作:一是键的识别,即在键盘中找出被按的是那一个键,另一项是键功能的实现,第一项是接口电路来实现的,而第二项是通过执行中断服务程序来实现的。具体来说,键盘借口应完成以下操作功能:
● 键盘扫描,以判断是否有键按下。 ● 键识别,以来确定闭和键的行列位置。 ● 产生闭和键的键码。
● 排除多键,串键以及抖动。
本次设计中采用的是独立式键盘,键盘电路图如图4-6所示:
图4-6与单片机相连的独立式键盘
4.5超声波发射电路
4-7超声波发射原理图
超声波信号由单片机产生,信号经过三极管后驱动超声波换能器发送超声波,途中碰到障碍物就立即返回。否则认为没有探测到物体。
此电路有两个三极管构成推拉式驱动电路,三极管工作在开关状态。当信号线来一个高电平时,三极管Q1导通,Q1的集电极高电平,Q2截止,Q2的发射极为低电平,从而使超声波换能器工作。在此电路图中的电容(C1)起隔直耦合作用。
4.6超声波接收电路
图4-8超声波接收原理图
超声波接收是用来将探测波回波的声能转换为电信号,实现超声波回波的接收。在被测物距离较远的情况下回波很弱,要求将信号多次放大,放大后的信号整形、比较、触发后产生中断信号,此中断信号向CPU发中断请求,执行中断服务程序中,读取计时器的定时值。
此电路由信号放大部分,检波部分,电压比较部分和信号保持部分组成,收到的信号经过两级放大,再通过倍压式峰值检波电路检波,得到一个基本稳定的信号,再通过与电压比较器比较,若信号电压大于参考电压,则输出高电平,若低于参考电压则输出为低电平,若输出高电平,则RS触发器触发,输出高电平,且一直保持下去,直到单片机给出控制信号,触发器回到低电平状态。 超声波从发射到接收时间间距的测量,是由单片机内部的计数器(如T0)来完成的 。超声波从发射到接收的时间间隔的测量, 是由单片机内部的计数器(如T 0) 来完成的。在CPU 停止发送脉冲群后, 由于电阻尼, 换能器不会立即停止发送超声波, 在一定时间内仍然发送。这段时间的存在使系统不能够测量比较近的物体, 形成所谓的“盲区”, 需要对盲区时间产生的信号进行屏蔽, 不同性能的超声波换能器的盲区有所差异, 以一个通道工作的时序为例进行说明, 如图4-9 所示。
图4-9 一个通道的工作时序
4.7单片机最小系统控制运算模块总原理图
图4-10
5软件设计流程图
5.1主流程图
图5-1主流程图
5.2温度读取程序
图5-2 温度检测程序
5.3 LCD显示流程图
图5-3 LCD显示流程图
5.4外中断服务程序
图5-4外中断服务程序
5.5超声波发射接收程序
图5-5 超声波发射程序
5.6键扫子程序
图5-6 键扫子程序
6调试说明
6.1 软件调试
系统软件设计、调试的过程如图6-1所示
图6-1
其过程分为以下几个步骤:
第一步,建立源程序。通过计算机开发系统的编辑软件,按照所要求的格式、语法规定、源程序输入到开发系统中,并存在磁盘上。
第二步,在计算机上,利用KILE软件对第一步输入的源程序进行编译,变为可执行的目标代码。如果源程序有语法错误,则其错误将显示出来,然后返回到第一步进行修改,再进行编译,直到语法错误全部纠正为止。
第三步,动态在线调试。对于与系统、硬件无联系的程序,可以借助动态在线调试手段,如单步运行、设置断点等,发现逻辑错误,然后返回到第一步修改,直到逻辑错误纠正为止。对于与系统硬件紧密相关的程序,则需软件,硬件同时进行调试,将程序烧入CPU,然后将CPU 插入系统,发现硬件故障排除故障,发现逻辑错误,修改程序,消除逻辑错误。
6.2 硬件调试
硬件调试分两步:
第一步:系统上电之前,先用万用表等工具,根据硬件逻辑设计图,仔细检查线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求,应特别注意电源系统的检查,以防止电源的短路和极性错误,并重点检查系统总线是否存在相互之间短路或与其它信号线的短路。
第二步:第一步的调试,只是对系统进行初步调试,可以排除一些明显的故障,而硬件故障(如各个部件内部存在的故障和部件之间连接的逻辑错误)主 要是靠软件和硬件联调来排除。
硬件调试和软件调试是不能完全分开的,许多硬件错误是在软件调试中发现和被纠正的。
7 误差分析
7.1超声波回波声强的影响
回波的声强与障碍物距离的远近有直接关系, 实际测量时, 不一定是第一个回波的过零点触发, 其原理如图7-1 所示。这种误差不能从根本上消除, 但是可以通过根据障碍物的距离调整脉冲群的脉冲个数以及动态调整比较电压来减小这种误差。另一方面将求距离公式DCT/2后加一个补偿系数来补偿计时误差,DCT/2a(a 与距离、脉冲个数相关) 。
图7-1 脉冲个数与回波声强对计时影响示意图
7.2 超声波波束入射角的影响
如果系统是用来测量面与点的距离, 则被测物、换能器及换能器所在测量参考平面三者之间存在一个几何角度, 即反射波入射到换能器的角度, 当这个角度不是90°时, 系统测量到的距离是障碍物与换能器之间的距离而不是和测
量参考平面之间的距离, 这就会造成测量误差, 如图7-2
所示。
图7-2 超声波回波入射角影响分析图
当障碍物的距离较小时, 这个误差就会成为近距离时的主要误差来源。可以用多个换能器同时测量, 利用几何关系来计算得出实际距离, 消除这种误差。
s
12
(y1y2z)
x2/2
式中 y1----换能器a 、b到被测物的距离 y2---- 换能器a、b之间的距离
x-----被测物到测量的距离
7.3超声波传播速度的影响
稳定准确的声波传播速度是保证测量精度的必要条件, 传播介质的温度、压力及密度对声速都产生直接影响。对于在大气中传播的声波而言, 引起声速变化的主要原因是温度的变化。采用声速预置和传播介质温度测量结合的方法对声速进行修正, 可有效地降低温度变化产生的误差。在对距离的精确度要求不高的应用中可以不进行温度补偿, 选择室温20℃左右时的声速340m/s作为固定参数, 当温度在- 10~ 40 ℃之间变化时声速误差在±5% 之间。如果在室外测量, 对于季节温差大的地区, 还可以采用预置该地区12 个月的统计温度, 用以对温度进行补偿, 既可提高精度, 又不增加成本。影响测量误差的因素8 很多, 包括现场环境干扰、时基脉冲频率等。在实际应用中可以根据系统测量精度要求, 采用合理的补偿手段。
7.4实测比较
8 元件清单
9设计心得
通过一个多月的努力,基于单片机的超声波测距仪设计的毕业设计终于在我的努力下完成了。设计能够成功的完成是与宋树祥老师细心的指导和帮助分不开的,在此表示忠心的感谢。
在这次毕业设计过程中。通过资料的查阅,制定方案等一系列过程,极大的丰富了我的专业知识,使我的理论与实际动手能力又有了一个很大的提高,特别是在单片机编程方面又学到了不少新的东西。毕业设计使我有机会把自己平时理论学习能够运用到实际中去,理论与实践相结合使我对自己的毕业设更加得心应手,在设计过程中同样也发现自己在各方面还存在不少问题,值得一说的就是自己有时候做事还是比较盲目,记得程序做好以后,我就马上迫不及待装机进行测试,但结果大失所望,显示、输出什么都没有。测试单片机,ALE无信号,竟然连晶振输出都没有信号,在没有经过仔细的分析下便马上断定晶振有问题,换!,还是不行,当时就晕了,不知道出了什么问题,拆这拆那,最后才发现自己的复位电路的PCB板在设计上存在问题,导致按键一直处于按下的状态,这样就迫使单片机的复位引脚一直处于高电平的复位状态,试问单片机又怎么可能会正常工作呢。当然,最后经过自己冷静分析终于找到了问题所在,修复后一切正常。经过这次也使我真正的认识单片机复位的重要性,也从此得到了一个教训,做事一定有条理,不能盲目的去干,否则造成大返工,吃亏终就是自己。 毕业设计对我来说,是三年来所学的所有知识的一个非常全面的综合性应用,涉及的理论知识面也很广,需要了解各方面的知识,是理论与实践相结合的最好体现,也是对我们大学三年生活的一种肯定,所以我们大家都是用心去把它做到最好,毕业论文的编写经过了很长的时间,也发现了很多问题,不过在宋老师的耐心指导下都一一得到了解决,在这里再次表示感谢,同时也非常感谢三年以来所有教导我的老师,你们辛苦了。最后祝愿湖南工学院蒸蒸日上,越来越好。
10参考资料
[1] 刘守义. 单片机应用技术 --西安:西安电子科技大学出2002.8
[2] 何立民. 单片机应用系统设计系统配置与接口技术.北京航空航天大学出版
社,1999.6
[3] 张洪润. 单片机应用技术教程.北京:清华大学出版社,1997 [4] 胡宴如. 模拟电子技术. 北京:高等教育出版社.2000 [5] 杨志忠. 数子电子技术. 北京:高等教育出版社.2000 [6] 清源计算机工作室. PROTEL99SE 机械工业出版社.2003 [7] 康华光. 电子技术基础. 北京:高等教育出版社.1999
[8] 谢自美. 电子线路设计. 武汉: 武汉理工大学出版社.1994
附录(1) 总原理图
PCB图
附录(2)
程序:
#include #include
#define uchar unsigned char #define uint unsigned int #define ulong unsigned long
uint c=340; //定义10度时声音的速度// ulong l,time;
char ii=1,k=80,aa;
char t,ts,tg,lb,ls,lg,lsf,fh,cb,cs,cg;
sbit RW=P2^1; //定义LCD读/写选择端// sbit RS=P2^0; //定义LCD数据/命令选择端// sbit E=P2^2; //定义LCD使能端// sbit k3=P1^2; sbit k4=P1^3;
sbit sg=P3^7; //定义超声波射引脚// sbit ctl=P3^5; //定义超声波控制引脚//
uchar tplsb,tpmsb; //温度值低位、高位字节// sbit DQ=P3^6; //DS18B20数据通信线//
ulong tp,sw,gw,sfw,bfw,tppp; uchar *p;
void delay(uint i) //延时程序// {while(i--); }
//*******产生复位脉冲初始化DS18B20*******// void Txreset() {DQ=0;
delay(100); //拉低约900US// DQ=1; //产生上升沿// delay(4); }
//*******等待应答脉冲*******// void Rxwait() {while(DQ);
while(DQ==0); //检测到应答脉冲//
delay(4);
}
//*******读取数据的一位,满足读时隙要求*******//
bit Rdbit()
{uint i;
bit b;
DQ=0;
i++; //保持至少1US//
DQ=1;
i++;
i++; //延时节15US以上,读时隙下降后15US,DS18B20输出数据才有效// b=DQ;
i=8;
while(i>0)i--;
return(b); //读时隙不低于60US//
}
//*******读取数据的第一个字节*******//
uchar Rdbyte()
{uchar i,j,b;
b=0;
for(i=1;i
{j=Rdbit();
b=(j>1);
}
return(b);
}
//*******写数据的第一个字节,满足写1和写0的时隙要求*****//
void Wrbyte(uchar b)
{uint i;
uchar j;
bit btmp;
for(j=1;j
{btmp=b&0x01;
b=b>>1; //取下一位(由低位向高位)//
if(btmp)
{DQ=0;
i++;
i++; //延时,使得15US以内拉高//
DQ=1;
i=8;
while(i>0)i--; //整个写1时隙不低于60US//
DQ=1;
i++;
}
else
{DQ=0;
i=9;
while(i>0)i--; //保持低在60至120US之间//
DQ=1;
i++;
i++;
}
}
}
//启动温度变换//
void convert()
{ Txreset(); //产生复位脉冲,初始化DS18B20//
Rxwait(); //等待DS18B20给出的应答脉冲//
Wrbyte(0xcc); //skip rom命令//
Wrbyte(0x44); //convert T命令//
}
//温度读取值//
void Rdtemp()
{Txreset(); //产生复位脉冲,初始化DS18B20//
Rxwait(); //等待DS18B20给出的应答脉冲//
Wrbyte(0xcc); //skip rom命令//
Wrbyte(0xbe); //convert T命令//
tplsb=Rdbyte(); //温度值低位字节//
tpmsb=Rdbyte(); //温度高位字节//
}
date()
{
tp=tpmsb*256+tplsb;
sw=tp*625/100000; //读取温度十位//
gw=tp*625%100000/10000; //读取温度个位//
sfw=tp*625%100000%10000/1000; //读取温度十分位//
bfw=tp*625%100000%10000%1000/100; //读取温度百分位//
tppp=sw*10+gw;
}
vmain()
{delay(100); //延时程序//
convert(); //启动温度转换//
delay(100);
Rdtemp(); //读取温度//
delay(100);
}
//************液晶显示***************//
void writercom(uchar q) //写命令//
{E=1;
RS=0;
RW=0;
P0=q;
E=0;
delay(20);
}
void writerdata(uchar o) //写数据//
{
E=1;
RS=1;
RW=0;
P0=o;
E=0;
delay(20);
}
void writer_d(uchar *u) //写数据串//
{while(*u)
writerdata(*u++);
}
void xsinit(void)
{writercom(0x01);
writercom(0x38); //使用8位数据,显示两行,使用5*7的字型// writercom(0x0c); //显示设置,不显示光标,字符不显闪琐// writercom(0x06); //光标从左往右移,内容不移//
}
void inptt()
{while(1)
{vmain();
writercom(0x80);
writer_d(
writerdata(sw+0x30); //LCD显示温度十位//
writerdata(gw+0x30); //LCD显示温度个位//
writerdata('.');别 //LCD显示温度十小数点//
writerdata(sfw+0x30); //LCD显示温度十分位//
writerdata(bfw+0x30); //LCD显示温度百分位//
writerdata(0xdf);
writer_d(
writercom(0xc0);
writer_d(
if(k4==0)break;
}
}
//**********超声波发射程序************//
void sen()
{uchar times=0;
TMOD=0x12; //定时器1工作在定时方式1,定时器0工作在定时方式2// IE=0x84; //中断设置//
TH0=244;
TL0=244;
TR0=1;
TR1=1; //开定时器//
while(1)
{while(TF0==0);
sg=~sg;
times++;
TF0=0;
if(times==20)break;} //翻转20次,发送10个脉冲信号的超声波// TR0=0;
times=0;
}
//**********外中断服务程序************//
rec()interrupt 2 using 2 //接收中断程序//
{TR1=0; //关计数器//
ctl=0;
time=TH1*256+TL1; //算出t的值,t的单位为us//
l=time*c/2;
TH1=0;
TL1=0;
}
//************数据处理,显示结果***************//
void dataxs()
{if(tppp>=10)c=338+(tppp-10)*0.6;
else c=338+(10-tppp)*0.6;
cb=c/100; //声音速度的百位//
cs=c%100/10; //声音速度的十位//
cg=c%100%10; //声音速度的个位//
lb=l/1000000; //距离的个位//
ls=l%1000000/100000; //距离的十分位//
lg=l%1000000%100000/10000; //距离的百分位//
/******LCD显示********/
writercom(0x80);
if(l
else if(TH1>=120)writer_d(
else {writer_d(
writerdata(lb+0x30); //LCD显示距离的个位// writerdata('.');
writerdata(ls+0x30); //LCD显示距离的十分位// writerdata(lg+0x30); //LCD显示距离的百分位// writer_d(
writerdata(cb+0x30); //LCD显示声音速度的百位// writerdata(cs+0x30); //LCD显示声音速度的十位//
writerdata(cg+0x30); //LCD显示声音速度的个位// writer_d(
}
}
//****状态1,手动控制******************//
void unauto()
{while(ii)
{while(k--)
{writercom(0xba);
writer_d(
delay(2000);}
k=20;
while(k--)
{writercom(0xba);
writer_d(
if(k4==0||k3==0){ii=0;break;}
delay(2000);}
k=20;
}
ii=1;
ctl=0;
sen(); //调超声波发射程序//
delay(50);
ctl=1;
}
//****状态2,实时监控*****//
void aut()
{writercom(0xba);
writer_d(
ctl=0;
sen();
delay(50);
ctl=1;
}
ztxz()
{while(k3==0&&aa==0)
{while(1)
{if(k3==1)break;}
aa=1;
}
while(k3==0&&aa==1)
{while(1)
{if(k3==1)break;}
aa=0;
}
}
//********主程序*******************// main()
{xsinit();
vmain(); //温度输入//
inptt();
while(1)
{while(!aa)
{unauto();
break;
}
while(aa)
{aut();
break;
}
while(k--) //等待回波//
{ztxz(); //状态切换键判断// delay(2000);
}
k=20;
dataxs();
}
}