1、湄洲湾职业技术学院2013届毕业设计产品说明书 湄洲湾职业技术学院 新型汽车防撞报警器设计说明书 系 别: 自动化工程系 年 级: 10级 专 业:电气自动化技术 姓 名: 叶青 学 号: 1101010215 导师姓名: 宋进 职 称: 讲 师 2013年5月27日 24 目录 1.前言 1 2.系统设计技术参数要求 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.前言 声波在其传播介
3、质中被定义为纵波。当声波受到尺寸大于其波长的目标物体阻挡时就会发生反射,反射波称为回声。假如声波在介质中传播的速度是已知的,而且声波从声源到达目标然后返回声源的时间可以测量得到,那么就可以计算出从声波到目标的距离。这就是本系统的防撞报警原理。这里声波传播的介质为空气,采用不可见的超声波。 接收回路中测得的超声波信号共有两个波束,第一个波束位余波信号,即超声波接收头在发射头发射信号(一组40KHz的脉冲)后,马上就接收到了超声波信号,并持续一段时间。另一个波束为有效信号,即经过被测物表面反射的回波信号。超声波测距时,需要测的是开始发射到接收到信号的时间差,需要检测的有效信号为反射物反射的回波信
4、号,故要尽量避免检测到余波信号,这也是超声波检测中存在最小测量盲区的主要原因。 软件控制脉冲发射、检测回波信号:程序采用的是脉冲测量法,由单片机引脚产生40KHz 的脉冲信号,每次测量发射的脉冲数至少要12个完整的40KHz脉冲。同时发射信号前打开计数器,进行计时;等计时到达一定值后再开启检测回波信号,以避免余波信号的干扰。采用外部中断对回波信号进行检测(回波信号送到单片机的为一序列方波脉冲)。接收到回波信号后,马上读取计数器中的数值,此数据即为需要测量的时间差数据。经过处理后得到这一次测距值。 假设室温下声波在空气中的传播速度是 340m/s,测量得到的声波从声源到达目标然后返回声源的
5、时间是t秒,则距离d可以由公式(1-1)计算:d=34560(cm/s)*t(s),因为声波经过的距离是声源与目标之间距离的两倍,声源与目标之间的距离应该是d/2。 2.系统设计技术参数要求 设计一个超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。具体要求如下: (1)测量范围在0.5-1.11m,测量精度±1cm。 (2)测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。 3.系统设计 3.1系
6、统设计总体框图 单 片 机 显示模块 超声波接收器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
7、个16位可编程定时/计数器、2个全双工串行通信口、看门狗(WDT)电路、片内振荡器及时钟电路。此外,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲模式下,CPU暂停工作,而RAM、定时/计数器、串行通信口、外中断系统可继续工作。掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。 2.本设计所用到管脚说明: (1) VCC:电源 (2) GND:地 (3) P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时
8、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
9、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位地址读取外部数据存储器 (例如执行MOV
10、X @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
11、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个晶振周期的高电平。特殊寄存器AUX
12、R(地址 8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。 (8) ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低 8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。 在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地
13、址为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) XTAL
14、2:振荡器反相放大器的输出端。 3.2.2超声波谐振频率调理电路模块 本模块以HD74LSO4芯片为核心的电路设计,其电路图如图3-5。 发射电路主要由反相器74LS04和超声波发射换能器T构成,单片机P1.0端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推挽形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。输出端采两个反向器并联,用以提高驱动能力。上位电阻R10、R11一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼
15、效果,缩短其自由振荡时间。其原理图如图3-3所示。 图3-3 超声波谐振频率调理电路 压电式超声波换能器是利用压电晶体的谐振来工作的。超声波换能器内部有两个压电晶片和一个换能板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极同未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。 3.2.3超声波回路接收处理模块 集成电路CX20106A是
16、一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38 kHz与测距的超声波频率40 kHz较为接近,可以利用它制作超声波检测接收电路(如图3-4)。实验证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。适当更改电容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。 图3-4 超声波检测接收电路 3.2.4数码管显示模块 本电路的显示模块主要由一个4位一体的7段LED数码管构成,用于显示测量到的电压值。它是一个共阳极的数码管,每一位数码管的a,b,
17、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接口,控制何时哪一位数码管被点亮。在轮流点亮数码管的扫描过程中,每位数码管的点亮时间极为短暂。但由于人的视觉暂留现象,给人的印象
18、就是一组稳定显示的数码。动态方式的优点是十分明显的,即耗电省,在动态扫描过程中,任何时刻只有一个数码管是处于工作状态的。具体原理图如图3-5 图3-5 数码管显示模块 3.3 系统总原理图说明 总原理图参见附录一。 电路由超声波传感器、单片机、发射/接收电路和LED显示器组成。以单片机AT89C51为主处理器,通过超声波传感器发射和接收超声波,再通过单片机中断测出单片机由发射到接收到超声波的时间,再计算出单片机与被测物体之间的距离,然后通过数码管显示出被测物体与单片机之间的距离。发射电路主要由74LS04和超声波换能器构成用单片机P1.0端口输出40KH
19、Z方波信号一路经一级反向后送到超声波换能器的一个电极,另一路经两级反向后送到超声波换能器的另一个电极。超声波接收采用的是常用于电视红外遥控接收器的芯片CX20106A。显示电路采用四位数码管的动态显示。 3.4 系统印刷电路板的制作图 详见附录二。 3.5 系统的操作说明 接通电源,按下开关,电源指示灯亮,显示管显示0000。将声波发射器对准障碍物时,在测量范围内显示管显示距离,当靠近0.5m-1.11m之间的时候蜂鸣器开始报警,当离障碍物小于0.5m的时候,显示管显示乱码此时处于测试盲区。 3.6 系统操作注意事项 1.通电使用前先对照电路板与电路图是否有错焊、漏焊、短路、开路、
20、元器件相碰等现象,有要处理好后再使用。 2.通电使用前先检查好电路板是否与电源供电线、驱动电路开关与负载供电线、负载供电线之间相互接反,不得在接错的情况下通电,要处理好后再使用。 3.通电使用时人体不得与电路板线路任何一个部位相碰,防止触电,注意安全。 4.应把电极片与电路板隔离,避免电极片与电路板上元器件相碰触发生短路现象。 5.通电时应把电路板放在绝缘物体上,避开其他导电物体避免发生短路现象。 6.使用时闻到烧焦味、发现元器件或集成块冒烟烧毁应立即断开电源,待电路板查明原因处理好后才可以继续通电使用。 参考文献 [1]苏长赞.红外线与超声波遥控·人民邮电出版社.19
21、93.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]李华.单片
22、机C语言编程.北京航空航天大学出版社.2005.26~56 [10]高飞燕.基于单片机的超声波测距系统的设计.信息技术.2005.41~52 [11]周荷琴、吴秀清.微型计算机原理与接口技术.中国科学技术大学出版社.2009.45~47 致谢词 大学三年一眼即逝。首先我要感谢在背后辛勤劳动默默支持着我的父母,是他们的付出才有我在校园安静学习生活的机会。 接着感谢宋进老师细心为我修改论文,从他那里学到的不只是专业知识,更多的是做人的道理。感谢梁峰林老师三年来担任我们的班主任,对我们生活、学习方面都付出了许多努力,没有她的带领,我们不会成为合
23、格的毕业生,另外还要感谢李清生、郑维清、陈辉煌、邱兴阳、杨阿弟、林寿光、宋进老师,他们在学习方面给了我大量的指导,让我学到了知识,也获得了实践锻炼的机会。他们严谨的治学态度、对我的严格要求以及为人处世的坦荡将使我终身受益。除此之外,他们对我生活的关心和照顾也使得我得以顺利完成大学的学业。在此祝愿他们身体健康,全家幸福! 其次感谢湄洲湾职业技术学院,给我提供这么好的学习生活环境,在校学习和生活的日子是我一生中一段难忘的经历。 最后还要感谢三年来一起生活学习的同学们,人生旅途中有着各种的幸酸与喜悦。是你们在陪伴着我一起度过,希望即将融入社会的你们能够闯出属于自己的一片天空。
24、 附录 附录一:电路总原理图 附录二:印刷电路板原理图 附录三:元件清单 序号 元件名称 型号与规格 单位 数量 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 C
25、3 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 数码管 四位一体共阳数码
26、管
只
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
27、 //超声波发送 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
28、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(); //显示函数 v
29、oid timeToBuffer(); //显示转换函数 void keyscan(); void k1cl(); void k2cl(); void k3cl(); void k4cl(); void offmsd(); void main() //主函数 { EA=1; //开中断 TMOD=0x11;
30、 //设定时器0为计数,设定时器1定时 ET0=1; //定时器0中断允许 ET1=1; //定时器1中断允许 TH0=0x00; TL0=0x00; TH1=0x9E; TL1=0x57; csbds=0; csbou
31、t=1; cl=0; csbs=8; jpjs=0; sj1=50;/////////测试报警距离 sj2=200; sj3=580; k4cl(); TR1=1; while(1) { keyscan(); if(jpjs<1)
32、 { csbcj(); //调用超声波测距程序 if(s>sj3) //大于时显示“CCC” { buffer[2]=0xC6; buffer[1]=0xC6;
33、 buffer[0]=0xC6;
}
else if(s 34、 buffer[0]=0xBF;
}
else timeToBuffer();
}
else timeToBuffer(); //将值转换成LED段码
offmsd();
scanLED(); //显示函数
if(s 35、 36、
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];
buf 37、fer[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)
{
38、 csbds=0;
cl=1;
}
}
void csbcj()
{
if(cl==1)
{
TR1=0;
TH0=0x00;
TL0=0x00;
i=csbs;
while(i--)
{
39、 csbout=!csbout;
}
TR0=1;
i=mqs; //盲区
while(i--)
{
}
i=0;
while(csbint)
40、 {
i++;
if(i>=4000) //上限值
csbint=0;
}
TR0=0;
TH1=0x9E;
TL1=0x57;
t=TH0;
t=t*256+TL 41、0;
t=t-29;
s=t*csbc/2;
TR1=1;
cl=0;
csbint=1;
//////////////////////////////////////////////////////////////////
if(s<=80)bj=0;
if(s>80)bj=1;
/////////////////////////////////////// 42、//////////////////////////
if(s 43、 k4cl();
}
else if(s>=sj3)
{
if(csbs<32)
{
csbs=csbs+2;
sj1=sj1+10;
k4cl() 44、
}
}
}
}
void keyscan() //健盘处理函数
{
xx=0;
if(k1!=1) // 判断开关是否按下
{
delay(100); //延时去抖动
45、 if(k1!=1) // 判断开关是否按下
{
while(!k1)
{
delay(25);
xx++;
46、 }
if(xx>1000)
{
jpjs++;
if(jpjs>3)
{
k4cl();
47、 jpjs=0;
}
}
xx=0;
switch(jpjs)
{
case 1: k1cl();break;
case 2: k2cl();break 48、
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=4 49、0;
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;
}






