寻光循迹避障智能小车实验报告_第1页
寻光循迹避障智能小车实验报告_第2页
寻光循迹避障智能小车实验报告_第3页
寻光循迹避障智能小车实验报告_第4页
寻光循迹避障智能小车实验报告_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华中科技大学2016年硬件课设--智能小车控制系统总结报告智能小车控制系统华中科技大学2016智能小车控制系统华中科技大学2016硬件课设专业:[通信工程13**]学 号:[U2013*****]学生姓名:[***]指导教师:[***完成时间:Time\@"yyyy年M月d日"2016年8月30日1课题名称:智能小车自动控制系统【摘要】本次课程设计以MSP430超低功耗单片机系列MSP430F5529为主控制器,附加电机、电池、传感控制模块等,完成二驱小车自由运动、检测黑线沿轨迹运动、自动避开障碍物等功能。机械结构搭建选用两个主动轮在前,后轮换为一个万向轮以增加其灵活性。利用单片机产生PWM波,控制小车的速度,选用L298N芯片驱动电路,使用三路红外对接管检测黑白线。使用一个超声波实现测距避障功能,使用三个光敏电阻传感器进行寻光操作。基于可靠硬件设计和优化软件算法,在实现本课设的基本要求基础上,实现部分扩展功能。【关键词】MSP430F5529超声波测距壁障循迹寻光概述随着科技的发展,智能系统越来越多的在生活中普及。智能小车系统运用了控制技术、传感技术、计算机、机械等专业领域的知识,使小车能够实现自动控制,完成所设定好的任务,实现智能化。MSP-EXP430F5529实验板是MSP430F5529单片机的实验开发平台,为最新一代的具有集成USB2.0模块基于闪存的MSP430器件。其中MSP430F5529单片机为能量收集、无线传感及自动抄表基础设施(AMI)等应用,提供了低工作功耗的集成USB、可扩展内存、高达25MHZ的系统时钟。工作电压范围在1.8V到3.6V,在工作电压范围内性能高达25MIPS,超低功耗。MSP-EXP430F5529实验板的实物如图1.1所示。图1.1MSP-EXP430F5529实验板实物图利用开发板自身的优点,加入红外对接管、超声波测距模块、陀螺仪模块以实现沿黑白轨道行走,检测并躲避前方障碍物。使用两节干电池给开发板供电,电机等部分使用7.2V充电电池供电。设计与实现背景单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。本次电路系统使用MSP430F5529单片机作为主控芯片,通过GPIO口与外围传感设备相连接,通过数据交换,以完成设定的各项功能。本次项目我们使用MSP430f5529a单片机,设计实现智能小车循迹避障、寻光开车功能。循迹避障小车可在路面上沿黑胶带所连轨迹行驶,遇到障碍可绕过,在现实生活的自动行驶应用中具有很大的前景。寻光开车功能在黑暗情况下有具体的应用场景,可作为矿井中的智能机器人使用。项目功能指标3.1基本功能各个电路模块自行设计完成,机械模块自己准备,购买或找老师申请已有模块小车能够根据外部传感器的输入信息,自动沿着一定轨迹运行。能够控制二驱小车自由运动使用MSP430作为开发板由电池供电利用超声波模块实现小车避障功能利用陀螺仪实现小车的导航功能3.2扩展功能利用红外线发射及接收对管检测黑白线,以实现循迹功能光传感器实现寻光,定点停车功能团队分工首先同时查阅资料,熟悉msp430的相关使用方法,学习理解编程语言,之后按照模块来划分任务,以实现并行性工作,提高工作效率。首先对不同的模块进行相互间的接口定义,定义完成之后即可相对独立的工作。我们划分的了三大模块。电机控制及循迹,超声波测距避障模块,陀螺仪导航模块。徐水灵负责超声波测距避障模块的电路与程序设计和调试;小车组装;整机调试吴佳琪负责红外循迹模块程序的设计与调试;小车组装;整机调试梁洁负责寻光模块程序的设计与调试;文档编写;小车组装;元器件购买硬件电路框图5.1系统整体框图整个电路系统分为红外对管循迹、光敏电阻传感器寻光、超声波测距避障、电机驱动控制。设置了两种工作模式,通过开发板上的按键来选择,硬件电路板上使用开关来控制硬件线路的导通和断开。模式一为红外循迹避障,模式二为寻光。模式一中首先利用红外对接管对路面信号进行检测,检测结果送入主芯片,输出相应信号给驱动芯片,驱动电机转动,从而控制整个小车的运动。同时,超声波模块检测前方是否有障碍,并将搜集到的实时信息传到主控芯片,及时避开障碍物。寻光模块中,小车先首先原地转圈寻找光源,一但找到光源就顺着光源方向前进,丢失光源后再次转圈寻找光源。主控芯片主控芯片MSP430F5529超声波测距超声波避障电机驱动光敏传感器寻光复位电路电源电路时钟电路红外对管循迹陀螺仪图5.1系统硬件框图5.2超声波模块功能框图超声波模块得到小车与障碍物的距离,将数据交给单片机判断是否需要避开障碍物,即单片机控制电机,驱动小车运动。超声波模块超声波模块单片机驱动电路电动机返回信号图5.2超声波模块功能框图5.3红外对管循迹模块用于小车循迹黑线红外检测电路红外检测电路单片机驱动电路电动机信号图5.3红外对管循迹模块5.4光敏电阻传感器模块用于小车的寻光光检测电路光检测电路单片机驱动电路电动机信号图5.4红外对管循迹模块5.5电机驱动模块用于控制小车的前进、后退、停止等基本功能。并且实现PWM波对转速进行控制。单片机单片机驱动电路电动机PWM波图5.5电机驱动模块小车的基本结构如下 5.6开发板管脚分配开发板管脚分配模块名称引脚号引脚功能硬件连接电机模块P2.0TA1CCR1(中断标志)电机模块ENA(输出)P2.1TA1CCR2电机模块ENB(输出)P4.0I/O电机模块IN1(输出)P4.1I/O电机模块IN2(输出)P4.2I/O电机模块IN3(输出)P4.3I/O电机模块IN4(输出)避障模块P7.5TB0CCR3超声波测距模块Echo(输入)P2.4TA2CCR1超声波测距模块Trig(输出))循迹模块P3.0I/O左红外对管循迹(输入)P3.1I/O中间红外对管循迹(输入)P3.2I/O右红外对管循迹(输入)寻光模块P4.4I/O左寻光模块(输入)P4.5I/O中寻光模块(输入)P4.6I/O右寻光模块(输入)开关模块P1.7按键中断按键S1模块工作原理主要器件选择6.1电机驱动芯片:L298N板载L298n芯片,是一款双桥驱动芯片,支持两路直流电机和一个步进电机的驱动,最高工作电压46V,额定电流2A,额定功率25W.可以驱动两个二相电机,直接通过电压调节输出电压。通过单片机的I/O输入改变芯片控制端的电平,即可对电机进行正反转、停止的操作。其OUT1、OUT2、OUT3、OUT4分别接2个电机,IN1,IN2.IN3,IN4引脚从单片机接入控制电平,控制电平的正反转,ENA,ENB接控制使能端,控制电机的停转。逻辑功能如下表:电机转动状态编码右电机左电机左电机右电机电动车运行状态IN1IN2IN3IN41010正转正转前进1001正转反转左转1011正转停止以左电机为中心原地左转0110反转正转右转1110停止正转以右电机为中心原地右转0101反转反转后退表:6.1L298N可以直接对电机进行控制,无需隔离电路,能满足直流减速电机的大电流的要求,调试时,可以通过设置不同的PWM波占空比,以实现相应的动作,对电机的调速使用PWM波调速的方式。电机驱动电路的电路图和实物图如下图6.1(a)L298N驱动电路图图6.1(b)电机驱动实物图6.2红外循迹模块74HC04D红外对管传感器利用反射红外光的强度来识别黑线白线,黑线时为低电平,白线时输出高电平,小车行驶时必然会产生偏移,可通过查询或者中断的方式检测红外对管传感器的返回值,以改变小车的行驶轨迹。红外对管特点是价格低、体积小、质量轻、对小车的转向不会造成影响,其抗光干扰能力强,灵敏度高响应快,光电转换速度快,故此次课设我们使用红外对管传感器进行循迹。

