《945191662自动排爆车设计报告及源程序.doc》由会员分享,可在线阅读,更多相关《945191662自动排爆车设计报告及源程序.doc(10页珍藏版)》请在三一办公上搜索。
1、自动排爆车(G题)摘要:本设计是一个以单片机为主控制器的自动排爆车系统,它具有自动进入危险现场、自动检测可疑铁磁材料薄片并将其带到出发点和自动分段计时等功能。在检测到可疑铁磁材料时,小车会发出声光提示讯号,此时电磁铁机械手便会工作将其“拿起”,最后小车会带着可疑铁磁薄片回到出发点并自动停车将铁磁材料薄片放下。综合测试表明,本设计圆满完成了赛题的基本要求和发挥部分要求。关键字:声光报警 无线传输 铁磁薄片 单片机 自动排爆1赛题分析认真分析赛题,我们认为赛题要求制作的自动排爆车要能完成如下的功能:1)小车由起始点出发,穿过通道进入危险现场。2)进入危险区后,小车要能遍历整个圆形区域,要求无盲区,
2、遍历的时间要尽量小。检测到可疑物后,要能发出声光讯号,同时应能将可疑物“捡起”。3)小车带着可疑物要能自动回到起始点,到达起始点后小车要能自动停车。整个过程中,行车时间不得超过5分钟,车体各部分不能压着边界线。4)增加无限传输模块,将小车运行状态及计时数据传送到自制的接收显示装置。5)计时系统采用分段计时的方式,从起始点到检测到可疑物的时间为t1,从检测到可疑物到再回到起始点的时间为t2。2系统设计方案2.1设计思路认真分析题目要求,不难确定该系统主要由显示模块、主控制模块、声光报警模块、铁磁材料薄片探测模块、电机驱动模块、无限传输模块和巡线模块等组成。系统整体框图如下图2.1:图2.1 系统
3、整体框图主控制器通过判断巡线模块输入的信息,控制小车的行车状态。当小车检测到可疑物时,铁磁材料探测模块会将此信息传入主控制,主控制器此时会发出声光报警讯号,同时电磁铁模块电路便会工作,将可疑物“拿起”。2.2模块方案的比较与选择2.2.1主控制器模块方案一:选用AT89S52 作为主控器件 该单片机为51系列增强型8位单片机,它有32个端口,基本上能满足设计的所有要求,但其处理速度稍慢。方案二:选用凌阳SPCE061A单片机为主控器件 SPCE061A 凌阳单片机是具有强大功能的16 位微控制器,它内部集成7路10位ADC和 2 通道10位DAC,并且I/O 口资源丰富,可以直接完成各输入和显
4、示输出的控制,处理速度更快。本赛题要求小车要在5分钟内完成所有的动作,当小车检测到边界线时,主控制器要能及时作出反应,这就要求主控制器要有很高的处理速度。基于以上分析,我们选择方案二。2.2.2 寻边界线模块方案一:选择摄像头检测 利用图像提取技术或像素提取技术,根据摄像头拍摄到的图片决定下一步的运动方向。但是其价格较贵,容易受到干扰,而且不易控制。方案二:选择反射式红外对管 该对管由发射管和接收管两只管子组成,它同LM324比较器和其他一些简单的器件组成黑色边界线检测单元电路。本设计中,只需检测电路能正确识别“黑”与“白”两种路况信息即可。红外对管检测具有精确度高、抗干扰能力强和简单易用等特
5、点,而摄像头检测易受光线的干扰,系统不够稳定,反映速度也不及红外对管。相对来讲,红外对管具有更高的性价比,因此我们选择方案二。2.2.3铁磁材料薄片检测模块方案一:采用电感线圈构造一个电感三点式高频振荡的电路 当有金属靠近时,随电感量的改变振荡电路的振荡频率也会相应发生变化,主控制器据此便可判定有没有检测到金属。但这种电路的Q值较高,电感不易测得。方案二:选择电感接近式开关 该传感器是由LC高频振荡器和放大处理电路组成。当有金属物体接近这个能产生电磁场的振荡感应头时,金属物体内部在磁场的作用下会产生涡流。感生的涡流会反作用于接近开关,使接近开关的振荡能力衰减,其内部电路的参数就会相应发生变化,
6、根据相关参数的变化即可识别出有无金属物体接近,这种检测电路具有简单易用的特点。基于以上分析,我们选择方案二。2.2.4显示模块方案一:采用动态数码管显示 此方案是靠人眼的视觉暂留效应和循环扫描的方式实现动态显示的,显示的任一时刻最多只有一只管子是点亮的。这种显示方案具有实现简单、显示亮度高和稳定等优点。但系统需要显示的信息量较大,并且要显示英文字母等信息,采用数码管显示技术无法实现这一要求。方案二:采用LCD1602显示 液晶显示器具有功耗低、无辐射、平面直角显示以及影像稳定等特点,以及可视面积大、画面效果好、显示内容多等优点,并且它还可以显示图案、英文字母和汉字等信息。因此,只需用一块LCD
7、1602就可以显示所需显示的全部内容,其性价比远优于动态显示。由于本排爆系统需显示“ready”、“time”和“go”等大量的信息,所以我们选择方案二。2.2.5 电机的选择 排爆小车的任何一个动作都需要由电机来完成,故电机的选择非常重要。方案一:选择直流电机 直流电机调速性能优越,易于平滑调速,这是步进电机无法取代的,且其过载能力较强。但此系统要求小车要能及时停车和转弯,直流电机要实现这两点,必须外加制动电路,从而使硬件电路变得较复杂。方案二:选择步进电机 步进电机的转动是靠不断地给控制端输入脉冲来控制的,其转速的控制是靠输入脉冲的频率来实现的,频率越高,转速也越快,但其力矩也会相应的变弱
8、。其正反转是靠给相应控制端输入高低电平来是实现的,控制起来也非常的容易。因此,只要控制好相应的控制端,就可很容易实现对小车及时停车和转弯的控制,不需要外加制动电路。基于以上考虑,我们选择方案二。3系统设计3.1系统总体设计SPCE061A单片机与其他子模块的硬件连接图如下图3.1: 图3.1 系统硬件连接图3.2单元电路设计3.2.1边界线检测电路设计赛题要求,整个行车过程中,小车车体不得越过黑色边界线,这就要求小车要能识别边界线。边界线的检测,我们选择红外对管,其检测原理如下图3.2.1。当检测到白色路面时,比较器输出为高电平;而当检测到黑色边界线时,由于发射管发出的红外线被黑带吸收而接收管
9、接收不到红外线,则比较器输出低电平。为了使小车车体不越过边界线,我们在小车前面左右侧装设2对红外对管,两对对管间的距离稍小于通道边界线间距离的一半。当两对对管的任一对检测到黑色边界线时,小车会自动偏转以避开边界线。装设对管时,必须保证两侧的对管不能同时检测到通道两侧的任一边界线和通道中央引导线。每对接收管和发射管间的距离应略大于黑色边界线,取2cm。图 3.2.1 红外对管检测电路原理图3.2.2声光报警电路设计报警器件可选用普通的压电陶瓷蜂鸣器来实现,而光信息提示可借助于普通的发光二极管来实现。由于蜂鸣器正常工作时,流过的电流为10mA左右,而发光二极管正常发光所需电流为20mA左右。我们可
10、利用NPN型三极管9013作为单片机可控制其通断的开关器件,其基极通过200左右的普通电阻与单片机I/O口连接,以防止三极管的误导通。考虑到三极管集电极和发射集间的压降和发光二极管的导通电阻,蜂鸣器正端与+5V电源相接,其负端需串接200的电阻后同三极管的集电极相连。而发光二极管的阳极同三极管的发射极相连,其阴极同地直接相接。当单片机送高电平给三极管的基极时,三极管导通,此时发光二极管发光,同时蜂鸣器通电发声。而当单片机送低电平时,三级管截止,此时发光二极管熄灭,蜂鸣器也断电。只要适当的控制单片机送出脉冲的占空比和频率,即可得到不同效果的声光报警信息。其原理图如下图3.2.2。图3.3.2 声
11、光报警模块原理图3.2.3步进电机驱动电路的设计本设计中,我们选择4相6线步进电机,其驱动电路由L297、L298和其他一些外围器件组成。L297是脉冲分配器,只要步进电机的相序正确的连接到驱动板上,L297就会自动的将输入到端口CW/CCW的脉冲分配给步进电机的各个相序,这样电机即可实现转动。只需单片机通过I/O口向L297的17和18脚发送驱动控制信号即可控制步进电机的转速和正反转。其驱动电路原理如下图3.2。3.2.3电机驱动电路原理图3.2.4电磁铁机械手电路电磁铁机械手电路原理图如下图3.2.4。当霍尔传感器检测到金属,声光报警电路发出声光讯号的同时,单片机相应I/O口会输出高电平,
12、此时三极管9013导通,电磁铁机械手电路便会通电。由于线圈中有电流通过,铁芯两端即会有电磁产生,其磁性的大小同线圈中流过电流的大小和线圈的匝数有关。按赛题要求,本电磁铁机械手电路要能够“拿起” 1.5cm1.5cm的铁磁材料薄片,因此对感生的磁性有一定要求。又由于受车体高度的限制,铁芯不能太长,我们选择3.5cm长的铁钉,线圈选择直径为1mm左右漆包线,选用5V 3A的开关电源供电。为确保电磁铁机械手的作用范围,我们制作了8根这样的铁钉,每根铁钉上绕约40匝漆包线,将这8根铁钉并排放在检测可疑物霍尔传感器的后面。图3.2.4电磁铁机械手电路4软件设计软件部分设计的难点是找到一个合适的算法,使小
13、车通过通道进入圆形危险区域后,能遍历整个危险区域,尽量使检测的盲区最小。软件部分主要由避免车体压边界线和遍历危险区两大部分组成。编程时,我们采用了模块化的编程思想。4.1设计思想1小车在通道中行驶1)仅左侧对管检测到边界线,小车右转。2)仅右侧对管检测到边界线,小车左转。3)左右两侧对管都没检测到边界线,小车直走。2小车遍历圆形危险区此系统中,我们使用了3只霍尔传感器来检测铁磁材料薄片。由于霍尔传感器检测范围有限,三只对管检测的范围也很有限。我们只有设计一个合适的算法才能达到遍历整个危险区的目的。算法如下:1)小车由通道进入圆形区后直走以检测边界线,检测到边界时,小车左转一个小角度以避开边界。
14、按这种方法检测下去,直到小车检测到中间引导线为止。2)当检测到中间引导线时,小车左转150度,然后直走。再次检测到边界线时,小车左转180度,直到检测到铁磁材料可疑物。3)检测到到可疑物后,发出声光讯号的同时,电磁铁机械手将可疑物“拿起”。然后小车直走,寻找黑色边界线,找到边界线后,小车沿着边界线回到出发点,并将可疑铁磁薄片“拿到”起始点放下。4.1主程序流程图主程序流程图如下图4.1。 图4.1 主程序流程图5系统测试5.1基本要求测试5.1.1寻边界线红外对管性能测试两对红外对管装设在小车最前端左右两侧,其作用是寻黑色边界线,主要用来指导小车的行驶状态和确保车体不会压着边界线,其性能测试如
15、下表5.1.1。表 5.1.1 对管性能测试左侧对管检测到边界 线右侧对管检测到边界线小车行驶区域小车状态车体有无压着或超出边界行车时间超过5分钟是否通道中右转0.9度后直走没有否否是通道中左转0.9度后直走没有否否否通道中直走没有否是否危险区没有否否是危险区没有否否否危险区小车直走没有否/ /小车自动停车 /是5.1.2分段计时性能测试赛题要求计时系统采用分段计时的方式,从起始点到检测到可疑物的时间为t1;从检测到可疑物到机械手把可疑物“带回”起始点的时间为t2。分段计时功能测试如下表5.1.2。表5.1.2 分段计时性能测试计时时间t1计时时间t2铁磁可疑物位置总共用时(t1+t2)实际用
16、时 危险区圆心处通道口处通道口对面紧贴边界线除5.2发挥部分功能测试5.2.1声光报警测试当检测到可疑物时,此声光报警部分会自动发出声光讯号以提示已经检测到可疑物,其性能测试如下表5.2.1。表5.2.1 声光报警测试检测到铁磁材料可疑物指示灯状态蜂鸣器状态备注 是 亮 报警检测到可疑物时,小车会停留一段时间,然后再行车。 否灭不报警5.2.2无限数据传输功能5.3误差分析综合测试表明,系统中有以下误差:1)时间显示误差 此误差主要与单片机的晶振频率和C语言每条指令执行的时间有关。计算相关指令的执行时间时,我们只是估算的,这肯定会存在一定的误差。另外,我们计时是以S为单位的。当行车时间不到整秒
17、时,显示模块显示的是去掉非整秒后的整秒时间,这也可能会存在一定的误差。2)对管检测误差 这种误差主要是由光线干扰引起的。光线太暗时,对管会误认为检测到了黑线;管线太亮时,对管则会很难识别出黑色边界线。6设计结论经过一个星期的努力,我们设计并制作了一个自动排爆小车系统。综合测试表明,此排爆小车系统具有自动排爆、声光报警、分段计时和精确显示等功能,并且能较精确的遍历整个危险区,说明我们选择的遍历算法是合适的。本次设计不仅圆满完成了基本部分的所有要求,而且还完满的实现了发挥部分要求的声光报警功能。参考文献1 电子技术基础 模拟部分康华光 编 高等教育出版社2 电子技术基础 数字部分康华光 编 高等教
18、育出版社3 全国大学生电子设计竞赛获奖作品精选全国大学生电子设计竞赛组委会 编 北京理工大学出版社4 全国大学生电子设计竞赛试题精选 陈永真 等编著 电子工业出版社附录:主程序清单#include#include#include#includeuint cnt=0;void IRQ1(void)_attribute_(ISR);void main() init(); Lcd_Init(); clear_lcd(0,0);clear_lcd(0,1); DisplayString(0,0,Ready .); while(d_L=!0&d_R!=0) d_L=*P_IOB_Data&0x0020;
19、d_R=*P_IOB_Data&0x0010;*P_Watchdog_Clear=0x0001; delay(500);clear_lcd(0,0); DisplayString(0,0,GO .); delay(600);clear_lcd(0,0); DisplayString(0,0,Time: s); DisplayOneChar(5,0,minute/10+0x30); DisplayOneChar(6,0,minute%10+0x30); DisplayOneChar(7,0,0x3a); DisplayOneChar(8,0,second/10+0x30); DisplayOne
20、Char(9,0,second%10+0x30); _asm(IRQ ON);/*小车步进、转角测试*/ /* motor_step(250);/步进12.25cm _asm(IRQ OFF);delay(1000);_asm(IRQ ON); motor_right();motor_angle(0,210);/右转,两个轮子同时转,角度90 _asm(IRQ OFF);delay(1000);_asm(IRQ ON);motor_angle(1,820);/左转,只有一个轮子转,角度180 _asm(IRQ OFF);delay(1000);_asm(IRQ ON);motor_angle(
21、2,820);/右转,只有一个轮子转,角度180 _asm(IRQ OFF); while(1) *P_Watchdog_Clear=0x0001;*/*/ while(1) /search_metal();get_metal(); search_road();get_metal(); d_R=*P_IOB_Data&0x0010; if(second35&d_R=0) motor_left();motor_angle(0,200); motor_line();delay(500); while(1) search_metal();get_metal(); *P_Watchdog_Clear=
22、0x0001; /*轮子转弯时的方式*/void all_pluse()/左右轮都给脉冲,方向向反switch(flag)case 0:*P_IOB_Data&=0xfff5;flag=1;break;case 1:*P_IOB_Data|=0x000A;flag=0;pluse+;break; /*if(flag=0) *P_IOB_Data&=0xfff5;flag=1; else if(flag=1) *P_IOB_Data|=0x000A;flag=0;pluse+; */void right_pluse()/右轮给脉冲,左轮不动 if(flag=0) *P_IOB_Data&=0xf
23、ffd;flag=1; else if(flag=1) *P_IOB_Data|=0x0002;flag=0;pluse+; void left_pluse()/左轮给脉冲,右轮不动 if(flag=0) *P_IOB_Data&=0xfff7;flag=1; else if(flag=1) *P_IOB_Data|=0x0008;flag=0;pluse+; void IRQ1(void)/*if(way=0) all_pluse();/左右电机都转 else if(way=1) right_pluse();/右电机脉冲 else if(way=2) left_pluse();/左电机脉冲*
24、/ switch(way) case 0:all_pluse();break; case 1:right_pluse();break; case 2:left_pluse();break; cnt+; if(cnt=480)/500 cnt=0; second+;*P_Watchdog_Clear=0x0001; if(second59) second=0;minute+; DisplayOneChar(5,0,minute/10+0x30); DisplayOneChar(6,0,minute%10+0x30); DisplayOneChar(8,0,second/10+0x30); DisplayOneChar(9,0,second%10+0x30); clear_lcd(10,0); *P_INT_Clear&=0x1000; *P_Watchdog_Clear=0x0001;