扬州大学单片机课程设计超声波测距仪的设计Word格式.docx
《扬州大学单片机课程设计超声波测距仪的设计Word格式.docx》由会员分享,可在线阅读,更多相关《扬州大学单片机课程设计超声波测距仪的设计Word格式.docx(33页珍藏版)》请在冰豆网上搜索。
或在单片机周立功实验箱上进行相关设计并调试。
四、课程设计要求
1.测量有效范围0-60cm;
2.测量的距离值在1602LED液晶上显示(保留一位小数);
3.设计硬件原理图;
4.编写程序。
五、进度安排
序号
内容
天数
1
布置任务,熟悉课题要求
0.5
2
总体方案确定,硬件电路设计
1.5
3
软件编程
4
Proteus仿真,或在周立功实验箱上调试
5
总结,撰写课程设计报告
七、课程设计报告内容:
总结设计过程,写出设计报告,设计报告具体内容要求如下:
1.课程设计的目和设计的内容。
2.课程设计的要求。
3.控制系统总框图及系统工作原理。
4.控制系统的硬件电路连接图,电路的原理。
5.软件设计流程图及其说明。
6.电路设计,软件编程、调试中遇到的问题及分析解决方法。
7.实验结果及其分析。
8.体会。
第二部分
课
程
设
计
报
告
1课题简介
1.1设计目的
(1)设计一个超声波测距仪;
(2)课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。
1.2设计内容
1.2.1设计要求
设计一个超声波测距仪。
具体要求:
(1)测量范围:
0-60cm;
(2)测量精度:
±
5%;
(3)选定设计方案,画出系统框图,写出详细的设计过程;
(4)利用Protel99SE软件画出一套完整的设计电路图,并列出所有的元件清单;
1.2.2设计内容及任务
设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。
(1)系统方案设计:
综合运用单片机课程中所学到的理论知识,根据所选课题的任务、要求和条件进行总体方案的设计。
(2)硬件电路设计:
(3)软件设计:
根据已设计出的软件系统框图,用C51语言编制出各功能模块的子程序和整机软件系统的主程序。
(4)调试:
在锐志RZ-51/AVRV2.8开发板上进行相关设计并调试。
(5)在液晶显示屏上显示测量的距离,以厘米为单位,保留一位小数。
(6)软件设计必须应用8052片内定时器,采用定时中断结构,可以采用软件中断的延时法。
1.3设备及工作环境
(1)软件:
WindowsXP操纵系统、KeilC51软件、STC_ISP_V479软件;
(2)硬件:
锐志RZ-51/AVRV2.8开发板。
2方案设计
2.1超声波测距原理
超声波是一种人耳无法听到的、频率一般超过20kHz的声音。
波的传播速度是用频率乘以波长来表示。
声波在空气中的传播速度较慢,约为344m/s(20º
C)。
在这种较低的传播速度下,波长很短,就意味着可以获得较高的距离和方向分辩率。
正是由于这种较高的分辩率特性,才使我们有可能在进行测量时得很高的精确度。
超声波设备的外表面尺寸易于获得精确的辐射。
超声波对金属、木材、混凝土、玻璃、橡胶和纸等可以反射近乎100%,相反对布、棉花、绒毛等会被吸收而难以实行反射波的探测。
(1)温度效应
声波传播的速度C=331.5+0.607t(m/s)。
也就是说,声音传播速度随周围温度的变化而有所不同。
因此,要精确的测量与某个物体之间的距离时,始终检查周围温度是十分必要的。
(2)衰减
传播到空气中的超声波强度随距离的变化成比例地减弱,这是因为衍射现象所导致的在球形表面上的扩散损失,也是因为介质吸收能量产生的吸收损失。
如图1所示,超声波的频率越高,衰减率就越高,波的传播距离也就越短。
图1声压在不同距离上的衰减特性
(3)压电式超声波发生器原理
超声波发生器可以分为两大类:
一类是用电气方式产生超声波,一类是用机械方式产生超声波。
电气方式包括压电型、磁致伸缩型和电动型等;
机械方式有加尔统笛、液哨和气流旋笛等。
它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。
目前较为常用的是压电式超声波发生器。
压电式超声波发生器实际上是利用压电晶体的谐振来工作的。
超声波发生器内部结构如图2所示,它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。
反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
图2压电式超声波发生器的构造
(4)超声波测距的优缺点
超声波测距的优点:
1)对雨、雾、雪的穿透力强、衰减小,因此汽车声纳雷达可以在雨、雪、大雾等恶劣天气下工作。
2)超声波测距的原理简单、制作方便、成本低。
超声波测距的缺点:
1)声波的传播速度相对于电磁波来说慢了许多,当汽车在高速公路上以每小时上百公里的速度高速行驶时,使用超声波测距无法跟上车距的实时变化,误差大;
2)超声波的方向性相对于激光光束来讲要差的多,发散角大。
当要测量距离较远的目标时,一方面由于发散而使能量大大降低,另一方面会使分辨力下降,导致将邻车道的车辆或路边的物体作为测量目标。
2.2系统总体设计方案
本系统由时钟电路、复位电路、超声波发射、回波信号接收、液晶显示等硬件电路部分以及相应的软件部分构成。
整个系统由单片机AT89S52控制,超声波传感器采用收发分体式,分别是一支超声波发射换能器TCT40-16T和一支超声波接收换能器TCT40-16R。
超声波信号通过超声波发射换能器发射至空气中,遇被测物反射后回波被超声波接收换能器接收。
进行相关处理后,输入单片机的INT1脚产生中断,计算中间经历的时间,通过换算得出测试的距离。
图3系统结构框图
3硬件电路设计
3.1时钟电路
AT89S52单片机内部有一个用于构成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2.这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器,图4是AT89S52内部时钟方式的电路。
电路中的电容C1和C2的典型值通常选择为30pF。
图4AT89S52内部时钟方式的电路
3.2复位电路
AT89S52的复位是由外部的复位电路实现的,常有上电自复位和按钮复位两种方式。
本系统采用的是如图5所示的按键手动电平复位电路。
按键手动电平复位是通过RST端经电阻与电源VCC接通来实现的。
当时钟频率选用11.0592MHz时,C的典型取值为10uF,R的取值为2KΩ。
图5按键手动电平复位电路
3.31602液晶显示电路
本设计使用的是2行16个字的1602液晶模块作为测量值显示部分。
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔每行之间也有也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。
如图6为1602LCD接线图。
1602采用标准的16脚接口,其中:
第1脚:
VSS为地电源
第2脚:
VDD接5V正电源
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器,图61602LCD接线图
与单片机的P2.0口相连。
第5脚:
RW为读写信号线,高电平时进行读操作,低电平时进行写操作,与单片机P2.1口相连。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线,与单片机P0口相连。
第15、16脚:
背光电源的正负极,分别接+5V电源和地。
3.4超声波发射模块
超声波发射部分是为了让超声波发射换能器TCT40-16T能向外界发出40kHz左右的方波脉冲信号。
40kHz左右的方波脉冲信号的产生通常有两种方法:
采用硬件如由555振荡产生或软件如单片机软件编程输出,本系统采用后者。
编程由单片机P3.2端口输出40kHz左右的方波脉冲信号,由于单片机端口输出功率不够,40kHz方波脉冲信号分
图7超声波发射模块
成两路,送给一个由CD4069组成的推挽式电路进行功率放大以便使发射距离足够远,满足测量距离要求,最后送给超声波发射换能器TCT40-16T以声波形式发射到空气中。
发射部分的电路,如图7所示。
图中输出端上拉电阻R6,R7,一方面可以提高反向器CD4069输出高电平的驱动能力,另一方面可以增加超声换能器的阻尼效果,缩短其自由振荡的时间。
3.5超声波接收模块
上述TCT40-16T发射的在空气中传播,遇到障碍物就会返回,超声波接收部分是为了将反射波(回波)顺利接收到超声波接收换能器TCT40-16R进行转换变成电信号,并对此电信号进行放大、滤波、整形等处理后,这里用索尼公司生产的集成芯片CX20106,得到一个负脉冲送给单片机的P3.3(INT1)引脚,以产生一个中断。
接收部分的电路,如图8所示。
可以看到,集成芯片CX20106在接收部分电路中起了很大的作用。
CX20106是一款应用广泛的红外线检波接收的专用芯片,其具有功能强、性能优越、外围接口简单、成本低等优点,由于红外遥控常用的载波频率38kHz与测距的超声波频率40kHz比较接近,而且CX20106内部设置的滤波器中心频率f0可由其5脚(FW)外接电阻调节,阻值越大中心频率越低,范围为30~60kHz。
图8超声波接收模块
故本次设计用它来做接收电路。
CX20106内部由前置放大器、限幅放大器、带通滤波器、检波器、积分器及整形电路构成。
工作过程如下:
接收的回波信号先经过前置放大器和限幅放大器,将信号调整到合适幅值的矩形脉冲,由滤波器进行频率选择,滤除干扰信号,再经整形,送给输出端7脚(OUT)。
当接收到与CX20106滤波器中心频率相符的回波信号时,其输出端7脚就输出低电平,而输出端7脚直接接到AT89S52的P3.3(INT1)引脚上,以触发中断。
若频率有一些误差,可调节芯片引脚5的外接电阻R4,将滤波器的中心频率设置在40kHz,就可达到理想的效果。
4软件编程设计
4.1程序设计流程图
图9程序设计流程图
4.21602LCD液晶显示控制程序
每位之间有一个点距的间隔,每行之间也有也有间隔,起到了字符间距和行间距的作用,正因为如此,所以他不能显示图形。
对它的操作通常有读写数据、读写命令和检测忙信号等操作。
在介绍程序之前先介绍本程序所涉及到的一些指令的意义。
1602液晶的驱动芯片HD44780内置了DDRAM(显示数据存储RAM)、CGROM(字符存储ROM)和CGRAM(用户自定义RAM)。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下图所示:
图10DDRAM地址与屏幕对应关系图
也就是说想要在LCD1602屏幕的第一行第一列显示一个“A”字,就要向DDRAM的00H地址写入“A”的
代码就行了。
但具体的写入是要按LCD模块的指令格式来进行的,一行有40个地址,在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下图所示:
图11DDRAM地址与屏幕对应关系图(实际显示部分)
但是我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码)并不能显示1出来。
这是令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即0X80+0x00,若要在DDRAM的01H处显示数据,则必须将01H加上80H即0X80+0x01,具体程序会在后面介绍写地址的操作处解释。
(1)基本操作时序:
读状态
输入:
RS=L,RW=H,E=H
输出:
DB0~DB7=状态字
写指令
RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码
无
读数据
RS=H,RW=H,E=H
DB0~DB7=数据
写数据
RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据
(2)常用指令及意义
1)清屏指令
图12清屏指令对应指令编码
功能:
<
1>
清除液晶显示器,即将DDRAM的内容全部填入“空白”的字符码20H;
2>
光标归位,即将光标撤回液晶显示屏的左上方;
3>
将地址计数器(AC)的值设为0。
2)输入模式设置指令
图13输入模式设置对应指令编码
设定每次写入1位数据后光标的移位方向,并且设定每次写入的一个字符是否
移动。
参数设定的情况如下所示:
位名
设置
I/D
0写入新数据后光标左移
1写入新数据后光标右移
S
0写入新数据后显示屏不移动1写入新数据后显示屏整体右移1个字
3)显示开关控制指令
图14显示开关控制对应指令编码
控制显示器开/关、光标显示/关闭以及光标是否闪烁。
参数设定的情况如下:
参数设定情况如下所示
D
0=显示功能关
1=显示功能开
C
0=无光标
1=有光标
B
0=光标不闪烁
1=光标闪烁
4)设定显示屏或光标移动方向指令
图15设定显示屏或光标移动方向指令编码
使光标移位或使整个显示屏幕移位。
参数设定情况如下所示:
S/C
R/L
设定情况
0
光标左移1格,且AC值减1
1
光标右移1格,且AC值加1
显示器上字符全部左移一格,但光标不动
显示器上字符全部右移一格,但光标不动
5)功能设定指令
图16功能设定指令编码
设定数据总线位数、显示的行数及字型。
设置
DL
0数据总线为4位1数据总线为8位
N
0显示1行1显示2行
F
05×
7点阵/每字符
15×
10点阵/每字符
6)设定DDRAM地址指令
图17设定DDRAM地址指令编码
设定下一个要存入数据的CGRAM的地址。
(注意这里我们送地址的时候应该是0x80+Address,
这也是前面说到写地址命令的时候要加上0x80的原因)
7)读取忙信号或AC指令
图18读取忙信号或AC指令编码
读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;
当BF=0时,液晶显示器可以接收单片机送来的数据或指令;
<
读取地址计数器(AC)的内容。
8)数据写入DDRAM或CGRAM指令
图19数据写入DRAM或CGRAM指令编码
将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;
<
将用户自己设计的图形存入CGRAM。
(3)操作时序图
1)读数据、命令
RS=0,RW=1,E=1
RS=1,RW=1,E=1
图20读、数据、命令时序图
2)写数据、命令
RS=0,RW=0,E=下降沿脉冲,DB0~DB7=指令码
RS=1,RW=0,E=下降沿脉冲,DB0~DB7=数据
图21写数据、命令时序图
(4)程序举例
1)1602液晶忙信号检测
ucharBusyTest(void)
{
bitresult;
RS=0;
//rs为0rw为1数据位第8位为忙信号
RW=1;
E=1;
_nop_();
result=BF;
E=0;
returnresult;
}
2)1602写命令指令
voidWriteCom(unsignedchardictate)
{
while(BusyTest()==1);
//rs为0rw为0e下降沿写入指令
RW=0;
//e为0期间,将数据送到P0口
P0=dictate;
}
3)1602写地址指令
voidWriteAddress(unsignedcharx)//1602液晶确定将要写入DDRAM的数据的地址
{
WriteCom(x|0x80);
//要显示的地址+0x80为实际要写入的地址可用或操作实现
4)1602写数据指令
voidWriteData(unsignedchary)
RS=1;
//rs为1rw为0e下降沿写入指令
P0=y;
//e为0期间,将数据送到P0口
_nop_();
5)1602初始化指令
voidLcdInitiate(void)
delay(15);
WriteCom(0x38);
//5*7点阵数据总线为8位显示两行
delay(5);
WriteCom(0x38);
//液晶厂家推荐方式——三次写入确保确切写入
WriteCom(0x0c);
//显示功能开,光标不显示
WriteCom(0x06);
//写入新数据后光标右移(即AC自加1)
WriteCom(0x01);
//清屏指令
}
4.3超声波测速模块发送程序
Tx=1;
delay_20us();
//在超声波模块发射脚产生20us高电平,启动测速
Tx=0;
while(Rx==0)
;
//启动完成后接收脚自动置1等启动完成
succeed_flag=0;
//测速成功标志置0
EX1=1;
//开外部中断1超声波模块的