资源描述
湄洲湾职业技术学院2013届毕业设计产品说明书
湄洲湾职业技术学院
新型汽车防撞报警器设计说明书
系 别: 自动化工程系
年 级: 10级 专 业:电气自动化技术
姓 名: 叶青 学 号: 1101010215
导师姓名: 宋进 职 称: 讲 师
2013年5月27日
24
目录
1.前言 1
2.系统设计技术参数要求 2
3.系统设计 3
3.1系统设计总体框图 3
3.2 各模块原理说明 4
3.2.1AT89C51模块: 4
3.2.2超声波谐振频率调理电路模块: 7
3.2.3超声波回路接收处理模块: 8
3.2.4数码管显示模块: 9
3.3 系统总原理图说明 10
3.4 系统印刷电路板的制作图 10
3.5 系统的操作说明 10
3.6 系统操作注意事项 10
参考文献 11
致谢词 12
附录 13
附录一:电路总原理图 13
附录二:印刷电路板原理图 14
附录三:元件清单 15
附录四:系统程序 16
1.前言
声波在其传播介质中被定义为纵波。当声波受到尺寸大于其波长的目标物体阻挡时就会发生反射,反射波称为回声。假如声波在介质中传播的速度是已知的,而且声波从声源到达目标然后返回声源的时间可以测量得到,那么就可以计算出从声波到目标的距离。这就是本系统的防撞报警原理。这里声波传播的介质为空气,采用不可见的超声波。
接收回路中测得的超声波信号共有两个波束,第一个波束位余波信号,即超声波接收头在发射头发射信号(一组40KHz的脉冲)后,马上就接收到了超声波信号,并持续一段时间。另一个波束为有效信号,即经过被测物表面反射的回波信号。超声波测距时,需要测的是开始发射到接收到信号的时间差,需要检测的有效信号为反射物反射的回波信号,故要尽量避免检测到余波信号,这也是超声波检测中存在最小测量盲区的主要原因。
软件控制脉冲发射、检测回波信号:程序采用的是脉冲测量法,由单片机引脚产生40KHz 的脉冲信号,每次测量发射的脉冲数至少要12个完整的40KHz脉冲。同时发射信号前打开计数器,进行计时;等计时到达一定值后再开启检测回波信号,以避免余波信号的干扰。采用外部中断对回波信号进行检测(回波信号送到单片机的为一序列方波脉冲)。接收到回波信号后,马上读取计数器中的数值,此数据即为需要测量的时间差数据。经过处理后得到这一次测距值。
假设室温下声波在空气中的传播速度是 340m/s,测量得到的声波从声源到达目标然后返回声源的时间是t秒,则距离d可以由公式(1-1)计算:d=34560(cm/s)*t(s),因为声波经过的距离是声源与目标之间距离的两倍,声源与目标之间的距离应该是d/2。
2.系统设计技术参数要求
设计一个超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。具体要求如下:
(1)测量范围在0.5-1.11m,测量精度±1cm。
(2)测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
3.系统设计
3.1系统设计总体框图
单
片
机
显示模块
超声波接收器R
超声波发生器T
电源电路
图3-1 基于单片机的超声波测距器系统框图
3.2 各模块原理说明
3.2.1AT89C51模块
本设计采用以AT89S51为核心的最小系统,其电路图如图3-2。
图3-2单片机最小系统原理图
1.功能特性概括:
AT89C51提供以下标准功能:40个引脚、4K Bytes Flash片内程序存储器、128Bytes的随机存取数据存储器(RAM)、32个外部双向输入/输出(I/O)口、5个中断优先级2层中断嵌套中断、2个数据指针、2个16位可编程定时/计数器、2个全双工串行通信口、看门狗(WDT)电路、片内振荡器及时钟电路。此外,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲模式下,CPU暂停工作,而RAM、定时/计数器、串行通信口、外中断系统可继续工作。掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
2.本设计所用到管脚说明:
(1) VCC:电源
(2) GND:地
(3) P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。
(4) P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL 逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输出口使用。作输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如表3-1所示。在flash编程和校验时,P1口接收低8位地址字节。
表3-1 P1口第二功能
引脚号
第二功能
P1.0
T2(定时器/计数器T2的外部计数输入) ,时钟输出
P1.1
T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5
MOSI(在系统编程用)
P1.6
MISO(在系统编程用)
P1.7
SCK(在系统编程用)
(5) 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位地址字节和一些控制信号。
(6) P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL) 。
P3口亦作为AT89C51特殊功能(第二功能)使用,如表3-2所示。 在flash编程和校验时,P3口也接收一些控制信号。
表3-2 P3口第二功能
引脚号
第二功能
P3.0
RXD(串行输入)
P3.1
TXD(串行输出)
P3.2
INT0(外部中断 0)
P3.3
INT0(外部中断 0)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器写选通)
(7) RST::复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址 8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。
(8) ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低 8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
(9)PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当 AT89C51从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
(10)EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。
(11) XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
(12) XTAL2:振荡器反相放大器的输出端。
3.2.2超声波谐振频率调理电路模块
本模块以HD74LSO4芯片为核心的电路设计,其电路图如图3-5。
发射电路主要由反相器74LS04和超声波发射换能器T构成,单片机P1.0端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推挽形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。输出端采两个反向器并联,用以提高驱动能力。上位电阻R10、R11一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。其原理图如图3-3所示。
图3-3 超声波谐振频率调理电路
压电式超声波换能器是利用压电晶体的谐振来工作的。超声波换能器内部有两个压电晶片和一个换能板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极同未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。
3.2.3超声波回路接收处理模块
集成电路CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38 kHz与测距的超声波频率40 kHz较为接近,可以利用它制作超声波检测接收电路(如图3-4)。实验证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。适当更改电容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。
图3-4 超声波检测接收电路
3.2.4数码管显示模块
本电路的显示模块主要由一个4位一体的7段LED数码管构成,用于显示测量到的电压值。它是一个共阳极的数码管,每一位数码管的a,b,c,d,e,f,g和dp端都各自连接在一起,用于接收单片机的P1口产生的显示段码。S1,S2,S3,S4引脚端为其位选端,用于接收单片机的P2口产生的位选码。本系统采用动态扫描方式。扫描方式是用其接口电路把所有数码管的8个比划段a~g和dp同名端连在一起,而每一个数码管的公共极COM各自独立地受I/O线控制。CPU从字段输出口送出字型码时,所有数码管接收到相同的字型码,但究竟是哪个数码管亮,则取决于COM端。COM端与单片机的I/O接口相连接,由单片机输出选码到I/O接口,控制何时哪一位数码管被点亮。在轮流点亮数码管的扫描过程中,每位数码管的点亮时间极为短暂。但由于人的视觉暂留现象,给人的印象就是一组稳定显示的数码。动态方式的优点是十分明显的,即耗电省,在动态扫描过程中,任何时刻只有一个数码管是处于工作状态的。具体原理图如图3-5
图3-5 数码管显示模块
3.3 系统总原理图说明
总原理图参见附录一。
电路由超声波传感器、单片机、发射/接收电路和LED显示器组成。以单片机AT89C51为主处理器,通过超声波传感器发射和接收超声波,再通过单片机中断测出单片机由发射到接收到超声波的时间,再计算出单片机与被测物体之间的距离,然后通过数码管显示出被测物体与单片机之间的距离。发射电路主要由74LS04和超声波换能器构成用单片机P1.0端口输出40KHZ方波信号一路经一级反向后送到超声波换能器的一个电极,另一路经两级反向后送到超声波换能器的另一个电极。超声波接收采用的是常用于电视红外遥控接收器的芯片CX20106A。显示电路采用四位数码管的动态显示。
3.4 系统印刷电路板的制作图
详见附录二。
3.5 系统的操作说明
接通电源,按下开关,电源指示灯亮,显示管显示0000。将声波发射器对准障碍物时,在测量范围内显示管显示距离,当靠近0.5m-1.11m之间的时候蜂鸣器开始报警,当离障碍物小于0.5m的时候,显示管显示乱码此时处于测试盲区。
3.6 系统操作注意事项
1.通电使用前先对照电路板与电路图是否有错焊、漏焊、短路、开路、元器件相碰等现象,有要处理好后再使用。
2.通电使用前先检查好电路板是否与电源供电线、驱动电路开关与负载供电线、负载供电线之间相互接反,不得在接错的情况下通电,要处理好后再使用。
3.通电使用时人体不得与电路板线路任何一个部位相碰,防止触电,注意安全。
4.应把电极片与电路板隔离,避免电极片与电路板上元器件相碰触发生短路现象。
5.通电时应把电路板放在绝缘物体上,避开其他导电物体避免发生短路现象。
6.使用时闻到烧焦味、发现元器件或集成块冒烟烧毁应立即断开电源,待电路板查明原因处理好后才可以继续通电使用。
参考文献
[1]苏长赞.红外线与超声波遥控·人民邮电出版社.1993.159~189
[2]胡萍.超声波测距仪的研制.浙江大学出版社.2000.103~159
[3]刘凤然.基于单片机的超声波测距系统.传感器世界.2001.20~31
[4]靳达.单片机应用系统开发实例导航.人民邮电出版社.2003.26~29
[5]余永权、汪明慧等.单片机在控制系统中的应用.电子工业出版社.2004.45~51
[6]胡汉才.单片机原理及其接口技术.清华大学出版社.2004.11~23
[7]张艺刚.单片机原理与接口技术.北京航空航天大学出版社.2005.68~105
[8]苏伟.超声波测距误差分析.传感器技术.2005.第五期.23
[9]李华.单片机C语言编程.北京航空航天大学出版社.2005.26~56
[10]高飞燕.基于单片机的超声波测距系统的设计.信息技术.2005.41~52
[11]周荷琴、吴秀清.微型计算机原理与接口技术.中国科学技术大学出版社.2009.45~47
致谢词
大学三年一眼即逝。首先我要感谢在背后辛勤劳动默默支持着我的父母,是他们的付出才有我在校园安静学习生活的机会。
接着感谢宋进老师细心为我修改论文,从他那里学到的不只是专业知识,更多的是做人的道理。感谢梁峰林老师三年来担任我们的班主任,对我们生活、学习方面都付出了许多努力,没有她的带领,我们不会成为合格的毕业生,另外还要感谢李清生、郑维清、陈辉煌、邱兴阳、杨阿弟、林寿光、宋进老师,他们在学习方面给了我大量的指导,让我学到了知识,也获得了实践锻炼的机会。他们严谨的治学态度、对我的严格要求以及为人处世的坦荡将使我终身受益。除此之外,他们对我生活的关心和照顾也使得我得以顺利完成大学的学业。在此祝愿他们身体健康,全家幸福!
其次感谢湄洲湾职业技术学院,给我提供这么好的学习生活环境,在校学习和生活的日子是我一生中一段难忘的经历。
最后还要感谢三年来一起生活学习的同学们,人生旅途中有着各种的幸酸与喜悦。是你们在陪伴着我一起度过,希望即将融入社会的你们能够闯出属于自己的一片天空。
附录
附录一:电路总原理图
附录二:印刷电路板原理图
附录三:元件清单
序号
元件名称
型号与规格
单位
数量
1
电阻
R8 R9 R38 1K
只
3
2
电阻
R1 10K
只
1
3
排阻
RP1 10K
只
1
4
电阻
R10 R11 R12 R13 R31 2.2K
只
5
5
电阻
R15 R16 200K
只
2
6
电阻
R2 R14 10欧
只
2
7
磁片电容
C2 C3 30P (300)
只
2
8
磁片电容
C6 330pf (331)
只
1
9
磁片电容
C11 104
只
1
10
磁片电容
C9 473
只
1
11
二级管
D12 LED
只
1
12
电解电容
C1 10UF C10 C17 4.7UF
只
3
13
蜂鸣器
蜂鸣器
只
1
14
超声波探头
40R 40T
只
2
15
三极管
Q1—Q5 8550
只
5
16
电源插座
DC 3.5*1.1
只
1
17
数码管
四位一体共阳数码管
只
1
18
集成电路
74HC04 CX20106A
只
2
19
晶振
12M
只
1
20
芯片 IC 座
40脚 14脚
只
2
21
单片机
STC89C51
只
1
22
开关
6*6*5按键 自锁开关
只
2
23
电源线
USB电源线
条
1
24
焊锡
0.6焊锡
米
1
附录四:系统程序
#include <reg51.H>
sbit k1=P3^4;
sbit csbout=P1^0; //超声波发送
sbit csbint=P3^2; //超声波接收
sbit bg=P3^3;
#define LED P0
sbit LED1=P2^4; //LED控制
sbit LED2=P2^5; //LED控制
sbit LED3=P2^6; //LED控制
sbit bj=P2^0;//报警
#define csbc 0.0347
unsigned char cl,mqzd,csbs,csbds,buffer[3],xm1,xm2,xm0,jpjs;//显示标识
unsigned char convert[10]={0x18,0x7b,0x2c,0x29,0x4b,0x89,0x88,0x3b,0x08,0x09};//0~9段码
unsigned int s,t,i,xx,j,sj1,sj2,sj3,mqs,sx1;
void csbcj();
void delay(j); //延时函数
void scanLED(); //显示函数
void timeToBuffer(); //显示转换函数
void keyscan();
void k1cl();
void k2cl();
void k3cl();
void k4cl();
void offmsd();
void main() //主函数
{
EA=1; //开中断
TMOD=0x11; //设定时器0为计数,设定时器1定时
ET0=1; //定时器0中断允许
ET1=1; //定时器1中断允许
TH0=0x00;
TL0=0x00;
TH1=0x9E;
TL1=0x57;
csbds=0;
csbout=1;
cl=0;
csbs=8;
jpjs=0;
sj1=50;/////////测试报警距离
sj2=200;
sj3=580;
k4cl();
TR1=1;
while(1)
{
keyscan();
if(jpjs<1)
{
csbcj(); //调用超声波测距程序
if(s>sj3) //大于时显示“CCC”
{
buffer[2]=0xC6;
buffer[1]=0xC6;
buffer[0]=0xC6;
}
else if(s<sj1) //小于时显示“- - -”
{
buffer[2]=0xBF;
buffer[1]=0xBF;
buffer[0]=0xBF;
}
else timeToBuffer();
}
else timeToBuffer(); //将值转换成LED段码
offmsd();
scanLED(); //显示函数
if(s<sj1)
bg=0;
bg=1;
}
}
void scanLED() //显示功能模块
{
LED=buffer[0];
LED3=0;
delay(200);
LED3=1;
LED=buffer[1];
LED2=0;
delay(200);
LED2=1;
LED=buffer[2];
LED1=0;
delay(200);
LED1=1;
}
void timeToBuffer() //转换段码功能模块
{
xm0=s/100;
xm1=(s-100*xm0)/10;
xm2=s-100*xm0-10*xm1;
buffer[2]=convert[xm2];
buffer[1]=convert[xm1];
buffer[0]=convert[xm0];
}
void delay(i)
{
while(--i);
}
void timer1int (void) interrupt 3 using 2
{
TH1=0x9E;
TL1=0x57;
csbds++;
if(csbds>=40)
{
csbds=0;
cl=1;
}
}
void csbcj()
{
if(cl==1)
{
TR1=0;
TH0=0x00;
TL0=0x00;
i=csbs;
while(i--)
{
csbout=!csbout;
}
TR0=1;
i=mqs; //盲区
while(i--)
{
}
i=0;
while(csbint)
{
i++;
if(i>=4000) //上限值
csbint=0;
}
TR0=0;
TH1=0x9E;
TL1=0x57;
t=TH0;
t=t*256+TL0;
t=t-29;
s=t*csbc/2;
TR1=1;
cl=0;
csbint=1;
//////////////////////////////////////////////////////////////////
if(s<=80)bj=0;
if(s>80)bj=1;
/////////////////////////////////////////////////////////////////
if(s<sj1)
{
if(csbs>6)
{
csbs=csbs-2;
sj1=40;
}
sj1=sj1+2;
k4cl();
}
else if(s>=sj3)
{
if(csbs<32)
{
csbs=csbs+2;
sj1=sj1+10;
k4cl();
}
}
}
}
void keyscan() //健盘处理函数
{
xx=0;
if(k1!=1) // 判断开关是否按下
{
delay(100); //延时去抖动
if(k1!=1) // 判断开关是否按下
{
while(!k1)
{
delay(25);
xx++;
}
if(xx>1000)
{
jpjs++;
if(jpjs>3)
{
k4cl();
jpjs=0;
}
}
xx=0;
switch(jpjs)
{
case 1: k1cl();break;
case 2: k2cl();break;
case 3: k3cl();break;
}
}
}
}
void k1cl()
{
sj1=sj1+1;
if(sj1>100)
sj1=50;
s=sj1;
}
void k2cl()
{
sj2=sj2+5;
if(sj2>500)
sj2=40;
s=sj2;
}
void k3cl()
{
sj3=sj3+10;
if(sj3>600)
sj3=600;
s=sj3;
}
void k4cl()
{
sx1=sj1-1;
sx1=sx1/csbc;
mqs=sx1/4.5;
}
void offmsd() //小时数十位为0判断模块
{
if (buffer[0] == 0xC0) //如果值为零时小数十位不显示
buffer[0] = 0xFF;
}
展开阅读全文