智能小车设计方案报告_第1页
智能小车设计方案报告_第2页
智能小车设计方案报告_第3页
智能小车设计方案报告_第4页
智能小车设计方案报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

摘要自主反响式智能系统是一种应用广泛的控制系统。对电路的分析和验证工作依靠智能化来完成,效率高。因此它的研究与开发是一项非常有意义的工作。本小车以MSP430超低功耗单片机为核心,在SHARK二型小车的根底上研究小车避障寻迹的设计和实现方法,完成障碍检测、避障、寻迹功能。充分运用了430单片机的功能。本论文介绍了智能小车的机械结构及相应的硬件电路和实现算法。在机械结构上,对普通的小车作了改良,即用一个万用轮来代替两个前轮,使小车的转向更加灵敏。利用反射式红外传感器来寻迹、红外一体化接收头来检测障碍物的位置,通过改变单片机产生的PWM方波的占空比,使其能在设计范围内可实现任意角度黑线和任意角度移动,还可以实现避障的功能。在算法上,利用矢量分解法、PID算法等对小车的运行进行控制并能有效的改善其运行轨迹。关键字:MSP430寻迹避障PWMAbstractIndependence’srespondingtypeintelligencesystemisakindofappliedextensivecontrolsystem.Analyzingelectriccircuitandverifyingaworkdependsontheintelligencetocomplete,itsefficiencyishigh.Soitsresearchanddevelopmentisaverymeaningfulworks.Withthecoreof430microcomputerandatthefoundationofSHARK,theNo.3smallcarcancompleteanobstacleexamination,avoidingstumblingblockandlookingforvestigefunction,makingfulluseof430microcomputer.Thisthesisintroducedmachinestructure,homologoushardwareelectriccircuitandthecalculatewayoftheintelligencesmallcar.Makingimprovementtothecommoncaronthemachinestructure,weuseaperfectwheeltomakethecarturningmoreeasily.Andweusesomesensorstolookforvestigeandavoidstumblingblock.BychangetheemptyratioofPWM,thecarcanarbitrarilymovewithanyangleoftheblacklinewithinthescopeofthedesign.Onthecalculateway,weusevectordecompositionmethod、PIDtocontrolthecarandimproveitstrack.Keyword:MSP430lookingforvestigeavoidingstumblingblockPWMPID目录TOC\o"1-3"\u第一章绪论1第二章各部件的工作原理32.1前轮〔导向轮〕3电机4反射式红外传感器5红外一体化接收头6第三章硬件电路11电机驱动电路11反射式红外传感器电路13红外一体化接收头电路143.4处理器电路16第四章电路原理图19第五章控制算法21黑线位置判别215.2巡线算法21搜线算法23障碍物位置判别23转弯控制255.6迷宫探路控制26第六章相关软件29第七章总结357.1本文总结357.2进一步的工作35致谢37参考文献39附录一41附录二42第一章绪论当今社会,科学技术日新月异,时代前进的步伐越迈越宽,应用自动化设备,计算机处理,现代化通讯,数字化信息,现代化显示设备等高新技术而建立的现代化智能,监控等系统已经得到充分的开展与应用,智能机器人也就应运而生。同时,在建设以人为本的和谐社会的过程中,智能效劳机器人能够完成考古开掘,海底揭密,宇宙探索等危险作业,以保证人身平安。《国家中长期科学和技术开展规划纲要》一文指出:智能效劳机器人是在非结构环境下为人类提供必要效劳的多种高技术集成的智能化装备。以效劳机器人和危险作业机器人应用需求为重点,研究设计方法、制造工艺、智能控制和应用系统集成等共性根底技术。重点研究低本钱的自组织网络,个性化的智能机器人。2006━2020年,既是国家中长期技术开展方案实现阶段,也是我们最具有活力和最激情洋溢的时段。该智能小车模型是一辆由PCB和车体拼装的小车。所有的机械结构和零部件都安装固定在电路板上。因此完全不需要机械加工,非常适合实验阶段机器人的研制。本文简述了智能巡线避障小车自主走迷宫的设计思路和实现过程。包括小车的机械结构、电路、软件、控制算法、调试方法等。可作为一般的设计参考。小车的左右轮分别由2只舵机提供动力,作为驱动轮和导向轮使。430单片机的PWM发生器产生2路〔分为两组〕占空比可变的方波,经三极管进行扩流后分别驱动左右舵机。控制2路PWM的比例,不仅可以调节小车向前运动的速度,还可通过2路PWM占空比的差异,改变小车运动方向。5只反射式红外传感器位于小车前下方,用于查找黑线位置并且实现寻迹。小车前端还分布有3个红外一体化接收头,实现避障并完成走迷宫。第二章各部件的工作原理2.1驱动轮〔导向轮〕前轮亦为驱动轮,其决定小车能否灵活拐弯的关键局部。这辆小车和汽车不同,不是靠摆舵来控制转弯,而是靠左右后轮速度差来实现转弯控制。图为小车的仰视图(未画出传感器)。小车的两前轮是靠舵机进行驱动的。通过两路PWM波实现对其的控制。只要调整PWM波的占空比即可控制舵机的转速。当小车左轮的速度高于右轮时,小车右转弯;反之,当小车右轮的速度高于左轮时,小车左转弯。小车后轮属从动轮,质地较硬,其与地面磨擦力较小,与其动力相比可以忽略不记。所以它可以自由偏移,而不影响小车的转向.舵机舵机是一种位置伺服的驱动器。它接收一定的控制信号,输出一定的角度,适用于那些需要角度不断变化并可以保持的控制系统。在微机电系统和航模中,它是一个根本的输出执行机构。准的舵机有3条导线,分别是:电源线、地线、控制线,如下图。电源线和地线用于提供舵机内部的直流电机和控制线路所需的能源.电压通常介于4~6V,一般取5V。注意,给舵机供电电源应能提供足够的功率。控制线的输入是一个宽度可调的周期性方波脉冲信号,方波脉冲信号的周期为20ms(即频率为50Hz)。当方波的脉冲宽度改变时,舵机转轴的角度发生改变,角度变化与脉冲宽度的变化成正比。2.3反射式红外传感器反射式红外传感器ST188采用高发射功率红外广电二极管和高灵敏度光电晶体管组成。检测距离可调整范围为4-15mm;采用非接触检测方式。可用于IC卡电度表脉冲数据采集、集中抄表系统数据采集和机纸张检测等。图2.4反射式红外传感器工作原理反射式红外传感器中包含一个发射器LED和一个光探测器〔光敏二极管/光敏三极管〕。着两个元件被封装在同一个塑料壳体中,并且排列成适合他们工作的理想位置。LED发出的一束光被一个外表反射后又回到探测器中。图1.4是反射式红外传感器的工作原理图。封装在矩形壳体中的是发射器LED〔由左侧的白色方块表示〕和探测器装置〔在右侧〕。虚线表示光线从发射器LED中发出并反射回探测器;探测器检测到的光强大小取决于物体外表的反射率,而这一光强就是传感器的输出值。如下图,选通信号〔高电平〕经过三极管扩流后送到传感器的K脚,如果检测到黑线,传感器C脚输出高电平;否那么输出为低电平。图2.5反射式红外传感器及其检测距离与转换效率的关系图反射式传感器在高度受控的理想环境下的工作性能更好,因为影响它输出的外界因素有很多,如环境光的变动、传感器与被探测物体之间的距离,以及被探测物体的反射率等。为了减少环境光的干扰,首先需要调整传感器的方位使环境光不能直接射到探测器。反射式红外传感器ST188的最正确探测距离为6-14mm。所以将传感器垂直于地面并且调整传感器与地面的距离,大约在10mm左右。2.4红外一体化接收头电视机、唱机等家电中广泛使用红外线遥控器。红外遥控器发出38KHz调制的红外线,在接收端,被一体化红外接收头接收,解调出原始键码值。因为红外遥控使用广泛、成熟、大批量,所以相关红外接收、发射元件价格很低。本方案使用通用遥控器的一体化红外接收头作为检测元件。图2.7一体化红外接收头工作原理一体化接收头内部集成有带通滤波器,它只允许大约38kHz的红外信号通过。这种仅对38KHz敏感的特性,有助于消除环境光对遥控器接收的影响。如图,当红外线发射管IRLED〕发出的38KHz的红外线被一体化接收头接收时,接收头输出“0”。当没有侦测到红外线,或非38KHz红外线〔如日光灯干扰〕,输出“1”。第三章硬件电路3.1舵机驱动电路此局部是整个小车的大脑,是整个小车运行的核心部件,起着控制小车所有运行状态的作用。通常选用单片机作为小车的核心控制单元。这里选用MSP430F425单片机.考虑到小车必须能够前进、倒退、停止,并能灵活专性,在左右两轮各装一个舵机分别进行驱动。当左轮电机转速高于右轮电机转速时小车向右转,反之那么向左转。为了能控制车轮的转速,左右两轮的转速,可以采取PWM调速法,即由单片机的TA1和TA2输出一系列频率固定的方波,再通过功率放大来驱动舵机,在单片机中编程改变输出方波的占空比,从而可以改变电机的转速。左右两轮两个电机转速的配合就可以实现小车的前进、倒退、转弯等功能。驱动电路如图:需要注意的是:被二极管分流到电源两端的电力将造成主板电压的瞬变或噪声。更严重的是当采用PWM信号控制电机时,每次关断都会产生这种影响。如果导通三极管又重新开启,同时反向电动势电流仍然存在,结果三极管将直接导通电源正极和地。这一现象时间的长短取决于续流二极管的关断时间。这一电流称作过冲电流,它同样会产生噪声。因此需在离接口慢近的地方加一旁路电容来消噪。旁路电容的作用是平滑电流脉动和电源电压的瞬变。当电压出现尖峰时,电容将迅速地吸收这一能量,从而使电压保持恒定。当电压降低时,电容将向电路中回馈能量,从而使电压有所上升。经试验验证,从单片机出来的PWM电压大约在3.5V左右,加到舵机两边最多只有3V,这远远低于其耐压,因此转速也很慢,稍有摩擦就转不动了。因此需要再增加两个三极管来进行扩流,还可以起保护单片机的作用。3.2反射式红外传感器电路这里的寻迹是指小车在白色地板上寻黑线行走,通常采用的方法是红外探测法。即利用红外线在不同颜色的物体外表具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被安装在小车上的接收管接收;如果遇到黑线那么红外光被吸收,小车上的接收管接收不倒红外光。单片机就是否反射回来的红外光为依据来确定黑线的位置和小车的行走路线。红外探测器探测的距离有限,一般最大不应超过15cm。这里用反射式红外传感器ST188。当小车在白色地面行驶时,装在车下的红外发射管发射红外线信号,经白色反射后,被接收管接收,一旦接收管接收到信号,输出端将输出低电平;当小车行驶到黑线时,红外线信号被黑色吸收后,将输出高电平,从而实现了通过红线检测信号的功能。将检测到的信号送到单片机的I/O口,当I/O口检测到的信号为高电平时,说明红外光被地上的黑线吸收了,说明小车处在黑色的引线上;同理,当I/O口检测到的信号为低电平时,说明小车行驶在白色地面上。传感器采取脉冲扫描式读。例如某时刻P_SEN1高电平,其余P_SEN2至5低,这样1、4号传感器的红外发射管亮,其余传感器不发射红外线。等待数据稳定后,读取1、4号传感器的数据。然后关闭1、4号传感器,翻开2、5号传感器电源,依次类推,读取5个传感器的数据。这样可以保证任何时刻都不会有临近的传感器同时工作。从而保证了相邻传感器之间不会互相干扰。同时,红外发射管是除了电机之外耗电最大的器件,脉冲工作方式可以大大减少耗电量。红外一体化接收头电路传感器排布采用如下结构:每个传感器组由一只红外发射管、一只一体化红外接收头,和一只电容构成。可以测量该方向是否存在障碍物和判断障碍物的距离。电容用来稳定电路,防止电源和地发生短路。硬件原理:采用一片MSP430F245作为控制器。利用BasicTimer的定时中断,产生38KHz附近的假设干频率,从P输出方波。该方波经过三极管扩流来增加驱动能力,给3个红外LED供电。为防止互相干扰,3只LED轮流点亮,每次只亮一只LED,由IRE选择哪支红外LED被点亮。因为一体化接收头只对38kHz的方波敏感,而且它内部带有带通滤波器,所以需要在发送38kHz的时候发送一段时间关闭一段时间,否那么传感器会认为它是外界光而将返回的信号当作干扰信号而忽略掉。为了防止各个传感器之间的相互干扰,需要轮流翻开接收器。另外,因为发光管发出的光是沿四面八方发送的,而且只要翻开电源发射管就会工作,所以也为了防止因别的发光管带来的干扰,需要将发光管包的严严实实的这三个传感器所起的作用是不同的。这三个传感器用来检测前方、左边还有右边是否有障碍物。通过对三方向的障碍物完成走迷宫的路线寻找。3.4处理器电路小车采用一片MSP430F245作为控制器。MSP430F425的特点是:有五种节电模式;2个8位,1个6位并行端口,全部端口均具有中断能力;保密熔丝的程序代码保护;具有1个捕获/比拟存放器的16位定时器TIMER_A;多达16KBFLASHROM和系统采用32.768KHz晶振作为定时采样用。另外留有JTAG口可以现场编程。并且还有液晶引脚未用到,将来还可以扩展其功能。在做PCB板时已将这些引脚引出,可以直接使用。TIMERA共有4种计数模式:停止模式、增计数模式、连续计数模式和增/减计数模式。我们用TIMERA的增计数模式来产生38KHZ的方波。具体原理为:捕获/比拟存放器TACCR0用作TIMERA增计数模式的周期存放器,因为TACCR0为16位存放器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增加计数到TACCR0的值,当计数值与TACCR0的值相等〔或定时器值大于TACCR0的值〕时,定时器复位并从0开始重新计数。图2.8说明了增计数模式的计数过程。当定时器的值等于TACCR0的值时,设置标志位CCIFG0(捕获比拟中断标志)为1,而当定时器从TACCR0计数到0时,设置标志位TAIFG〔定时器溢出标志〕为1。计数过程中还可以通过改变TACCR0的值来重置技术周期。当新周期大于旧周期时,定时器会直接增计数到新周期;当新周期小于旧周期时,改变TATACCR0时的定值器时钟相位会影响定时器响应新周期的情况。时钟为高时改变TACCR0的值,那么定值器会在下一个时钟上升沿返回到0,如果时钟为低时改变TACCR0的值,那么定时器接受新周期并在返回到0之前,继续增加一个时钟周期。可以随时间变化任意改变PWM信号的占空比,具体的做法是:●保持TACCR0的值不变〔周期不变〕●改变TACCRx值〔改变占空比〕增计数模式时的输出实例TIMERA的输出模式由模式控制位OUTMODEx决定,共有8种输出模式。除模式0外,其他的输出都在定时器时钟上升沿时发生变化。这里我们将输出模式选为输出模式7。用该方式产生占空比为50%的38KHZ的方波;也可以通过改变TACCRx的值来改变电机的转速,使其实现转弯、后退等动作。第五章控制算法5.1黑线位置判别Posit=(i+j)*10/2-20Position=0地面的黑线是导引线,位置读取和计算的准确度、稳定性将直接影响小车的控制和运行。下列图是实际运行中出现的情况,黑块表示感应到黑线的传感器。传感器的排列比拟密,可能1~2个传感器都能踩到黑线;转弯处车身倾斜甚至2~3个传感器都能踩到黑线。应该求黑线的中心位置作为结果。Posit=(i+j)*10/2-20Position=0Position=-15Position=-15图5.1反射式红外传感器的运算图计算的方法是从左数,找到第一个黑色传感器编i,再从右数,找到第一个黑色传感器编j。(i+j)*10/2-20就是黑线中心位置。这样算出来的结果中有小数局部,用起来不太方便,因此我们将结果放大10倍,再减去之间位置时算出来的值。巡线算法小车是一个非常典型的惯性系统。对于这一类被控对象,PID算法能简单有效的进行控制。对PID算法做个简单的说明:假设小车中心线在黑线中心线上,偏差为0,小车正常行驶。如果某时刻检测到黑线偏左,就要向左转弯;如果检测到黑线偏右,就要向右转。偏得越多,就要向黑线方向打越大的舵角。这就是比例控制〔P〕遗憾的是,这种方法并不能将小车稳定在线上,因为小车有惯性。假设黑线偏左,说明小车偏右了,需要左传舵,等到小车回到中心的时候,停止转舵,可是小车的惯性会使车身继续左转,直到冲过黑线,黑线又偏右。然后控制过程反复,车身是在左右摇摆中向前行走的。这种摇摆叫做“超调”,超调越大,控制越不稳定,容易出轨。为了克服惯性,最简单的方法是任何控制动作都提前一点。适当调整提前量可以抵消惯性;另外,即使偏移量相同的情况下,在不同半径的弯道,也需要不同的舵角。这些都是比例控制不能实现的。我们除了位置信息之外,还需要知道轨迹的变化趋势。为了实现提前控制,在时间上,除非延长传感器,否那么没有方法提前获知转弯。那么我们只能在控制量上想方法。一个函数的导数,反映了该函数的变化趋势。同样我们可以用黑线位置的微分值来提前得到变化趋势。用本次位置减去前次位置求出差值,就大致知道偏移量的变化趋势。将该差值和比例相加后一起作为控制量,即可实现提前控制。这就叫做比例微分控制〔PD控制〕下列图是小车的控制系统框图:图5.2PID控制算法传感器位置求出后,减去中心值,得到和中心的偏差量。该偏差量乘以比例系数得到比例控制量。并且计算相邻假设干次偏差量之间的差值,乘以微分系数,得到微分控制量。将比例控制量和微分控制量相加,作为最终的舵角控制量。积分控制在此系统中没有使用,原因是舵角到位置之间本身就是积分关系的,另外积分控制有相当大的滞后,对控制稳定性不利。一般在调节P和D时需要先调节P的值,因为比例系数较微分系数对小车的影响更大。在调节P的值时可以先将D的值置为0。当发现小车在偏离黑线却可以很快的转回来时,P就调的差不多了;D的调节相对简单。5.6迷宫探路控制对于迷宫寻路程序,如果迷宫不太复杂,且主要为纵横方向的直线,我们采用让小车在路口始终左转或者始终右转的方法走迷宫,也就是让小车沿迷宫的边沿走。利用小车前面三个传感器来检测障碍,设置向前,向左,向右三个转向优先级的上下,来进行自主搜索。左转优先级最高,其次是向前,最后是右转。通过延时使得小车每隔一段时间寻找左边界。在找到左边界的地方直行。倘假设未找到边界,那么再向左偏移一定的角度,继续寻找,直至找到为止。对于不太复杂的迷宫,使用该方法,一直沿着左边就可以走出迷宫了。相关软件软件局部我分为两步来单独实现寻迹和避障功能。寻迹局部使用了前面的五个反射式红外传感器,对于单独进行寻迹功能来说这已经足够了。红外一体化接收头用到前面的三个,用来执行走简单迷宫的功能。关于硬件的调试:一〕用万用表进行一些简单的测试,可以检测出是否有短路,断路,以及一些元器件的好坏。二〕用示波器检测传感器的好坏,以及能否正常工作,对于传感器的正常工作与否,还要通过软件的调试与检测,以便知道CPU能控制传感器的工作和接受传感器的信号,对整个系统进行控制关于软件的调试:一〕对电机的控制运行调试;二〕对寻迹传感器的检测;附:#d#defineP_SEN14_LP1OUT&=~(BIT5)//开启或关闭1,4号传感器#defineP_SEN25_LP1OUT&=~(BIT6)//开启或关闭2,5号传感器#defineP_SEN3_HP1OUT#defineP_SEN3_LP1OUT&=~(BIT7)//开启,关闭三号传感器#defineSEN1_IN(P2IN&BIT1)//P2.1#defineSEN2_IN(P2IN#defineSEN3_IN(P2IN#defineSEN4_IN(P2IN#defineSEN5_IN(P2IN&BIT5)//P2.51至5号传感器的输入的值#defineP_coefficient100#defineI_coefficient0#defineD_coefficient25signedcharLast_Position[5]={0,0,0,0,0};//声明数组,用于依次存放前5次的黑线位置。/*******************************************************名称:Sensor_Init()*功能:对反射式红外传感器进行初始化设置*入口参数:无*出口参数:无*******************************************************/voidSensor_Init(){P1DIR|=(BIT5+BIT6+BIT7);P1OUT&=~(BIT5+BIT6+BIT7);_DINT();//将IO设为输出,其它默认为输入}/*******************************************************名称:DELAY()*功能:程序延时*入口参数:无*出口参数:无*******************************************************/voidDelay(unsignedintj){for(unsignedintk=0;k<j;k++);}/*******************************************************名称:Caculate_Position()*功能:计算黑线位置*入口参数:SensData,5个传感器的返回值*出口参数:SensorPosition*说明:通过计算黑线与中心位置的偏差来控制小车*******************************************************/signedcharCaculate_Position(unsignedchar*SensData){signedchari,j,SensorPosition;//存储5个的传感器的值for(i=0;i<5;i++)//从左往右数,第一个读到黑线的传感器编号i{if(SensData[i]!=0)break;}for(j=4;j>=0;j--)//从右往左数,找第一个读到黑线的传感器编号j{if(SensData[j]!=0)break;}if(i==5)return(0x80);SensorPosition=(i+j)*10/2-20;//黑线中心位置就是(i+j)/2//黑线位置值域就是0~40。为便于表示偏差,零值应该在中间//所以再减20,变成-20~0~+20表示黑线最左~中间~最右//如果全白(找不到黑线),就返回-128,作为出错标志。return(SensorPosition);//将计算结果返回}/*******************************************************名称:ReadSensor()*功能:读取黑线位置*入口参数:无*出口参数:Position,小车偏移量*******************************************************/signedcharReadSensor()//从传感器读取小车当前位置{signedcharposition;unsignedchari;unsignedcharSensorData[5];P_SEN14_H;//翻开1、6号传感器电源Delay(400);//略延迟,等待数据稳定SensorData[0]=SEN1_IN;//读1号传感器SensorData[3]=SEN4_IN;//读6号传感器(注意数组下标从0开始,编号少1)P_SEN14_L;//关闭1、6号传感器电源P_SEN25_H;//翻开2、7号传感器电源Delay(400);//略延迟,等待数据稳定SensorData[1]=SEN2_IN;//读2号传感器SensorData[4]=SEN5_IN;//读7号传感器P_SEN25_L;//关闭2、7号传感器电源P_SEN3_H;Delay(100);SensorData[2]=0;P_SEN3_H;//读取的5个传感器的状态,存入了SensorData[5]里面for(i=0;i<5;i++)//这样读回的数据,0表示白线,不为0的其他数据表示黑线{//为表示方便,将不为0的其他数据统统变成1if(SensorData[i]==0)SensorData[i]=0;elseSensorData[i]=1;//黑线对应的数组单元存1;白线存0。}position=Caculate_Position(SensorData);//调用Caculate_Position()函数,计算黑线位置return(position);//将黑线位置的计算结果返回}/*******************************************************名称:SetRotation()*功能:设置小车转弯量*入口参数:无*出口参数:Position,小车偏移量*******************************************************/voidSetRotation(intRotation){if(Rotation>0)//Rotation大于0是右转{//1是左轮,2是右轮if(Rotation>5)Rotation=5;TACCR1=601;//左轮全速前进TACCR2=611-Rotation;//右轮减速}else//Rotation小于0是左转{if(Rotation<-5)Rotation=-5;TACCR1=601-Rotation;//左轮减速TACCR2=611;//右轮全速前进}}/*******************************************************名称:PID_Control()*功能:对小车进行PID控制*入口参数:Position,小车偏移量*出口参数:*******************************************************/voidPID_Control(signedcharPosition){intTemp_P,Temp_D,Temp_PID;if(Position==-128)return;Last_Position[4]=Last_Position[3];Last_Position[3]=Last_Position[2];Last_Position[2]=Last_Position[1];Last_Position[1]=Last_Position[0];Last_Position[0]=Position;Temp_P=P_coefficient*Position;Temp_D=D_coefficient*(Position-Last_Position[4]);Temp_PID=Temp_P+Temp_D;if(Temp_PID>4000)Temp_PID=4000;if(Temp_PID<-4000)Temp_PID=-4000;Temp_PID=Temp_PID/500;//-4~4SetRotation(Temp_PID);}voidPWM_Init(void){P1SEL|=BIT2;//占空比为7.5%即1.5ms时,舵机停转P2SEL|=BIT0;P1DIR|=BIT2;P2DIR|=BIT0;TACTL|=TASSEL_1+TACLR;//TIMER_A时钟源设为ACLK,并清TARTACCTL1=OUTMOD_7;TACCTL2=OUTMOD_7;TACCR0=655;//TACCR0中断周期约为20msTACCR1=601;TACCR2=611;TACTL|=MC_1;//TIMER_A工作于增计数方式}//75时占空比是7.5%voidStart_Wait()//加电源后延迟几秒{unsignedinti;for(i=0;i<32000;i++);}voidmain(){WDTCTL=WDTPW+WDTHOLD;//系统初始化FLL_CTL0|=XCAP18PF;Start_Wait();Sensor_Init();PWM_Init();signedcharPosition;while(1){Position=ReadSensor();PID_Control(Position);Delay(1000);}}三〕对于避障传感器的检测。附:#include"msp430x42x.h"#defineIRE1(P1OUT&=~BIT5)//翻开红外发射#defineIRE2(P1OUT&=~BIT6)#defineIRE3(P1OUT&=~BIT7)#defineIREG1(P1OUT|=BIT5)//关红外发射#defineIREG2(P1OUT|=BIT6)#defineIREG3(P1OUT|=BIT7)#defineIRD1(P2IN&BIT1)//红外接收#defineIRD2(P2IN&BIT2)#defineIRD3(P2IN&BIT3)unsignedchardata[3];unsignedcharn,Flag=0;voidDelay1(unsignedintj){for(unsignedinti=0;i<j;i++);}voidPWM_Init(void){P1SEL|=BIT2;//占空比为7.5%即1.5ms时,舵机停转P2SEL|=BIT0;P1DIR|=BIT2;P2DIR|=BIT0;TACTL|=TASSEL_1+TACLR;//TIMER_B时钟源设为ACLK,并清TARTACCTL1=OUTMOD_7;TACCTL2=OUTMOD_7;TACCR0=655;//TACCR0中断周期约为20msTACCR1=604;//小于606正转TACCR2=608;//大于606正转TACTL|=MC_1;//TIMER_B工作于增计数方式}voidStart_Wait()//加电源后延迟几秒{unsignedinti;for(i=0;i<32000;i++);}unsignedcharRead_Infrared2(){IRE2;Delay1(700);IREG2;data[1]=IRD2;returndata[1];}unsignedcharRead_Infrared1(){IRE1;Delay1(700);data[0]=IRD1;IREG1;returndata[0];}unsignedcharRead_Infrared3(){IRE3;Delay1(700);data[2]=IRD3;IREG3;returndata[2];}voidInfrared_Init(){P1DIR|=(BIT5+BIT6+BIT7+BIT1);SCFQCTL=SCFQ_1M;BTCTL=BT_fCLK2_MCLK+BTHOLD;BTCNT2=243;BTCTL&=~BTHOLD;IE2|=BTIE;_EINT();}/*******************************************************功能:小车转向*入口参数:无*出口参数:无*******************************************************/voidStop(){TACCR1=606;TACCR2=606;Delay1(8000);}voidTurn_left(){TACCR2=608;TACCR1=608;Delay1(10000);}voidTurn_right(){TACCR1=604;TACCR2=604;Delay1(13000);}voidForward(){TACCR1=604;TACCR2=608;}voidBackward(){TACCR1=608;TACCR2=604;Delay1(6000);}voidT45L(){TACCR2=608;TACCR1=608;Delay1(5000);}voidT45R(){TACCR1=604;TACCR2=604;Delay1(6000);}voidmain(){WDTCTL=WDTPW+WDTHOLD;//系统初始化FLL_CTL0|=XCAP18PF;Start_Wait();PWM_Init();Infrared_Init();while(1){Read_Infrared1();Read_Infrared2();Read_Infrared3();switch(Flag){case0:{//直走情况if(!data[1]){Backward();Turn_right();Forward();Delay1(8000);}if(data[0]){T45L();Forward();Flag=1;}break;}case1:{//斜走情况if(!data[0]){T45R();Forward();

温馨提示

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

评论

0/150

提交评论