2022年自动避障 .pdf

上传人:Q****o 文档编号:26740765 上传时间:2022-07-19 格式:PDF 页数:38 大小:3.85MB
返回 下载 相关 举报
2022年自动避障 .pdf_第1页
第1页 / 共38页
2022年自动避障 .pdf_第2页
第2页 / 共38页
点击查看更多>>
资源描述

《2022年自动避障 .pdf》由会员分享,可在线阅读,更多相关《2022年自动避障 .pdf(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、创新作品:自动避障小车作者:郭姗姗、邢思蓬(05-822 、05-823 )指导教师:王元昔作品介绍:在科学探索和紧急抢险中经常会遇到对一些危险或人类不能直接到达的地域的探测,这些就需要用机器人来完成。而机器人在复杂地形中行进时自动避障是一项必不可少也是最基本的功能。因此,自动避障系统的研发就应运而生。自动避障小车就是基于这一系统开发而成的。随着科技的发展,对于未知空间和人类所不能直接到达的地域的探索逐步成为热门,这就使机器人的自动避障有了重大的意义。自动避障小车就是自动避障机器人中的一类。自动避障小车可以作为地域探索机器人和紧急抢险机器人的运动系统,让机器人在行进中自动避过障碍物。作品主要分

2、为5 个模块:车体框架、电源及稳压模块、主控模块、红外探测模块、电机驱动模块。其中主控模块是系统的核心部分,系统由单片机通过I/O 口控制各个模块。其中红外探测模块是实现小车避障的关键部分,当小车探测到左侧有障碍物时,会先止行,然后后退右转,之后直行直到再次遇到障碍物时做出相应的反应。当小车探测到右侧有障碍物时会,会做出与左侧相反的动作。而红外探名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 38 页 - - - - - - - - - 测障碍物的距离可以通过调节电位器的

3、大小改变,方便灵活。技术关键是车体框架的设计实现和红外避障模块的设计,技术难点是单片机的编程来实现预期的功能。创新感言:通过两周的自主创新实验我们受益匪浅,这是一次理论与实践相结合的好机会,通过自主创新实验可以把自己的想法变成现实。应用在大学期间所学习的理论知识,自己亲自动手制作,不仅提高了动手能力而且可以将所学的知识加深印象。在制作过程中不可能一帆风顺,肯定要遇到这样和那样的问题和困难,这就需要靠我们自己去解决。例如:在我们制作自动避障小车的过程中,避障模块是靠红外发射接收来实现的。但是在我们调试过程中发现,我们设计的电路功率过大,使得红外发射接收装置始终能探测到信号,这时我们就考虑修改电路

4、使它探测的距离缩短达到我们最初的设计要求,最终修改电路成功。在解决问题的过程中我们通过自己独立思考又学到了许多知识,这在学习理论知识时是很难遇到的。所谓自主创新是指通过拥有自主知识产权的独特的核心技术以及在此基础上实现新产品的价值的过程。现在“创新”两个字扩展到了社会的方方面面,为了适应社会发展,我们当代大学生更要加强自身素质,提高动手动脑的创新能力,创新可以在前人已有研究的基础上提出自己的新想法,并付诸实践。我们选择制作自动避障小车就是考虑到它的应用前景广阔,不仅可以应用于宇宙探索中,还可以运用到汽车安全模式中,如果避障系统能够安装在拐杖中,还可以替盲人导行等。如此广泛的应用范围是很有开发价

5、值的。这次创新实验培养了我们的创新意识,而且还让我们意识到团队合作的重要性。通过亲自体验产品制作,熟悉了产品从研发到制成的整个过程,对以后工作有很大帮助。这种能亲自设计制作的机会真的不多,所以我们很感谢工程训练中心能够开设这门课,让我们亲自体验理论变实践的过程。在创新过程中我们对不懂的知识翻阅了大量的资料文献,这也是对我们现有的知识的扩充。而且我们制作的自动避障小车还需要设计机械部分,这种跨学科的实践也是很有意义的。AVR 与虚拟仪器AVR 与虚拟仪器致力于提供最优质的AVR 和 labview 技术服务,最全的技术资料,最好的开发板方案。你现在看到的是山东大学物理与微电子学院的课程设计名单列

6、表,课程设计是山东大学推经教学改革的进程之一。本页作品2005 级 2007 年单片机课程的课程设计成果展示。你现在的位置: AVR 与虚拟仪器 AVR 与虚拟仪器学生课程设计成果展示专题论 坛名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 38 页 - - - - - - - - - 课程设计作品:自动避障小车组员:常凯刘旭 巩靖一、前言设计背景:在科学探索和紧急抢险中经常会遇到对与一些危险或人类不能直接到达的地域的探测,这些就需要用机器人来完成。而在机器人在复杂地形中

7、行进时自动避障是一项必不可少也是最基本的功能。因此,自动避障系统的研发就应运而生。我们的自动避障小车就是基于这一系统开发而成的。意义 随着科技的发展,对于未知空间和人类所不能直接到达的地域的探索逐步成为热门,这就使机器人的自动避障有了重大的意义。我们的自动避障小车就是自动避障机器人中的一类。自动避障小车可以作为地域探索机器人和紧急抢险机器人的运动系统,让机器人在行进中自动避过障碍物。成员情况本组三位成员均为2005 级基地班学生, 都选修过数字电路课程。二、总体方案设计1、设计要求小车从无障碍地区启动前进,感应前进路线上的障碍物后,根据障碍物的位置选择下一步行进方向。并可通过两个独立按键对小车

8、进行控速。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 38 页 - - - - - - - - - 2、小车自动避障的原理小车车头处装有三个光电开关,中间一个光电开关对向正前方,两侧的光电开关向两边各分开30 度,(如右图所示)。小车在行进过程中由光电开关向前方发射出红外线,当红外线遇到障碍物时发生漫反射,反射光被光电开关接收。小车根据三个光电开关接受信号的情况来判断前方障碍物的分布并做出相应的动作。光电开关的平均探测距离为30cm 。3、模块方案比较及论证根据设计要

9、求,我们的自动避障小车主要由六个模块构成:车体框架、电源及稳压模块、主控模块、逻辑模块、探测模块、电机驱动模块组成。各模块分述如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 38 页 - - - - - - - - - 3.1 车体框架在设计车体框架时,我们有两套起始方案,自己制作和直接购买玩具电动车。方案一:自己设计制作车架自己制作小车底盘,用两个直流减速电机作为主动轮,利用两电机的转速差完成直行、左转、右转、左后转、右后转、倒车等动作。减速电机扭矩大,转速较慢,

10、易于控制和调速,符合避障小车的要求。而且自己制作小车框架,可以根据电路板及传感器安装需求设计空间,使得车体美观紧凑。但自己制作小车设计制作周期较长,且费用较高,因而我们放弃这一方案。方案二:购买玩具电动车玩具电动车价格低廉,有完整的驱动、传动和控制单元,其中传动装置是我们所需的,缩短了开发周期。但玩具电动车采用普通直流电机驱动,带负载能力差,调速方面对程序要求较高。同时,玩具电动车转向依靠前轮电机带动前轮转向完名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 38 页 -

11、- - - - - - - - 成,精度低。考虑到利用玩具电动小车做车架开发周期短,可留够充分的时间用于系统调试,且硬件上的不足我们有信心用优良的算法来弥补,故我们选择方案二。3.2 电源及稳压模块方案一:采用交流电经直流稳压处理后供电采用交流电提供直流稳压电源,电流驱动能力及电压稳定性最好,且负载对电源影响也最小。但由于需要电线对小车供电,极大影响了壁障小车行动的灵活性及地形的适应能力。而且壁障小车极易把拖在地上的电线识别为障碍物,人为增加了不必要的障碍。故我们放弃了这一方案。方案二:采用蓄电池供电蓄电池具有较强的电流驱动能力和较好的电压稳定性能,且成本低廉。可采用蓄电池经 7812 芯片稳

12、压后给电机供电,再经过降压接7805 芯片给单片机及其他逻辑单元供电。但蓄电池体积相对庞大,且重量过大,造成电机负载过大,不适合我们采用的小车车架(玩具电动车车架)。故我们放弃了这一方案。方案三:采用干电池组进行供电采用四节干电池降压至5V 后给单片机及其他逻辑单元供电,另取六节干电池为电机及光电开关供电。这样电机启动及制动时的短暂电压干扰不会影响到逻辑单元名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 38 页 - - - - - - - - - 和单片机的工作。干电池

13、用电池盒封装,体积和重量较小,同时玩具车底座可以安装四节干电池,正好可为单片机及其他逻辑单元供电。在稳压方面,起始时考虑使用 7805 芯片对 6V 的电池电压进行降压稳压。但考虑到这样使得7805 芯片消耗大量能量,降低电池寿命;同时,由于mega16 、光电开关、小车电机对于供电电压要求并不苛刻, 故我们将 6V 电池电压接一个二极管降压后直接给单片机及其他逻辑单元供电。而电机和光电开关的电源不做稳压处理。这样只需在小车主板上加两个调速按钮,根据电池电量选择合适功率即可,甚至于可直接在软件里设置自动换挡。综合考虑,我们采用方案三。示意图如下3.3 主控模块作为单片机原理与接口技术课程的co

14、urse project ,我们直接选用了课程主要介绍的,Atmel 公司的 ATmaga16L单片机作为主控模块。Mega16 是高性能、低功耗的8 位 AVR 微处理器,具有先进的RISC 结构,内部集成两个具有独立预分频器和比较器功能的8 位定时器 / 计数器和一个具有预分频器、比较功能和捕捉功能的16 位定时器 / 计数器。可通过 JTAG 对 MCU 进行程序烧写及仿真。内置晶振,使用方便。在设计开发过程中我们使用课程设计提供的开发板进行程序调试和下载,配车使名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理

15、 - - - - - - - 第 7 页,共 38 页 - - - - - - - - - 用时直接将 MCU 拔出插入我们小车系统电路板底座中。示意图如下:3.4 逻辑模块在探测模块和单片机中断接口之间、独立按键与单片机中断接口之间,需要经过电平的逻辑处理进行连接。主要涉及到一个三输入或非门和一个二输入与门。这两个逻辑关系我们直接选用74HC 系列的集成芯片实现。由于三输入或非门在市场上很难购买到,我们采用了两个二输入或非门和一个二输入与门完成了三输入或非门。由于我们采用的74HC08 (四二输入与门)、74HC02 (四二输入或非门) 均为四二输入的, 各提供四个二输入与门和四个二输入或非

16、门,我们用各用一片芯片即可实现所需逻辑功能。示意图如下:3.5 探测模块方案一:使用超声波探测器超声波探测器探测距离远,测距方便。但由于声波衍射现象较严重,且波包散面太大,易造成障碍物的错误判断。同时,超声波探测具有几厘米甚至几十厘米的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 38 页 - - - - - - - - - 盲区,这对于我们的避障小车是个致命的限制。故我们放弃了这一方案。方案二:使用光电对管探测光电对关价格低廉,性能稳定,但探测距离过近(一般不超过3c

17、m ),使得小车必须制动迅速。而我们由于采用普通直流电机作为原动力,制动距离至少需要10cm 。因此我们放弃了这一方案。方案三:使用视频采集处理装置进行探测使用 CCD 实时采集小车前进路线上的图像并进行实时传输及处理,这是最精确的障碍物信息采集方案,可以对障碍物进行精确定位和测距。但是使用视频采集会大大增加小车成本和设计开发难度,而且考虑到我们小车行进转弯的精确度并未达到视频处理的精度,因而使用视频采集在实际应用中是个很大的浪费,所以我们放弃了这一方案。方案四:使用光电开关进行障碍物信息采集使用三只 E3F-DS30C4光电开关, 分别探测正前方, 前右侧,前左侧障碍物信息,在特殊地形(如障

18、碍物密集地形)可将正前方的光电开关移置后方进行探测。E3F-DS30C4光电开关平均有效探测距离030cm 可调,且抗外界背景光干扰能力强,可在日光下正常工作(理论上应避免日光和强光源的直接照射)。我们小车换档调速后的最大制动距离不超过30cm ,一般在 1020cm 左右,因而探测距离满足我们的小车需求。综上考虑,我们选用方案四。示意图如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 38 页 - - - - - - - - - 3.6 电机驱动模块方案一:使用分立

19、原件搭建电机驱动电路使用分立原件搭建电机驱动电路造价低廉,在大规模生产中使用广泛。但分立原件 H 桥电路工作性能不够稳定,较易出现硬件上的故障,故我们放弃了这一方案。方案二:使用L298N 芯片驱动电机L298N 是一个具有高电压大电流的全桥驱动芯片,输出电压最高可达50V ,可以直接通过电源来调节输出电压;可以直接用单片机的IO 口提供信号, 而且带有使能端,方便 PWM 调速,电路简单,性能稳定,使用比较方便。L298N 芯片可以驱动两个二相电机,也可以驱动一个四相电机,正好符合我们小车两个二相电机的驱动要求。综合考虑,我们采用L298N 芯片驱动小车电机。控制示意图如下: ? 最终方案如

20、下:使用干电池组对系统供电,改造玩具电动车作为小车底座,采用 Mega16L 作为主名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 38 页 - - - - - - - - - 控芯片,采用E3F-DS30C4光电开关进行障碍物探测,使用L298N 驱动直流电机。逻辑关系处理使用74HC 系列芯片完成。三、单元模块设计1、各单元模块功能介绍及电路设计自动避障小车系统的整体电路原理图如下:? 1.1 直流电源降压经过测量, 一般四节新南孚电池串联带负载后可提供5.8V 电

21、压。经过二极管稳压至 5.15.2V 后给逻辑器件供电并给系统提供高电平标准。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 38 页 - - - - - - - - - ? 1.2 主控芯片使用 Mega 16L 的 PA0PA3 接电机驱动芯片L298N 的 IN1IN4 ,实现对电机驱动芯片的控制,进而控制电机的转动。使用 Mega 16L 的 PB0PB2 接经过电平转换的探测器信号线,实现对障碍物信息的采集。使用 Mega 16L 的 PC0 、PC1 接受独

22、立按键信号,实现对小车行进过程中速度的控制。由于我们小车电机电源没有经过稳压,随着电池电量的消耗,电机电池组的电压逐渐降低,因而小车速度会发生变化。我们就可以通过独立按键对速度进行提前设定,使得即使电池组电量变化,小车也能按预定速度行进。使用 Mega 16L 的 PD2 、PD3 接收中断信息。在软件部分我们可以看到,随着程序的不断完善,最终我们的INT0 ,即 PD2 并没有使用。使用引脚 10 为单片机供电,引脚31 接地。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12

23、页,共 38 页 - - - - - - - - - ? 1.3 逻辑模块设计任务:三个传感器信号线给出逻辑电平信号,当任何一个是高电平时,给 INT0 一个低电平信号。(如上一部分所述,最终我们用定时器中断代替了这个外部中断,但作为硬件设计和焊接的一部分,我们还是给以阐释)。两个独立按键分别控制提速和减速,没有按下时,信号线给出高电平。当任意一键按下时,信号线给出低电平,同时给出一个低电平给INT1。任务实现:第一个任务的实现原本想采用三输入或非门74HC27 实现。但由于市场上缺乏供应,我们用 74HC08 的一个二输入与门和74HC02 的两个二输入或非门完成。名师资料总结 - - -精

24、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 38 页 - - - - - - - - - ? 第二个任务逻辑的实现使用74HC08 的一个与门实现。按键功能的实现,是使用了两个 5K1 的电阻分别连接两个按键与逻辑高电平(+5V),无键按下电平上拉至逻辑高电平,有键按下时降至0V。1.4 探测模块探测模块的电路图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 38

25、页 - - - - - - - - - 设计任务:1. 三个光电开关探测前方障碍物。2. 将光电开关传回的非标准的开关电平信号转换成CMOS 标准电平(即将 09V转换成 05V )。任务实现:1. 光电开关发射出的红外线在经障碍物漫反射后会由光电开关再接收到,这会引起光电开关传回的电平的变化。若前方有障碍物,则光电开关传回低电平;若前方无障碍物,则光电开关传回的是高电平。有电平的变化可以实现对前方障碍物的探测。2. 光电开关传回的信号是非标准的电平信号,这对于Mega16 芯片是不适用的。因此,我们使用了三个8050 三极管来实现电平的转换。由三极管的电气特性, 当其基极为低电平时, 即基极

26、 发射极电压小于导通压降,其输出电平为高电平,在其输出端有用一个5K1 的电阻上拉,使输出的高电压为+5V;而在基极为高电名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 38 页 - - - - - - - - - 平时,三极管发射极正偏,输出电平为0。这样输出电平已经转化为CMOS 标准电平。不过,这时传回到Mega16 的电平信号已经和原来光电开关传回的信号高低相反,但这并不影响前方障碍物的探测。1.5 电机驱动模块电机驱动模块的电路图:电机驱动模块主要功能是将主控

27、芯片发出的信号通过L298N 电机控制芯片转化为小车实际的动作。L298N 芯片有两个电源引脚VDD 引脚和 VCC 引脚。 VDD 引脚接 +9V 电源用来给电机供电, VCC 引脚接 +5V 电源用来给芯片供电,并作为逻辑高电平标准。L298N 芯片通过一个有四个4148 二极管组成的保护电路与电机相连,保护电路名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 38 页 - - - - - - - - - 主要是用来在电机开启和关闭时泄流之用。由于我们一直让转向电机以

28、最大功率使能从而获得最大的扭矩,保证小车转向成功,而不需要控制转向电机的输出功率,所以ENA 引脚(即转向电机使能引脚)直接接+5 V,即让转向电机一直使能。对于后置的驱动电机,我们不仅要控制其实现前进、后退和停止,还要能够控制其转速以解决由于电量不足而产生的小车变慢的问题。所以,我们将L298N 芯片的 ENB 引脚与 Mega16 的 PB3 引脚(即 OC0 )连接,用来实现PWM 调速。L298N 芯片的 IN1 和 IN2 引脚分别和 Mega16 的 PA1 和 PA0 引脚连接用来接收主控芯片输出的转向电机的动作指令,并通过OUT1 和 OUT2 来控制转向电机的正转与反转,最终

29、功能的实现表现在小车的左转与右转。L298N 芯片的 IN3 和 IN4 引脚分别与 Mega16 的 PA3 和 PA2 引脚连接用来接收主控芯片输出的驱动电机的动作指令,并通过OUT3 和 OUT4 来控制驱动电机的正转与反转,最终功能的实现表现在小车的前进、后退、停止。2、所用全部硬件资源 增强版 ATMega 16L/32开发板(进行程序的初步调试) 简版 JTAG 仿真器(程序的下载和仿真) 遥控电动玩具车 E3F-DS30C4光电开关 3 只 Mega 16L 单片机 1 片 L298N 电机驱动芯片1 片 74HC02 芯片、 74HC08 芯片各 1 片名师资料总结 - - -

30、精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 38 页 - - - - - - - - - 8050NPN 三极管 3 只,4148 二极管 8 只 实验电路板 1 只 5K1 电阻 5 只,10K 电阻 2 只 散热片 1 只 独立按键 2 只 40 引脚底座 1 只 电池盒 2 只 南孚电池 6 节,华太电池4 节 5 列装排线 1 米左右 502 粘合剂 1 瓶四、程序设计和调试过程1、程序调试过程目前程序已经经历了四个主要版本,对寻障避障的方法前后有较大的改变。1.1 最初的程序设计

31、主流程图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 38 页 - - - - - - - - - ? INT0 中断触发端口值是多少?检测传感器端口的反馈值前方有障碍物根据检测到的障碍物情况(分7 种),从 7 个动作函数中选择一个执行前进 等待下次中断触发前方无障碍物这是一个很简单而自然的想法。用定时器T0 的快速 PWM 模式控制小车的速度,附加两个独立按键来控制初始时小车的速度,以便于调试。第一版程序中为小车设计了如下 7 个动作:发现前方有小障碍(010)

32、:后退并右转;发现右方有小障碍(100):前进并左转;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 38 页 - - - - - - - - - 发现左方有小障碍(001):前进并右转;发现前方有大障碍(111):较大的后退并右转;发现右方有大障碍(110):后退并右转;发现左方有大障碍(011):后退并左转;发现两边有障碍但中间无障碍(101):较大的后退并右转;每次动作结束后,小车都要改运动状态为前进,等待下一次中断触发。按照这样的思路写完程序后,调试中发现小车的

33、动作很笨拙,每次相同动作的距离总是一样的,不能根据环境自动调整,前进后退都太冲;因为动作都是用延时函数实现的,动作中要禁用全局中断,导致发现障碍物不及时,常常一头撞上去;后退时动作无法调整,即使已经避开了障碍物还是无法及时转换成前进状态,经常撞上后面的物体。鉴于以上发现的问题,我们又修改写成了第二版程序,流程图与第一版大致相同,所不同的是每次动作的时间都被改得非常短(约几个毫秒),在每个动作结束后都在此检测探测器反馈值,然后根据反馈值选择下一步动作。也就是说,8个动作函数 (加了一个前进) 和一个 INT0 中断处理函数形成了循环,循环的唯一出口在前进函数里,只有检测到前方已无障碍物时才能退出

34、中断。我们希望通过缩短每次动作的时间、缩短两次探测之间的间隔时间来达到变行进边探测效果,使小车的动作更加灵敏。1.2 第二版程序的主流程图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 38 页 - - - - - - - - - 有障碍无障碍INT0 中断触发端口值是多少?检测传感器端口的反馈值前方有障碍物根据检测到的障碍物情况(分7 种),从 7 个动作函数中选择一个执行前进 等待下次中断触发前方无障碍物检测判断端口值对于这一版程序, 我们在调试过程中发现小车四处

35、乱撞的问题已经基本能解决了,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 38 页 - - - - - - - - - 但随之而来又出现了新问题:控制小车前进和转向的端口电平变得很不稳定,小车走起路来颤颤巍巍,常常出现卡死的现象。具体表现为:端口值有规律地闪动,大约 0.2 秒闪一次,出现一个极短的脉冲,其值恰好是“ 前进” 。由此我们想到可能是算法本身的原因造成了这种现象,是退出中断服务程序时的一个脉冲。为了解决端口电平不稳定的问题,也为了定时更加准确,同时节省CP

36、U 时间,我们对程序进行了较大调整,改为用T1 定时器来控制动作和检测。每隔一定时间T1 触发溢出中断,在中断服务程序中进行检测和行动。这时的行动只是改变控制端口值,不需要延时函数,这就大大节约了CPU 时间。每个动作函数都精简到只有一个动作,动作完成后不再作改动,等待下次中断再修改控制端口值。1.3 第三版程序的主流程图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 38 页 - - - - - - - - - T1 溢出中断端口值是多少?检测传感器端口的反馈值前方

37、有障碍物根据检测到的障碍物情况(分7 种),从 7 个动作函数中选择一个执行等待下次中断触发 前方无障碍物从这一流程图可以看出,我们尽可能的精简了小车的动作过程,使得整个判断处理过程简洁而迅速。另外,我们在这一版程序里加上了自动变速程序,小车的速度不再由各个动作函数直接指定,而是通过计算一个连续动作的进行时间,由程序自动设定 T0 的 OCR0 值。这样做主要是为了配合小车的启动和制动,在启动和制动时给小车较大的动力,而在一般行进时使用普通功率,这样就可以既有效的控制小车的速度,又能够保证小车在改变方向时有足够的动力。程序实现了三名师资料总结 - - -精品资料欢迎下载 - - - - - -

38、 - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 38 页 - - - - - - - - - 档自动变速。 此外,我们还修改 INT1 中断中的两个按键的功能,不再是控制起始速度,而是控制普通行进时的速度,使这两个控制按键更加实用。在测试中,我们发现这样的改变收到了良好的效果。小车在前方障碍物的检测和避过上已经非常灵敏, 能在随意放置的障碍物阵中迅速找到前进的路线穿过阵列。由于加上了自动变速程序,小车的动作也变得流畅了许多。不过,在测试中我们还是发现了新的问题:小车在碰上前方的障碍时需要后退,后退到光电开关检测不到障碍的地方改变方向

39、前进,这是程序设计的动作;但是如果小车在光电开关检测距离阈值的地方正好速度比较慢,没有足够的惯性冲到检测距离里面或外面,就可能在那里不断重复短促的前进和后退的动作,从而卡死。为了解决这个问题,我们在第三版程序的基础上,又编写了第四版程序。第四版程序中新增添了防卡死机制,结合定时器控制和延时函数控制的优点,实现了小车较流畅的后退和转向。1.4 第四版程序的主流程图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 38 页 - - - - - - - - - T1 溢出中断

40、端口值是多少?检测传感器端口的反馈值前方有障碍物根据检测到的障碍物情况(分7 种),从 7 个动作函数中选择一个执行等待下次中断触发 前方无障碍物记录上一次的动作持续时间是否卡死?执行卡死处理函数清空历史记录否 是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 38 页 - - - - - - - - - 第四版程序的防卡死机制是以一个动作历史记录队列为基础的。该队列是一个有8个元素的数组history8 ,每次行进方向改变,即由后退转为前进或由前进转为后退时,即认为一

41、次连续动作结束,记录这个动作的时间,写入队列内;队列内共记录前 8 次连续动作的持续时间,如果这8 次动作中有 7 次以上持续时间在0.4秒以下,就认为小车被卡住了,这时执行卡死处理函数,让小车退出卡死区域。卡死处理函数使用了延时函数来执行,期间禁用了T1,视障碍物情况执行1-3 次倒退转向动作。此外我们改变了一个动作函数:由于小车的探测距离比车身宽度大得多,当左右两个探测器检测到有障碍物而中间没有时,小车将直接前行从障碍物中间穿过。防卡死机制有效地解决了小车卡死的问题,小车对于前方障碍物的躲避也比较灵敏了。 ? 这一版程序为我们小车的最终定型程序。程序模块构成系统时钟模块: 通过 T1 定时

42、器产生 0.1 秒间隔的溢出中断, 作为小车周期性探测和动作的时钟。此外有两个辅助软件延时函数。相关函数:timer1_init(); isr_timer1_ovf(); trap_handler(); delay100us(n); delay10ms(n); 调速模块: 通过 T0 定时器产生 PWM 波形来控制驱动电机的输出功率。程序设计了 3 挡自动调速, 对应 OCR0 值 max_power, fast_power, mid_power。从启动开始,利用变量count_move来计算连续行动的时间,使用最大功率连续前进或后名师资料总结 - - -精品资料欢迎下载 - - - - -

43、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 38 页 - - - - - - - - - 退 0.3 秒以克服摩擦阻力,接下来0.3 秒时用较大功率,以后使用普通功率。其间如果探测到障碍物需要改变行进方向,可以随时重新计时。通过两个独立按键可以调整普通功率值,计算按键的时间,每个时间单位mid_power 值加 1。相关函数:timer0_init(); set_OCR0(); isr_timer0_ovf(); isr_INT0(); 障碍探测模块:如前所述,通过读取PINB 端口值判断前方障碍物情况。共有7种设定的障碍物情

44、况,详见程序代码中宏定义部分。相关函数:isr_timer1_ovf(); trap_handler(); 常规动作模块:根据障碍探测模块的返回值,由8 个动作函数控制小车的各种动作。修改后的动作列表如下(括号内为相关函数):发现前方有小障碍(010):后退并右转;(move_front_obj() )发现右方有小障碍(100):前进并左转;(move_right_obj() )发现左方有小障碍(001):前进并右转;(move_left_obj() )发现前方有大障碍(111):较大的后退并右转;(move_front_bigobj())发现右方有大障碍(110):后退并右转;(move_r

45、ight_bigobj())发现左方有大障碍(011):后退并左转;(move_left_bigobj())发现两边有障碍但中间无障碍(101):直接前进穿过;(move_double_obj())动作历史记录模块:建立一个数组history8 ,其值代表之前8 次连续动作所经过的时间。初始值都设定为100(10 秒),每次 T1 产生溢出中断时都判断是否改名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 38 页 - - - - - - - - - 变了前进或后退状态(

46、通过isforward 变量标志),若有改变则记录上一次动作的持续时间,最前一次的时间记录则自动删除。在防卡死模块动作结束后,历史记录自动清空为初始状态。相关函数:record_history(); trap_handler(); 防卡死模块:首先判断小车是否为卡死状态。顺次读取history 数组的各个元素值,若某个元素值小于或等于4(连续动作持续时间小于或等于0.4 秒),则变量recorder 加 1;若最终 recorder 值大于或等于7,说明小车在很短的时间内连续多次改变了行进方向,则认为小车处在探测阈值的位置上且被卡死。此时执行卡死处理函数 trap_handler() 。tra

47、p_handler() 是一个使用软件延时作为计时方法的函数,执行期间禁用T1 定时器,这样设计是因为软件延时对时间间隔的控制更为灵活。为了防止像以前版本中的软件延时动作函数一样出现端口值不稳定的问题,该函数使用 3 层嵌套判断结构,在行进中对障碍物情况先后作出3 次判断,若中间有一次探测发现障碍物消失,则退出函数继续执行常规动作。这样就可以使函数的最大动作时间达到0.9 秒,足以使小车退到安全区域,且保证了端口值的稳定性,即动作的流畅性。相关函数:isr_timer1_ovf(); trap_handler(); 五、系统功能及指标参数测试1、系统实现功能:对于前方任意放置的障碍物的灵活规避

48、;3 档自动变速;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 38 页 - - - - - - - - - 正常行进速度的手动连续调节;防卡死机制,可以有效地退出夹缝、角落等区域。2、系统主要参数测试:给光电开关供电,前侧放置不同颜色障碍物,通过尾部指示灯观察探测距离。浅色: 30cm 深色: 20cm 通过在小车前方摆放不同颜色的障碍物来测试小车的制动距离。该项测量在小车行进中进行。全速制动: 25cm 普通功率制动: 15cm 附件程序代码附:程序代码如下:第四

49、版程序:/ICC-AVR application builder : 2007-6-19 0:32:08 / Target : M16 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 29 页,共 38 页 - - - - - - - - - / Crystal: 1.0000Mhz #include #include typedef unsigned char uint8;/可移植的 8 位无符号变量typedef unsigned int uint16;/可移植的 16 位无符号

50、变量#define no_obj 0 x00 #define right_obj 0 x04 #define front_obj 0 x02 #define right_bigobj 0 x06 #define left_obj 0 x01 #define double_obj 0 x05 #define left_bigobj 0 x03 #define front_bigobj 0 x07 #define stop 0 xFF #define forward 0 xF8 #define backward 0 xF4 #define forward_and_left 0 xF9 #defin

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