我们使用的红外模块74HC04D芯片主要为智能小车、机器人等自动化机械装置提供一种多用途的红外线探测系统的解决方案。该模块共有四路可用循迹模块。该模块使用红外线发射和接收管等分立元器件组成探头,并使用LM339

电压比较器(加入了迟滞电路更加稳定)做为核心器件构成中控电路,射器是一个红外发光二极管,接收器是一个高度灵敏度、平面光电三极管,两者集为一体,使探测器结构紧凑,易于单片机接口。该模块易于安装,使用简便,各路循迹分别独立工作,工作时不受数量限制。

主要参数如下:模块高度≤10

毫米

安全工作电压范围在

3伏特至

6

伏特之间

各路全开工作电流

30

毫安至

55

毫安之间

各管脚的作用:VCC、GND:电源接线端

IN(1—4)、OUT:探头与中控板连接端

OUT1、OUT2、OUT3、OUT4 红外模块工作时的红外发射管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,红外接收管一直处于关断状态,此时模块的TTL输出端为高电平,相应指示二极管一直处于熄灭状态;当被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,红外接收管导通,此时模块的TTL输出端为低电平,指示二极管被点亮。电路图、实物图如下图6.2(a)红外对管电路图图6.2(b)红外对管实物图6.3超声波模块:HC-SR04由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人研制上也得到了广泛的应用。我们使用的超声波模块HC-SR04采用IO口TRIG触发测距,至少给10us的高电平信号后,会自动发送8个40khz的方波,自动检测是否有信号返回。信号返回后,超声波模块通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。所测距离是脉宽的线性函数,测试距离=(高电平时间*声速(340M/S))/2其电气参数如下:供电电压为DC5V最远射程

4m

最近射程

2cm

测量角度

15°

输入触发信号

10us的TTL脉冲

输出回响信号

