版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八届全国大学生智能汽车邀请赛技术报告第八届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告学校:湖北汽车工业学院队伍名称:电磁二队参赛队员:魏超王艳明王兴伟带队教师:雷钧高志敏关于技术报告和研究论文使用授权的说明 本人完全了解第八届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。参赛队员签名: 带队教师签名: 日期: 引言背景介绍飞思卡尔杯全国大学生智能车竞赛以“立足培养,重在参与,鼓励探索,追求卓越”为指导思想,涵盖了机械、模式识别、电子、电气、传感技术、计算机、自动化控制、汽车理论等多方面知识,从一定程度上反映了当代大学生综合运用所学知识和探索创新的精神。同时该赛事是教育部高等教育司委托(教高司函[2005]201号文),由教育部高等自动化专业教学指导分委员会(以下简称自动化分教指委)主办的全国性/多学科交叉、趣味性、创新性赛事,旨在加强大学生实践与团队合作精神,促进高等教育改革。竞赛规则透明,评价客观标准,坚持公开、公平、公正的原则,从而保持了竞赛的健康、普及、持续的发展。鉴于飞思卡尔全国大学生智能车竞赛已成功举办了5届,大赛前年为了扩展赛道检测的多样化和锻炼学生的各项能力,在原来的摄像头组与光电组基础上新增以20KHZ、100ma交变电流(方波)为引导方式的电磁组。学校积极响应教育部关于加强大学生的创新意识、合作精神和创新能力的培养的号召,成立智能车队伍参加比赛。我们积极组队参加第八届“飞思卡尔”杯全国大学生智能车比赛,多方搜索资料。由于电磁组的信号采集与摄像头组和光电组有很大差别,所以我们延续了很多学校包括杭州电子科技大学在内所使用的工字谐振电感作为传感器来检测信号,加以合理的传感器布局,经过后续电路处理,完成对赛道信号检测并以此来控制车子的转向和行驶速度。关于软件,我们采用鲁棒性较强的PID控制算法来作为车子的主导控制。为满足智能车在高速与急转等恶劣情况下的动力性能和稳定性能,我们参考了前几届的队伍参赛经验,经过深思熟虑对整车经行了合理的重心与电路等的布局。本技术报告主要讲述电磁二队智能车的制作历程,包括机械和硬件的设计、改装,HCS12单片机的学习和使用,控制算法的研究与应用,车模机械参数的讨论和修改等。为了提高全国大学生智能汽车竞赛创新性和趣味性,激发高校学生参与比赛的兴趣,提高学生的动手能力、创新能力和接受挑战能力。图1.1小车整体图控制简述由于传感器感应得到的电压信号只有几十mv,所以我们采用集成运放把信号进行放大,然后将其检波为直流电平送入XS128的AD口。同时编码器的信号也同步输入,由计数芯片HEF4520BT计数,从而计算得到车子行驶的速度。舵机采用PID控制算法进行控制,并且加入连续控制函数进行修正,使前轮的转向更加具有连续性和精确性;采用增量式PID控制XS128PWM通道的占空比而调整电机输出功率。电磁组的优势与劣势电磁组的信号采集与处理与摄像头组和光电组有很大差异,所以对于信号的采集问题,我们曾经尝试过磁敏二极管、磁敏电阻、谐振电感等方法,后来发现谐振电感的效果较好。电磁组的信号由LC并联谐振得到,相比摄像头和光电,信号为模拟信号,而且赛道的磁场信号会发生叠加与抑制等。磁场是三维矢量,在空间的分布有很大的方向性和对称性,水平变化率和竖直变化率有一定联系和区别,从而我们将传感器放置为对赛道信号变化敏感的方向以便最快、最灵敏的检测到赛道变化引起的信号变化。这一点可以参考官方的文档:《电磁小车设计参考》。机械结构设计及体现智能小车的机械性能对于其行驶表现具有非常重要的影响,任何控制算法和软件程序都需要通过智能小车的机械结构来执行和实现。为使模型车在比赛中发挥出最佳性能,使其直线行驶高速稳定,入弯转向灵活,结合现代汽车控制理论对智能车的运动特性进行分析,并据此对智能小车的机械结构进行相应的调整和参数优化。1.1主板、电池等电子器件的安装前期在对电路主板进行组装时,由于布置不当,致使做软件的同学调整电子器件参数非常麻烦,比如调节电位器参数的时候,芯片主板将电位器覆盖,每次调试时都需要将芯片主板取下来在进行调节,这种方法费时费力。后来将两块电路板采用错落叠层分布式组装,并将电位器调节钮裸露出来。这种排布方式,使调节起来更加快捷,而且也节省了空间。如图1.1所示在后期的组装过程中,我们以简单、方便、便捷为指导思想,进行组装。另外在保证顺利通 图1.1电路板组装过坡道的前提下,底盘尽量降低,从整体上降低模型车的重心,可使模型车转弯时更加稳定、高速。1.2舵机安装式德国站维特尔车辆的机械性能的优劣,在高速时体现的尤为明显。好的机械性可以高速流畅的运行,并且能够适应不同摩擦系数的赛道,其稳定性不会随时间改变而改变。在对小车的组装过程中,我们不断摸索,不断总结,发现舵机安装的对称性,能有效提高小车的稳定性。而对四轮定位的主要参数进行调整,则能够显著改善高速时的过弯性能。舵机的灵敏程度同样对小车高速时的性能有着至关重要的作用。 图1.2小车总体布局机摆杆是将舵机的旋转运动转换成横摆运动的一种机构。在智能车比赛里,通过它将舵机转矩传递到连接轮子上面的横拉杆,实现轮子的左右转动,从而实现转向。转向在智能车比赛中是至关重要,而摆杆的设计直接关系到智能车转向灵敏度。舵机转矩=舵机摆杆作用力*摆杆长度通过公式可以得出:拉杆作用力越大,反应越灵敏,转向速度越快!转矩一定时,摆杆越长,作用力就越小,所以摆杆又不能太长。经过实验,我们选择舵机摆杆的长度在30mm比较合适。同时最终的转向机构还应该尽量满足符合阿克曼转向理论,依据阿克曼转向几何设计的车辆,沿着弯道转弯时,利用四连杆的相等曲柄使内侧轮的转向角比外侧轮大大约2~4度,使四个轮子路径的圆心大致上交会于后轴图1.3阿克曼转角调整的延长线上瞬时转向中心,这样可以使车辆在过弯时转向轮处于纯滚动状态,减少过弯时的阻力,减小轮胎的磨损。示意图如1.31.3前轮定位的调整车辆在高速过弯时,转向舵机的负载会因为车轮转向角度增大而增大。为了尽可能降低转向舵机负载对前轮的安装角度;对前轮定位进行了调整,使车辆直线行驶更稳定,转向更轻便,转向后能自动回正,减少轮胎和转向系零件的磨损。前轮是转向轮,它的安装位置由主销内倾、主销后倾、前轮外倾和前轮前束等4个参数决定,反映了转向轮、主销和前轴等三者在车架上的位置关系。1.3.1Toe_In(主销内倾)主销内倾是指主销装在前轴略向内倾斜的角度,它的作用是使前轮自动回正。角度越大前轮自动回正的作用就越强烈,但转向时也越费力,轮胎磨损大;反之,角度越小前轮图1.4主销内倾效果图自动回正的作用就越弱。1.3.2Caster(后倾角)Caster(后倾角)是指转向杯的旋转轴向车子后方倾斜的角度。正值的Caster旋转轴顶部倾向后方。它使车辆转弯时产生的离心力所形成的力矩方向与车轮偏转方向相反,迫使车轮偏转后自动恢复到原来的中间位置上。由此,主销后倾角越大,车速越高,前轮稳定性也愈好。可以通过改变悬挂上前后黄色小垫片 图1.5主销后倾效果图的数量(原车前后各有两个黄色小垫片,主销处于垂直状态),当模型车需过坡道,或在比较颠簸的路面行驶时,主销宜有一定后倾角,但后倾角不能过大,否则会产生过大的回正力矩,导致模型车在出弯进入直道时发生左右摆动。1.3.3Camber(内倾角)Camber(内倾角)就是轮子的上端倾向或者倾离车身的角度。负值的Camber角度指车轮上端向内倾,正值的Camber指车轮上端向外倾。Camber的主要作用是控制轮胎在直路和弯路的接触地面的面积。前轮前束的作用是保证汽车的行驶性能,减少轮胎的磨损。前轮在滚动时,其惯性力会自然将轮胎向内偏斜,如果前束适当,轮胎滚动时的偏斜方向就会抵消,轮胎内外侧磨损的现象会减少。图1.6小车前束效果图1.4前悬挂调整在调试车的过程中我们发现,在高速通过急转弯时,前轮会出现较大的跳动,严重影响车辆行驶的稳定性,经过我们小组成员的查阅资料分析得出是悬架上原装的弹簧的刚度较大,因此我们换用较软的弹簧,经试验在高速过弯下跳动明显改善。1.5后悬架改善在前述四轮定位中提到,当前轮转弯时,符合阿克曼定理,过弯时车轮属于纯滚动状态,此时过弯时最为流畅,且弯道速度进一步提高。然而实际上在对前轮进行四轮定位时,不可能完全符合阿克曼定理。为达到理想效果,我们对小车的后悬架进行了改进。我们在车模地板与后轮支架的衔接过渡处左右各增设一个刚度适合的弹簧,在过弯时利用小车自身的离心力使前轮轴线与后轮轴线能相交于一点,从而达到改善弯道性能的目的。此外,在尝试的过程中,我们能发现,若后悬架沿底板中心轴线旋转限位过大,高图1.7小车随动实体图速过弯道时,势必会内侧后轮与赛道悬空,使小车出现抖动迹象。为解决此问题,并且预留一定限位,我们在连接片上方增设了一个限位片,最后有效解决了此问题。 1.6轮胎选用轮胎是选用对小车的影响也是尤为重要。轮胎的质地直接影响到摩擦力的大小,摩擦较小时,过弯道时就容易出现滑移,甩尾等现象。未拆装的模型车的轮胎表面一般都经过防氧化处理,在灯光下观察,有明显的反光现象,说明表面过于光滑。此时,需要对轮胎表面略作处理,以增大摩擦力。1.7差速结构调整差速结构的作用是在车模转弯的时候,降低后轮与地面之间的滑动;并且还可以保证在轮胎抱死的情况下不会损害到电机。差速器的特性是:阻力越大的一侧,驱动齿轮的转速越低;而阻力越小的一侧,驱动齿轮的转速越高,以此次使用的后轮差速器为例,在过弯时,因外侧前轮轮胎所遇的阻力较小,轮速便较高;而内侧前轮轮胎所遇的阻力较大,轮速便较低。差速器的调整中要注意滚珠轮盘间的间隙,过松过紧都会使差速器性能降低,转弯时阻力小的车轮会打滑,从而影响车模的过弯性能。好的差速机构,在电机不转的情况下,右轮向前转过的角度与左轮向后转过的角度之间误差很小,不会有迟滞或者过转动情况发生。1.8齿轮间隙调整正常情况下小车在运行时声音是非常小的,理想状态下是没有声音的。小车运行时的声音来源主要有两个方面。其一,车轮与赛道产生滑移时所产生的声音。产生这种原因,可能是前轮的四轮定位没做好,转弯不够灵活。其二,齿轮盘与电机齿轮之间间隙过大或过小,以及电机长时间工作,齿轮磨损严重。齿轮盘与电机齿轮间的间隙过小时,电机转动时,声音刺耳嘈杂,此时需调整电机齿轮与齿轮盘间的距离,使两齿轮齿顶与齿根间的间隙大约1mm。若在两齿轮间滴一定润滑油也可使声音更小,需要注意的是润滑油不能侵入齿轮盘内,否则将会使差速失效。电机若长时间不更换,将会使电机齿轮磨损严重,齿形将会变的很尖,使得齿轮啮合间隙增大。在这个时候,小车拿在手里电机转动时,声音比较小,一旦放到赛道上时,声音就会很大很刺耳,这就需要更换新电机。 第二章传感器分析与布局2.1电磁感应原理电磁组的智能车是基于100mA的交变电流产生的电磁场上,为了容易研究小车的策略必须先了解相关的电磁场知识。由于赛道是通有20KHz交变电流的导线,因此需要通过检测导线周围所产生的电磁场确定道路与小车的相对位置。磁场传感器利用了物质与磁场之间的各种物理效应,如磁电效应(电磁感应,霍尔效应,磁致电阻效应),磁机械效应,核磁共振等。现代检测磁场的传感器有很多,常见的有磁通门磁场传感器,磁阻抗磁场传感器,半导体霍尔传感器、磁敏二极管,磁敏三极管。因为各种传感器测量磁场所依据的原理不相同,测量的磁场精度和范围相差也很大,10-11~107G。图3.1为各类磁场传感器的测量范围示意图。 图2.1各类磁场传感器的测量范围示意图先估算赛道的磁场强度。把赛道看作无限长直导线,载流为直流100mA,距离导线r=5cm时,由毕奥-萨伐尔定律知,磁场强度B如(公式1):(公式1)一般霍尔元件的检测范围在1mT以上,即10G以上,可以想象到需要贴着地面进行检测,而且精度大大受到限制。磁阻传感器如Honeywell的高灵敏度磁阻HMC1001,分辨率可达27微高斯,还可以使用多轴的磁阻传感器检测不同方向的磁场。普通的电感线圈测量范围广,理论上只要加上合适的谐振电容和放大电路,不但能够筛选出特定频段进行放大,而且有较强的抗干扰能力。我们需要选择适合车模竞赛的检测方法,除了检测磁场的精度之外,还需要对于检测磁场的传感器的频率响应、尺寸、价格、功耗以及实现的难易程度进行考虑。由于霍尔元件和磁阻传感器的检测精度比较低,价格比较高。因而我们选取最为传统的电磁感应线圈的,它具有原理简单、价格便宜、体积小、频率响应快、电路实现简单等特点。感应线圈可以自行绕制,也可以采用市面上的工字电感。2.2传感器布局根据电感的摆放方向不同,采集的信息也不同。一般可规范为4类方向:以跑道所在的平面为水平面,车前进的方向为x方向,在水平面上与x垂直的为y方向,垂直于水平面的为z方向水平摆放,如图所示:图2.2.1传感器摆放图1这是最简单的摆放方式,但却拥有了其它摆放方式所没有的稳定性,具有单调性,对于稳定求快的队伍采用水平摆放是比较好的选择如官方文档所示:图2.2.2磁场坐标图图2.2.3B'Z的曲线图实际使用过程中,当水平两个电感之间的距离越远,得到的赛道信息也越丰富,一般都采用接近小车限定的宽带,如24CM左右。一般水平摆放的电感离跑道距离在12CM左右线性比较好。该摆放的优点是稳定性好,不管是十字交叉弯还是上下坡道都可以顺利完成,谐振电压还算比较大。缺点是只能检测到电感垂直下去所在的线上,没有提前预判的作用。向前摆放,如图所示图2.2.4传感器摆放图2向前摆放的电感一般会有5~10或者更大的前瞻,谐振回来的电压较小。缺点是在十字弯不是垂直入或者不是垂直出弯时会在十字交叉弯里面兜圈。垂直摆放,如图所示图2.2.5传感器摆放图3垂直摆放的谐振电压算最大,但是往往会在十字交叉弯时忽略了十字弯直接转向另一边,前瞻性虽然比较大,但没有前向摆放的好,还有的缺点是在水平偏离导线是并非呈现线性。有一定角度的摆放由于没有多余的时间实践,好处是检测到更丰富的信息。缺点是需要滤掉更多的干扰。我们小车的传感器实图:
2.3电磁感应线圈在磁场中的特性为了讨论方便,我们作以下约定:(1)小车车体坐标系中,定义小车前进的方向为Y轴正向,顺着Y轴的右手边为X轴的正向,Z轴指向小车正上方,如图3.2.1所示;(2)水平线圈是指轴线平行于Z轴的电感线圈,垂直线圈是指轴线平行于X轴的线圈,轴线平行于Y轴的线圈所感应到的电动势远小于上述两类线圈,但该类摆放线圈在回环路检测中将可以用到。(3)BX是指向载流导线右手边的电磁感应强度,BZ是指向载流导向正上方的电磁感应强度。显然,垂直线圈感应的是BX变化率,水平线圈感应的是BZ的变化率。图2.3.1假定车体坐标系直道附近的磁场分布,可以近似为无限长的直导线上的磁场分布,容易算得距离长直导线距离为r的点的磁感应强度如(公式2):(公式2)进而可以推出:(公式3)(公式4)其中h是电感线圈距离地面的垂直距离。为了讨论的方便,记(公式5)(公式6)则从(公式3)、(公式4)、(公式5)、(公式6)可以得出B'X、B'Z分别和BX、BZ有相同的变化趋势。图3.2.2和图3.2.3显示了当分别取h为5、8、10时B'X和B'Z的变化趋势。由图可知:(1)B'X是x的偶函数,在Y轴两侧单调;B'Z是x的奇函数,在Y轴两侧没有单调关系;(2)在相同的高度下,B'X幅值是B'Z的两倍,但是在x=20的时候,B'X只有B'Z的一半左右了,因此B'X的衰减较B'Z快很多。综上可推知,水平线圈比较适合做x的正负判别,垂直线圈比较适合用来解算x的具体数值,B'Z较B'X衰减慢得多,说明水平线圈对远处道路状况相对比较敏感,可以用来预测前方的弯道。图2.3.2B'X的曲线图图2.3.3B'Z的曲线图第三章硬件电路设计整个硬件系统采用的是模块化的设计思想,整体的硬件框图如下图所示:电源模块电源模块S12XS128控制核心停车检测模块控制器模块检波放大电路模块测速模块前轮转向模块电机驱动模块3.1循迹传感器放大电路1、双电源运放采用双电源运放可以得到很大的输出直流电压,但是多圈高精度滑动变阻器对信号影响较大,往往在弯道发生突变电压。可能是负电源做的不好,我们采用单电源供电,由于需要放大的信号是非常弱的信号,所以需要运放的单位增益带宽比较大(至少1M以上),这样对小信号的放大作用就比较好,经过对比选择,我们最终选择了NE5532。图3.1.1寻迹放大电路如上图,采用NE5532放大电路,可以避免信号失真,同时线性度够好。而且放大电路简单,有一个2.5V左右的抬压就不需要负电压,便于电路的设计,最后我们采用了NE5532放大电路作为谐振电压的放大电路。3.2测速模块测速模块用了500线AB两相的编码器作为测速传感器,经过换算12ms定时器计算一次速度,每5ms调一次图3.2.1编码器输出波形图3.3电机驱动模块驱动的选择:1、采用专用芯片BTN系列的79713.3.1BTN7971驱动电路图3.4主板电路设计电源作为小车的核心,除了满足小车所需,尽量简单稳定。主要用了TPS7350单独为单片机供电,另一个给检波电路和直立传感器供电。经过测试使用,TPS7350的性能很好。图3.4.1电源模块图3.4.2主板原理图3.5转向部分电路设计按照规则要求本次电磁车用的是大赛要求的FUTABA3010舵机,用下图电路提供舵机的供电电压图3.5.1舵机供电电路3.6停车检测部分关于停车检测,根据大赛提供的磁铁,我们选用干簧管并联进行检测,通过单片机的输入捕捉模块对小车进行停车控制。第四章软件控制算法及策略4.1智能车软件控制算法及策略4.1.1软件系统设计及整体思路在本届智能车比赛中,我们选择了MC9S12XS128为核心控制芯片,CodeWarriorIDE为软件开发环境。软件控制基本是按照路径识别=>舵机控制=>速度控制。首先,采用单片机的AD模块进行路径信息采集与识别;然后,通过采集到的数据计算出小车距离赛道中线的距离,控制舵机转向;最后,利用脉冲计数功能对小车的速度进行检查,计算出速度偏差来控制电机,从而达到设定的速度。除此之外,还用到了单片机的电源管理模块,电机驱动,无线模块等。4.1.1软件的整体设计框图4.2程序整体思路程序上电复位后,先进行初始化,包括时钟初始化、I/O端口初始化、PWM初始化、ATD初始化、ECT初始化等,对各个全局变量进行必要的初始化设置。然后进入for()无线循环函数,进入等待中断模式,通过外部的两个个按键设置不同的模式,包括速度的选择减速程度的选择等,通过PIT中断定时进行速度和方向的控制。4.2.1程序初始化voidInit_Dev(void){SetBusCLK_64M();AD_init();Pit_Init();Pwm_init();PORTA_Init();PORTB_Init();PORTE_Init();PORTJ_Init();PORTP_Init();PORTS_Init();PORTT_Init();PORTM_Init();DFlash_Init();UART_Init();}4.2.2主函数voidmain(void){/*putyourowncodehere*/Init_Dev();delay(1000);PITCE_PCE0=1;//中断使能ATD0CTL5=0x30;CarInit(); EnableInterrupts;for(;;){if(Process_Flag){Process_Flag=0;sprintf(txtbuf,"\n_%d___%d___\n",(int)(Offset*10));uart_putstr(txtbuf); //串口输出字符串delay(1000);/**//*OutPut_Data();*/}_FEED_COP();}}4.2.3PIT中断函数 voidinterruptVectorNumber_Vpit0VPIT0(void){//时间2msinti;asm(MOVB#$01,PITTF);//程序执行时间1ms if(StartFlag==1){start_delay++;if(start_delay==1250){//延时2.5s启动StartFlag=2;start_delay=0;}} SampleCarVoltage();DirectionControl(); GetMotorPulse();SpeedControl(); Process_Flag=1; }4.3传感器信号采集处理算法 我们都知道单片机的AD模块只能转换正电压,而我们传感器感应到的是正弦波,所以外部电路把正弦波抬高。那么我们AD转换以后的值一定要把这个抬高的电压(后简称抬压)减掉才能真正表示传感器采集到的信号。这个抬压的确定有两种方法:其一就是直接用万用表测量硬件电路相关引脚上的电压,编程时直接减掉;其二就是软件实现,将AD转换到的值进行累加,求出平均值,这个平均值当做抬压。 实际中,虽然每路信号的抬压是共用一个电压源的,但是由于电感的不同以及硬件的细小差别,往往导致每路信号的抬压不一样,这时候,第二种确定抬压的方案明显有优势,不需要外部测量,更不需要分路给定。综上所述,我们选择第二种方案。具体程序如下:Mag_data0[CarVoltageCount]=ATD0DR0; CarVoltageSigma[MAGNET_0]+=ATD0DR0; CarVoltage[i]=(unsignedint)(CarVoltageSigma[i]/CarVoltageCount); CarVoltageSigma[i]=0; CarVoltageSigma[0]+=N_Abs(Mag_data0[j]- CarVoltage[0]);MagnetSensor[0]=((int)(CarVoltageSigma[0]/CarVoltageCount));4.4传感器方案设计及路径识别算法 对智能车来说,传感器是个相当重要的部分,就好比人的眼睛一样。传感器的稳定性以及传感器的布局,都直接影响了赛道路径的识别。 对于直导线,当装有小车的中轴线对称的两个线圈的小车沿其直线行驶,即两个线圈的位置关于导线对称时,则两个线圈中感应出来的电动势大小应相同、且方向亦相同。若小车偏离直导线,即两个线圈关于导线不对称时,则通过两个线圈的磁通量是不一样的。这时,距离导线较近的线圈中感应出的电动势应大于距离导线较远的那个线圈中的。根据这两个不对称的信号的差值,即可调整小车的方向,引导其沿直线行驶。 但是,当两个线圈偏离导线较远时,他们感应的电动势差值就会随着他们离导线的距离增大而减小了,当传感器前瞻比较大时,这样的算法就完全不行。所以我们要另寻他路。 根据毕奥萨伐尔定理可知,如果导线的电流不发生变化时,电感的感应电压通过后级电路后产生的直流电平正比于sinθ/(h^2+l^2),其中h为传感器距离导线的竖直距离,L为传感器距离导线的水平距离,θ为工字电感与导线的夹角。把传感器的高度测出来,代入水平方向放置的两个电感数值就可以得到L和θ的具体数值。从而就可以算出偏移距离。在通过水平放置的两个电感就可以知道传感器是往那边偏的,最后就得到了偏移量。最终我们的传感器选择了四个电感的排布方案。4.5速度控制算法与方向控制策略 1.PID控制算法 PID控制是工程实际中应用最为广泛的调节器控制方法。问世至今70多年来,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。 PID控制系统原理框图如下:其基本控制规律为:式中,P、k、I、k、D、k分别被称为比例系数、积分系数和微分系数,e为输入与输出间的误差。在使用离散的数字量代替该式的连续量后,可以得到PID控制的离散形式,即数字PID控制方式,便于计算机进行运算和处理。式中,Ti为积分时间常数,Td为微分时间常数。从以上公式可知,控制器的输出由三个部分组成:(1)比例控制部分:只要偏差e一出现,控制器立即产生控制作用,使被控参数朝着减小偏差的方向变化,具有控制及时的特点。但控制作用的强弱取决于Pk的大小,过小时控制作用不明显,过大时会使系统动态品质变坏,引起被控量的振荡而导致系统不稳定。(2)积分控制部分:只要偏差e不为0,它将通过累积作用影响控制量,以求减小偏差。偏差为0时不再变化,系统达到稳定。所以积分作用的加入,可以消除系统静差。积分时间Ti小,积分响应速度快,积分作用强。增大Ti将减慢消除静差的过程,降低响应速度,但可以减小超调,提高系统稳定性。(3)微分控制部分:只要偏差出现变化趋势,即使很小,也会立刻产生控制作用,以调整系统的输出,阻止偏差的变化。它是一种“超前”控制作用,在偏差出现或变化的瞬间作用明显。偏差变化越快,反馈校正量越大。微分控制有助于减小超调、克服振荡,使系统趋于稳定。在实际应用中,根据被控对象的特点,合理调节三个参数,就能达到比较理想的控制效果。在目前的许多工业控制领域,其应用仍相当广泛。2PID参数的作用1、比例环节:即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生,调节器立即产生控制作用以减小偏差。2、积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数TI,TI越大,积分作用越弱,反之则越强。3、微分环节:能反应偏差信号的变化趋势(变化速率),并能在偏差信号的值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。3方向控制算法 考虑到积分饱和的问题,在实际方向控制中,我们采用了PD控制算法。fDelta=Offset-Offset_Last;fP=DIR_CONTROL_P*Offset;fD=DIR_CONTROL_D*fDelta;DirectionControlOut=(int)fP+(int)fD;其中的DIR_CONTROL_P和DIR_CONTROL_D是我们在调试过程中根据实际效果确定下来的参数。4.5.1速度控制算法纯比例控制会存在一个静态误差,而积分主要用于消除静差,提高系统的无差度。所以速度控制我们采用PI控制。nDelta=CarSpeedSet-CarSpeed;fP=nDelta*SPEED_CONTROL_P; fI=nDelta*SPEED_CONTROL_I; SpeedControlIntegral+=fI; SpeedControlOutNew=fP+SpeedControlIntegral;其中SPEED_CONTROL_P和SPEED_CONTROL_I是调试的经验值,最终调试的速度控制曲线如下图:其中,红色为设定速度,红色为小车实时速度,紫色为积分量。4.5.2调速策略 首先设定一个整体速度CarSpeedSet弯道部分:电磁组前瞻较小,S道处理较困难,S道的处理的好坏对整体速度有较大的影响。处理方法如下:初始化一个容量为50的数组,记录每次的弯曲度,动态更新数组。然后对50个数据求绝对值和和代数和,如果代数和绝对值很小,则车在直道,如果代数和和绝对值和较小,但是前20个数据较大,则可以判定小车在出弯,如果代数和和绝对值和较小,后20较大,则判定小车在入弯,如果代数和很小,但绝对值和很大,则在s弯道。经过调试,虽然有一点滞后性,还可以继续完善。但是这个算法可以非常好的处理弯道。 直道部分:小车在直道上运行时偏移量是很小的,这是我们可以充分的加速。首先判别出直道,具体做法如下:初始化一个容量为10的数组,小车每前进4cm就把偏移量记录一次,实时更新。然后对这10个数据进行分析,如果10个偏移量都小于3,则判断我直道,这是设定速度就提升一个档位。速度提升的档位可以根据实际的调试效果来确定,最终的加减速效果还是很明显的。 经过以上的速度控制策略分析最终我们的速度控制部分程序如下:fDeltasmall_count=0;Offsetsmall_count=0;Offsetmin_count=0;for(j=7;j>=0;j--){if(N_Abs(Offset_[j])<=8)Offsetsmall_count++;if(N_Abs(Offset_[j])<=3)Offsetmin_count++;}for(j=5;j>=0;j--){if(N_Abs(fDelta_[j])<=1)fDeltasmall_count++;}if(StartFlag==2&&CarStopFlag==0){if(fDeltasmall_count>=5){Prespeed=(int)(CarSpeedSet*12.5/10);//PORTB=0X00;}else;//PORTB=0Xff;if(Offsetsmall_count>=7){Prespeed=(int)(CarSpeedSet*12.5/10);//PORTB_PB1=0;}else;//PORTB_PB1=1;if(Offsetmin_count>=8){Prespeed=(int)(CarSpeedSet*13.5/10);PORTB=0X00;}else{PORTB=0XFF;}}nDelta=Prespeed-CarSpeed-F_Abs(fDelta*2)-F_Abs(Offset/2);//F_Abs(fDelta)最大在15--20之间 if(nDelta>=10)fP=nDelta*SPEED_CONTROL_P1;//速度差比例积分elsefP=nDelta*SPEED_CONTROL_P; fI=nDelta*SPEED_CONTROL_I; SpeedControlOutOld=SpeedControlOutNew; SpeedControlOutNew=fP+SpeedControlIntegral; nValue=SpeedControlOutNew-SpeedControlOutOld;if(nMotorVol>0){PWMDTY1=(unsignedchar)nMotorVol; PWMDTY5=0;}else{ nMotorVol=-nMotorVol; PWMDTY1=0; PWMDTY5=(unsignedchar)nMotorVol;}4.6小结软件部分是整个控制系统的核心。首先要解决的一个难点就是怎么样准确的提取赛道信息,算出控制需要的小车偏移量,不同的设计方案,算出来的小车位置信息就不一样,控制也就会受到影响;其次,怎样根据算出的小车偏移量来很好的控制舵机打角,控制的不好会直接影响小车的运行轨迹。最后就是怎样将舵机打角和速度控制相互配合,这将会影响小车的整体运行速度。配合的好,小车不仅运行稳定,而且速度也不会低。这就需要调试过程中尽量多的取分析数据,以达到精确控制!第五章开发与调试5.1BDM调试BDM调试界面如下:5.2上位机调试我们这调车过程中主要用到了一下两种上位机进行调试的。在这些上位机的数据窗口中,我们可以看到单片机内部的一些寄存器以及程序中定义的变量,这对我们调试程序是很有帮助的。虚拟示波器用来调速是一个非常方便的调试工具,它的界面如下:第六章智能车相关技术参数说明项目参数路径检测方法(赛题组)电磁组车模几何尺寸(长、宽、高)(毫米)710、250、170车模轴距/轮距(毫米)150电路功耗20W电路电容总量(微法)1683uf传感器种类及个数3种电感4个编码器1个干簧管4个新增加伺服电机个数0个赛道信息检测空间精度(毫米)10mm赛道信息检测频率(次/秒)200电路主要元器件种类/数量HEF45201片TPS73502片BTS79602片NE55325片车模重量(带有电池)(千克)0.898第七章鸣谢作为一个融合多学科交叉的的复杂系统,完成整智能车的设计、制作和调试是一个非常庞大的工程,仅靠几名队员是很难完成的,它需要一个高效运作、规范管理的团队的紧密合作才能完成。感谢指导老师们在技术上的指导、物资上支持和多方面的帮助。感谢学院提供的调试场地和测量仪器。同时感谢各个队伍之间在技术上进行的交流和在技术上的对我们提供的帮助,虽然是不同组别,但对我们的小车的提高起到不小的作用。最后还要感谢我们每一位队员在这么长的时间里不懈地努力,付出了不少的汗水,最后能够取得一定的成果。整个比赛的过程,磨练了每个队员的意志,提高了队员的素质,总体而言,我们学到了很多,提高了很多,这将对以后的学习和工作起到很大的作用。
第八章总结1、制作成果经过大半年的“飞思卡尔”智能车的制作和研究过程中,从赛道的电源制作、信号检测模块再到小车的主板的制作;从小车可以起跑,分析其可行性来让小车得到提速。我们一步一步地走过来,从中学到了不少的知识,总结了不少的经验。在每个阶段中,我们都尽量地将小车改进和完善,争取达到最优效果。2、问题与思考在智能车的制作过程中,我们的小车曾经出现过很多问题,如小车的循迹传感器撞坏,电机驱动烧毁,因为信号微弱经常冲出赛道等问题,或多或少拖慢了我们的进度,但经队员们不断的努力,和指导老师的帮助,我们从硬件和软件上做了一步步的改良和升级,渐渐对各模块有了深入的认识,对整体有了清晰的把握,我们在不断的前进的同时,小车也不断的加速前进。3、不足与改进从小车总体性能各因素考虑,小车系统分为采集、处理、控制三部分。对于采集部分:由于电磁组特点决定了小车的前瞻比较小,而前瞻的大小对速度是有着很大的影响。在这个过程中,我们分析了电感的各种摆放方式对磁场的检测结果。电磁组的传感器的摆放具有比较大的灵活性,这是优点。但对采集回来的信息如何进行有效处理是个难题。由于我们对空间磁场的具体分布的认识不足,也没找到比较好的分析方法,只是运用最简单的左右手法则来确定。这是我们队不足的地方,没有科学的分析方法。关于处理和控制部分:传感器的摆放决定了控制算法。由于没有太多的时间与分析,我们采用的是最简单的摆放方式,但也是很有效的方式,因为信号变化在区间内单调,而双排传感器的摆放能够得到一定的前瞻距离(电磁组的车长度不限)。但长度不是越长越好,太长的话容易在过弯的时候检测到临近的赛道而冲出跑道。参考文献[1]王威等.HCS12微控制器原理及应用[M].北京:北京航空航天大学出版社,2007[2]孙同景陈桂友.Freescale9S12十六位单片机原理及嵌入式开发技术[M].北京:机械工业出版社,2008[3]卓晴等.学做智能车--挑战飞思卡尔杯[M].北京:北京航空航天大学出版社,2007[4]毛振珑.磁场测量[M].北京:原子能出版社.1985[5]张肃文.高频电子线路(第四版)[M].北京:高等教育出版社.2007[6][7]华成英童诗白.模拟电子技术基础(第四版)[M].北京:高等教育出版社.2007[8]张吴肠马旭卓晴.基于电磁场检测的寻线智能车设计[J].电子产品世界,2009,11:48-50[9]李仕伯马旭卓晴.基于磁场检测的寻线小车传感器布局研究[J].电子产品世界,2009,12:41-44附录部分源代码main.cvoidmain(void){Init_Dev();delay(1000);PITCE_PCE0=1;//中断使能ATD0CTL5=0x30;CarInit(); EnableInterrupts;for(;;){if(Process_Flag){Process_Flag=0;if(Bit4==1)//sprintf(txtbuf,"\n__%d__%d__%d__%d__%d_\n",SE0,SE1,SE2,SE3,(int)(Offset*10));sprintf(txtbuf,"\n_%d__%d__%d__%d___%d__\n",(int)(Offset0*10),(int)(Offset1*10),(int)(Offset2*10),(int)(Offset3*10),(int)(Offset*10));if(Bit4==0)//sprintf(txtbuf,"\n_%d__%d__%d__%d__%d__\n",MagnetSensor[0],MagnetSensor[1],MagnetSensor[2],MagnetSensor[3],(int)(Offset*10));//sprintf(txtbuf,"\n_%d__%d__%d__%d_\n",E0MAX,E1MAX,E2MAX,E3MAX);sprintf(txtbuf,"\n__%d__%d__%d__%d__%d_\n",SE0,SE1,SE2,SE3,(int)(Offset*10));uart_putstr(txtbuf); //串口输出字符串delay(1000);/**//*OutPut_Data();*/}_FEED_COP();/*feedsthedog*/}/*loopforever*//*pleasemakesurethatyouneverleavemain*/}function.c#include"function.h"voidCarInit(void){ADFlag=1;Process_Flag=0;CarVoltageCount=0;EventCount_1MS=0;SpeedControlPeriod=0;CarSpeed=0;CarSpeedSet=0;MotorOut=0;SpeedControlOutOld=SpeedControlOutNew=0;SpeedControlPeriod=0;SpeedControlIntegral=0;DirectionControlPeriod=0;MagnetSensorOverFlag=0;DirectionControlCount=0; DirectionControlOut=0;MotorPulseSigma=0;Offset_Last=0;}voidGetMotorPulse(void){//2ms unsignedintnPulse; nPulse=PORTA; PTP_PTP2=1; //4520芯片复位 MotorPulse=(int)nPulse;PTP_PTP2=0;}voidSpeedControl(void){Speed,j=0;floatnDelta,fP,fI;staticintSpeed_Last=0;CarSpeed=MotorPulseSigma;MotorPulseSigma=0;Prespeed=CarSpeedSet;}nDelta=Prespeed-CarSpeed-F_Abs(fDelta*2)-F_Abs(Offset/2);if(nDelta>=10)fP=nDelta*SPEED_CONTROL_P1;//速度差比例积分elsefP=nDelta*SPEED_CONTROL_P; fI=nDelta*SPEED_CONTROL_I; if(CarStopFlag==1){ fP=nDelta*0.7;} SpeedControlIntegral+=fI;//防止超调可加积分值的上限 if(fP>2.5*MOTOR_OUT_MAX) //2.5 fP=2.5*MOTOR_OUT_MAX; if(fP<2.5*MOTOR_OUT_MIN) fP=2.5*MOTOR_OUT_MIN; if(SpeedControlIntegral>SPEED_CONTROL_OUT_MAX) //SPEED_CONTROL_OUT_MAX100 SpeedControlIntegral=SPEED_CONTROL_OUT_MAX; if(SpeedControlIntegral<SPEED_CONTROL_OUT_MIN) SpeedControlIntegral=SPEED_CONTROL_OUT_MIN; SpeedControlOutOld=SpeedControlOutNew; SpeedControlOutNew=fP+SpeedControlIntegral;}voidSpeedControlOutput(void){ floatnValue; nValue=SpeedControlOutNew-SpeedControlOutOld;if(nValue>50){ nValue=50; SpeedControlOutNew=SpeedControlOutOld+50; } if(nValue<-50){ nValue=-50; SpeedControlOutNew=SpeedControlOutOld-50; }SpeedControlOut=nValue*(SpeedControlPeriod+1.0)/6+SpeedControlOutOld;}voidMotorOutput(void){ floatfspeed; fspeed=SpeedControlOut; if(fspeed>230) fspeed=230;if(fspeed<-230) fspeed=-230; MotorOut=(int)(fspeed); SetMotorVoltage(); /* OutData[0]=CarSpeedSet; OutData[1]=CarSpeed; //OutData[2]=(Offset+CarSpeedSet); OutData[3]=SpeedControlIntegral;Process_Flag=1;*/}voidSetMotorVoltage(void){intnMotorVol;nMotorVol=MotorOut;if(nMotorVol>0){PWMDTY1=(unsignedchar)nMotorVol; PWMDTY5=0;}else{ nMotorVol=-nMotorVol; PWMDTY1=0; PWMDTY5=(unsignedchar)nMotorVol;}}voiderase_flash(void){if(FSTAT_ACCERR==1||FSTAT_FPVIOL==1){FSTAT=0x30;}FCCOBIX=0x00;FCCOB=0x1210;//12FCCOBIX=0x01;FCCOB=0x0000;FSTAT_CCIF=1;while(!FSTAT_CCIF);}voidsave2flash(intdata01,intdata23,intdata45,intdata67){erase_flash();if(FSTAT_ACCERR==1||FSTAT_FPVIOL==1){FSTAT=0x30;}FCCOBIX=0x00;FCCOB=0x1110;//11表示在Dflash中写4个字,10表示Dflash的高八位FCCOBIX=0x01;FCCOB=0x0000;FCCOBIX=0x02;FCCOB=data01;FCCOBIX=0x03;FCCOB=data23;FCCOBIX=0x04;FCCOB=data45;FCCOBIX=0x05;FCCOB=data67;FSTAT_CCIF=1;while(!FSTAT_CCIF);}voidSampleCarVoltage(void){//每4ms执行300次unsignedintnCarVoltage[4]={0}; AD_A_GetValue16(nCarVoltage); Mag_data0[CarVoltageCount]=nCarVoltage[MAGNET_0]; CarVoltageSigma[MAGNET_0]+=nCarVoltage[MAGNET_0]; Mag_data1[CarVoltageCount]=nCarVoltage[MAGNET_1]; CarVoltageSigma[MAGNET_1]+=nCarVoltage[MAGNET_1]; Mag_data2[CarVoltageCount]=nCarVoltage[MAGNET_2]; CarVoltageSigma[MAGNET_2]+=nCarVoltage[MAGNET_2]; Mag_data3[CarVoltageCount]=nCarVoltage[MAGNET_3]; CarVoltageSigma[MAGNET_3]+=nCarVoltage[MAGNET_3]; CarVoltageCount++; }voidGetCarVoltageAverage(void){ inti,j; if(CarVoltageCount==0){ for(i=0;i<4;i++) CarVoltageSigma[i]=0; return; } for(i=0;i<4;i++){ CarVoltage[i]=(unsignedint)(CarVoltageSigma[i]/CarVoltageCount); CarVoltageSigma[i]=0; } for(j=0;j<CarVoltageCount;j++){ CarVoltageSigma[0]+=N_Abs(Mag_data0[j]- CarVoltage[0]); CarVoltageSigma[1]+=N_Abs(Mag_data1[j]- CarVoltage[1]); CarVoltageSigma[2]+=N_Abs(Mag_data2[j]- CarVoltage[2]); CarVoltageSigma[3]+=N_Abs(Mag_data3[j]- CarVoltage[3]); } MagnetSensor[0]=((int)(CarVoltageSigma[0]/CarVoltageCount));MagnetSensor[1]=((int)(CarVoltageSigma[1]/CarVoltageCount));MagnetSensor[2]=((int)(CarVoltageSigma[2]/CarVoltageCount));MagnetSensor[3]=((int)(CarVoltageSigma[3]/CarVoltageCount));CarVoltageSigma[0]=0;CarVoltageSigma[1]=0;CarVoltageSigma[2]=0;CarVoltageSigma[3]=0; CarVoltageCount=0; }voidDirectionVoltageSigma(void){staticintPORTB_pb2;SE0=MagnetSensor[0];//保存原始值SE1=MagnetSensor[1];SE2=MagnetSensor[2];SE3=MagnetSensor[3];if(Bit5==0){PORTB_pb2=1;PORTB_PB2=0;if(MagnetSensor[0]>E0MAX){E0MAX=MagnetSensor[0];}if(MagnetSensor[1]>E1MAX){E1MAX=MagnetSensor[1];}if(MagnetSensor[2]>E2MAX){E2MAX=MagnetSensor[2];}if(MagnetSensor[3]>E3MAX){E3MAX=MagnetSensor[3];}save2flash(E0MAX,E1MAX,E2MAX,E3MAX);}E0MAX=*E0max;//读取Dflash的值E1MAX=*E1max;E2MAX=*E2max;E3MAX=*E3max;if(MagnetSensor[0]<1)MagnetSensor[0]=1;if(MagnetSensor[1]<1)MagnetSensor[1]=1;if(MagnetSensor[2]<1)MagnetSensor[2]=1;if(MagnetSensor[3]<1)MagnetSensor[3]=1;}voidDirectionControl(void){inti=0,j=0;floatfP,fD;k1=100*H*H/MagnetSensor[1]-H*H;k2=100*H*H/MagnetSensor[2]-H*H;k0=100*H*H/MagnetSensor[0]-H*H;k3=100*H*H/MagnetSensor[3]-H*H;Offset0=sqrt(k0);Offset1=sqrt(k1);Offset2=sqrt(k2);Offset3=sqrt(k3);if(k1<=0)Offset1=Offset1_last;if(k2<=0)Offset2=Offset2_last;if(k0<=0)Offset0=Offset0_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 洛阳市辅警招聘笔试题及答案
- 2026年肠系膜脂膜炎诊疗试题及答案(消化内科版)
- 2026年真菌性脑部感染诊疗试题及答案(神经内科版)
- 4.4《估测》课件2025-2026学年数学三年级下册 冀教版
- 买二手车订车合同
- 2026年湖南公务员面试真题及答案解析
- 统编版2025-2026学年五年级语文下册期末测试卷(含答案)
- 2026 六年级下册《生态工程的建设》课件
- 2026九年级上《二次函数》知识闯关游戏
- 2026年4月安徽省芜湖市第二十七中学九年级英语一模卷(含答案无听力原文及音频)
- AEO(关务)管理手册
- 2025年武汉铁路局招聘笔试参考题库含答案解析
- 廉洁进校园知识竞赛参考题库200题(含答案)
- DB32-T 4581-2023 人民建议征集工作规范
- DL-T976-2017带电作业工具、装置和设备预防性试验规程
- 设备采购 投标方案(技术方案)
- 护理查房的流程与标准课件
- 家长会课件:高三冲刺阶段家长会
- 川渝地区-建筑防烟排烟技术指南
- SQL的语句及习题
- 锦州新兴橡胶制品有限公司清洁生产审核评估与验收报告
评论
0/150
提交评论