智能小车方案设计书实施方案书报告.docx
《智能小车方案设计书实施方案书报告.docx》由会员分享,可在线阅读,更多相关《智能小车方案设计书实施方案书报告.docx(35页珍藏版)》请在冰豆网上搜索。
![智能小车方案设计书实施方案书报告.docx](https://file1.bdocx.com/fileroot1/2023-2/26/105966e0-cd24-4e5f-b7c8-55cbcd987b3c/105966e0-cd24-4e5f-b7c8-55cbcd987b3c1.gif)
智能小车方案设计书实施方案书报告
摘要
自主反应式智能系统是一种应用广泛的控制系统。
对电路的分析和验证工作依靠智能化来完成,效率高。
因此它的研究与开发是一项非常有意义的工作。
本小车以MSP430超低功耗单片机为核心,在SHARK二型小车的基础上研究小车避障寻迹的设计和实现方法,完成障碍检测、避障、寻迹功能。
充分运用了430单片机的功能。
本论文介绍了智能小车的机械结构及相应的硬件电路和实现算法。
在机械结构上,对普通的小车作了改进,即用一个万用轮来代替两个前轮,使小车的转向更加灵敏。
利用反射式红外传感器来寻迹、红外一体化接收头来检测障碍物的位置,通过改变单片机产生的PWM方波的占空比,使其能在设计范围内可实现任意角度黑线和任意角度移动,还可以实现避障的功能。
在算法上,利用矢量分解法、PID算法等对小车的运行进行控制并能有效的改善其运行轨迹。
关键字:
MSP430 寻迹 避障 PWM
Abstract
Independence’srespondingtypeintelligencesystemisakindofappliedextensivecontrolsystem.Analyzingelectriccircuitandverifyingaworkdependsontheintelligencetocomplete,itsefficiencyishigh.Soitsresearchanddevelopmentisaverymeaningfulworks.
Withthecoreof430microcomputerandatthefoundationofSHARK,theNo.3smallcarcancompleteanobstacleexamination,avoidingstumblingblockandlookingforvestigefunction,makingfulluseof430microcomputer.Thisthesisintroducedmachinestructure,homologoushardwareelectriccircuitandthecalculatewayoftheintelligencesmallcar.Makingimprovementtothecommoncaronthemachinestructure,weuseaperfectwheeltomakethecarturningmoreeasily.Andweusesomesensorstolookforvestigeandavoidstumblingblock.BychangetheemptyratioofPWM,thecarcanarbitrarilymovewithanyangleoftheblacklinewithinthescopeofthedesign.Onthecalculateway,weusevectordecompositionmethod、PIDtocontrolthecarandimproveitstrack.
Keyword:
MSP430lookingforvestigeavoidingstumblingblockPWMPID
第一章 绪论
当今社会,科学技术日新月异,时代前进的步伐越迈越宽,应用自动化设备,计算机处理,现代化通讯,数字化信息,现代化显示设备等高新技术而建立的现代化智能,监控等系统已经得到充分的发展与应用,智能机器人也就应运而生。
同时,在建设以人为本的和谐社会的过程中,智能服务机器人能够完成考古发掘,海底揭密,宇宙探索等危险作业,以保证人身安全。
《国家中长期科学和技术发展规划纲要》一文指出:
智能服务机器人是在非结构环境下为人类提供必要服务的多种高技术集成的智能化装备。
以服务机器人和危险作业机器人应用需求为重点,研究设计方法、制造工艺、智能控制和应用系统集成等共性基础技术。
重点研究低成本的自组织网络,个性化的智能机器人。
2006━2020年,既是国家中长期技术发展计划实现阶段,也是我们最具有活力和最激情洋溢的时段。
该智能小车模型是一辆由PCB和车体拼装的小车。
所有的机械结构和零部件都安装固定在电路板上。
因此完全不需要机械加工,非常适合实验阶段机器人的研制。
本文简述了智能巡线避障小车自主走迷宫的设计思路和实现过程。
包括小车的机械结构、电路、软件、控制算法、调试方法等。
可作为一般的设计参考。
小车的左右轮分别由2只舵机提供动力,作为驱动轮和导向轮使。
430单片机的PWM发生器产生2路(分为两组)占空比可变的方波,经三极管进行扩流后分别驱动左右舵机。
控制2路PWM的比例,不仅可以调节小车向前运动的速度,还可通过2路PWM占空比的差异,改变小车运动方向。
5只反射式红外传感器位于小车前下方,用于查找黑线位置并且实现寻迹。
小车前端还分布有3个红外一体化接收头,实现避障并完成走迷宫。
第二章各部件的工作原理
2.1驱动轮(导向轮)
前轮亦为驱动轮,其决定小车能否灵活拐弯的关键部分。
这辆小车和汽车不同,不是靠摆舵来控制转弯,而是靠左右后轮速度差来实现转弯控制。
图为小车的仰视图(未画出传感器)。
小车的两前轮是靠舵机进行驱动的。
通过两路PWM波实现对其的控制。
只要调整PWM波的占空比即可控制舵机的转速。
当小车左轮的速度高于右轮时,小车右转弯;反之,当小车右轮的速度高于左轮时,小车左转弯。
小车后轮属从动轮,质地较硬,其与地面磨擦力较小,与其动力相比可以忽略不记。
所以它可以自由偏移,而不影响小车的转向.
2.2舵机
舵机是一种位置伺服的驱动器。
它接收一定的控制信号,输出一定的角度,适用于那些需要角度不断变化并可以保持的控制系统。
在微机电系统和航模中,它是一个基本的输出执行机构。
准的舵机有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个传感器的数据。
这样可以保证任何时刻都不会有临近的传感器同时工作。
从而保证了相邻传感器之间不会互相干扰。
同时,红外发射管是除了电机之外耗电最大的器件,脉冲工作方式可以大大减少耗电量。
3.3红外一体化接收头电路
传感器排布采用如下结构:
每个传感器组由一只红外发射管、一只一体化红外接收头,和一只电容构成。
可以测量该方向是否存在障碍物和判断障碍物的距离。
电容用来稳定电路,防止电源和地发生短路。
硬件原理:
采用一片MSP430F245作为控制器。
利用BasicTimer的定时中断,产生38KHz附近的若干频率,从P1.1输出方波。
该方波经过三极管扩流来增加驱动能力,给3个红外LED供电。
为防止互相干扰,3只LED轮流点亮,每次只亮一只LED,由IRE选择哪支红外LED被点亮。
如果接收到反射回来的红外线,接收端将输出TTL电平,被单片机接收,然后执行相应的避障措施。
如果未接收到任何信号,将一直输出高电平。
因为一体化接收头只对38kHz的方波敏感,而且它内部带有带通滤波器,所以需要在发送38kHz的时候发送一段时间关闭一段时间,否则传感器会认为它是外界光而将返回的信号当作干扰信号而忽略掉。
为了避免各个传感器之间的相互干扰,需要轮流打开接收器。
另外,因为发光管发出的光是沿四面八方发送的,而且只要打开电源发射管就会工作,所以也为了避免因别的发光管带来的干扰,需要将发光管包的严严实实的
这三个传感器所起的作用是不同的。
这三个传感器用来检测前方、左边还有右边是否有障碍物。
通过对三方向的障碍物完成走迷宫的路线寻找。
3.4处理器电路
小车采用一片MSP430F245作为控制器。
MSP430F425的特点是:
有五种节电模式;2个8位,1个6位并行端口,全部端口均具有中断能力;保密熔丝的程序代码保护;具有1个捕获/比较寄存器的16位定时器TIMER_A;多达16KBFLASHROM和512 RAM等等。
系统采用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-20
Position=0
地面的黑线是导引线,位置读取和计算的准确度、稳定性将直接影响小车的控制和运行。
下图是实际运行中出现的情况,黑块表示感应到黑线的传感器。
传感器的排列比较密,可能1~2个传感器都能踩到黑线;转弯处车身倾斜甚至2~3个传感器都能踩到黑线。
应该求黑线的中心位置作为结果。
Position=-15
Position=0.5
图5.1 反射式红外传感器的运算图
计算的方法是从左数,找到第一个黑色传感器编i,再从右数,找到第一个黑色传感器编j。
(i+j)*10/2-20就是黑线中心位置。
这样算出来的结果中有小数部分,用起来不太方便,因此我们将结果放大10倍,再减去之间位置时算出来的值。
5.2 巡线算法
小车是一个非常典型的惯性系统。
对于这一类被控对象,PID算法能简单有效的进行控制。
对PID算法做个简单的说明:
假设小车中心线在黑线中心线上,偏差为0,小车正常行驶。
如果某时刻检测到黑线偏左,就要向左转弯;如果检测到黑线偏右,就要向右转。
偏得越多,就要向黑线方向打越大的舵角。
这就是比例控制(P)
遗憾的是,这种方法并不能将小车稳定在线上,因为小车有惯性。
假设黑线偏左,说明小车偏右了,需要左传舵,等到小车回到中心的时候,停止转舵,可是小车的惯性会使车身继续左转,直到冲过黑线,黑线又偏右。
然后控制过程反复,车身是在左右摇摆中向前行走的。
这种摇摆叫做“超调”,超调越大,控制越不稳定,容易出轨。
为了克服惯性,最简单的办法是任何控制动作都提前一点。
适当调整提前量可以抵消惯性;另外,即使偏移量相同的情况下,在不同半径的弯道,也需要不同的舵角。
这些都是比例控制不能实现的。
我们除了位置信息之外,还需要知道轨迹的变化趋势。
为了实现提前控制,在时间上,除非延长传感器,否则没有办法提前获知转弯。
那么我们只能在控制量上想办法。
一个函数的导数,反映了该函数的变化趋势。
同样我们可以用黑线位置的微分值来提前得到变化趋势。
用本次位置减去前次位置求出差值,就大致知道偏移量的变化趋势。
将该差值和比例相加后一起作为控制量,即可实现提前控制。
这就叫做比例微分控制(PD控制)
下图是小车的控制系统框图:
图5.2 PID控制算法
传感器位置求出后,减去中心值,得到和中心的偏差量。
该偏差量乘以比例系数得到比例控制量。
并且计算相邻若干次偏差量之间的差值,乘以微分系数,得到微分控制量。
将比例控制量和微分控制量相加,作为最终的舵角控制量。
积分控制在此系统中没有使用,原因是舵角到位置之间本身就是积分关系的,另外积分控制有相当大的滞后,对控制稳定性不利。
一般在调节P和D时需要先调节P的值,因为比例系数较微分系数对小车的影响更大。
在调节P的值时可以先将D的值置为0。
当发现小车在偏离黑线却可以很快的转回来时,P就调的差不多了;D的调节相对简单。
5.6迷宫探路控制
对于迷宫寻路程序,如果迷宫不太复杂,且主要为纵横方向的直线,我们采用让小车在路口始终左转或者始终右转的方法走迷宫,也就是让小车沿迷宫的边沿走。
利用小车前面三个传感器来检测障碍,设置向前,向左,向右三个转向优先级的高低,来进行自主搜索。
左转优先级最高,其次是向前,最后是右转。
通过延时使得小车每隔一段时间寻找左边界。
在找到左边界的地方直行。
倘若未找到边界,则再向左偏移一定的角度,继续寻找,直至找到为止。
对于不太复杂的迷宫,使用该方法,一直沿着左边就可以走出迷宫了。
第六章相关软件
软件部分我分为两步来单独实现寻迹和避障功能。
寻迹部分使用了前面的五个反射式红外传感器,对于单独进行寻迹功能来说这已经足够了。
红外一体化接收头用到前面的三个,用来执行走简单迷宫的功能。
关于硬件的调试:
一)用万用表进行一些简单的测试,可以检测出是否有短路,断路,以及一些元器件的好坏。
二)用示波器检测传感器的好坏,以及能否正常工作,对于传感器的正常工作与否,还要通过软件的调试与检测,以便知道CPU能控制传感器的工作和接受传感器的信号,对整个系统进行控制
关于软件的调试:
一)对电机的控制运行调试;
二)对寻迹传感器的检测;
附:
#defineP_SEN14_HP1OUT|=(BIT5)//P1.5
#defineP_SEN14_LP1OUT&=~(BIT5)//开启或关闭1,4号传感器
#defineP_SEN25_HP1OUT|=(BIT6)//P1.6
#defineP_SEN25_LP1OUT&=~(BIT6)//开启或关闭2,5号传感器
#defineP_SEN3_HP1OUT|=(BIT7)//P1.7
#defineP_SEN3_LP1OUT&=~(BIT7)//开启,关闭三号传感器
#defineSEN1_IN(P2IN&BIT1)//P2.1
#defineSEN2_IN(P2IN&BIT2)//P2.2
#defineSEN3_IN(P2IN&BIT3)//P2.3
#defineSEN4_IN(P2IN&BIT4)//P2.4
#defineSEN5_IN(P2IN&BIT5)//P2.51至5号传感器的输入的值
#defineP_coefficient100
#defineI_coefficient0
#defineD_coefficient25
signedcharLast_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}
/******************************************************
*名称:
Caculate_Position()
*功能:
计算黑线位置
*入口参数:
SensData,5个传感器的返回值
*出口参数:
SensorPosition
*说明:
通过计算黑线与中心位置的偏差来控制小车
*******************************************************/
signedcharCaculate_Position(unsignedchar*SensData)
{
signedchari,j,SensorPosition;//存储5个的传感器的值
for(i=0;i<5;