输出TTL电平信号,与射程成比例超声波电路图、实物图如下:图6.3(a)超声波电路图图6.3(b)超声波实物图6.4光敏电阻传感器寻光模块1光敏电阻模块对环境光强最敏感,一般用来检测周围环境的亮度和光强。2模块在无光条件或者光强达不到设定阈值时,DO口输出高电平,当外界环境光强超过设定阈值时,模块D0输出低电平;3数字量输出D0可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境的光强改变;光敏电阻电路图、实物图如下6.4(a)光敏电阻电路图6.4(b)光敏电阻实物图关键技术7.1硬件小车架构7.1.1小车车身结构方案一:使用一层小车结构可保证小车快速行驶时的重心稳定,缺点是硬件模块摆放会过于紧密,不方便增加删除硬件模块方案二:使用二层小车需要考虑小车重心问题,小车的硬件架构需要合理设计。优点为结构清晰、布线清楚,方便硬件模块的增改。 由于我们需要安装三个光敏电阻模块、两个超声波模块、三个红外对管,还有电机驱动板和红外板等等硬件模块。所需空间较多,并且考虑到开发板与电池的预留空间,我们最终选择第二种方案。 设计好硬件摆放方式之后,我们寻找了废旧硬置电路板,使用铜柱支起二层小车。并自己规划打孔位置,自主打孔后使用铜柱螺钉、绑带等将光敏电阻模块、超声波模块、红外模块安装在小车上,保证电池大致在驱动轮的正上方,个模块的安装对称,不会对智能小车的重心产生影响。7.1.2硬件摆放为降低小车重心,电机驱动板和红外板、电机驱动电池固定放在下层,开发板、两节干电池以及焊接的短路板放在二层。寻光模块在小车上层车头中间放置一个、车身左右两边各放置一个,超声避障模块放在下层车头两边,两个红外循迹模块放在小车最下方进行循迹。小车最终安装示意图如图7.1.2所示:(a)小车底层架构 (b)小车上层架构图7.1.2小车硬件架构电源供电本次硬件课程设计,由于我们使用的模块较多、不同模块之间的电压有很大的区别,且需考虑电源之间的屏蔽、电源稳定度的问题,我们选用控制电路、电机驱动双电源供电的模式。选用供电方式如下:开发板供电:MSP430f5529有四种供电方案可选择。其中调试时可将拨码开关调至ez,使用eZ-FETUSB供电,供电电压为3.6V;小车在进行循迹避障、寻光功能时,将拨码开关调至JTAG/BATT,两个1.5的七号电池串联电池盒,使用碱性电池给开发板供电。此种供电方法不需要加稳压,但是供电时间比较短,电量较少。本次课设使用的MSP430f5529本身带有低功耗设计,故使用两节1.5v干电池串联供电。电机供电:电机驱动电压电池使用7.9v的可充电电池,该电池实际提供电压约为6.9v,经过测试,可使电机稳定运行。传感器供电:红外对管控制电路、光敏传感器模块、超声波测距模块都需5v电源供电。考虑到干电池可用功率较小、电量较少,难以同时给多个传感器供电,并且也需要调整干电池的安装部位使智能小车的重心不偏移,所以干电池供电的方法执行较困难。而电机驱动模块上有电压为5v的输出引脚,该电压由7.9v的电机驱动电池分压产生,经测试,电压虽然达不到5v,但是电压平稳,受外界干扰较小。故可用电机驱动模块的输出5v电压向超声模块、红外模块、寻光模块传感器供电。7.3软件算法7.3.1系统软件框图7.3.2红外循迹模块方案1:使用两组红外对管,左边检测到黑线右转,右边检测到黑线左转,在轨道上行驶时双边传感器检测到白线,小车直走。由于红外对管传感器黑线时为低电平,白线时输出高电平,两路传感器若一直已正常状态在轨迹上行驶则状态一直是低电平,不会产生电平的上升下降沿跳变。产生跳变则说明小车偏离轨道。可使用中断的方式,在传感器返回值有上升沿跳变时进入中断,在中断中利用延时的方式让小车产生适合角度的偏转,回到正常轨迹直行。此种方案需要使用单片机上带中断的引脚,引脚资源十分有限,但使用中断方式功耗较低,不受软件代码长度影响。方案2:使用三组红外对管,用查询方式检测三组红外对管返回信号,共有九种组合方式,其中可能出现的有其中组合形式。当左边或右边检测到黑线时,小车左(右)转,当中间的红外对管传感器检测到黑线,且两边红外对管没有检测到黑线时,小车直行。查询方式响应较快,逻辑简单,能使得控制精度得以提高。

