• 2.71 MB
  • 2022-04-22 11:24:39 发布

基于红外传感器的智能汽车设计

  • 77页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'基于红外传感器的智能汽车设计第一章智能汽车设计概述第一节智能汽车简要介绍智能汽车设计的模型车是采用智能汽车竞赛所使用的车模,该车模是以韩国爱德美公司生产的Matiz系列1:10模型车如图1所示,其基本尺寸参数如表一所列。图1模型车示意图该模型车底盘采用的是等长双横臂式表1模型车的基本尺寸参数基本参数尺寸轴距198mm前轮距137mm后轮距138mm/146mm车轮直径52mm传动比18/76独立悬架。但车轮上下跳动时,车轮平面没有倾斜,但轮距会发生较大变化,故车轮发生侧向滑移的可能性较大。根据汽车理论的基础知识,可以在实际组建当中进行调整,以使汽车获得最佳的性能。关于智能汽车竞赛的基本情况:参赛队伍通过设计基于单片机的自动控制器控制模型车在封闭的跑道上自主寻线运行。在保证模型车运行稳定即不冲出跑道的前提下,跑完一圈的时间越小,成绩越好。自动控制器是以单片机MC9S12DG128为核心,配有传感器、电机、舵机、电池以及相应的驱动电路,它能够自主识别路径,控制模型车高速稳定运行在跑道上。图1所示为安装有自动控制器的模型车。比赛跑到表面为白色,中心有连续黑线作为引导线,黑线宽25cm。比赛规则限定了赛77 道宽度和拐弯最小半径等参数,赛道具体形状在比赛当天现场公布。控制器自主识别引导线并控制模型车沿着赛道运行。图2所示为赛道示意图。图1安装有自动控制器的智能车设计自动控制是制作智能车的核心环节。在严格遵守规则中对于电路限制条件,保留智能车可靠运行的前提下,电路设计应尽量简洁紧凑,以减轻系统负荷,提高智能车的灵活性,同时应坚持发挥创新原则,以简洁但功能完美为出发点,并以稳定为首要前提,实现智能车快速运行。图2赛道示意图(700mm×500mm)77 作为能自动识别道路运行的智能汽车,车模与控制器可以看成一个自动控制系统。它可分为传感器,信息处理,控制算法,执行机构四个部门组成。其中以单片机为核心,配有传感器、执行机构以及它们的驱动电路构成了控制系统的硬件;信息处理与控制算法由运行在单片机中的控制软件完成。因此,自动控制器设计设计和控制软件两部分。硬件电路是整个设计的基础。系统结构如图3所示。图3硬件电路大赛详细规则如下:A.电路器件及控制驱动电路限制1)核心控制模块可以采用组委会提供的HCS12模块,也可以采用MC9SDG128自制控制电路板,除了DG128MCU之外,不得使用辅助处理器以及其它可编程器件;2)伺服电机数量不超过3个;3)传感器数量不超过16个(红外传感器的每对发射与接受单元计为1个传感器,CCD传感器记为1个传感器);4)直流电源使用大赛提供的电池;5)禁止使用DC-DC升压电路为驱动电机以及舵机提供动力;6)全部电容容量和不得超过2000微法;电容最高充电电压不得超过25伏。B.赛道基本参数1)赛道路面用纸制作,跑道所占面积不大于5000mm*7000mm,跑道宽度不小于600mm;2)跑道表面为白色,中心有连续黑线作为引导线,黑线宽25mm;77 3)跑道最小曲率半径不小于500mm;4)跑道可以交叉,交叉角为90°;5)赛道为二维水平平面;6)赛道有一个长为1000mm的出发区,计时起始点两边分别有一个长度100mm黑色计时起始线,赛车前端通过起始线作为比赛计时开始或者与结束时刻。注:不包括拐弯点数目、位置以及整体布局第二节智能汽车方案设计智能汽车的设计方案主要有两种:一是,基于红外传感器的道路识别模块设计的智能小车;二是基于CCD摄像头的道路识别模块设计的智能小车。基于这两种设计的智能汽车设计主要从以下几个方面着手:硬件设计和软件设计,而软件设计又是基于硬件设计和总结规律的基础上得出的。首先冲硬件设计开始。2.1电源模块电源模块为系统其他模块提供所需要的电源。设计中除了考虑电压范围和电流容量等基本参数之外,还要在电源转换效率、降低噪声、防止干扰和电路设计等方面进行优化。可靠的电源方案是整个硬件电路可靠运行的基础。全部硬件电路的电源由7.2V、2A/h的可充镍镉蓄电池提供。由于电路中的不同电路模块所需要的工作电压和电流容量各不相同,因此电源模块应该包含多个稳压电路,将充电电池电压转换成各模块所需要的电压,主要包括如下不同的电压:1.5V电压。主要为单片机、信号调理电路以及部分接口电路提供电源,电压要求稳定、噪声小,电流容量大于500mA。2.6V电压。主要为舵机提供提供工作电压。实际工作时,舵机所需要的工作电流一般在几十毫安左右,电压无需十分稳定。3.7.2V这部分直接取自电池两端电压,主要为后轮驱动电机模块提供电源。4.12V电压。如果采用CCD/CMOS图像传感器来进行道路检测,则需要12V工作电源。5.2V电压。为红外发光管提供工作电压。可以采用开关电源从电池降压而得,这样可77 以红外检测电路的电源利用效率。需要根据红外发射管的参数确定该电压值。除此之外,如果使用了其他芯片和传感器,它们的工作电压可能不在上述之内,还需要通过专门的稳压电路,提供相应的工作电压。例如采用飞思卡尔公司的MC7260加速度传感器进行车轮打滑检测,该传感器需要3.3V的工作电压。电源模块由若干相互独立的稳压电路组成。一般采用如图6所示的星形结构,可以减少各模块之间的相互干扰,进一步减少单片机的5V电源噪声,可以单独使用一个5V的稳压芯片,与其他接口电路分开。充电电池(7.2V2000mAh)串联稳压器开环稳压器串联稳压器5V红外发光管单片机转速传感器红外发光管舵机后轮电机7..2V6V2V图6电源模块的电路结构降压稳压电路可以采用串联稳压和开关稳压两种芯片。开关稳压芯片的工作效率高,但有较高的电源噪声,耗电量较大的电路适用于开关稳压电路。例如采用大电流红外检测电路,由于红外发射管数量较多,总的消耗电流很大,采用开关电源将电池电压降至2V左右作为红外发射管的工作电压,此时每个红外发射管工作时只需要串联很小的先留电阻甚至不用串联电阻。采用这种方法,可以大大提高电源利用效率。稳压电路的设计需要简单可靠,在满足电压波动范围要求下应尽量简化电源设计。例如舵机电源在4.5~6V的范围内,电流100mA左右,可以从7.2V的电池电压通过串联硅二极管而获得。此外,通过实验可发现,组委会所提供的舵机可以直接工作在7.2V电压下,此时舵机响应速度也会提高,所以直接使用电池电压作为舵机的电源。如果采用CCD或CMOS摄像头作为道路传感器,它们工作电压在9~12V范围内。此工作电压高于电池的电压,需要借助斩波升压电路获取。可以采用专门升压芯片进行设计,也可以利用单片机PWM输出端口控制大功率晶体管进行斩波升压。有些CMOS摄像77 头工作电压在6~9V之间,所以也可以直接使用电源电压作为电源,所以选择CMOS摄像头也可以简化电路设计。消除电源中的噪声,并减少电压波动,需要在各级模块中安装滤波电容,包括容量小的高频滤波电容以及大容量的电解电容。由于存在电机驱动,为了避免电机在启动和制动过程产生的冲击电流对于电源的影响,应尽量加大电池的电容容量,但不要超过大赛允许放入电容容量限制。2.2道路检测模块方案比较与选择检测赛道相对车模的偏移量、方向、曲率等信息是实现车模自主沿着赛道运行的基本信息基础,获取更多、更远、更精确的赛道信是提高车模运行速度的关键。本次智能车模竞赛的赛道是白底黑线,路径识别即识别白底地面上的黑线轨道的检测,常用的方案有:方案一:采用CCD摄像头图7CCD摄像头探测路径使用CCD摄像头采集路面图像采用图像处理与分析的方法判断路径,是路径识别中常用的方法之一。这种方法的优缺点如下:优点:能够感知前方较远距离处的赛道状况;受外界干扰小。采用CCD最大的优势是通过对车辆前方图像的处理我们能够准确的判断出车辆前方较长一段距离跑道的走向,从而为当前车辆状态的控制提供了大量的信息,我们可以根据摄像头拍摄到的画面,通过边缘检测等算法判断出许多关键信息,如中心位置,方向,曲率等等,这些参数都是控制电动车稳定并快速运行的关键参数77 缺点:图像处理计算量大,处理速度慢,实时性不高。采用面阵CCD路径参数检测算法也存在许多缺点,如开发有效路径参数算法是非常复杂的工作,并且CCD设备价格昂贵此外加上比赛规则的限制,我们只能使用规定的处理器,对于使用只有25MHz的单片机处理图像信息,显得力不从心,CCD摄像头寻迹方案的优点是可以更远更早地感知赛道的变化,但是信号处理比较复杂,如何对摄像头记录的图像进行分割和识别,加快处理速度是摄像头方案的难点之一。方案二:采用反射式红外光电管图8采用光电管检测路径采用反射式红外光电管,也是路径检测常用的方法。这种方法利用了路面不同的材料和颜色对光线的吸收和反射量不同,这样我们检测反射回来的光线就可以得到当前位置的材料或者颜色。这种方法的优缺点如下:优点:电路简单,信号处理速度快。光电传感器寻迹方案的优点是电路简单、信号处理速度快。光电传感器的排列方法、个数、彼此之间的间隔都与控制方法密切相关。缺点:感知前方赛道距离有限,受外界红外频段光线干扰,精度比较低。光电管相对的感知距离较近并且只能提供非常少的前方车道的走势信息。反射式红外检测方式又可以分为交流式和直流式。交流式可以消除外界红外光线的影响,但电路和信号处理过于复杂,采用直流式虽然其受到外界红外光线的影响较大,但采取一定措施后可以减小干扰,这些措施包括:采用定向的红外光电发射管和接收管;发射管发射方向朝向地面,实验表明这样可以大大的降低外界的干扰,达到正确识别路径的要求。方案选择论证:考虑到小车微处理器采用的是规定的S12单片机,其运算速度决定了对图像的处理与分析的时间很难达到实时性的要求,控制精度很难达到要求的范围,小车速度也必定不能提高。77 交流式光电管电路设计比较复杂,在每个接收端都应该有相应的滤波器,这样复杂的电路设计和调试都是相当复杂的。根据上面介绍的两种方案的优缺点,权衡稳定性、精度和速度后,我们选用了直流反射式红外光电管方案。本方案需要注意的问题如下:我们需要把光电管尽量贴近地面,以减小干扰;尽量密集排布光电管收发对,提高测量精度;程序上,需要确定合理的算法,得到当前的路况。这些我们将在以下几章详细介绍。2.3速度检测方案小车的实际行驶速度是小车速度控制的控制输入量,准确实时的测量小车的速度才能实现小车的速度控制,即纵向控制。常用的测速方案有以下几种:方案一:光电测速传感器原理是传感器开孔圆盘的转轴与转轴相连接,光源的光通过开孔盘的孔和缝隙反射到光敏元件上,开孔盘随旋转体转一周,光敏元件上照到光的次数等于盘上的开孔数,从而测出旋转体旋转速度。灵敏度较高,但容易受外界光源影响。方案二:测速发电机原理是将旋转机械能转化成电信号,适合于测量速度较高的旋转物体的速度。采用电磁感应的原理。但市场上测速发电机应用于低压市场的比较少,而且都比较重,不适用于模型车,并且要将侧速发电机安装到电动车上需要对电动车模型进行较大改动,由于其质量较重,可能会严重影响电动车的机动性能,除非自制。优点是测速准确、稳定、快速,可以直接由AD转换器读入单片机测得当前速度值。77 图9测速发电机方案三:霍尔传感器其工作原理是:利用霍尔开关元件测转速,内部具有稳压电路、霍尔电势发生器、放大器、施密特触发器和输出电路,其输出电平和TTL电平兼容。在待测旋转体的转轴上装上一个圆盘,在圆盘上装上若干对小磁钢,小磁钢愈多分辨率越高。霍尔开关固定在小磁钢附近,当旋转体以角速度M旋转时,每当一个小磁钢转过霍尔开关,霍尔开关便输出一个脉冲,计算出单位时间的脉冲数,即可确定旋转体的速度。方案选择论证:光电测速传感器受外界光源影响很大,不适合运动性物体的测速;测速发电机体积重量较大,不便于小车上安装;集成化霍尔开关传感器具有灵敏可靠、体积小巧、无触点、无磨损、使用寿命长、功耗低以及不怕尘土、油污、湿热等优点,综合小车运动环境和重量轻的要求,我们使用了霍尔传感器来进行速度检测。2.4电源管理方案电源模块是整个智能车能否良好运行的最重要的基础,良好的电源模块可以大大减小系统出现疑难故障的几率,并且稳定的电源模块也是系统各个部分协调工作的必要条件之一。电源系统主要要为单片机及光电检测电路(+5V)、转向舵机(+6V)、后轮驱动电路(+5V和+7.2V)三大部分分别提供稳定的直流电源。解决方案介绍由于电池组的输出电压只有7.2V,而输出要求5V和6V,不能使用最普通的并且常见的直流稳压电源芯片7805和7806,因为他们要求输入输出电压压差至少在3V以上,所以我们选用了低压降的LM2940作为5V电压的稳压模块,它的最低压降只有0.8V,并且由于舵机和驱动电机对电源的影响很大,可能导致电源有较大纹波,为了尽可能的降低驱动电机和转向舵机之间的干扰,我们采用另外一个稳压电源芯片专门为转向舵机供电,我们选中LM1117为转向舵机单独提供电源,通过改变LM1117接地端(2引脚)的电势,我们可以调节LM1117的输出电压,以满足转向舵机的电压要求。并且在电池组输出端加上1000u的电容,尽量减少电池组输出电压的波动。电源系统的结构框图如下图10所示。77 图10电源系统结构图2.5控制算法方案控制系统算法是整个系统设计的核心,是自动控制系统实现“自动控制”的灵魂,控制算法的选择和实现直接关系到系统工作的方式和性能。本设计中,小车的控制包括横向控制(即转角控制)和纵向控制(即速度控制),必须根据不同传感器控制输入量的特性以及不同执行部件控制输出量的特性不同,选择合适的控制算法,才能达到良好的控制效果.。常用方案介绍:在目前,人们常用的自动控制方法主要有三种,这就是经典控制方法、现代控制方法和智能控制方法。经典控制理论是过去人们常用的控制理论,这种控制理论只能解决线性定常系统的控制问题。线性是指系统的输入量和输出量的关系是线性的,定常是指系统的输入和输出量的关系是恒定的,并不随时间的变化而变化。经典控制方法是以传递函数为基础实现的。一般的工业生产过程较多属于线性定常系统,可以用经典控制方法来控制,经典控制方法最典型的就是PID控制方法。PID控制应用最广、技术最成熟,其控制结构简单,参数容易调整,不必求出被控对象的数学模型就可以调节,其调节品质取决于PID控制器各个参数的整定。现代控制理论可以解决时变系统的控制问题,在时变系统中,输入量和输出量的关系随时间的变化而变化。故而现代控制理论在航空航天和军事上有很大的作用。现代控制方法77 是以状态方程为基础实现。在控制工程中,有一些复杂的被控对象(或过程)的特性难以用一般物理及数学的已有规律来描述,而且没有适当的测试手段,或测试仪器无法进入被测区,以致不可能为其建立数学模型。对这类不具有任何数学模型的被控对象(或过程),运用传统控制理论,包括现代控制理论很难取得满意的效果。自从1974年英国的Mamdani首次用模糊逻辑实现对蒸汽机的控制之后,模糊控制就成为一种有别于经典控制和现代控制的新的控制方式。模糊控制是基于人们的经验的,而经验是人们智能活动的结晶,故而模糊控制反映着人们的智能对生产过程的自动控制作用。故而模糊控制是比经典和现代控制更高一级的控制方法,即智能控制方法。智能控制方法是现在发展起来的最新控制方法,目前还在不断完善和发展之中,模糊控制则是智能控制方法中的一种方法。由于模糊控制采用人的经验规则,有时也称经验控制或规则控制,模糊控制有如下几个优点:1.无需预先知道被控对象的精确数学模型,所以,可以对那些数学模型难以求取或无法求取的对象进行有效控制;2.由于控制规则是以人的经验总结出来的条件语句表示的,所以,对于对模糊控制理论不熟悉的人来说,也很容易学懂和掌握模糊控制的方法;3.对被控对象的参数变化有较强的鲁棒性;4.由于表示控制知识是以人的语言形式,故有利于人机对话和系统的知识处理,从而有利于系统处理的灵活性和机动性。方案选择论证:分析本设计中小车系统各个被控对象的特点可以看出,小车中的横向控制(即转角控制)具有线性定常系统的特点,输入的角度偏差和控制输出的角度是一种线性关系,并且不随时间的变化而变化;而小车的纵向控制(即速度控制)的控制输出量不仅和小车行驶过程中的角度有关,而且和小车的实际速度有关,并且对不同路面摩擦系数不同,输入控制量和输出控制量难以用一种线性的关系来描述。根据对以上三种控制方法的分析比较,结合小车系统各个被控对象的特点和实验比较,本设计中小车的横向控制采用经典的PID算法,纵向控77 制则采用了模糊控制的方法。综上,我们选择直流反射式红外光电管识别路径;选择霍尔开关检测速度;选择PID控制算法控制转角;选择模糊控制方法控制速度和制动;2.5电机驱动模块模型车后轮驱动电机型号为RS-380电机,工作在7.2V电压下,空载电流为0.5A,转速为16000r/min。在工作电流为3.3A,转速达到14060r/min时,工作效率最大。通过电机驱动模块,控制驱动电机两端电压可以使模型车加速运行,也对模型车进行制动。由于比赛中不需要模型车倒车,所以电机之工作在正转方向上做功与发电两个状态。可以使用大功率晶体管、全桥或者半桥电路,输出PWM波形实现对于电机的控制。图11给出了基于MC33886全桥电机驱动芯片的电路原理图。进一步提高对于电机驱动的能力,还可以从如下方面进行改进:▶采用大功率MOS管组成电机驱动电路,例如MOS管IRF540,由于大功率MOS管导通内阻小,允许大电流通过,可提供更大的瞬间加速电流。但是相应的电路设计较为复杂。图12给出了使用MOS管组成的的点进驱动电路。▶驱动集成电路并联使用提供更大的驱动电流。例如可以将两片33886电机驱动芯片pintopin并联使用,借助驱动芯片内部输出特性实现两片输出电流均衡。▶可以为功率管或者集成驱动电路添加散热片,改善它们工作条件,提高它们过载能力。电机驱动电路的电源可以直接使用电池两端的电压。模型车在启动过程中往往会产生很77 大的冲击电流,一方面会对其他电路造成电池两端的电压下降,甚至会低于稳压电路所需要的最低电压值,产生单片机复位现象。为了克服启动冲击电流的影响,可以在电源中增加容值较大的电解滤波电容,也可以采用缓启动的方式控制电机。在启动时,驱动电路输出电压有一个渐变过程,使得电机启动速度略微降低从而减小启动冲击电流的幅度。图12MOS管组成的电机驱动电路为了增加模型车制动效果,防止模型车冲出跑道的可能性,有些参赛队伍还增加了机械刹车系统,在后轮旁边增加了由伺服电机控制的刹车片完成对于模型车的刹车。2.6调试电路模块调试电路用于模型车模型车开发调试阶段工作中,特别是现场调试过程中。它一方面可以显示模型车控制电路的各种信息以及工作参数,另一方面还可以对工作参数进行现场修改。调试电路通常与制作电路制作在一起,也可以单独制作成可拆分的模块,在比赛时将其拆下来。调试模块显示模型车控制电路的工作参数的方式有:1)利用BDM开发工具的调试能力,显示单片机运行时其内部存储器中的数据;2)利用DG128核心板上提供的串口通信接口,实现单片机与计算机通信,将单片机中的运行状况反映在计算机的调试软件中;3)制作无线通信模块,可以将模型车在快速运行中的状态,通过无线通信方式发送到77 计算机中进行在线实时监控;1)制作独立的调试板,其中带有LCD或者LED数码管等可以显示单片机内部信息,有的队伍选用了HD7279A43S扩展了LED数码管以及键盘输出;2)利用单片机内部的EEPROM或RAM对于模型车运行中的参数进行存储,然后再通过串口或者BDM调试工具送到计算机进行后期分析。对控制电路的工作参数进行现场修改,可以避免对单片机中程序反复下载的麻烦,也可以比赛现场调试时对模型车运行参数进行最后的设置于优化。一般可以通过如下几种方式调整小车的参数:1)在电路板上设置多个开关,通过它们的状态实时对于控制程序的参数、工作模式甚至不同工作程序的选择;2)在电路中设置一些电位器,可以对于控制参数进行调整,比如PID控制中的参数;3)可以通过串口、BDM头、无线通信模块将修正的参数发送到单片机中,将其存储在内部的EEPROM中。虽然调试电路的功能不对模型车直接进行控制,但“磨刀不误砍柴工”,好的调试电路(或者调试工具)再加上正确的调试方法可以大大提高模型车调试的工作效率,方便排除硬件和软件的缺陷,能够检测模型车运行性能,这些为寻找最优的控制策略以及控制参数打下基础。2.7辅助电路方案设计2.7.1舵机驱动舵机最早出现在航模运动中,控制航模上的发动机、翼舵转向。在模型车上,多级的输出转角通过连杆传动控制前轮转向。此外,也可以利用舵机进行机械刹闸制动、位置传感器主动扫描等操作。比赛规则要求模型车中的舵机数不超过3个。舵机本身是一个位置随动系统。它由舵盘、减速齿轮组、位置反馈电位计、直流电机和控制电路组成。通过内部的位置反馈,使它的的舵盘输出转角正比于给定的控制信号,因为对于它的控制可以使用开环控制方式。在负载力矩小于最大输出力矩的情况下,它的输出转角正比于给定的脉冲宽度。舵机接口一般采用三线连接方法,黑线为电源地线,红线为电源线,一般采用两种标准,4.8V和6V,分别对应于3节和4节电池的电压。另外一根连线(蓝色或者黄色)为控制信号线。控制信号是周期在20ms左右的脉冲信号,脉冲信号的宽度决定舵机输出舵盘的角度。舵机输出转角与控制信号脉宽之间的关系如图13所示。77 脉宽─转角(+为顺时针方向)控制舵机的脉冲可以使用MCS9S12DG128+45-----------------------------------的1路PWM产生。单片机中有8路独立的PWM输出端口,可以将其中相邻的2路PWM输出级联成一个16位PWM输出。在单片机总线频率为24MHz的时110015001900脉宽/µs侯,设置级联PWM周期常数为60000,对应PWM周期为20ms,PWM占空比常数为4500对应-45输出为1..5ms。改变占空比常数可以改变输出脉冲图13舵机输出转角与控制信号的宽度。脉宽之间的关系车模采用大赛组统一提供的SRM-102型舵机,工作电源为6V。影响舵机控制特性的一个主要参数是舵机的响应速度即舵机输出轴转动角速度,这个参数一般以舵机输出转盘旋转60°所需要的时间表示。SRM-102型舵机响应速度为0.2s/60°。舵机转动一定角度有时间延迟,时间延迟正比于旋转过的角度,反比于舵机的响应速度。通过后面控制策略分析可知,舵机的响应速度直接影响模型车通过弯道时的最高速度,提高舵机的响应速度是提高模型车平均速度的关键。尽量选择最大的输出电压,可以提高舵机的响应速度。大赛规则不允许采用升压电路为为舵机提供工作电源。提高舵机控制前轮转向速度的另外一个方法是采用杠杆原理,在舵机的输出转盘上安装一个较长的输出臂,将转向传动杆连接在输出臂末端。这样就可以在舵机输出较小的转角下,取得较大的前轮转角,从而提高了整个车模转向控制速度。连接方式如图14所示。图14舵机输出结构示意图77 此外,将驱动舵机脉冲波形的周期从原来的20ms减小到10ms增加舵机控制信号的更新频率,减少舵机控制环节中延时。2.7.2电池电压检测蓄电池电压的大小不仅影响电机转速,同时也对其他电源模块也有影响。检测电池电压不但可以为后面控制策略提供控制参数,同时也可以在调试过程中提供电池电压报警信号。电池电压可以通过电阻分压后通过单片机的A/D输入端口进行测量。2.7.3加速度传感器加速度传感器可以测量车模运行稳定性、车轮是否打滑以及赛道是否有坡道等信息。通过这些信息可以调整模型车速度保证运行稳定性。选择在车模上安装1个或是2个加速度传感器辅助判断车模的稳定性。2.8MC9S12DG128单片机介绍2.8.1HCS12原理及应用--PWM模块介绍开始介绍该MCU的PWM模块。PWM调制波有8个输出通道,每一个输出通道都可以独立的进行输出。每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄存器和两个可供选择的时钟源。每一个PWM输出通道都能调制出占空比从0—100%变化的波形。PWM的主要特点有:1、它有8个独立的输出通道,并且通过编程可控制其输出波形的周期。2、每一个输出通道都有一个精确的计数器。3、每一个通道的PWM输出使能都可以由编程来控制。4、PWM输出波形的翻转控制可以通过编程来实现。5、周期和脉宽可以被双缓冲。当通道关闭或PWM计数器为0时,改变周期和脉宽才起作用。6、8字节或16字节的通道协议。7、有4个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时钟频率。8、通过编程可以实现希望的时钟周期。9、具有遇到紧急情况关闭程序的功能。10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。2.8.2HCS12原理及应用--PWM寄存器说明11、PWM启动寄存器PWMEPWME寄存器每一位如图1所示:复位默认值:00000000B77 图1PWME寄存器 每一个PWM的输出通道都有一个使能位PWMEx。它相当于一个开关,用来启动和关闭相应通道的PWM波形输出。当任意的PWMEx位置1,则相关的PWM输出通道就立刻可用。用法:PWME7=1---通道7可对外输出波形PWME7=0---通道7不能对外输出波形注意:在通道使能后所输出的第一个波形可能是不规则的。当输出通道工作在串联模式时(PWMCTL寄存器中的CONxx置1),那么)使能相应的16位PWM输出通道是由PWMEx的高位控制的,例如:设置PWMCTL_CON01=1,通道0、1级联,形成一个16位PWM通道,由通道1的使能位控制PWM的输出。 2、PWM时钟选择寄存器PWMCLKPWMCLK寄存器每一位如图3所示:复位默认值:00000000B图2PWMCLK寄存器 S12的PWM共有四个时钟源,每一个PWM输出通道都有两个时钟可供选择(ClockA、ClockSA或ClockB、ClockSB))。其中0、1、4、5通道可选用ClockA和ClockSA,2、3、6、7通道可选用ClockB、ClockSB通道。该寄存器用来实现几个通道时钟源的选择。 用法:PCLK0=1---通道0(PTP0)的时钟源设为ClockSAPCLK2=0---通道2(PTP2)的时钟源设为ClockB2.8.3HCS12原理及应用--PWM寄存器说明21、PWM预分频寄存器PWMPRCLKPWMPRCLK寄存器每一位如图3所示: 复位默认值:00000000B77 图3PWMPRCLK寄存器 PWMPRCLK寄存器包括ClockA预分频和ClockB预分频的控制位。ClockA、ClockB的值为总线时钟的1/2n(0≤n≤7),具体设置参照图4和图5图4ClockA预分频设置图5ClockB预分频设置PCKB0~PCKB2是对ClockB进行预分频。PCKA0~PCKA2是对ClockA进行预分频。2、PWM分频寄存器PWMSCLA、PWMSCLBPWMSCLA寄存器每一位如图6所示:77 图6PWMSCLA寄存器ClockSA是通过对PWMSCLA寄存器的设置来对ClockA进行分频而产生的。其计算公式为:ClockSA=ClockA/(2*PWMSCLA)PWMSCLB寄存器与PWMSCLA寄存器相似,ClockSB就是通过对PWMSCLB寄存器的设置来对ClockB进行分频而产生的。其计算公式为:ClockSB=ClockB/(2*PWMSCLB)2.8.4PWM寄存器说明31、PWM极性选择寄存器PWMPOLPWMPOL寄存器每一位如图7所示:   该寄存器是0~7通道PWM输出起始极性控制位,用来设置PWM输出的起始电平。 用法:PWMPOL_PPOL0=1---通道0在周期开始时输出为高电平,当计数器等于占空比寄存器的值时,输出为低电平。对外输出波形先是高电平然后再变为低电平。 2、PWM波形对齐寄存器PWMCAEPWMCAE寄存器每一位如图8所示: 图8PWMCAE寄存器 PWMCAE寄存器包含8个控制位来对每个PWM通道设置左对齐输出或中心77 对齐输出。 用法:PWMCAE_CAE0=1---通道0中心对齐输出PWMCAE_CAE7=0---通道7左对齐输出注意:只有输出通道被关闭后才能对其进行设置,即通道被激活后不能对其进行设置。2.8.5PWM工作原理S12微控制器PWM模块是由独立运行的8位脉冲计数器PWMCNT、两个比较寄存器PWMPER和PWMDTY组成。1、左对齐方式在该方式下,脉冲计数器为循环递增计数,计数初值为0。当PWM使能后,计数器PWMCNT从0开始对时钟信号递增计数,开始一个输出周期。当计数值与占空比常数寄存器PWMDTY相等时,比较器1输出有效,将触发器置位,而PWMCNT继续计数;当计数值与周期常数寄存器PWMPER相等时,比较器2输出有效,将触发器复位,同时PWMCNT也复位,结束一个输出周期。原理参照图14:图14PWM左对齐方式2、中心对齐方式在该方式下,脉冲计数器为双向计数,计数初值为0。当PWM使能后,计数器PWMCNT从0开始对时钟信号递增计数,开始输出一个周期。当计数器与占空比常数寄存器PWMDTY相等时,比较器1输出有效,触发器翻转,而PWMCNT继续计数,当计数值与周期常数PWMPER相等时,比较器2输出有效,此时改变PWMCNT的计数方向,使其递解计数;当PWMCNT再次与PWMDTY相等时,比较器1再一次输出有效,使触发器再次翻转,而PWMCNT继续递减计数等待PWMCNT减回至0,完成一个输出周期。原理参照图6:77 图15   中心对齐方式3、周期计算方法左对齐方式:输出周期=通道周期×PWMPERx中心对齐方式:输出周期=通道周期×PWMPERx×24、脉宽计算方法左对齐方式:占空比=[(PWMPERx-PWMDTYx)/PWMPERx]×100%中心对齐方式:占空比=[PWMDTYx/PWMPERx]×100%2.10飞思卡尔核心板XS128_112系统板使用说明欢迎使用智能车制作网站推出的XS128_112系统板,请在使用前仔细阅读以下内容:一.跳线设置1.S1---用来确定BDM接口定义模式,焊接51欧电阻至板上标识的圆点处BDM接口为清华定义,否则为飞思卡尔定义。2.S2---用来连接LM1881与单片机AD0引脚,焊接0欧电阻或直接用焊锡连接该处单片机AD0引脚将与LM1881视频输入引脚连接,这样在AD0引脚输入模拟视频信号,单片机77 即可对视频信号进行采集同时板载LM1881进行视频信号分离。3.S3---用来连接LM1881奇偶场输出引脚与单片机的PA0,焊接0欧电阻或直接用焊锡连接该处LM1881奇偶场输出引脚将与单片机PORTA0连接,此时设定PA0为输入端,即可完成对视频信号奇偶场的识别。4.MODESET---单片机运行模式设置,默认情况下焊接3个3.3K电阻至此则为单片运行模式,若需要更改单片机的运行模式,可将此处电阻焊下,通过对引脚PE4,PE5,PE6,PE7输入对应高低电平则可更改运行模式。2.系统板引脚图77 第三节智能小车的设计步骤智能小车的设计主要分为以下几个步骤:①掌握开发工具的基本使用方法②小车的机械结构设计③小车的电路结构设计④小车的驱动电路设计⑤算法设计⑥软件设计⑦系统整体调试阶段⑧相关技术参数第二章智能汽车的设计与实现第一节开发工具介绍与使用方法1.1.1CodeWarriorforHCS12简介Metrowerks公司提供的CodeWarriorforHCS12教学用版本,它是面向以HC12或S12为CPU的单片机嵌入式应用开发的软件包,包括集成开发环境IDE、处理专家库,全芯片仿真、C交叉编译器、汇编器、链接器以及BDM调试器。如同多数软件开发商一样,Metrowerks公司提供CodeWarrior的教学版本(SpecialEdition),使用教学版本对成的代码有一定的限制,不能超过12KB,对工程包含的文件数目限制在了30个以内[3]。虽然存在着这些限制,但是对于我们这次的智能车系统的开发已经是足够了。关于CodeWarriorforHCS12的详细使用说明,请参阅freescale网站上的技术手册(www.freescale.com)。1.1.2BDM开发工具后台调试模式(BackgroundDebugMode)是当代单片机普遍采用的调试方式之一,在BDM模式下主要可以实现一下3个方面的功能[3]:首先是应用程序的下载与在线更新。在BDM模式下,可以对Flash做写入和擦除操作,故可以在产品出厂前即将应用程序下载的产品当中去,也可以在产品出厂后更应用程序。BDM模式的另一功能是做单片机内部资源的配置与修复,程序的加密处理等。一些MCU的内部寄存器只能在BDM模式下操作,特别是一些单片机内部词源配置的寄存器。BDM的第三个功能室做应用程序的动态调试。S12系列单片机的BDM调试模式有77 这种功能。和多时现代单片机一向,S12单片机CPU内部使用了4级流水线结构,这种结构使得CPU的读取指令,解释指令,执行指令等操作看起来好像是并行的。S12单片机是16位单片机,每次读操作可以读入2条指令,对于下一个度指令周期来说,就可能是一个空周期。BDM模式下的S12单片机就可以利用“偷”到的控周期,在应用程序运行时动态的,实时地读取CPU内部寄存器的数据,达到动态调试的效果。S12片内的BDM模块框图如图1-2所示,右边的BKGD引脚与BDM调试器相连,左边接入片内的CPU总线。图17BDM模块框图1.1.3AltiumDesigner简介AltiumDesigner6.0,它是完全一体化电子产品开发系统的下一个版本。AltiumDesigner是业界首例将设计流程、集成化PCB设计、可编程器件(如FPGA)设计和基于处理器设计的嵌入式软件开发功能整合在一起的产品。AltiumDesigner6.0是两年之内的第六次更新,极大地增强了对高密板设计的支持,可用于高速数字信号设计,提供大量新功能和改进,改善了对复杂多层板卡的管理和导航,可将器件放置在PCB板的正反两面,处理高密度封装技术,如高密度引脚数量的球型网格阵列(BGAs)。以前这些高级的PCB设计技术被限定在‘高级’的PCB设计产品,这些产品对于大多数工程师来说价格昂贵。然而,Altium的理念是让电子设计变得更容易,AltiumDesigner6.0让每一位工程师都能使用最新的设计功能。AltiumDesigner6.0极大减少了带有大量管脚的器件封装在高密度板卡上设计的时间,简化了复杂板卡的设计导航功能,设计师可以有效处理高速差分信号,尤其对大规模可编程器件上的大量LVDS资源。AltiumDesigner6.0充分利用可得到的板卡空间和现代封装技77 术,以更有效的设计流程和更低的制造成本缩短上市时间。1.2主要工作说明第二节:阐述了机械设计的具体方法。第三节:详细介绍了智能车硬件系统设计的具体内容。第四节:系统控制算法设计:比较了常用控制算法的优缺点,对PID算法和模糊控制算法进行了详细的介绍,并根据小车系统硬件设计和运行环境及实验结果的比较对小车纵向控制和横向控制算法进行了合理选择。第五节:系统软件实现:给出了小车系统算法流程,介绍了各功能模块的初始化和输入控制量的计算与编码。第六节:对智能车进行测试优化,调整参数,改善智能车的性能。第七节:给出了智能车的主要技术参数。第一节机械结构设计机械设计主要指小车车模各机械模块的布局与安装以及各种机械部件的制作与装配。机械设计的好坏直接关系到小车能否正常运行和小车的整体性能,除去车赛组委会提供好带有四轮和电机的小车底盘,小车车模的机械设计主要包括小车机械整体布局、路径检测机构的安装、舵机的安装、电路底板的安装及测速机构的安装。2.1小车机械整体布局小车整体机械布局图如图2-1所示图2-1小车简化俯视图77 小车的整体机械机构主要由以下几个部件组成:1.光电管电路板,横向置于车体前方2.延伸连杆,平行连接车体和光电管电路板;3.舵机及舵机连杆,位于两前轮之间;4.底盘;5.电路底板,固定于车体中后方;6.电池,位于电路底板下方;7..车轮;8.电机,位于后轮之间;9.霍尔传感器,包括霍尔元件和磁铁,霍尔元件固定在底板上,磁铁固定在电机转轴的小钢圈上;.10.变速齿轮,连接电机转轴和车轮。2.2路径检测机构的安装路径检测机构安装示意图如图3-2所示:图2.2路径检测机构安装侧视图路径检测机构是一个布局了14个光电管的横向电路板,其安装过程中主要包括三个方面:1.光电管距离地面的高度:由于使用反射式红外光电管来探测路径(黑线),光电管距离地面的高度对路径检测的准确度有很大影响,根据实验测量,我们通过使用垫片将光电管固定在距地面大约1cm的高度;2.在一定范围内,光电管探测的前方黑线越远,对小车速度的提高越有利,因此我们通过连杆将光电管电路板向前延伸了约10cm;3.连杆使用了轻质硬性金属片,两个连杆平行连接小车及光电管电路板,在电路板前方77 受到碰撞压力时连杆能够歪斜,起到了压力缓冲作用,这样有利于小车碰撞时对电路板的损坏。2.3舵机的安装舵机通过一对连杆分别连接两前轮内侧固定点,通过两连杆在舵机转动力带动下的横向运动来控制两车轮的转向,安装要注意的问题是是调整好两连杆的长度,使得两前轮保持平行并且使得舵机在零转角时车轮方向亦为零转角。安装示意图如图2-3所示:图2-3舵机安装侧视图2.4电路底板的安装底板电路部分上插有单片机最小系统和电机驱动电路,是小车系统的核心模块,必须保证安装的稳固性,减小振动等对电路板上焊点等的破坏,同时考虑到底板的大小及重量,我们通多四根立柱将底板固定在小车车体后部。2.5测速机构的安装测速机构使用了霍尔传感器,其安装主要包括霍尔传感元件的安装和磁铁的安装,我们将磁铁均匀的安装在小车电机转轴的小钢圈上,如图3-4所示,安装中要注意的问题包括:1.霍尔元件与磁铁的距离和极性:为了使得霍尔元件能够感应到磁铁,二者之间的距离不能太远,经过实验测量,距离要小于约0.7cm,并且磁铁的极性要安装正确;2.磁铁的分布:为了能够较为实时的测量出测速,理论上磁铁之间距离越小越好,但距离太小时各个分布的77 磁铁之间的距离误差系数增大,会导致测量的速度误差较大。综合考虑,我们小车在电机转轴的小钢圈上对称的安装了2个磁铁。图2-4霍尔元件测速机构安装侧视图第三节电路结构设计3.1智能车硬件系统总体结构本次智能车大赛智能只用唯一的MCU(MC9SDG128)作为系统的中央处理单元,所以电动车的所有输入量都必须最终读入MC9SDG128进行计算,而所有的执行机构全部由MC9SDG128直接进行控制。如图3-1为系统硬件的顶层设计图。图3-1硬件系统结构图3.2光电检测电路路径识别模块是智能车系统的关键模块之一,这里我们才用的方案是采用14对发射接77 收红外光电管对来对前方道路的黑线进行识别,我们之所以采用红外光电管是为了尽量减少环境光以及照相机闪光灯对光电管影响,由于红外接收管有一层深色玻璃套,可以有效的滤除其它环境光的干扰,这样就省去了我们在电路中对光电管进行调制,滤波以及接收电路的制作,大大简化了电路的复杂程度。由于赛道中存在轨迹指示黑线,落在黑线区域内的光电二极管接收到的反射光线强度与白色的赛道有显著的差异,由此判断行车的方向。其电路工作原理如图3-2所示。图3-2反射式红外光电管工作原理当光电管处于黑线上方时,由于黑色对光吸收强,接收管(光敏三极管)接收到红外光少,接收管没有导通,集电极在上拉电阻的作用下输出高电平;当光电管处于白色地面上方时,接收管接收到的红外光较多,只要调整好光电管与地面的距离就可以使接收管导通,out输出一个较低的电平,将out端接到单片机的AD输入引脚,对测得的电压值设定一个判断阈值就可以判断出光电管是否处于黑线上方。图4-3中电阻的阻值可以根据不同光电管通过实验测量选取。图3-3光电检测示意图77 理论上,光电管数量越多,横向控制越精确,但是由于车赛对传感器数量的限制(最多16个)以及考虑到太多的光电管会消耗大量的电量,综合横向控制输入量的要求,我们选用了14只反射式红外光电管按一定的距离横向布局,如图3-4。图3-4光电管布局图光电传感器的排列方法、个数、彼此之间的间隔都与控制方法密切相关。由于控制输出与控制输入有一定延迟,一般的认识是,在不受到外部因素影响的前提下,能够感知前方的距离在一定范围内越远,判断越准确,行驶效率越高。3.3基于霍尔传感器的测速电路3.3.1霍尔效应简介霍尔效应是霍尔于1879年发现的。随后,根据该效应生产的霍尔器件,既可以检测磁场,也可以检测电流,还可以检测位移、振动以及其它只要能转换成位移量变化的非电量的物理量。同时霍尔器件还具有线性特性好,灵敏度高,稳定性好,控制简单、方便等特点。所以,霍尔器件在自动检测、自动控制和信息技术等方面得到了广泛地应用。如在一些具有四遥(遥调、遥控、遥测、遥信)功能的设备上,霍尔效应产品随处可见。3.3.2霍尔效应开关集成化霍尔开关传感器(CS1018)具有灵敏可靠、体积小巧、无触点、无磨损、使用寿命长、功耗低以及不怕尘土、油污、湿热等优点。在自动装置、家用电器和仪器仪表等电路中应用这种传感器,可简化电路和提高可靠性。因此我们选用了霍尔开关型传感器作为小车系统的测速元件,其内部结构如图4-5所示。77 图3-5霍尔开关型传感器CS1018内部结构图我们在后轮上贴了N个磁铁,轮子每转1/N圈,霍尔元件就会输出一个脉冲,只要测量每两个脉冲之间的时间就可以知道当前车速。要提高测速的速度可以适当增加N值,但相应测到速度的精度就会下降,但考虑到实际运行系统对速度精度要求不高,所以在调试阶段可以根据情况增减N值。3.3.3基于霍尔开关的测速电路霍尔开关的电路非常简单,并且易于在车上安装,其电路图如图4-6:图3-6霍尔元件测速电路我们根据电动车的实际情况,在车模上一共安装了2个磁铁,装在车轮的轴上,如图2-4所示,当电动车的车轮转动一周,霍尔开关将输入2个脉冲到单片机。单片机通过定时器,计数器捕获这些脉冲,从而计算出电动车当前的速度值。3.4驱动电机驱动电路3.4.1电机驱动原理一个电动小车整体的运行性能,首先取决于它的电池系统和电机驱动系统。电动小车的驱动系统一般由控制器、功率变换器及电动机三个主要部分组成。电动小车的驱动不但要求电机驱动系统具有高转矩重量比、宽调速范围、高可靠性,而且电机的转矩-转速特性受电源功率的影响,这就要求驱动具有尽可能宽的高效率区。我们所使用的电机一般为直流电机,主要用到永磁直流电机、伺服电机及步进电机三种。直流电机的控制很简单,性能出众,直流电源也容易实现。本文即主要介绍这种直流电机的驱动及控制。直流电机驱动电路使用最广泛的就是H型全桥式电路,这种驱动电路可以很方便实现直流电机的四象限运行,分别对应正转、正转制动、反转、反转制动。它的基本原理图如图3-7所示。全桥式驱动电路的4只开关管都工作在斩波状态,S1、S2为一组,S3、S4为另一组,77 两组的状态互补,一组导通则另一组必须关断。当S1、S2导通时,S3、S4关断,电机两端加正向电压,可以实现电机的正转或反转制动;当S3、S4导通时,S1、S2关断,电机两端为反向电压,电机反转或正转制动。M图3.7H桥直流电机驱动原理图在小车动作的过程中,我们要不断地使电机在四个象限之间切换,即在正转和反转之间切换,也就是在S1、S2导通且S3、S4关断,到S1、S2关断且S3、S4导通,这两种状态之间转换。由于电机在正常工作时对电源的干扰很大,如果只用一组电源时会影响单片机的正常工作,所以我们选用双电源供电。3.4.2PWM电机驱动PWM(脉冲宽度调制)控制,通常配合桥式驱动电路实现直流电机调速,非常简单,且调速范围大,它的原理就是直流斩波原理。如图4-11所示,若S3、S4关断,S1、S2受PWM控制,假设高电平导通,忽略开关管损耗,则在一个周期内的导通时间为t,周期为T,则电机两端的平均电压为:U=Vcct/T=αVcc,其中,α=t/T称为占空比,Vcc为电源电压(电源电压减去两个开关管的饱和压降)。电机的转速与电机两端的电压成比例,而电机两端的电压与控制波形的占空比成正比,因此电机的速度与占空比成比例,占空比越大,电机转得越快,当占空比α=1时,电机转速最大。3.4.3PWM电机驱动实现在我们的电动车上我们采用的是PWM控制,配合freescale的专用直流电机驱动芯片mc33886来实现对电机进行控制mc33886一般特性为:工作电压5~40V;导通电阻120毫欧姆;输入信号:TTL/CMOS;PWM频率<10KHz;短路保护、欠压保护、过温保护。当通过给IN1和IN2两个输入引脚加不同的PWM信号时,可以实现对直流电机的正像驱动,反向驱动,正向制动以及反向制动。77 其电路原理图如下图3-8:图3-8MC33886驱动电路3.5转向伺服器控制3.5.1舵机功能图3-9转向舵机舵机最早诞生在航空领域中,主要用来控制发动机进气量,副翼舵面,水平尾翼舵面,垂直尾翼舵面等等,现在我们也将他应用在电动车模上,用来控制赛车中的前轮转向。3.5.2舵机的结构转向舵机由舵盘、减速齿轮组、位置反馈电位计5k,直流电机、控制电路板等;其工作原理如下:控制信号→控制电路板→电极转动→齿轮组减速→舵盘转动→位置反馈电位计→控制电路板反馈。最终对用户得到舵机的输入输出控制特性:77 输入←→舵盘角度3.5.3舵机的参数尺寸:39.4*37.8*27.;重量:56g;工作速度:0.11sec/60(4.8V)0.08sec/60(6.0V);堵转力矩:6.1kg.cm(4.8V)7.7kg.cm(6.0V);工作角度:45度/400us;3.5.4舵机控制方法三线连接方法:黑线:底线;红线:电源线;两种标准:4.8V,6V;蓝线(黄线):控制信号线;图4-9舵机输入信号示意图本舵机采用PWM信号控制,对PWM波的要求入上图4-10所示,PWM波的频率必须在50Hz到55Hz之间。通过调整脉冲的宽度(在频率不变的情况下改变占空比)来控制舵机的转角。77 图3-11PWM的波形与转角关系舵机的响应时间对于控制非常重要,一方面可以通过修改PWM周期获得。另一方面也可以通过机械方式,利用舵机的输出转距余量,将角度进行放大,加快舵机响应速度;舵机的响应速度是控制电动车运行中一个非常关键的因素,由于舵机响应的滞后,可能导致电动车的运行不稳定,必须在算法中予以补偿。3.5.5单片机PWM波产生PWM(PulseWidthModulate)即脉宽调制,脉宽调制波是一种可用程序来控制波形占空比、周期、相位的波形。它在电机驱动、D/A变换等场合有着广泛的应用。图3-12PWM编程时的程序流程图本系统中使用的MC9S12DG128单片机就提供了PWM模块,只要对该模块编程就可以产生需要PWM波,该模块的特性如下:8个可编程控制周期和占空比的PWM通道;专用的PWM计数77 软件选择脉冲极性;周期和占空比的值双缓冲;高电平边沿或中心对称方式;8个8位通道,或是4个16位通道;4个时钟源;紧急关闭;3.6电源模块电源模块是整个电动车系统的动力中枢,稳定良好的电源模块是整个电动车能顺利完成比赛的基础。由于电动车的电源是7.2V电池组,而单片机要求5V供电,转向舵机电压要求6V,而驱动芯片MC33886则要求电压在所能承受范围内越高越好(由于大赛规定禁止使用DC-DC升压电路,所以我们能向MC33886提供的最高电压为电池组电压7.2V)。通过对整个电动车模型对电源的需求我们设计了如下电源模块,如图4-13所示图3-13电源模块系统结构图由于电池组的输出电压只有7.2V,而输出要求5V和6V,不能使用最普通的并且常见的直流稳压电源芯片7805和7806,因为他们要求输入输出电压至少存在3V以上的压差,所以我们选用了低压降的LM2940作为5V电压的稳压模块,并且由于舵机和驱动电机对电源的影响很大,可能导致电源有较大纹波,为了尽可能的降低驱动电机和转向舵机之间的干扰,我们采用两套电源,另外选中LM1117专门为转向舵机单独提供电源,并且在电池组输出端加上1000u的电容,尽量减少电池组输出电压的波动。整个电源模块的原理图如下图4-14所示:77 图3-14电动车电源模块原理图第四节算法设计在第一章控制算法的方案选择和论证时,我们最终选择了PID算法控制转角;选择模糊控制方法控制速度和制动。控制算法的设计本来应该从属于软件设计,但由于控制算法需要比较多的理论分析,而且控制算法在本系统中有着至关重要的作用,所以我们把控制算法的设计作为一章详细介绍。本章中,我们首先将介绍PID控制算法在数字系统中应用方法,和转角(横向)PID控制算法的设计与参数整定方式;接下来介绍模糊控制算法的基本原理,和速度和制动(纵向)模糊控制算法的设计和参数调整方法。对于算法设计的软件实现部分,我们将在第5节(软件设计)中详细介绍。4.1数字PID控制介绍4.1.1PID算法简介图4-1模拟PID控制系统在工业控制中,常常采用如图4-1所示的PID控制,其控制规律为[5]:77 4.2应用PID算法控制控制舵机由于方向偏离角度和舵机的控制量之间是近似的线性关系,而且也基本上可以看作是线性定常系统,所以适宜采用PID算法。控制算法的具体设计首先要确定被控对象及其控制输入量和控制输出量,很容易看出本小车系统设计中横向控制的被控对象即为小车的舵机,控制输入量是由小车前方反射式红外光电传感器检测到的黑线位置,由于小车舵机的实际转角是由舵机输入的PWM波控制的,并且PWM的占空比与舵机在舵机转角工作范围转角呈线性关系,因此横向控制输出量在算法设计中即为PWM波的占空比。4.2.1控制输入量控制输入量是光电管检测到的黑线位置,光电管以离散的形式在小车前方以一定的规律横向排列,必须对检测到的黑线位置进行数字量化作为PID算法的控制输入量。其数学模型如下:以14个光电管的中心为坐标原点,设14个光电管从左到右坐标值如图5-3所示:图5-3光电管坐标设定值小车给定前进方向为前方直线方向,即给定值为坐标原点0,因此偏差即为黑线位置坐标值,设为angle。考虑到黑线宽度和转弯时可能有多个光电管落在黑线上方,此时偏差值取其坐标平均值。如果偏离黑线,输入为上一次的输入,保证小车尽可能回到赛道上。4.2.2控制输出量控制输出量为PWM波的占空比,PWM波占空比和舵机角度对应关系如图5-4:77 图4-4PWM波占空比与舵机角度对应关系本设计中使用50Hz的PWM波控制舵机,设定一个周期总计数值为30000,根据图5-4的对应关系,可以算出翻转电平计数值(设为duty)为2250时,舵机转角为0度;在舵机转角范围内,翻转电平计数值每改变大约17,舵机角改变1度。4.2.3PID控制的实现输入为方向偏离angle,采用式5-5描述的位置型PID算法:舵机控制量duty范围在[1850,2650]之间,输入angle在[-16,16]之间,所以,可以初步定Kp=−800/32≈25,这样在最大输入方向偏差下,舵机可以输出最大转角,已经达到控制的最大范围。根据凑试法的步骤,开始先知考虑比例作用,则有:Kp=25式4-11由于在直道上要尽量消除车体左右摆动,所以需要加入死区算法,由于输出范围确定所以需要加入抗积分饱和的算法,具体实现参考第六章软件实现部分,参数确定参考第七章调试部分。4.3模糊控制介绍4.3.1模糊控制原理简介模糊逻辑控制(FuzzyLogicControl)简称模糊控制(FuzzyControl),是以模糊集合论、模糊语77 言变量和模糊逻辑推理为基础的一种计算机数字控制技术。1965年,美国的L.A.Zadeh创立了模糊集合论;1973年他给出了模糊逻辑控制的定义和相关的定理。1974年,英国的E.H.Mamdani首先用模糊控制语句组成模糊控制器,并把它应用于锅炉和蒸汽机的控制,在实验室获得成功。这一开拓性的工作标志着模糊控制论的诞生[6]。4-5模糊控制器结构图模糊控制的基本思想是把对特定的被控对象或过程的控制策略总结成一系列以IF(条件)和THEN(作用)形式表示的控制规则,通过模糊推理得到控制作用集,作用于被控对象或过程。控制作用集均为一组被量化了的模糊语言集,如“正大”、“负大”、“低”、“高”、“正常”等。模糊控制系统的一般结构如图5-5所示,其中各部分功能如下:1.模糊化接口:其主要作用是将输入的精确值转换成模糊化量,如{PB,PM,PS,Z,NS,NM,NB}分别对应{“正大”,“正中”,“正小”,“零”,“负小”,“负中”,“负大”}等。模糊化的具体过程如下:a)首先对输入量进行处理变成模糊控制器要求的输入量b)对经过上述变换的输入量进行尺度变换,使其变换到各自的论域范围c)确定各变量的模糊语言取值及相应的隶属函数,即进行模糊化。模糊语言值通常选取3、5或7个,例如取为{负,零,正},{负大,负小,零,正小,正大},或{负大,负中,负小,零,正小,正中,正大}等。然后对所选取的模糊集定义其隶属函数,可取三角形隶属函数(如图4-6所示)或梯形,并依据问题的不同取为均匀间隔或非均匀的;也可采用单点模糊集方法进行模糊化。2.知识库:由数据库和规则库组成。数据库主要包括语言变量的隶属度函数,尺度变换因子以及模糊空间的分级数等。规则库用于存放语言控制规则,规则是基于专家知识或手动操作熟练人员长期积累的经验,按人的自觉推理的一种语言表示形式。模糊规则通常山一系列77 的关系词连接而成,如:IF–THEN;或总结为模糊控制规则表,如表5-1中所示,可直接由e和c查询相应的控制量u。存放控制规则的规则库的“准确性”不仅与规则条数相关,还与专家知识的准确度有关。图4-6隶属度函数取法示意3.控制规则:4-7模糊控制规则表举例uc:Nc:Zc:Pe:NPBPMZe:ZPSZNSe:PZNMNB4.模糊推理:是模糊控制器的核心。它具有模拟人的基于模糊概念的推理能力。该推理过程是基于模糊逻辑中的蕴含关系及推理规则来进行的。常见的模糊推理方法有最大最小推理和5..最大乘积推理两种,可视具体情况选择其一。去模糊化:推理得到的控制量(模糊量)变换为实际用于控制的清晰量它包含以下两部分内容a)将模糊的控制量经去模糊化变换变成表示在论域范围的清晰量。去模糊化方法有最大隶属度法,中位数法,加权平均,重心法,求和法或估值法等等,针对系统要求或运行情况的不同而选取相适应的方法,从而将模糊量转化为精确量,用以实施最后的控制策略。b)将表示在论域范围的清晰量经尺度变换变成实际的控制量。4.4应用模糊算法控制前进和制动在本设计中,小车的速度受到多个因素的影响,包括小车行驶的角度,小车的当前速度等,因此在本设计中采用了模糊控制算法来实现对小车速度的控制。本设计中模糊控制器是个双输入单输出的系统,输入量为小车检测到的前方黑线的角度angleindex和小车当前行驶速度velocitycount,输出量为控制电机速度的PWM波的占空比,控制系统结构设计如图5-7所示:77 图4-8模糊控制系统结构4.4.1输入量、输出量模糊化1.角度量angleindex和当前速度velocitycount的模糊化考虑到角度量angleindex正负对速度控制没有影响,故将角度量论域划分为8个模糊子集,模糊子集序号越大,角度量越大,即角度偏差越大,其隶属度函数如图5-8所示(注:图中角度量论域没有按坐标画)。图4-9角度量隶属度函数当前速度是由霍尔传感器测得的速度值用另一种编码参数形式表示的,即霍尔元件检测到的两个脉冲之间时间以计数值的表示,论域可由一定的换算关系得到,如式5-12所表示F为总线时钟24MHz;Div为分频系数,设定值为128;C为车轮周长,测得值为0.172m;velocity为小车速度;当车速为1m/s时,velocitycount约为8000,根据实际,车速一般最快2m/s,由此可确定论域。同样将论域划分为8个模糊子集,模糊子集的序号越高表示当前测得速度越低。其隶属度函数如图5-9所示77 图4-10当前速度隶属度函数1.输出量的模糊化控制舵机驱动芯片包括两个PWM波控制输入端,一端输入PWM波使车轮正转,另一端输入PWM波使车轮反转,即起到制动作用。设PWMDTY1和PWMDTY0分别为两端输入的PWM波的翻转电平计数值,PWM波一个周期的计数值设为200,对PWM模块进行设定,使得PWDTY1和PWMDTY0越小,电机正反转速度越快,根据电机性能和速度要求可确定输出控制PWMDTY1和PWMDTY0的论域。为了实现快速性的要求,输出隶属函数采用单点值,采用单点值隶属函数占用内存少,运算速度快。将PWMDTY1论域划分为8个模糊子集,分别用0、1、2、3、4、5、6、7代表,模糊子集序列号越小,表示输出速度越快。其隶属度函数如图5-10所示,而将PWMDTY0论域划分为三个模糊子集,分别用0、1、2代表,由PWM波占空比与电机驱动芯片的特性可知,0代表紧急制动,1代表轻微制动,2代表不制动,其隶属度函数如图5-11所示。图4-11速度控制量PWMDTY177 图4-12速度控制量4.4.2模糊控制规则根据车体的物理运动学规律和日常生活中的经验,为了使车行驶的平均速度最大且保证不偏离车道,可以总结出一下规则:根据车体的物理运动学规律和日常生活中的经验,为了使车行驶的平均速度最大且保证不偏离车道,可以总结出一下规则:规则1:如果车在直道上,以最快速度行驶。规则2:如果车在弯道上,则要减速。规则3:弯道角度越大,行驶速度要越慢。规则4:由高速行驶的直道突然转为角度较大的弯道则要刹车。规则5:弯道上速度太慢时要加速。根据以上几点规则,可得模糊控制规则表如表5-2、5-3所示:输出控制量PWMDTY1角度量01234567当前速度001237777101236777201235677301234567401233456501232345601231234701230123表4.-2速度控制量PWMDTY1模糊控制规则表77 输出控制量PWMDTY0角度量01234567当前速度022210000122221000222222100322222210422222221表4-3速度控制量PWMDTY0模糊控制规则表5222222226222222227222222224.4.3输出量反模糊化为了减少运算量,在反模糊化前没有对规则强度不同的相同后件进行处理,而是直接将得到的各后件用重心法得到模糊输出量,如式5-13PWMDTYx=∑(Pi×Fi)/∑Pi式5-13式中Pi指各后件的概率,Fi指各后件对应隶属度函数中的值。在本设计中,由于角度量的测量是非连续的,测得的角度量对相应模糊子集的概率相同,例如第1、2个光电管处于黑线上时,就认为角度量对应模糊子集1、2的概率为0.5。为了计算简单,式5-13中的概率为当前速度对应模糊子集的概率。4.4.4模糊控制的实现本设计中模糊控制算法的实现使用的是软件法。为了尽量减小计算时间,便于规则调试,在系统中设置了两个表格分别用于存储PWMDTY1和PWMDTY0的控制规则表,用于模糊推理,而模糊化和反模则用公式记算具体的程序流程参见第六章软件设计,规则的调试参见第七章调试部分。77 第五节软件设计5.1开发环境介绍本系统使用了Metrowerks公司提供的CodeWarriorforHCS12教学用版本,它是面向以HC12或S12为CPU的单片机嵌入式应用开发的软件包,包括集成开发环境IDE、处理专家库,全芯片仿真、C交叉编译器、汇编器、链接器以及BDM调试器。5.2软件结构软件主要包括:路径识别、方向控制、速度测量、速度控制等四个模块。软件流程可分为以下几部分:初始化、得到AD转换数据并转换为角度偏差、根据角度偏差控制舵机、根据角度偏差和当前速度控制电机转速和制动。软件结构框图见图6-1:图5-1软件结构框图程序流程如图6-2所示:开始初始化测量角度舵机控制电机控制图5-2主程序流程图下面我将分别介绍各个模块的实现原理和程序流程。5.3初始化77 初始化主要包括各个模块工作寄存器的设置、工作时钟设置、中断设置、全局变量和控制规则表的初始化。程序流程如图5-3所示:5.4路径识别路径识别模块的作用是根据AD采样光电管得到的数据,计算得出小车偏离中心轴的角度,作为方向控制和速度控制的输入量。图5-3初始化程序流程图5.4.1有关数据结构介绍#definethreshold0xe0//AD采样阈值,大于threshold是1,否则为0,staticconstcharpara[14]=//每个光电管的权值{-28,-21,-15,-10,-6,-3,-1,1,3,6,10,15,21,28};charValue[14];//保存AD采样值,1表示检测到黑线,0表示没有intresult;//保存每次运算的结果5.4.2程序分析77 返回result图5-4路径识别Value的计算方法如式6-1所示:Value[i]=AD[i]>threshold?1:0式5-1路径识别程序流程如图6-4所示:Result的计算方法如下面的程序所示:intj=0;//计算Value中非零值inttemp=0;//保存权值累加结果for(inti=0;i<14;i++){if(Value[i]{temp+=Value[i]*para[i];//加权累加j++;//计算非零数据个数}}if(j!=0){temp/=j;//计算加权平均值result=temp;}77 5.5方向控制我们采用式5-5计算角度控制量,PID计算程序流程如图6-5所示:带死区的PID算法、积分分离、抗积分饱和算法的详细介绍见第五章。图5-5PID计算5.6速度测量当前速度的测量是通过一个输入捕捉定时器中断实现的,即当霍尔元件测得一个脉冲输入时,中断程序运行一次,在中断程序中记录定时器的当前值,通过计算当前定时器的值和上次中断时定时器的值的差值就可以计算出小车速度。在新的脉冲出现之前,程序中使用的速度值始终等于上一次测得的速度值。为了避免车速太慢,监测速度太慢的问题,我们定义一个变量,用于记录速度值使用的次数,如果超过一定的次数就把记录速度的变量初始化。测速流程如图5-6所示。77 图5.6测速中断5.7速度控制5.7.1控制速度为了使小车队不同赛道的适应性增强,我们规定小车尽量以恒定的预定速度(可以根据当前赛道的状况手动调整)前进。那么必须想办法控制车速,但由于赛道不同系统,参数就不同,系统模型难以确定,再加上处理器的限制,不能采用太复杂的控制算法。但对车速的控制并不是要很精确,我们就采用了一个很简单的线性控制方法,该方法在测速中断处理函数内实现。开始时初始化速度为最大,使得开始加速度最大,可以使小车在最少的时间内达到预定速度;以后每次测到速度就调整输出。已知测得速度值为4000对应2m/s,8000为1m/s,控制量范围是[10,200],值越小速度越大,因此可以预设目标速度是4000,控制量初始值10。算法流程如图6-6所示:5.7.2弯道制动如3.4节所讲,制动使用角度、速度两输入,制动PWM控制参数单输出的模糊控制。程序流程如图5-7所示。在不同的弯道和不同的当前速度时,使用不同的制动控制参数,这样可以最大限度的保持车77 速、保证小车不会脱轨。但是这样调整的参数对赛道参数的依赖性是很强的,不像5.7.1节小车速度控制那样,可以简单的适应不同的赛道。所以要求我们在参数的确定上要保证一定的余量,使得对赛道的适应性得到一定的增强。图5-8弯道制动控制在软件的设计过程中我们实现了第四章中所描述的控制算法;实现了各个模块的协调工作;充分合理的分配了CPU的资源。软件结构保证了控制算法实时性要求。接下来我们需要整定控制算法的参数,调试程序。77 第六章智能汽车系统调试6.1光电管排布方式调整光电管排布采用图7-1中所示相对位置,具体位置参数如表7-1所示,坐标以图7-1中0表6-1光电管排布实测值光电管编号(以图7-1中0为准)光电管坐标(以图7-1中0处为原点)(mm)-7-110.5-6-87.9-5-66.8-4-49-3-32.4-2-18-1-616218332.4449566.8687.97110.5图6-1管电管排布示意图77 最终路径识别的电路板就是按照以上规则制作的,电路板宽23.5cm,小于车的最大允许宽度25cm。这样布局可以最大限度的检测到黑线,避免小车脱离黑线。而且检测到14对光电管的数据给编写程序提供了很大的余地。开始第一个版本的路径识别电路板上,14对光电管是等距离排布的,这样在系统实际运行时,直道上车体的晃动比较明显,而在弯道上车转向比又不够,所以我们经过详细的计算和验证得到了表7-1中所示的排布方式。计算方法如下:1.首先,假设输入(光电管检测到的黑线位置)和输出(舵机的控制量)是线性的关系,实际上,这并不是线性的,我们通过调整每两个相邻光电管之间的距离逼近线性关系。2.假设在运动中,小车的中心线始终在黑线上(这一假设对于计算是必须的,实际中即使偏离黑线也可以取得较好的控制效果)。为了尽可能的提高舵机的反应速度,我们假设在最大偏角处,舵机转向比达到最大,这样对于角度的控制肯定会有一定的超前,在直道上我们需要在软件上采取一定的措施,来克服这种超前;而在弯道上,这种超前对于系统实际上是比较有利的。3.可以把小车看作是一个四轮的刚体,忽略侧滑和车轮差动,在不要求精确计算时,可以认为小车转弯的轨迹切点在四个轮子的重心。对于实际的系统,参数如图6-2所示。4.由于舵机控制量可以看作是与角度偏差成正比的,所以我们只要使得光电管排布与角度偏差成正比就可以使得输入和输出成线性关系。.5.计算最大检测偏角为式6-1:式6-16.那么如果假设从左到右光电管的序号分别是(-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7),则每个光电管离中心轴线距离为式7-2:式6-2计算得到数据如表6-2所示:图6-2光电管位置计算参数图77 表6-2光电管排布理论值光电管编号(以图7-1中0为准)光电管坐标(以图7-1中0处为原点)(mm)-7-117.9-6-99.2-5-81.4-4-64.3-3-47.7-2-31.4-1-15.7115.7231.4347.777 464.3581.4699.27117.9为了使直道上尽可能的稳定,不要摆动太大,我们缩短了角度较小的几个光电管离转轴的距离,这样就得到了表7-1中实测的数据。光电管的排布并没有太多的技术难度,即使设计的缺陷也可以在算法中加以弥补,所以对于光电管排布的调试工组到此结束,路径检测的最终电路板已经定型。6.2AD数据权值调整在5.1节中,我们尽量调整光电管的位置使得,舵机控制的输入和输出线性化。那只是为了方便确定输入值。本节中我们将根据实际系统的灵敏度等参数确定,计算角度偏差输入时AD采样数据的权值。由于,不同的角度偏差要求小车的转向的灵敏度不同,角度越大,希望转的越快,所以对于不同位置的光电管,AD采样值在处理的时候将具有不同的权值,这些在第五章中都有过介绍,这里着重介绍一下权值的确定过程。权值将随着离中心点的距离增长,而且越靠外权值绝对值越大。由于舵机控制的PWM参数大约为17/度,对于最大转向角度设置为[-30,30]度的舵机,输入变化范围是[2250-400,2250+400],2250是转角零度的舵机控制参数。具体的方法就是:调整5.4.1中的数组para中数据的数值。经过实际系统中的不断调试,我们最后使用的数据如表7-3:表6-3AD权值位置-7-6-5-4-3-2-11234567值-16-13-10-7-5-3-11357101316调整步骤如下:为了使得直道上摆动减小,可以适当减小中间的几个数值得间距;为了提高舵机的灵敏性,可以适当增加边上的几个数值得间距;但为了使得小车在S弯道上不至于过渡拐弯,又不能太多的增加边上几个数值的间距。所以必须尽可能的平衡这对矛盾的问题。77 6.3舵机控制PID参数整定如5.5.1中PID控制的数据结构,我们需要的是反复调节PID的各个参数,使得舵机的控制达到最佳状态。实验结果与分析:(1)使用P控制:即式(3-10)中ki=kp=0时,根据光电管位置偏差的编码值设定kp,控制效果如图6-3所示:(a)速度为1m/s时(b)速度为2m/s时图6-3P控制实验结果从图中可以看出,P算法在直线上振荡较小,但速度较大时反应较慢,弯道上过冲较大。(2)使用PD控制:在(1)的基础上增加D分量,即ki=0时,调节kp、kd得到控制效果如图6-4所示:(a)速度为1m/s时77 (b)速度为2m/s时图6-4PD控制实验结果增加D分量后,响应速度变快,弯道过冲变小,但是速度较快时直道上会产生振荡,这和采集到的数据不是连续性和突变性有关。(2)使用PID控制:在(2)的基础上增加积分量后控制效果如图7-5所示:(a)速度为1m/s时(b)速度为2m/s时图6-5PID控制实验结果加上I分量后,产生了明显的振荡,主要原因是控制控制输入量不是连续的变化量,而是跳变的数值,同时为了达到实时的控制,采样时间要短,这样很容易引起积分饱和,并且赛道不同参数调节比较困难。综上比较,为了适应不同赛道的情况,我们选择了PID算法的简化的形式即P控制,虽然这种控制方式在弯道处控制效果不是很好,但可以通过后面纵向控制来减小弯道处的过冲。实验中证明,在恒定速度前提下,6.1,6.2,6.3节的参数已经达到比较好的控制质量,下来我们需要进一步提高小车的速度,所以需要把速度控制加进去,参见5.4节。6.4速度控制模糊控制规则调整77 调整速度模糊控制的参数事实上就是调整表4-2,表4-3的内容,使得小车对于弯道和直道上加速、极速、制动的控制达到最佳的状态,既保证平均速度快,又要保证小车沿引导线走尽量不要脱线,更不能脱离跑道。经过不断校正,我们修改表4-2和表4-3如表6-4和标表6-5所示:表6-4速度控制量PWMDTY1模糊控制规则表输出控制量PWMDTY1角度量01234567当前速度001237777101236777201235677301234567401233456501232345601231234701230123表6-5速度控制量PWMDTY0模糊控制规则表输出控制量PWMDTY0角度量01234567当前速度02221000012222100022222210032222221077 当前速度4222222215222222227622222222222222226.5系统整体调试实验的跑道如图7-6所示:图6-6实验跑道示意图“飞思卡尔”智能车邀请赛的跑道的参数如下:1.赛道路面用纸制作,跑道所占面积不大于5000mm*7000mm,跑道宽度不小于600mm。2.跑道表面为白色,中心有连续黑线作为引导线,黑线宽25mm。3.跑道最小曲率半径不小于500mm。4.跑道可以交叉,交叉角为90°5.赛道为二维水平平面。.6.赛道有一个长为1000mm的出发区,如图7-3所示,计时起始点两边分别有一个长度100mm黑色计时起始线,赛车前端通过起始线作为比赛计时开始或者与结束时刻。从跑道示意图上可以看出,跑道的几个关键点分别是:左上方的入弯处W1、中间的弯道W2、左下方的S型弯道W3。左上方的弯道开始于一段比较长的直道,小车在直道上77 已经得到充分长的时间加速,速度肯定已经在设定最大速度附近,入弯的速度很快,而且这个弯道是先往右拐个小弯在往左拐个大弯,很容易在往左拐的时候冲出跑道,所以一定要在小车制动的程序上下功夫克服这种问题发生在类似的弯道上;中间的弯道处也是因为速度太高,入弯处角度比较小,由于舵机控制的滞后,很容易在偏离引导线之后才能反应过来转弯,所以在此也很容易冲出去,可以调节舵机控制PID参数,提高对弯道的灵敏度;左下方的S型弯道,是一个很头疼的地方,我们人直观的看法是,这种弯道只要直着开过去必然会达到最好的效果,但由于采用了光电管检测引导线,小车并不能对赛道有总体的分析,所以只能知道当前的偏角,而S型弯道偏角的正负剧烈变化,必然使得小车的速度上不去,否则小车摆动将会很严重,或者根本就跟不上引导线,以致脱轨。所以在此,我们尽量通过控制转角、速度、制动相结合的方式,解决此类问题,程序的设计将会变得比较复杂。6.5.2节将会着重介绍在调试阶段出现的几个问题,及其解决方案和效果。6.5.2调试遇到的几个问题及其解决方法1.小车启动阶段的加速问题小车在启动阶段有一个一米的直线加速区,所以我们可以不顾忌其他,一开始使得小车有足够大的加速度使得小车在尽可能短的时间内达到设定的速度;但是,一米的距离如果不控制舵机,初始有偏角时,很有可能导致小车脱离塞道。所以我们只设定了电机控制的初始值使得小车开始时有最大的加速度,同时开启角度控制,这样既可以得到最大的加速度,又可以防止启动阶段没有角度控制,小车脱离塞道。2..直道上小车摆动严重要提高弯道上舵机的灵敏度,我们采取了一种方法,就是增大舵机的转向比,但这样同时又会导致直道上小车的控制过于灵敏,很容易左右摆动明显,影响性能。我们在舵机控制的PID算法里添加了死区控制算法,就可以解决此问题。需要做的只是改变PID参数的大小。当偏角小于DeadE(死区阈值)时,我们假设PID的输入偏差为0,保持上次的输出不变;当偏角大于DeadE时,才计算角度偏差,并计算本次输出。图6-7直道上处理前和处理后的摆动现象77 同样,解决一个就问题,就可能带来新的问题。直道上摆动的问题解决了,可是如果DeadE值太大的时候不利于弯道的控制,因为DeadE值,其实相当于延迟了小偏差的控制,那么在弯道曲率不大的时候,控制将会滞后很多,而在这种塞道段一般速度会比较大,所以很容易出现小车脱离引导线,甚至脱离塞道的现象。因此,我们要很小心的设置DeadE值,在保证弯道正常运动的基础上,尽可能保证直道性能,毕竟直道上小范围的摆动对性能的影响远小于弯道对性能的影响,因为小车沿外道和内道转弯的距离相差很大。3.左上方弯道W1W1弯道上,小车入弯速度很快,小车先向右有一个小弯,然后忽然向左有一个大弯。小车在实际运动时,很容易因为速度太快和舵机控制的滞后,在完成向右的弯道后,左边的弯道不容易回来,或者是向右甩出去很大的距离后才转向左边,我们记录了几次运动的轨迹如图7-8所示,小车在右转弯到左转弯的时候会向前冲出去很多,原因有两点:一是舵机控制滞后,前轮在弯道切换的时候还没有转过来;二是小车速度太快,即使前轮已经转过来,由于塞道摩擦系数小,小车很可能会侧滑一段距离。图7-8W1弯道上小车的运动轨迹77 要解决此问题我们有以下几个方案:一是降低设定速度,这样舵机的滞后和小车的侧滑就不会那么明显,当然这并不是我们想要的;二是增大舵机的转向比,这样只能很有限度的解决弯道切换时舵机转向滞后太大的问题,还是无法解决小车侧移的问题;三是合理利用速度控制的设定速度和制动措施,在入弯处根据弯道大小和当前速度制动,同时给弯道一个比直道上设定值小的速度设定值,这样可以在入弯时使得速度尽可能的降低到可以顺利转弯的范围内,但这个方法需要重新调整模糊控制规则表7-4和表7-5的数据,而模糊控制控制规则的调节是十分麻烦的。但分析以上三个解决方案,我们觉得第三个方案最具有突破性和可行性,因为这个方案既可以保证直道速度,又可以保证弯道的稳定性。如5.4节中介绍的那样调整模糊控制规则表中的数据,使之达到要求。4.中间弯道W2弯道W2的问题主要集中在入弯速度快,但弯道曲率大,此时由于直道偏角控制死区算法的存在,使得舵机在弯道上的控制滞后更多,使得偏角很大的时候才开始转弯,一般这个弯道小车会很容易顺利拐过,但随着死区阈值的增大,小车轨迹将会明显的外移,甚至脱离跑道。因此解决此问题的方法要和解决第2个问题的方法一起考虑,折中处理。图6-9W2弯道上小车偏离轨迹77 4.左下方S型弯道W3在速度和死区阈值太大的情况下,S型弯道处小车表现出明显的摆动太大,轴线偏离引导线很多。这种问题真的是很棘手的,我们没有办法让小车具有全局观,小车只能得到当前的偏角。在这里我们只能做到的就是,折中选择死区阈值和设定速度,使得稳定性和速度达到平衡状态。我们提出了一种方案,可能可以解决此问题,起码可以使小车在S型弯道上运行更稳定,但由于程序复杂性和时间问题没有实现。我们给不同的偏角设置不同的速度设定值,这样在S型弯道处,小车的刹车和速度控制很容易达到平衡。减小弯道上的设定速度,而不减小直道上的设定速度,而且不同大小的偏角具有不同大小的设定速度。图6-10W3处S型弯道的振荡现象5.出弯后的加速问题小车在入弯时一般口会有一个制动的减速过程,使得小车的速度降低到弯道可以接受的范围内,但出弯时如果还保持这个速度,那么小车的平均速度将会减低,出弯时我们给小车一个最大的加速度,使得小车的速度尽可能快的达到设定的弯道速度,在弯道上既保证了入弯时不要脱轨,又保证了弯道内速度尽可能快地达到设定值。77 4.设定速度的调整整个软件的自适应能力其实大部分体现在设定速度和制动控制上,而这两部分也是最容易受到环境因素的影响的。算法设计中唯一明显的缺陷就是:设定速度的大小受到环境的影响非常严重,试想一下在我们制作的赛道上可以以2m/s的速度稳定运行的系统,如果赛道改变,且不论赛道形状的改变(因为赛道规定了最小的曲率半径,所以形状上的差异不会很影响系统运行),但是由于材料不同造成的路面与轮子之间摩擦系数的不同则是致命的,这回严重的影响最大稳定速度和制动时的小车侧移。我们必须根据现场的情况,临时指定最佳的设定速度,或者开始就给一个比较保守的设定速度,使得小车可以尽可能的满足不同材料赛道的要求。但这样就很难提高平均速度了,不利于比赛中取得好的成绩。在接下来的时间里,这一部分还需要进一步的改进。系统调试是一个相当繁琐的过程。对于智能车系统来说:系统调试不仅仅指的是软件上的调试,还包括硬件电路的调试调整、控制算法的选择、控制参数的整定。我们已经确定了硬件电路和机械结构,控制算法已经定型,接下来还需要进一步调整控制参数,使小车的稳定性和性能得到更大的提高。第七节相关技术参数我们在确定了机械结构、硬件电路、控制算法和程序之后,对系统的技术参数进行了测量和记录,见表8-1:表7-1技术参数表参数名(单位)参数备注车模总体重量(g)1048含电池尺寸(cm)39.0×23.2规定上限:40×25平均功耗(mW)1680测量电容总容量(µF)<1245根据实际电路计算传感器个数(个)1514对发射接收光电管,一个霍尔开关其他电机个数(个)0除了原有的驱动电机和舵机77 赛道检测精度(cm)≤1.13根据光电管排布方法估算赛道检测频率(Hz)21834Hz利用BDM调试器,测量多次检测时间,求平均值测得最大偏离(cm)8.3cm小车轴线偏离黑线的最大距离行驶时间(s)117.23S我们让小车行驶4圈,测量每一圈的用时,前两圈顺时针行驶,后两圈逆时针行驶。测试的赛道长度约为26m。216.59S317.13S416.83S平均值1.53m/S最大值1.57m/S注:(解释测量方法或者计算方法)测量的尺寸是最终的作品从最前端到最后端、最左端到最右端的长度。空转时用手或者其他物体给车轮一定的阻力,测量电池输出的电压U=7.0V和电流I=2.4A,利用公式:P=UI=7.0V×2.4A=16.8W求得近似功率。此方法比较粗略,因为小车是运动的,所以很难有更简单的方法测量了。电容总容量计算如:C总=1000µF+2×100µF+4×10µF+C其它≈1245µF路径检测测量的误差我们可以用两对光电管之间最远的距离值得一半来代替(11.05−8.79)/2=1.13cm。我们调试得到10000次测量控制的时间T总=0.458s,测量频率f≈21834Hz我们采用目测的方法求取小车轴线偏离黑线的最大距离。首先,让小车在轨道上正常行驶;其次,我们观测小车行驶时车边缘离黑线最大距离的位置;最后,用直尺测量具体的数值。77 第三章学年论文设计总结本文是以第一届“飞思卡尔”杯全国大学生智能车邀请赛为背景,初步完成了智能小车的硬件系统设计和软件编程工作。该智能小车系统能够通过反射式红外光电管准确检测地面黑线路径,能够较为准确的按照赛道前进,通过测速单元和相应的控制算法可以根据不同的赛道状况实现加速、减速、刹车操作,达到了较高的速度和稳定度,整体控制效果较为理想。综上所述,本论文主要完成的工作如下:1.设计了小车用于导航的反射式红外光电管传感器模块;2.设计了用于电机驱动和控制的电机驱动电路;3.设计了用于电源管理的底板电路;4.给出了光电管位置的数学模型,在此基础上用PID算法实现了横向控制;5.设计并实现了用于小车纵向控制的模糊控制器。本文研究的智能车导航系统是基于反射式红外光电管传感器的,其探测到的前方距离有限,限制了小车最大行驶速度。微处理单元是16位单片机,计算速度较慢。在以后的研究中可以通过采用CCD摄像头并配置较高性能的微处理器来探测前方更远的路径方向,加快行驶速度。对于基于模糊逻辑的转向控制方法来说,模糊规则的建立是极为重要的。规则建立的合理、完善,就可以获得好的效果,但如果考虑不周,就会大大影响智能车的自主驾驶性能。而且规则一旦建立,在运行中就不可以修改,即使发现了问题,修改起来也是极为复杂的。所以有必要使智能车具备自学习(自适应)能力,智能车可以在运行过程中,通过与环境的“交互”来自己学习该如何行走,逐步提高对环境的适应能力。今后这方面的研究将成为智能车的研究重点之一,并将会大大推动人工智能的发展。77 参考资料:[1]全国大学生智能车大赛网站http://www.smartcar.au.tsinghua.edu.cn[2]赵广林著,Protel99SE电路设计与制作,电子工业出版社,2005.2[3]邵贝贝著,单片机嵌入式应用的在线开发方法,清华大学出版社,2004.10[4]于海生著,微型计算机控制技术,清华大学出版社,1999.3[5]施仁、刘文江、郑辑光著,自动化仪表与过程控制,电子工业出版社,2003.3[6]桂小林著,模糊数学原理与应用,西安交通大学电信学院,2002.6[7]范立男、李雪飞、依授远著,单片微型计算机控制系统设计,人民邮电出版社,2004.3[8]田晓皋著,模糊控制原理及应用,西安交大电子与信息工程学院自动控制系,1999.2[9]西安交通大学人工智能与机器人研究所智能车辆课题组http://iv.xjtu.edu.cn[10]秦贵和,葛安林.智能交通系统及其车辆自动控制技术.汽车工程,2001年第2期:92~96[11]王炎,周大威.移动式服务机器人的发展现状及我们的研究.电气传动:2004.4:3~7[12]周航慈.单片机应用程序设计技术.北京:北京航空航天大学出版社.2002[13]程洪,郑南宁,高振海等.基于主元神经网络和K-均值的道路识别算法.西安:西安交通大学学报(自然科学版),2003年第37卷,第8期,pp812-815[14]StevenF.BarrettDanielJ.Pack,EmbeddedSystems,电子工业出版社,2006.3[15]HammondVashisthandPeng-YungWoo,APPLICATIONOFFUZZYLOGICTOROBOTICClONTROL,DepartmentofElectricalEngineering,NorthernIllinoisUniversity,DeKalb,IL60115[16]T.H.OrtmeyerS.Ahmed-ZaidR.MukundanD.Boutwell,AFuzzyVelocityControllerforDCDrives,DepartmentofElectricalandComputerEngineering,ClarksonUniversity,Potsdam,NY13699-5720[17]JohnJ.D’azzo,ConstantineH.Houpis,LinearControlAnalysisandDesign,ForthEdition77 附录:附录A实物图图A-1俯视图图A-2侧视图77 附录B电路原理图图B-1底板原理图图B-2光电探测模块原理图77 附录C电路PCB图图C-1底板PCB图图C-2光电探测模块PCB图77 附录D主要器件清单表D-1器件名称型号数量单片机MC9S12DG1281直流稳压电源LM29401直流稳压电源LM11171直流电机驱动芯片MC33886DH1直流电机RS-380SH1舵机HS-9251霍尔元件CS1011光电管FS-359F14(对)车模电池组Ni-Cd6-SC7.2V2BDM1电阻1KΩ14电阻20kΩ14电容1000uF1电容100uF2电容10uF4电容0.47uF1电容0.22uF1电位器1KΩ1开关1跳线377 附录E源程序/*mainsourcefile:16+s*/#include/*commondefinesandmacros*/#include/*derivativeinformation*/#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"#include"main_asm.h"/*interfacetotheassemblymodule*/#defineBASE16unsignedcharAD_bValue[14];intdistance[14]={-16,-13,-10,-7,-4,-2,-1,1,2,4,7,10,13,16};charValue[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};unsignedintregular1[72]={BASE+150,BASE+150,BASE+150,BASE+150,200,200,200,200,//0BASE+150,BASE+150,BASE+150,BASE+150,200,200,200,200,//1500BASE+5,BASE+5,BASE+5,BASE+10,200,200,200,200,//1750BASE-5,BASE+0,BASE+5,BASE+10,BASE+170,BASE+170,BASE+170,BASE+170,//2000BASE-5,BASE+0,BASE+0,BASE+5,BASE+5,BASE+5,BASE+10,BASE+10,//2250BASE-5,BASE-5,BASE-5,BASE-5,BASE-10,BASE-10,BASE-10,BASE-10,//2500BASE-10,BASE-10,BASE-10,BASE-10,BASE-10,BASE-10,BASE-10,BASE-10,//2750BASE-15,BASE-15,BASE-15,BASE-15,BASE-15,BASE-15,BASE-15,BASE-15,//30000xe5?1:0;Value[1]=ATD1DR1L>0xe5?1:0;Value[2]=ATD1DR2L>0xe5?1:0;Value[3]=ATD0DR0L>0xe5?1:0;77 Value[4]=ATD0DR1L>0xe5?1:0;Value[5]=ATD0DR2L>0xe5?1:0;Value[6]=ATD0DR3L>0xe5?1:0;Value[7]=ATD0DR4L>0xe5?1:0;Value[8]=ATD0DR5L>0xe5?1:0;Value[9]=ATD0DR6L>0xe5?1:0;Value[10]=ATD0DR7L>0xe5?1:0;Value[11]=ATD1DR5L>0xe5?1:0;Value[12]=ATD1DR6L>0xe5?1:0;Value[13]=ATD1DR7L>0xe5?1:0;velocitycount=velocitycount_temp;}intabs(inta){returna>0?a:-a;}subjectionanglesubjection(intangleindex,intIR_num){subjectionangle;inti=0;if(angleindex>=0&&angleindex<=distance[7]){angle.sub_class=0;angle.p2=angleindex*100;angle.p1=(distance[7]-angleindex)*100;}for(i=7;i<13;i++)if(angleindex>distance[i]&&angleindex<=distance[i+1]){angle.sub_class=i-6;angle.p2=(angleindex-distance[i])*100/(distance[i+1]-distance[i]);angle.p1=(distance[i+1]-angleindex)*100/(distance[i+1]-distance[i]);}if(angleindex==0&&IR_num==0){angle.sub_class=7;angle.p2=0;angle.p1=100;}returnangle;}subjectionvelocitysubjection(wordvelocity_count){inti=0;subjectionvelocity;if(velocity_count<=1500){velocity.sub_class=0;velocity.p2=velocity_count/15;velocity.p1=(3000-velocity_count)/15;}if(velocity_count>1500&&velocity_count<=3000){for(i=0;i<6;i++)if(velocity_count>1500+250*i&&velocity_count<=1500+250*(i+1)){velocity.sub_class=i+1;velocity.p2=(velocity_count-1500-250*i)*2/5;77 velocity.p1=(1500+250*(i+1)-velocity_count)*2/5;}}if(velocity_count>3000){velocity.sub_class=7;velocity.p2=0;velocity.p1=100;}returnvelocity;}voidmain(void){//putyourowncodehere/intDutytemp=0;intangleindex=0;intpre_angleindex=0;inti=0;intj=0;intIR_num=0;unsignedintsub=0;unsignedintp0,p1,p2,p3=0;subjectionanglesub;subjectionvelocitysub;unsignedintPWMDTY1_temp=0;unsignedintPWMDTY0_temp=0;EnableInterrupts;asm_main();//calltheassemblyfunction/TimerSet();AD_Init();PWM76SET();PWM1SET();PWM0SET();DDRB=0xFF;PORTB=0xe7;for(;;){if(PORTA_BIT0==1){PORTB=0x7f;sub=0;}if(PORTA_BIT1==1){PORTB=0xbf;sub=5;}if(PORTA_BIT2==1){PORTB=0xdf;sub=10;}AD_GetValue();//---------------------------anglecontrol-----------------------------------Dutytemp=0;angleindex=0;77 IR_num=0;for(i=0;i<14;i++){angleindex+=Value[i]*distance[i];IR_num+=Value[i];}if(IR_num!=0){angleindex=angleindex/IR_num;Dutytemp=2250-20*angleindex-0*(angleindex-pre_angleindex);PWMDTY67=Dutytemp;pre_angleindex=angleindex;}///--------------------------velocitycontrol-------------------------------//---------求出角度、速度子集及其隶属度---------anglesub=anglesubjection(abs(pre_angleindex),IR_num);velocitysub=velocitysubjection(velocitycount);//---------minimuterule-----------------p0=anglesub.p1=sub?PWMDTY1_temp-sub:PWMDTY1_temp;PWMDTY1=(byte)PWMDTY1_temp;PWMDTY0=(byte)PWMDTY0_temp;///---------------------------------------------------------------------------------if(PWMDTY0_temp<=100)PORTB=0x00;elsePORTB=0xe7;}//*waitforever///*pleasemakesurethatyouneverleavethisfunction}77'