新型汽车防撞报警器设计说明书讲解.docx
《新型汽车防撞报警器设计说明书讲解.docx》由会员分享,可在线阅读,更多相关《新型汽车防撞报警器设计说明书讲解.docx(21页珍藏版)》请在冰豆网上搜索。
新型汽车防撞报警器设计说明书讲解
湄洲湾职业技术学院
新型汽车防撞报警器设计说明书
系别:
自动化工程系
年级:
10级专业:
电气自动化技术
姓名:
叶青学号:
1101010215
导师姓名:
宋进职称:
讲师
2013年5月27日
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系统设计总体框图
电源电路
图3-1基于单片机的超声波测距器系统框图
3.2各模块原理说明
3.2.1AT89C51模块
本设计采用以AT89S51为核心的最小系统,其电路图如图3-2。
图3-2单片机最小系统原理图
1.功能特性概括:
AT89C51提供以下标准功能:
40个引脚、4KBytesFlash片内程序存储器、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-1P1口第二功能
引脚号
第二功能
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-2P3口第二功能
引脚号
第二功能
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是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38kHz与测距的超声波频率40kHz较为接近,可以利用它制作超声波检测接收电路(如图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
电阻
R8R9R381K
只
3
2
电阻
R110K
只
1
3
排阻
RP110K
只
1
4
电阻
R10R11R12R13R312.2K
只
5
5
电阻
R15R16200K
只
2
6
电阻
R2R1410欧
只
2
7
磁片电容
C2C330P(300)
只
2
8
磁片电容
C6330pf(331)
只
1
9
磁片电容
C11104
只
1
10
磁片电容
C9473
只
1
11
二级管
D12LED
只
1
12
电解电容
C110UFC10C174.7UF
只
3
13
蜂鸣器
蜂鸣器
只
1
14
超声波探头
40R40T
只
2
15
三极管
Q1—Q58550
只
5
16
电源插座
DC3.5*1.1
只
1
17
数码管
四位一体共阳数码管
只
1
18
集成电路
74HC04CX20106A
只
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
sbitk1=P3^4;
sbitcsbout=P1^0;//超声波发送
sbitcsbint=P3^2;//超声波接收
sbitbg=P3^3;
#defineLEDP0
sbitLED1=P2^4;//LED控制
sbitLED2=P2^5;//LED控制
sbitLED3=P2^6;//LED控制
sbitbj=P2^0;//报警
#definecsbc0.0347
unsignedcharcl,mqzd,csbs,csbds,buffer[3],xm1,xm2,xm0,jpjs;//显示标识
unsignedcharconvert[10]={0x18,0x7b,0x2c,0x29,0x4b,0x89,0x88,0x3b,0x08,0x09};//0~9段码
unsignedints,t,i,xx,j,sj1,sj2,sj3,mqs,sx1;
voidcsbcj();
voiddelay(j);//延时函数
voidscanLED();//显示函数
voidtimeToBuffer();//显示转换函数
voidkeyscan();
voidk1cl();
voidk2cl();
voidk3cl();
voidk4cl();
voidoffmsd();
voidmain()//主函数
{
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;
}
elseif(s{
buffer[2]=0xBF;
buffer[1]=0xBF;
buffer[0]=0xBF;
}
elsetimeToBuffer();
}
elsetimeToBuffer();//将值转换成LED段码
offmsd();
scanLED();//显示函数
if(sbg=0;
bg=1;
}
}
voidscanLED()//显示功能模块
{
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;
}
voidtimeToBuffer()//转换段码功能模块
{
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];
}
voiddelay(i)
{
while(--i);
}
voidtimer1int(void)interrupt3using2
{
TH1=0x9E;
TL1=0x57;
csbds++;
if(csbds>=40)
{
csbds=0;
cl=1;
}
}
voidcsbcj()
{
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{
if(csbs>6)
{
csbs=csbs-2;
sj1=40;
}
sj1=sj1+2;
k4cl();
}
elseif(s>=sj3)
{
if(csbs<32)
{
csbs=csbs+2;
sj1=sj1+10;
k4cl();
}
}
}
}
voidkeyscan()//健盘处理函数
{
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)
{