缺点为查询的效果与软件代码长度有关。我们使用的MSP430f5529a单片机可用带中断的I0口只有P1和P2两个引脚向量,引出单片机的引脚只有P1.0、P2.0、P2.1、P2.3、P2.4、P2.6,其中P2.0、P2.1用于输出pwm波改变电机的速度,P2.4用于超声模块。并且使用中断的逻辑复杂,响应较慢,经过考虑我们使用查询方式进行红外模块三个红外对管的检测,即选用方案二。使用引脚p3.0、p3.1、p3.2,作为左边红外对管、右边红外对管、中间红外对管的输入信号引脚,设置其模式为输入。具体实现流程描述:1.初始化寻光模块,设置p3.0、p3.1、p3.2为输入引脚且不使用引脚功能2.模式选择后进入查询避障模式,判超声模块的返回信号标志位是否为0,若是则表明前方无障碍物阻挡,进入循迹。读入三引脚的状态,根据采集到的状态做出相应反应,具体改变如下:小车行驶状态与红外传感器返回状态关系循迹模块左红外传感器中红外传感器右红外传感器小车状态状态1010缓慢前进状态2100右大偏状态3110右小偏状态4001左大偏状态5011左小偏状态6111后退右转状态7000前进循迹模块偏向与向左右轮输出pwm波占空比数值、转弯延时、电机正反转状态关系循迹模块右轮PWM波占空比数值左轮PWM波占空比数值延时(空循环数值)电机正反转状态状态12002003000左前右前状态24504505000左前右退状态34504505000左前右退状态44504505000右前左退状态54504505000右前左退状态62002003000右退左退2002003000右前左退状态72002003000右前左前此时输出pwm波周期计数至设置为1024,时钟选择ACLK,13Mhz。实现流程图:7.3.3光敏电阻寻光模块方案1:使用一个光敏电阻模块,返回高电平,即没有检测到足够大的光强时持续右转指导检测到光强。检测到光强后持续直走,直到接近光源。当返回电平值产生上升沿下降沿时触发IO端口终端,在中断处理函数中改变电机的状态。采用该方案的优点是中断只在电平发生变化时进入,不占用主函数处理时间,功耗较小。缺点是灵敏度较低,快速右转时难以检测到光源,且检测到光源后有延时,导致无法进入直走寻光阶段。且使用中断方式收到带中断接口的限制,无法添加更多的光敏电阻模块。方案2:使用三个光敏电阻模块,利用查询的方式在主函数中重复检测三引脚输入电平,若只有一个点光源,则在同一时间只会有一个光敏电阻模块检测到点光源,输出低电平。检测到低电平之后根据检测到光敏电阻位置左(右)转向,正前方光敏电阻检测到光源时前进。此种方法覆盖角度大,反应灵敏。理由同红外对管循迹模块,我们采用方案二实现寻光功能。使用引脚P4.4、P4.5、P4.6,作为左边红外对管、右边红外对管、中间红外对管的输入信号引脚,设置其模式为输入。具体实现流程描述:1.初始化寻光模块,设置P4.4、P4.5、P4.6为输入引脚且不使用引脚功能2.模式选择后若进入寻光开车模式,则循环读入P4.4、P4.5、P4.6三引脚的状态,根据采集到的状态做出相应反应。传感器状态与小车运动状态关系如下:小车行驶状态与光传感器返回状态关系寻光模块左侧光传感器前方光传感器右侧光传感器小车状态状态1110右中心转状态2101前进状态3011左中心转状态4000持续右转寻光模块偏向与向左右轮输出pwm波占空比数值、转弯延时、电机正反转状态关系寻光模块右轮PWM波占空比数值左轮PWM波占空比数值延时(空循环数值)电机正反转状态状前右停状态2102410241000左前右前状态37007001000右前左停状态4450450800左前右停此时输出pwm波周期计数至设置为2048。又因小车左右轮性能的不平衡,为保持寻光左右转时速度大致相同,状态1右侧检测到障碍物与状态3左侧检测到障碍物时输出速度选择不同。此模块转向方式采用中心转,让小车单轮不动,检测范围会比非中心转大且灵敏度高。实现流程图:7.3.4电机驱动模块方案1:使用定时器的比较模式计数,用置位/复位的输出模式输出占空比可调的pwm波,将pwm波接至点击启动模块ENA、ENB端,实现对电机的调速。该方案可实现电机的速度可调,便于循迹、避障、寻光功能的实现,但须使用IO引脚功能、占用定时器IO引脚,为多传感器的使用带来不便。方案2:ENA、ENB端直接加+5v电压使能电机驱动,不采用对电机的调速。优点是可空出定时器IO引脚,但是耗电太大、不能调速,不便于模块功能的实现。在这两种方案中我们选择第一种方案。因为在速度不可调、速度较快情况下,因为输入信号变化时间短,小车的正确行使对传感器的灵敏度要求较高,为了提高灵敏度需要加入多个传感器,并使传感器之间相互协调。善于利用电机驱动模块输出pwm波调速的功能能在模块逻辑简单的情况下实现基本功能,用输入信号变化慢、时间长的优点弥补传感器灵敏度的不足。当然,可调速度、且能加入多个传感器使灵敏度提高的方法优于此种方法,但奈何使用的MSP430f5532引脚资源十分有限,难以实现最优方法。具体实现流程描述:1.首先初始化电机驱动模块:设置六个引脚P2.0、P2.1、P4.1、P4.2、P4.3、P4.4模式为输出,其中P2.0、P2.1作为ENA、ENB,分别对应驱动右轮、左轮的使能端,使用引脚功能。2.初始化完成后,该模块主要在其他各模块中被调用,调用时可通过写响应引脚的比较寄存器,更改pwm的输出周期和占空比,各模块使用不同速度便于功能的实现。实现流程图:7.3.5超声波模块方案1:使用一个超声波模块,放置于车头正前方。利用定时器的比较模式周期输出超声波模块的Trig信号,利用定时器捕获模式计算返回信号脉宽,在中断中计算距离,判断距离是否小于定值、是否需要避障,若需避障则将标志位置1,返回主函数执行避障函数。该方案只使用了一个超声波模块,所以测距范围比较小,灵敏度较低。优点是逻辑简单,使用定时器发出的周期性Trig信号较为稳定。方案2:使用两个超声波模块,分别放置于车头左前方和右前方。同样使用定时器捕获模式计算返回信号脉宽并计算距离。左右超声波使用不同的定时器中断,测得距离小于一定值则分别置位左右标志位。返回主函数,根据不同标志位执行避障函数。该方案的避障范围宽、避障精度高,但是由于单片机的引脚限制,需要使用软件触发Trig。软件触发Trig方式与主函数代码执行速度有关,超声波模块无法周期性地测距。方案3:将返回信号echo分别接至两个两个中断使能的IO口,输入信号上升沿时进入中断,直到输入信号变为低电平退出中断,记录时间间隔,即脉冲宽度,以此测出距离。该方案只需使用两个可以使用中断的IO口,所以可以使用定时器发出周期性的Trig信号测距。但是在脉冲宽度为高时,程序会一直在中断函数内,无法执行主函数代码,脉冲宽度过长时程序陷入中断,可能使其他模块功能产生错误。不利于程序的快速运行。三种方案的选择需要仔细考虑引脚资源,开发板MSP430F5529a外接引脚资源如下图所示(部分):MSP430F5529a部分外接引脚说明引脚说明引脚(左)引脚(右)引脚说明(RF_STE)P2.6P3.0(RF_SIMO)(RF_SOMI)P3.1P3.2(RF_SPI_CLK)TA2.0P2.3P2.1TA1.2TB0.3P7.5GNDGNDGPIOP4.7P2.4TA2.1(RXD)P4.5P4.6GPIO(TXD)P4.4P4.0UCx1xx(LED1)P1.0P2.0TA1.1GNDGNDRF_PWRRF_PWR可以看到,带定时器功能的引脚为P2.0(对应TA1.1)、P2.1(TA1.2)、P2.3(TA2.0)、P2.4(TA2.1)、P7.5(TB0.3)。其中P2.0、P2.1使用TA1的比较模式,输出PWM波至电机驱动模块ENA、ENB调速,可使用定时器为TB0(P7.5)、TA2(P2.3、P2.4),资源十分有限。实际可执行方案如下:1.采用方案一:使用一个超声模块测距,将echo信号输入开发板P7.5引脚,开启引脚功能,使定时器TB0比较寄存器TB0CCR3工作在捕获模式,用于捕捉echo信号的上升、下降沿;将开发板引脚P2.4接至超声模块Trig,使TA2CCR1、TA2CCR0工作在比较模式,用于产生信号Trig2.采用方案二:使用两个超声模块测距,将两个模块的echo信号分别输入开发板P7.5、P2.4引脚,使定时器比较寄存器TB0CCR3、TA2CCR1工作在捕获模式,用于捕捉左、右超声模块返回信号echo的上升、下降沿;由于仅剩一个有外接端口的比较寄存器,无法完成PWM波的周期性输出,需使用普通IO输出接口,用软件延时的方式产生触发信号Trig3.采用方案三:定时器都工作在比较模式,将echo信号输入开发板P2.3、P2.6引脚,使用TA2、TB0在中断中记录P2.3、P2.6端口的高电平时间;使用P2.4引脚功能,用于输出Trig三种方案中,若使用方案二、三,需改进算法以实现两个超声模块之间的协调,且软件输出Trig信号方式的输出周期十分不稳定,影响对距离的判断。方案三一直将程序陷在中断中的方法在软件设计中十分不可取,也许会导致程序实现功能的紊乱。于是我们最终选择方案一。具体实现流程描述:初始化超声模块,设置P2.4引脚为输出,P7.5引脚为输入,使用P2.4、P7.5引脚功能;设置TB0定时器比较寄存器TB0CCR3工作在捕获模式、在模式为循迹避障时初始化开中断;设置TA2定时器比较寄存器TA2CCR1工作在比较模式,输出为置位、清零模式。P2.4周期性发出Trig信号,超声波模块被触发,发出40Hz脉冲,遇到障碍物后返回信号echo至P7.5。P7.5引脚接收到上升沿,触发中断,中断函数判断触发中断的为上升沿,并记录上升沿发生时间。当echo信号持续一定脉冲宽度,从高电平跳为低电平,产生下降沿时,再次进入中断函数,并记录该下降沿发生时间。下降沿发生时间与上升沿发生时间相减,计算出超声模块返回信号echo的脉冲宽度。根据返回信号的脉冲宽度计算距离distance。判断距离distance,当距离小于一定值时将标志位置1,表示前方有障碍,否则置0。退出中断函数。在主函数中判断标志位是否为1,是则进入相应避障函数;否则进入循迹,循迹时打开定时器中断。若进入避障函数,则进入避障函数后关闭定时器中断,通过更改左右电机转向和速度,延时实现避障功能。在避障路线完成后开中断,继续判断有无障碍物。实现流程图:7.3.6模式选择设计方案:由于寻光、循迹两种模式不能同时进行,且在寻光的同时避障在现实生活中缺少相应的应用场景,本次硬件课设我们设计的智能小车选用了两种模式:循迹避障和寻光开车。这两种模式通过s1按键切换。s1对应P1.7引脚,按下按键,产生下降沿跳变,进入中断处理函数,在中断处理函数中更改模式标志位的值并开关超声模块定时器中断。具体实现流程描述:初始化按键P1.7,对应s1按键,启用P1.7口上拉电阻,未进入终端时为高电平,并设置P1.7口下降沿触发中断按键按下,进入中断处理函数。判断目前模式标志位,对模式标志位、超声波时钟中断使能做出相应更改实现流程图:模块测试及结果8.1超声波测试8.1.1硬件模块测试测试该模块时,用信号发生器同步输出脉冲信号,保证脉冲信号的高电平宽度大于10us,且周期能够比一个返回信号的脉宽要长。经过测试,超生模块能够正确返回信号echo,如下图所示8.1.2软件模块测试对单个模块进行测试,小车在遇到障碍物时能够正确检测出距离,将避障标志位置1进行避障操作。但避障操作部分对小车的控制仍需反复修改调试。最终我们设置小车避障路径为:右转小角度→直行→左转小角度→直行→左转大角度→直行。测试发现,软件设置延时相同、转速相同情况下,小车转过的角度还与地面摩擦力、电池的供电情况有关。因此避障操作需量体裁衣,根据地面摩擦力、电池的供电情况调整。8.2红外对管测试8.2.1硬件模块测试

实验之前,我们需根据安装位置调整红外模块电位计,使之能够检测到黑线、白线并正确返回信号值。首先将小车放置于白线上,发现标志返回电平高低的二极管亮,即返回电平为低,为正确返回值。再将小车放置在黑线上,缓慢调节电位计,使返回电平为高,此时模块二极管灭,红外对管能够正确检测出黑线、白线。循迹只需探测地面返回光强,可用黑胶带将红外对管四周围住,使室内光强不影响红外对管判断地面黑线、白线。8.2.2软件模块测试对单个模块进行测试,小车在循迹时能够慢速沿着轨道循迹,说明该模块逻辑正确。但由于循迹部分也是用延时控制小车的偏转角度,所以遇到的问题与超声避障函数相同,循迹部分检测到偏离轨迹后的偏转延时、偏转速度需要根据地面摩擦力、电池的供电情况调整。8.3光敏电阻传感器测试8.3.1硬件模块测试使用光传感器前需要首先根据室内光强,对传感器敏感度进行调整。使传感器在室内光照下返回高电平,即没有检测到光源;在强度大于室内光强的点光源照射下返回低电平,即检测到光源。具体调整方法同红外模块。8.3.2软件模块测试对单个模块进行测试,小车能够在短时间内正确寻光,并跟随光源行驶。说明该模块逻辑清晰,能够紧密跟随光源,灵敏度较高。8.4电机驱动测试8.4.1硬件模块测试直接在电机驱动模块IN1、IN2、IN3、IN4引脚加高、低电平,分别测试电机驱动模块的前进、后退、左转、右转功能,测试时ENA、ENB接+5v,即不在使能端进行调速。测试得电机功能完好,左右轮转速差距不太明显,这种差距可通过软件编程输出不同占空比值弥补。8.4.2软件模块测试对电机进行测试,为了找到能够使小车直走的输出占空比,我们用专门代码输出不同占空比,逐渐缩小左右轮之间的差距。经测试发现,在输出计数值为1024时,调节左轮占空比计数值为630、右轮为612时小车能够直走。小车左右轮的差异与电池供电同样有关,不过不像循迹、避障模块那样,不同电池状态供电差异不大。实施描述(使用说明)根据引脚分配表连接好电路,两节干电池给开发板供电,开发板的拨码开关JTAG/BATT,拨码开光拨至power,给电机驱动使用7.9v电池供电。短路板上把2.3引脚引出的线与红外模块引线短接。小车开始默认模式为红外避障循迹,按下按键S1后,软件模式切换为寻光,短路板上2.3引脚与寻光模块DO短接,即进入寻光模块运行。主要器件清单及经费使用情况原件名称个数来源自费价格(元)MSP430F55291申请万向轮1申请电机2申请轮子2申请电机驱动2申请电机驱动电源(池)1申请干电池2自费5红外传感器(循迹/避障)3申请光敏传感器(寻光)3自费18.9超声波传感器(避障)2申请陀螺仪(导航)1自费12.5带接头导线若干自费4.8螺母若干申请铜柱若干自费2.8垫片若干申请螺丝若干申请绑带一捆自费1小车支架1申请黑胶带2自费6合计51项目实施总结及心得体会经历了这次的硬件课设,我的切身体会就是:只知道理论大方向是不行的,实践才是检验真理的唯一标准。因为旁听过同学的智能小车选修课,我们组对小车循迹、避障的基本方法逻辑都有一定的了解。在开始本次的智能小车设计时,我们都预想了要加入很多模块、实现各种不同的功能。但是经过九天的调试,开始的时候看似逻辑简单的东西,实现起来却有太多需要考虑的细节。 在硬件方面,如何使用单片机引脚功能、如何调试、如何供电都是刚开始时我们遇到的问题,后来我们查阅了大量资料,弄清了单片机的结构和引脚,对单片机的编程有了基本的了解。进行硬件模块测试时,我们发现一个红外对管的控制电路坏了,无法返回正确值,最终只能使用三个红外模块。在小车安装方面,我们初始配件不足,连螺钉、铜柱等都需要东拼西凑,而且因为一层小车无法安装下电池和多个传感器模块,我们最初在调试单个模块时只能跟随小车一起跑。为了解决这个问题,我们在废电路板上打孔,购买铜柱将小车变成两层,自己焊短路线、设计布线方式使小车看起来不那么杂乱。在综合测试小车功能的时候,可能由于需要供电的传感器太多,电池经常没电,这也对我们进行小车的测试产生了很大的影响。开始时电机左右轮性能差距也比较大,输出相同周期相同占空比时都无法直走,这也是我们放弃直接使能电机驱动模块的原因之一。后来我们联系老师,更换了新的电机,这个问题才有所改善。我们的功能模块实现方案也是从以中断为主流变成了以查询为主流,主要原因就是带中断的外接引脚、带有定时器引脚功能的外接引脚太少。就这样,因为中途方案改变,加上许许多多的小问题,并不算太长的代码我们昼夜不息地调了九天时间。总结这次硬件课设的经验,我们虽然实现了循迹避障、寻光的功能且能实现模式转换,但是却因为时间原因,目标避障的功能没有完成,确实十分遗憾。在完成此类项目时,首先要确定实现功能、确定实现功能的大致方法,并分析其可行性,再选定方案,最后开始着手单个模块的编程。可行性分析是软件设计中非常重要的一个环节,让我们设计单个模块时也能够考虑到全局。因为这次硬件课设我们几乎是从零起步,在慢慢摸索的过程中出现了很多问题,我也积累了很多软件调试、硬件测试的经验,收获还是非常大的,也算是为之后的毕业设计积累了一点信心吧。12.参考文献[1]顾志华,戈惠梅,徐晓慧,廉美琳,张金龙.基于多传感器的智能小车避障系统设计[J].南京师范大学学报(工程技术版),2014,01:12-17.[2]马世典,孔令晶,韩牟,吴狄,唐鑫.基于多传感器协同的智能循迹小车控制系统设计[J].制造业自动化,2013,22:143-148.[3]魏一博.竞赛中智能小车的设计技巧[J].电子制作,2012,03:60-65.[4]郑辉.基于MSP430单片机的智能小车寻迹模块研究[J].现代电子技术,2013,13:105-107.[5]施保华,赵娟,田裕康.MSP430单片机入门与提高[M].中国·武汉:华中科技大学出版社,2013.[6]任保宏,徐科军.MSP430单片机原理与应用[M].中国·北京:电子工业出版社,2014.13.附录(电路图、源码清单)开发板电路图中可见开关S1引脚号为1.7源代码/**main.c*/#include<stdint.h>#include"msp430.h"staticunsignedintmode_flag=0;//1循迹避障,0寻光staticintultrasonic;//标志位,此变量根据超声波判断的距离的设为不同的值staticfloatstart=0,end=0;staticfloatdistance=0;//初始化电机驱动电路voidInit_PWM_Driver(){ P4DIR|=BIT0+BIT1+BIT2+BIT3;//IN1~IN4驱动电机四个信号 P2DIR|=BIT0+BIT1;//复用p2.0为使能端ENA,复用p2.1为使能端ENB P2SEL|=BIT0+BIT1;//选择模式 TA1CTL|=MC_1+TASSEL_1+ID_0; TA1CCTL1=OUTMOD_7; TA1CCTL2=OUTMOD_7;////输入输出模式为复位/置位模式接上:比较模式,中断禁止,最后一位表示是否有中断挂起 TA1CCR0=2048;//置位 TA1CCR1=1044;//计数到ccr1复位左轮的占空比增增计数模式的最大 TA1CCR2=1024;//计数到ccr2复位右轮的占空比}//初始化超声波模块voidInit_ultrasonic(){ //初始化超声避障模块使用引脚P2.0发出trig、P7.5接收echo P7DIR&=~(BIT5); P7SEL|=BIT5; P2DIR|=BIT4; P2SEL|=BIT4;//使用内部功能 //TB0.3P7.5引脚对应 TB0CTL=TBSSEL_2+MC_2+TBCLR+ID_1;//;+TBIE;//SMCLK,连续计数模式,中断使能,二分频

TB0CCTL3=CAP+CCIS_0+CM_3+SCS;//+CCIE;//捕获模式,选择CCIxA,上升下降沿都捕获,使能捕获中断,同步捕获

TB0CCR3=0;//清空比较寄存器CCR3 //TA2.1P2.4引脚对应 TA2CCR0=3000; TA2CCR1=20; TA2CCTL1=OUTMOD_7; TA2CTL=TASSEL_2+MC_1;//SMCLK、比较计数 //TA0、TB0二分频(这里不知道有什么作用,感觉没啥作用) TA0EX0=BIT0; TB0EX0=BIT0;}//初始化循迹voidInit_followline(){ P3DIR&=~BIT0;//p3.0为输入P3DIR&=~BIT1;//p3.1为输入P3DIR&=~BIT2;//p3.2为输入}voidInit_followlight(){ P4DIR&=~BIT4;//p4.4为左输入 P4DIR&=~BIT5;//p4.5为中输入 P4DIR&=~BIT6;//p4.6为右输入}//初始化按键1.7,s1按键voidInit_Button(){ P1REN|=BIT7; P1OUT|=BIT7;//以上两句为启用P1.7口上拉电阻。未进入终端时为高电平 P1IES|=BIT7;//P1.7口下降沿触发中断 P1IFG&=~BIT7;//清除1.7中断标志位 P1IE|=BIT7;}/*转弯部分*/voidTurn_Right_Center()//右转0100{ P4OUT&=~(BIT0+BIT1+BIT3); P4OUT|=BIT2; TA1CCR0=2048;//置位 TA1CCR1=800;//计数到ccr1复位左轮的占空比增增计数模式的最大 TA1CCR2=800;//计数到ccr2复位右轮的占空比}voidTurn_Right()//右转0110{ P4OUT&=~(BIT0+BIT3); P4OUT|=BIT2+BIT1; TA1CCR0=1024;//置位 TA1CCR1=400;//计数到ccr1复位左轮的占空比增增计数模式的最大 TA1CCR2=400;//计数到ccr2复位右轮的占空比}voidTurn_Left_Center()//左转0001{ P4OUT&=~(BIT1+BIT2+BIT3); P4OUT|=BIT0; TA1CCR0=1024;//置位 TA1CCR1=400;//计数到ccr1复位左轮的占空比增增计数模式的最大 TA1CCR2=400;//计数到ccr2复位右轮的占空比}voidTurn_Left()//左转1001{ P4OUT&=~(BIT1+BIT2); P4OUT|=BIT0+BIT3; TA1CCR0=1024;//置位 TA1CCR1=400;//计数到ccr1复位左轮的占空比增增计数模式的最大 TA1CCR2=400;//计数到ccr2复位右轮的占空比}voidTurn_Back()//1010{ P4OUT&=~(BIT0+BIT2); P4OUT|=BIT1+BIT3;TA1CCR0=1024;//置位 TA1CCR1=512;//计数到ccr1复位左轮的占空比增增计数模式的最大 TA1CCR2=512;//计数到ccr2复位右轮的占空比}voidTurn_Normal()//0101{ P4OUT|=(BIT0+BIT2); P4OUT&=~(BIT1+BIT3); TA1CCR0=1024;//置位 TA1CCR1=512;//计数到ccr1复位左轮的占空比增增计数模式的最大 TA1CCR2=512;//计数到ccr2复位右轮的占空比}//刹停函数voidStop(){ P4OUT|=BIT0+BIT1+BIT2+BIT3;//p4out=1}voidTurn_Right_Center_low(){ P4OUT&=~(BIT0+BIT1+BIT3); P4OUT|=BIT2; TA1CCR0=1024;//置位 TA1CCR1=300;//计数到ccr1复位左轮的占空比增增计数模式的最大 TA1CCR2=300;//计数到ccr2复位右轮的占空比}#pragmavector=PORT1_VECTOR//按键中断函数__interruptvoidP1_ISR(void){ switch(mode_flag) { case0://寻光模式跳至循迹避障模式 TB0CTL|=TBIE; TB0CCTL3|=CCIE;//打开超声模块时钟中断 mode_flag=1; break; case1://循迹避障模式跳至寻光模式 TB0CTL&=~TBIE; TB0CCTL3&=~CCIE;//关闭超声模块时钟中断 mode_flag=0; break; } P1IFG&=~BIT7;//清除1.7中断标志位}#pragmavector=TIMER0_B1_VECTOR__interruptvoidTimer0_B1(void){ floattemp; switch(TB0IV)//查看中断向量,判断是否是Timer0_B

CC3产生的中断

{ case6://CCR3捕获寄存器中断入口,上升沿下降沿都能产生中断

{ if(TB0CCTL3&CCI)//捕获上升沿 { start=TB0CCR3;//记录此时CCR1的数据

break; } else //捕获下降沿 { end=TB0CCR3; temp=end-start;//为其间间隔的差值 distance=temp*0.0175;//将该数据转换成距离

if(distance>8) { ultrasonic=0; } elseif(distance<8&&distance>0) { ultrasonic=1; } } break; } case4: break;//

case10: break;//

} TB0CCTL3&=~CCIFG; return;}voidmain(){ WDTCTL=WDTPW|WDTHOLD;//

关闭看门狗计时器

Init_PWM_Driver(); Init_Button(); Init_followline(); Init_ultrasonic(); Init_followlight(); _EINT();//中断使能 longintz; while(1) { if(mode_flag==1)//循迹避障 { switch(ultrasonic)//为0则障碍物较远,为1则障碍物较近,需要避障 { case0: TB0CTL|=TBIE; TB0CCTL3|=CCIE; switch(P3IN&0x07)//00000111右中左 { case0x03://往右边拐弯0011 TA1CCR0=1024; TA1CCR1=450; TA1CCR2=450; Turn_Right(); for(z=0;z<5000;z++){} break; case0x06://往左拐弯0110 Turn_Left(); TA1CCR0=1024; TA1CCR1=450; TA1CCR2=450; for(z=0;z<5000;z++){} break; case0x00://全白0000 Turn_Normal(); TA1CCR0=1024; TA1CCR1=250; TA1CCR2=250; for(z=0;z<5000;z++){} break; case0x05://不正常情况0101 Turn_Normal(); TA1CCR0=1024; TA1CCR1=250; TA1CCR2=250; for(z=0;z<3000;z++){} break; case0x02://正常情况0010 Turn_Normal(); TA1CCR0=1024; TA1CCR1=250; TA1CCR2=250; for(z=0;z<3000;z++){} break; case0x01://右偏左拐0001 Turn_Left(); TA1CCR0=1024; TA1CCR1=450; TA1CCR2=450; for(z=0;z<5000;z++){} break; case0x04://左偏右拐0100 Turn_Right(); TA1CCR0=1024; TA1CCR1=450; TA1CCR2=450; for(z=0;z<5000;z++){} break; case0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论