电磁组-华北科技学院电磁队技术报告_第1页
电磁组-华北科技学院电磁队技术报告_第2页
电磁组-华北科技学院电磁队技术报告_第3页
电磁组-华北科技学院电磁队技术报告_第4页
电磁组-华北科技学院电磁队技术报告_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

第八届全国大学生“飞思卡尔”杯智能汽车竞赛技术报告-28-第八届全国大学生“飞思卡尔”杯智能汽车竞赛技术报告学校:华北科技学院队伍名称:华科电磁队参赛队员:董增增张心波陈鹏宇指导教师:苗志全王江华关于技术报告和研究论文使用授权的说明本人完全了解第七届全国大学生“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。参赛队员签名: 带队教师签名: 日期:

摘要本智能车系统以MC9S12XS128微控制器为核心,通过电感检测模型车的运动位置和运动方向,用测速电机检测模型车的速度。使用PID控制算法调节驱动电机的转速和舵机的角度,完成对模型车运动速度和运动方向的闭环控制。为了提高智能车的行驶速度和可靠性,我们使用液晶模块和无线模块、按键模块等调试手段,进行了大量底层和上层测试。实验结果表明,该系统设计方案可行。关键字:MC9S12XS128、PID、液晶

AbstractThisintelligentcarsystemMC9S12XS128microcontrollerasthecore,throughtheinductancedetectionmodelcarpositionanddirectionofmovement,withthespeedofthemotorspeeddetectionmodelcar.UsingPIDcontrolalgorithmtoadjustthespeedofthedrivemotorandsteeringAngle,tocompletethemodelcarmovementspeedandmovementdirectionofclosedloopcontrol.Inordertoimprovethespeedandreliabilityoftheintelligentvehicle,weusetheLCDmoduleandthewirelessmodule,keysmoduledebuggingmethods,suchasalargeamountofbottomandtoptest.Theexperimentalresultsshowthatthesystemdesignschemeisfeasible.Keywords:MC9S12XS128,PID,LCD目录TOC\o"1-3"\h\u406第一章引言 -1-19582第二章模型车总体技术方案 -2-311622.1系统模块设计基本要求 -2-88582.2系统的整体架构 -2-18159第三章各电路模块设计 -4-110163.1最小系统电路与电源电路 -4-168053.2传感器检测模块 -6-211233.3电机驱动模块 -8-24233.4舵机安装 -9-125143.5起跑线模块 -9-314843.6运算放大器 -10-112803.7液晶模块和无线模块 -11-14682第四章系统的软件设计 -12-9924.1程序流程 -12-44364.2舵机转向和速度调节的PID控制算法 -13-54614.2.1经典PID控制算法 -13-271134.2.2舵机控制策略 -15-228714.2.3速度控速策略 -16-222044.3信号提取与赛道识别 -17-4974.4调试手段 -18-171114.4.1软件开发平台 -18-293154.4.2无线模块与串口调试助手 -20-78294.4.3OLED液晶显示 -20-29331第五章整车的硬件改造 -21-45215.1车模底盘 -21-143745.2智能车四轮定位参数的选择 -22-313965.2.1主销后倾角 -22-35175.2.2主销内倾角 -22-39445.2.3前轮外倾角 -23-147065.2.4前轮前束 -23-200695.2.5定位参数调节方法 -24-137685.3智能车转向舵机调整优化 -24-119295.4后轮差速机构调整 -25-46495.5测速电机 -25-11426第六章结论 -26-16425参考文献 -27-1391附录 -28-317471、模型车系统参数统计 -28-131252、车模源程序代码 -28-第八届全国大学生“飞思卡尔”杯智能汽车竞赛技术报告第一章引言全国大学生智能汽车竞赛是全国高等教育司委托高等学校自动化专业教学指导分委会主办,旨在培养创新精神、协作精神,提高工程实践能力的科技活动。该竞赛是以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科交叉的科技创意性比赛。在本次比赛中,本组使用大赛组委会统一提供的竞赛车模,采用飞思卡尔16位微控制器MC9S12XS128作为核心控制单元,自主构思控制方案及系统设计,包括传感器信号采集处理、控制算法及执行、动力电机驱动、转向舵机控制等,最终实现一套能够自主识别路线,并且可以实时输出车体状态的智能车控制系统。本文主要对车模整体设计思路,硬件与软件设计及车模的装配调试过程作简要的说明。根据自动化专业教学指导分委员会与飞思卡尔公司签署的有效期为5年的飞思卡尔公司协办全国大学生智能竞赛的合作协议书,竞赛由飞思卡尔公司提供统一的标准硬软件技术平台。各参赛队以飞思卡尔HC12单片机为核心控制模块,以引导改装后的模型汽车按照规定路线行进,以完成时间最短者为优胜。组委会办公室技术组专家赴韩国汉阳大学交流访问,认真考察了其举办的多届智能汽车竞速比赛,在学习与总结其宝贵经验的基础上,为了保证竞赛的普及性,规定每支参赛队伍三名成员中最多只能有一名研究生参加;为了保证竞赛的公平性,制定了多种赛道方案以及体现公平、透明的比赛规则;为了进一步训练大学生的科学技术研究素质,参赛队伍除了进行现场比赛之外,还须提交技术报告,并计入竞赛总分。为了使该竞赛向普及、健康的方向发展,成为在全国范围内大学生科技创意性的重要赛事,经自动化分教指委、飞思卡尔公司及组委会协商决定,在清华大学自动化系设立竞赛秘书处。

第二章模型车总体技术方案根据本次大赛的特点,智能车的电路设计方案主要包括:电源模块,道路信息检测模块,测速模块,电机驱动模块,舵机驱动模块,无线发送和接收等。此次电磁组已经是第二次出现在比赛中了,因此,怎么设计算法使智能车更快作为我们的重点。在比赛之初,通过分析研究往届优秀队伍的技术报告,并结合自身的实际情况,设计并提出了自己的设计方案。2.1系统模块设计基本要求制作一个能够自主识别路线的智能车,在专门设计的跑道上自动识别道路行驶,要求最快跑完全程而没有冲出跑道。对于小车的控制系统来说稳定性和快速性是控制系统设计的两个重要指标。智能车控制系统从硬件上分为电源模块、传感器模块、信号处理模块、电机驱动模块和单片机模块。各个模块设计有各自不同的要求:磁场检测传感器模块为智能车使智能车始终根据传感器反馈的信息来调整舵机转角。电机驱动模块是智能车的执行机构。其用以控制驱动电机,通过PWM波对电机转速进行控制,使模型车可以加速运行,也可对智能车进行制动。电源模块是智能车运行的基础。其为系统其他各个模块提供所需要的电源,以保证各模块的正常工作。单片机模块是智能车的核心,从硬件设计的角度来说,首先要保证其供电稳定,其次要对其部分功能模块如PWM通道,定时器通道,AD转换通道,锁相环等的进行编程,写入驱动程序,使其工作。从系统考虑,此模块最重要的是控制算法和控制程序的编写。只有通过软件和硬件的良好配合,才能保证智能车在跑道上根据磁场分布快而稳的前行。2.2系统的整体架构该智能小车的主要组成部分有:车模、电池、驱动电机、舵机、电磁传感器、测速编码器、控制芯片及其它辅助电路。系统结构框图如下图所示:图2-1系统结构框图

第三章各电路模块设计3.1最小系统电路与电源电路为了减轻小车的负担,保证系统能够稳定的运行,我们设计了自己的最小系统并制成了PCB板,最小系统原理图如图3-1所示:图3-1最小系统原理图根据原理图设计好之后的PCB图如下图3-2所示:图3-2最小系统PCB图电源模块对于一个控制系统来说极其重要,关系到整个系统是否能够正常工作,因此在设计控制系统时应选好合适的电源。在比赛中智能车使用的是同一规格的7.2V电源供电,单片机系统、路径识别的光电传感器、测速传感器等均需要5V的电源供电,本届比赛B车模使用的是数字舵机,供电电压为4.5V~5.5V,大于5.5V舵机将会发热甚至烧坏,即并不像其他组的模拟舵机那样电压越高反应越灵敏,所以选择5V电源供电,电机驱动可以直接使用7.2V的电源供电。选择合适的电源电路对电路的稳定性有很大的影响,合适的稳压电源芯片选择对电路的性能提出更高的要求,稳压芯片的选择上:我们选择TPS7350做为单片机和舵机的供电芯片。这样稳压效果较好,性能稳定,电路结构简单,带载能力强,对其它模块供电还是能保证充足的电源。系统控制和驱动、传感器执行独立供电,可以有效地防止各器件之间发生干扰,以及电流不足的问题,使得系统能够稳定地工作。图3-3各模块电源电路的设计图时钟电路对单片机的运行至关重要,电路简单,但是在设计PCB的过程中需要注意布线布局的规范性,因为时钟电路的不稳定会对系统的正常运行产生极大干扰。在此我们采用外接有源晶振来给单片机提供时钟,外接晶振频率为16MHZ,利用单片机内部的压控振荡器和锁相环可以把频率提高到80MHZ,用来作为单片机总线时钟。在布局与布线方面,晶振应尽量靠近单片机,并且让时钟信号附近电场为0,锁相环滤波电路也要尽量靠近单片机。图3-4晶振电路3.2传感器检测模块我们使用线圈来检测赛道上的磁场。利用LC谐振的选频特性选出20Khz的信号,再通过三极管将信号放大,而后进行倍压整流,最终送入单片机AD转换接口的将是与距离引导线距离有关的输出电压。框图如下:图3-5电磁检测原理框图下面将从感应线圈、信号的放大、检波等几个方面讨论电路设计的问题,最后给出完整的电路设计图。感应线圈的选择:感应线圈可自行绕制,但较麻烦,手头也没有仪器测量其感抗值,故我们使用市售10mh电感作为感应线圈,可配合6.8nf的电容产生谐振。下图为我们测试所用的各种规格的10mh电感。图3-6几种10mh的电感通过实验发现磁芯电感比色环电感的灵敏度高,内阻小的电感比内阻大的电感灵敏度高。但并不是内阻越小的电感越好,因为小内阻电感通常使用更粗的漆包线,势必会增加电感的重量,从而影响小车的性能。最终我们选用了第二种电感,该电感重量较轻且性能令人满意。我们采用双水平线圈检测方案,两个线圈水平相距L垂直于交流电源线,距离跑道高度h,两线圈对称分布在车前支架上。由于线圈的轴线是水平的,所以感应电动势反映了磁场的水平分量。计算两个线圈感应电动势的差值:公式1:在实际检测时,若左边传感器值大于右边则说明交流电源线位于小车左侧,反之则在右侧,我们在测试时发现该条件下布置的传感器是垂直于跑道,而实际在跑道上弯道处传感器轴线并不垂直于跑道,检测值存在一定误差,但是我们通过软件改善了不足的地方。3.3电机驱动模块电机驱动的好坏直接影响车模的响应速度,并且今年的车模电机较大,所以需要大功率的电机驱动模块,由于车模的长度不受限制,所以我们的前瞻加的很长,这就对于跑车造成了很大的惯性因素,也导致了我们的刹车不及时,并且在最后停车时刹车会刹出很远的距离,不能满足要求,所以在电机驱动方面我们用了很长的时间,最后才解决了以上出现的问题。方案的选定:方案1:IR2104与IRF32053205是MOS管,具有很强的驱动能力,导通内阻极低,承受的电流极高,正常使用不发热,价格低廉,响应时间短,反应速度快。由2104与3205构成的全桥电路,可以实现电机的正反转。图3-73205电机驱动原理图及PCB图方案2:7970BTS7960是应用于电机驱动的大电流半桥高集成芯片,它带有一个P沟道的高边MOSFET、一个N沟道的低边MOSFET。P沟道高边开关省去了电荷泵的需求,因而减小了EMI。集成的驱动IC具有逻辑电平输入、电流诊断、斜率调节、死区时间产生和过温、过压、欠压、过流及短路保护的功能。BTS7960通态电阻典型值为16mΩ驱动电流可达43A。图3-87970电机驱动PCB板图由于A车模电机功率不是很大,用3205加减速性能良好。综合考虑我们最后选定了方案一。3.4舵机安装舵机转向是整个控制系统中延迟较大的一个环节,为了减小此时间常数,我们尝试了各种方案,最终确定了以下两个方面的改进。第一,增加从舵机到连杆之间的长度,这样与以前的长度相比让前轮转过同样的角度舵机只需转过比以前更小的角度,虽然舵机本身的动作的速度没有变,但对于转向来说则比以前更快了。第二,把舵机竖直放置,使舵机位于两轮的中心线上,再把连接两轮胎到舵机的连杆改为一样长,使舵机左右转向时受力比较均匀,使舵机能灵活的转向。通过以上这些改造舵机的响应速度提高许多,为快速灵巧的转向提供了硬件的保证。但是这种方案也存在很大的缺陷,那就是舵机的转向力不足,因此要从算法上进行消除。3.5起跑线模块使用普通的干簧管检测起跑线,由于干簧管震荡容易误检起跑线,所以我们采用霍尔元件检测起跑线。图3-9起跑线检测原理图图3-10起跑线检测电路PCB图3.6运算放大器由于本身的信号很微弱不容易检测到,所以要用一个运算放大电路来检测所需的信号。图3-11信号运放电路图3-12运放电路PCB图3.7液晶模块和无线模块由于对车进行调试的过程中需要观察车得实时参数这样就需要一个能显示的界面,刚开始我们用的无线模块来看跑车时传回来的数据。快到赛区比赛时才知道不可以使用无线模块,所以我们应用了液晶模块,方便到现场观看各种参数。液晶模块如下图图3-13所示:图3-13OLED接口原理图第四章系统的软件设计高效稳定的软件程序是智能车平稳快速寻线的基础。本智能车采用电感作为寻线传感器,在智能车的转向和速度控制方面,我们使用了鲁棒性很好的经典PID控制算法,配合使用理论计算和实际参数补偿的办法,使在寻线中的智能车达到了稳定快速的效果。4.1程序流程程序上电复位后,先进行初始化,包括时钟初始化、I/O端口初始化、液晶无线选择性初始化、PWM初始化、ATD初始化、PIT初始化等,对各个全局变量进行必要的初始化设置。然后进入AD采样与模式选择,通过拨码开关设定不同的速度模式,按键设置不同的速度档位。图4-1主程序流程图4.2舵机转向和速度调节的PID控制算法4.2.1经典PID控制算法PID控制是工程实际中应用最为广泛的调节器控制规律。问世至今70多年来,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。单位反馈的PID控制原理框图如图4.2:图4.2单位反馈的PID控制原理图单位反馈e代表理想输入与实际输出的误差,这个误差信号被送到控制器,控制器算出误差信号的积分值和微分值,并将它们与原误差信号进行线性组合,得到输出量u。其中,、、分别称为比例系数、积分系数、微分系数。u接着被送到了执行机构,这样就获得了新的输出信号,这个新的输出信号被再次送到感应器以发现新的误差信号,这个过程就这样周而复始地进行。PID各个参数作用基本介绍:增大微分项系数可以加快动态系统响应,但容易引起震荡。一般增大比例系数能够减小上升时间,但不能消除稳态误差。增大积分系数能够消除稳态误差,但会使瞬时响应变差。增大微分系数能够增强系统的稳定特性,减小超调,并且改善瞬时响应。对连续系统中的积分项和微分项在计算机上的实现,是将上式转换成差分方程,由此实现数字PID调节器。位置式PID控制算法用矩形数值积分代替上式中的积分项,对导数项用后向差分逼近,得到数字PID控制器的基本算式(位置算式):其中T是采样时间,、、为三个待调参数,我们在实际代码实现算法时,处理成以下形式:PreU=Kp*error+Ki*Integral+Kd*derror增量式PID控制算法对位置式加以变换,可以得到PID算法的另一种实现形式(增量式):我们在实际代码实现时,处理成PreU+=(Kp*d_error+Ki*error+Kd*dd_error)的形式。这种算法用来控制步进电机特别方便,对直流电机也可以采用,其实如果对控制有更高的要求或者干扰因素较多,我们可以对PID算法做各种改进,比如用梯形法做数值积分以提高精度,将差分改成一阶数字滤波等等,在实际调车的过程中,我们确实遇到过由于自制码盘采样得到的脉冲上升下降沿不够陡,使得速度采样出现不稳定和失真,但由于这些附加处理比较耗费代码的运行时间,出于代码效率和实际效果的比较,我们没有采用这些改进的方案,另外可以考虑加反向器来整波形得到较为理想的方波。运用PID控制的关键是调整三个比例系数,即参数整定。PID整定的方法有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。由于智能车整个系统是机电高耦合的分布参数系统,并且要考虑赛道具体环境,要建立精确的智能车运动控制数学模型有一定难度,而且我们对车身机械结构经常进行不断修正,模型参数变化较频繁,可操作性不强;二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单,我们采用了这种方法,同时,我们先后实验了几种动态改变PID参数的控制方法。4.2.2舵机控制策略舵机的控制采用经典的PID控制,各环节的具体参数要经过反复的调整,以达到对各种赛道类型的适应性的平衡。各环节的注意点如下:P环节:和控制的力度相关,过软和过硬都不好。可以适度地采用分段P的方法,即黑线在车的中间位置时P较软,黑线偏离较远时P较硬,以实现部分赛道的优化。I环节:I环节可以使控制更加精准,但也有使控制变迟钝的负面效应,所以在前瞻较近时不宜加如I环节,而当前瞻比较充足时可以适当加入I环节,这样可以弥补分段P的一些不足,也提高了控制的精准程度。D环节:D环节能起到对赛道变化趋势预测的作用。适当加入D环节可以使转向更灵敏,并能起到优化大S参数的作用。D的缺点是会放大“噪声”,对检测到得信息进行数字滤波可以部分解决这个问题。if(temp_z>50){ Angle_Kp=Kp_Angle[abs(Angle_PreDerr)/10]*3/4; Angle_Kd=50; }else { Angle_Kd=110; Angle_Kp=Kp_Angle[abs(Angle_PreDerr)/10]; }if(vAv<70)Angle_Kp=Angle_Kp*8/10;elseif(vAv<90)Angle_Kp=Angle_Kp*vi_FeedBack/90; dutu01=Angle_Kp*Angle_PreDerr+Angle_Kd*(Angle_PreDerr-Angle_PrePreDerr);4.2.3速度控速策略基于光电编码器的速度检测系统,可以实现速度的闭环控制。具体的控速方法使用了PI控制和棒棒控制结合的方法,PI控制有利于控制的精度,棒棒控制有利于控制的力度,两者结合是一个优势互补的解决方案。另一方面,由于在不同类型的赛道采用不同的速度,可以优化路径、提高平均速度,是提高成绩的关键。这对车的加减速性能有较高的要求,而在程序可以使用反转制动等方法。在不同的赛道情况上,需要选择不同的给定速度,在保持车行进的路径的前提下尽可能提高速度的目的。具体而言,在直道和弯道上面都采用较高的速度行进,在长直道进弯道的时候降低速度来保持车的路径。我们通过前瞻传感器的变化趋势来判定进弯减速条件,可以实现提前减速。if(vi_Error>40)vl_PreU=VV_MAX;//设置调节死区elseif(vi_Error>0)//速度PID计算{vl_PreU+=v_Kp*vi_Error+v_Ki*d_Error+v_Kd*dd_Error;}elseif(vi_Error>-30){vl_PreU-=v_Kp*vi_Error*vi_Error+v_Ki*d_Error+v_Kd*dd_Error;}elsevl_PreU=VV_MIN; if(vl_PreU>=VV_MAX)//速度PID,防止调节最高溢出{vl_PreU=VV_MAX;}if(vl_PreU<=VV_MIN){vl_PreU=VV_MIN;}4.3信号提取与赛道识别传感器的布局方案为车的赛道识别提供了一定的前瞻,软件的设计方案就要利用好这样的前瞻,更早地识别赛道变化情况,提高行进速度。同时,除了前瞻以外,还需要考虑车前方近处的赛道情况。此外,还需要对于一些特殊情况进行特殊的处理。通过位于小车前端两侧电感值的大小判断交流线处于什么位置并作出控制,通过相应的算法求出偏离权值,进行方向控制。首先,是十字线的处理。在前瞻较大的时候,十字线的磁场分布与正常的九十度弯道非常类似,容易出现忽略十字线直接转向的情况。进入十字线之后,内侧的磁场与螺线管类似,远大于外侧的磁场,容易出现内切过大的情况。为此,我们在十字线附近采用了特殊的识别策略。并且在识别之后,在交叉线附近的直道上降低舵机的摆动。这样可以降低十字线的特殊磁场的干扰。其次,出于提高前瞻的考虑,传感器的视角并不是很大,容易出现迷失的情况。我们通过尝试发现,出现迷失之后,这三个水平传感器的信号权值会变小。通过这一点,我们找到了判定迷失的条件。迷失之后,降速,舵机逐渐打到一个比较大的角度。最后,是坡道的处理。在坡道上,三个水平传感器的信号权值变得很大的情况,以至于判断为直到,车会加速行驶。如果坡道后面接的是一条长之道还好说,如果是一个急转弯那就惨了,于是我们经过多次测试于大胆尝试,决定采取如果坡道后面是长之道不降速,如果坡道后面是弯道则遇坡急减速。通过这一点,我们解决了坡道之后会出现冲出赛道的问题。AD_value_Sum-=AD_value_G[TestPoi];AD_value_Sum+=AD_value[1];AD_value_G[TestPoi]=AD_value[1];//更新新的中间数值TestPoi++;if(TestPoi==10)TestPoi=0;AD_value_Ave=AD_value_Sum/10;4.4调试手段有效的调试手段,对于及时发现并解决问题至关重要。而调试工具最重要的职能是获取智能车在行驶时的各项数据。我们在调试中主要使用了如下几种工具。4.4.1软件开发平台此次智能车大赛的软件开发平台为FreescaleCodeWarrior开发软件。其使用界面如图4-3所示。图4-3FreescaleCodeWarrior运行界面CodeWarrior是面向以HC12和S12为CPU的单片机嵌入式应用开发的软件包,包括集成开发环境IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、链接器以及调试器等。在CodeWarrior软件中可以使用汇编语言或C语言,以及两种语言的混合编程。用户可在新建工程时将芯片的类库添加到集成环境开发环境中,工程文件一旦生成就是一个最小系统,用户无需再进行繁琐的初始化操作,就能直接在工程中添加所需的程序代码。在硬件初始化及控制方面,选取PE模式进行设置,不需要用户去操作繁琐的寄存器,就可以进行硬件的初始化,当需要在软件执行中使用相关寄存器时,只需要调用PE自动封装好的相关函数即可。如图4-4所示,利用BDM和CodeWarrior自带的hiwave.exe用户可以进行一系列的调试工作,如监视寄存器状态、修改PC指针、设置断点等,这样能帮助我们快速的找到软件或者硬件的错误之处。图4-4FreescaleCodeWarrior调试界面4.4.2无线模块与串口调试助手通过无线模块,可以将智能车行驶过程中的数据实时传送到电脑,是一种实用高效的调试手段。我们使用的无线模块是nRF24L01无线模块,发射和接受各需一块,可以选择不同的频道,因为多辆车同时调试时不会互相影响。图4-5串口调试助手4.4.3OLED液晶显示舵机初始打角是否走直线是决定车在跑的过程中能否走直线的关键因素。最初我们的调舵机的方法是用无线,用串口调试助手来显示调试的舵机值,这需要两个人来共同完成这个工作,显示有些浪费,于是我们采用OLED液晶来显示调试的舵机值,方便快捷,同时还可以用来显示其他数据,如AD采样值与最大值等。图4-6OLED液晶显示器第五章整车的硬件改造5.1车模底盘合理的底盘高度调节会提高智能车的加速性能。智能车的重心应该越低越好,降低地盘时实现重心下降的较为直接的方式。应注意到底盘高度的调节是将智能车的其他性能提高以后间接的帮助加速性能提高。考虑到坡道问题,为了能够安全的通过,并不使地盘受到不必要的磨损和震荡,所以就要根据实际情况来调节底盘的高度,因此地盘距离地面高度不能太低,且今年的车模是四驱车,加了减震弹簧,出厂的车模底盘太高,如果跑起来车会有很大的晃动,为了保持智能车的在快速行驶的过程中车身的稳定性,也要降低了底盘。在日常生活我们见到的汽车一般都是前轮驱动的,所以我们根据日常生活的经验重心都是放到驱动轮上,也就是我们看到的一般都是后轮高前轮低。我们的车模也是按照实际来调整的。调整之后的前轮处底盘离地面高度为0.9mm,后轮离地面高度为1.2mm。那么如何降低底盘就是机械改造的一部分了,由于车模的前轮和后轮的固定方式不同所以改造的方法就不同,不过都可以通过改变弹簧的长度来实现。5.2智能车四轮定位参数的选择为保证智能小车直线行驶稳定,转向轻便灵活并尽可能的减少轮胎磨损,需要对小车的四轮定位参数进行调整。四轮定位内容主要有:主销后倾角,主销内倾角,前轮外倾角,前轮前束,外侧车轮二十度时,内外转向轮转角差,后轮外倾角,后轮前束。其中,前轮定位的参数对小车性能有着至关重要的影响,这四个参数反映了前轮、主销和前轴三者之间在车架上的位置关系。本文将对这四个参数做详细阐述。5.2.1主销后倾角主销:转向轮围绕主销进行旋转,前轴的轴荷通过主销传给转向车轮,具备这两点的就叫做主销。主销内倾和车轮外倾角度主要是由转向节决定的。主销后倾角:主销的轴线相对于车轮的中心线向后倾斜的角度。前轮重心在主销的轴线上由于主销向后倾斜使前轮的重心不在车轮与地面的接触点上,于是产生了离心力,主销后倾形成的离心力,可以保证汽车直线行驶的稳定性还可以帮助车轮自动回正。主销后倾角延长线离地面实际接触越远,车速越高,离心力就越大。在高速行驶中保持汽车直线行驶的稳定性,适当的加大主销后倾角可以帮助转向轮自动回正,可有效扼制转向器的摆振,可使转向便轻,单独适量调一侧主销后倾角可修理行驶跑偏。主销后倾角靠离心力保证汽车直线行驶和车轮自动回正。高速行驶时跑偏可通过主销后倾角调节。但主销后倾角过大会造成高速时转向发飘。通常后倾角值应设定在10--30.5.2.2主销内倾角主销内倾角:主销的轴线相对于车轮的中心线向内倾斜的角度,如下图3.4由于主销轴线向内倾斜,所以使前轴荷更接近前轮中心线(前轴重心越接近前轮中心线转向越轻)麦弗逊式悬架分为零主销偏移和负主销偏移两种。当转向轮在外力作用下发生偏转时,由于主销内倾的原因,车轮连同整个汽车的前部将被抬起一定高度;当外力消失后,车轮就会在重力作用下恢复到原来的中间位置。故主销内倾角可保证汽车直线行驶的稳定性,还可帮助车轮自动回正,主销内倾轴线延长线在没超过前轮中心线的前提下,离前轮中心线越近,转向角越大,转向轮抬起的越高,车轮的回正力矩就越大。从而使转向操纵轻便,同时也减小了由于路面不平而从转向轮输出的力反馈。主销内倾角靠前轴轴荷保证汽车直线行驶和车轮自动回正。但主销内倾角不宜过大,否则在转向时车轮主销偏转的过程中,轮胎与路面将产生较大的滑动,从而增加轮胎与路面间的摩擦阻力,不仅会使转向变得沉重,还将加速轮胎的磨损。通常汽车主销内倾角不大于80。5.2.3前轮外倾角前轮外倾角:转向轮上端略向外倾斜叫前轮外倾角。通过车轮中心的汽车横向平面与车轮平面的交线与地面垂线之间的夹角α,称为“前轮外倾角”,轮胎呈现“八”字形张开时称为“负外倾”,而呈现“V”字形张开时称为“正外倾”。前轮外倾角一方面可以在汽车重载时减小或消除主销与衬套,轮毂与轴承等处的装配间隙,使车轮接近垂直路面滚动而滑动,同时减小转向阻力,使汽车转向轻便;另一方面还可以防止由于路面对车轮垂直反作用力的轴向分力压向轮毂外端的轴承,减小轴承及其锁紧螺母的载荷,从而增加这些零件的使用寿命,提高汽车的安全性。一般前轮外倾角为10左右。模型车提供了序号为EX-19的配件来调节前轮外倾角:当所采用的配件上无数字4时前轮外倾角为00,当所采用的配件上有数字4时前轮外倾角约为10。由于本模型车主要用于竞速,在设计中必然要尽可能减轻重量,所以其底盘承重不大,且前轮外倾角只两档可调,故设定为00即可,关键是前轮前束要与之相匹配。5.2.4前轮前束当车轮有了外倾角后,在滚动时就类似于圆锥滚动,从而导致两侧车轮向外滚开。由于转向横拉杆和车桥的约束使车轮不可能向外滚开,车轮将在地面上出现边滚边向内滑移的现象,从而增加了轮胎的磨损。在安装车轮时,为消除车轮外倾带来的这种不良后果,可以使汽车两前轮的中心面不平行,并使两轮前边缘距离R小于后边缘距离A,A-R之差称为“前轮前束”,如图3.6如示,一般前束值为1-12mm。像内八字样前端小后端大的称为“前束”,而像外八字一样后端小前端大的称为“后束”或“负前束”。模型车是由舵机带动左右横拉杆实现转向的。主销在垂直方向的位置确定后,改变左右横拉杆的长度即可改变前轮前束的大小。左杆短,可调范围为10.8-18.1mm;右杆长,可调范围为29.2-37.6mm,由上述原理可知,前轮前束须与前轮外倾角相匹配,如前轮外倾角设定为0°,则前轮前束须为0mm或只有很小的前轮前束值。5.2.5行驶跑偏:两侧主销的倾角不一致时,那侧主销后倾角小就向哪侧跑偏。两侧车轮外倾角不一致时,那侧前轮外倾角大就向那侧跑偏。舵机的两根横拉杆没有等量调整,那根长就往那侧跑偏。前轮前束值误差过大会造成行驶跑偏。包容角:前轮外倾角和主销内倾角的和。车轮定位造成的转向重:先检查和调整前轮前束或将主销后倾角加大转弯半径的大小主要取决于转向角和轴距。如同时需要调转弯半径和前轮前束,必须先调前轮前束,因为条前轮前束会改变转弯半径,调转弯半径不会改变前轮前束。5.3智能车转向舵机调整优化理想的转向模型,是指在轮胎不打滑时,忽略左右两侧轮胎由于受力不均产生的变形,忽略轮胎受重力影响下的变形时车辆的的转向建模。在这种理想的模型下,车体的转向半径可以计算得到。转向机构在车辆运行过程中有着非常重要的作用。合适的前桥和转向机构可以保证在车辆直线行驶过程中不会跑偏,能保证车辆行驶的方向稳定性;而在车辆转向时,合适的转向机构可以使车辆自行回到直线行驶状态,具有好的回正性。正是由于这些原因,转向系统优化设计成为智能车设计中机械结构部分的重点,直接关系到赛车能否顺利地完成比赛。在实际操作中,我们通过理论计算的方案进行优化,然后做出实际结构以验证理论数据,并在实际调试过程中不断改进。在模型车制做过程中,赛车的转向是通过舵机带动左右横拉杆来实现的。转向舵机的转动速度和功率是一定,要想加快转向机构响应的速度,唯一的办法就是优化舵机的安装位置和其力矩延长杆的长度。由于功率是速度与力矩乘积的函数,过分追求速度,必然要损失力矩,力矩太小也会造成转向迟钝,因此设计时就要综合考虑转向机构响应速度与舵机力矩之间的关系,通过优化得到一个最佳的转向效果。经过最后的实际的参数设计计算,最后得出一套可以稳定高效工作的参数机构。5.4后轮差速机构调整差速机构的作用是在车模转弯的时候,降低后轮与地面之间的滑动;并且还可以保证在轮胎抱死的情况下不会损害到电机。此次所使用车模配备的是后轮差速机构。差速器的特性是:阻力越大的一侧,驱动齿轮的转速越低;而阻力越小的一侧,驱动齿轮的转速越高,以此次使用的后轮差速器为例,在过弯时,因外侧前轮轮胎所遇的阻力较小,轮速便较高;而内侧前轮轮胎所遇的阻力较大,轮速便较低。差速器的调整中要注意滚珠轮盘间的间隙,过松过紧都会使差速器性能降低,松紧程度应边试跑边调整,直至找到最佳值。另外建议在差速机构上涂抹少许润滑油,使钢珠滚动更加顺畅灵活。5.5测速电机测速发电机是采用同轴直连或者齿轮传动等方式,将测速发电机与驱动电机相连,它的输出电压正比于转速。我们测速装置用的是一个小型的旋转编码器。电机转动时带动传动盘转动,通过齿轮的啮合,传动盘的转动会带动旋转编码器的转动,测速装置就产生一系列脉冲,把这一系列的高低电平被到单片机的PACNT接口,单片机捕捉这一系列高低电平的上升沿和下降沿。通过累积一定时间内的脉冲个数,可以计数出相应的速度值。

第六章结论从最初的报名开始,我们查找各种相关资料,学习单片机,思考整体思路,解决各种问题,到最后我们完成了智能车的制作,在这过程中我们学到了很多,这份技术报告中介绍了我们智能车全部的内容。机械方面,舵机安装方式是经过多次修改,安装,调试才确定的。在算法方面我们是多个算法的集合,包含了各个算法的优点,语言简单但是实用性极强,且适合任何跑道。智能车的设计与制作是从2011年2月开始的,经过半年的努力,我们完成了智能车的制作,实现了磁导航,闭环控制等的功能。从一开始的明确设计目的、资料收集,到方案的确定,原理图和PCB图的设计,购买元器件,实际电路实验验证,再有焊接电路板,智能车的软件编程,算法确定,参数调试等等过程中,我们学到了许多课本上学不到的知识,锻炼了自己的实际动手能力,与组员团结合作的能力,交流沟通的能力,分析问题的能力。参加完这次的比赛,让我们都觉得受益良多,为今后的学习打下了良好的基础。但是,由于时间有限,加之所学知识的限制,我们的智能车还有不少方面存在缺陷。这些问题将在以后进一步研究和解决。最后,在文章中出现的不足之处,希望老师多多包含和指点。

参考文献[1]李仕伯,马旭,卓晴.基于磁场检测的寻线小车传感器布局研究.电子产品世界,2009(12),41-44[2]张昊飏,马旭,卓晴.基于电磁场检测的寻线智能车设计.电子产品世界[3]清华大学2队技术报告.//卓晴,黄开胜,邵贝贝.学做智能车.北京:北航出版社,2007.3[4].卓晴黄开胜邵贝贝,学做智能车[M],北京:北京航空航天大学出版社,2007[5].邵贝贝,单片机嵌入式应用的在线开发方法,北京:清华大学出版社,2004[6].FreescaleSemiconductor,Inc.MC9S12DG128DeviceUserGuide.[7].童诗白,华成英.模拟电子技术基础[M].北京.高等教育出版社.2000[8].刘敬忠,于玲.车辆侧滑与行车安全浅谈.江苏农机化.2006[9].张葵葵,吴义虎.汽车急转侧滑的预防控制原理.现代制造工程.2006[10].魏道高,李克强等.汽车前束值算法研究.农业机械学报.2006

附录1、模型车系统参数统计项目参数路径检测方法(赛题组)电磁组车模几何尺寸(长、宽、高)(毫米)800/250/140车模轴距/轮距(毫米)115(原参数)车模平均电流(匀速行驶)(毫安)2000电路电容总量(微法)1200传感器种类及个数5新增加伺服电机个数0赛道信息检测空间精度(毫米)5赛道信息检测频率(次/秒)1000车模整体结构图2、车模源程序代码#include<hidef.h>/*commondefinesandmacros*/#include"derivative.h"/*derivative-specificdefinitions*/#include"main.h"#define LED1 PORTB_PB4#define LED2 PORTB_PB5#define LED3 PORTB_PB6#define LED4 PORTB_PB7unsignedcharDeal_Time=0;/*电机参数*/#define BACKWARD PORTE_PE4#define FOREWARD PORTE_PE5#defineZHENGZHUAN{BACKWARD=0;FOREWARD=1;}#defineFANZHUAN{BACKWARD=1;FOREWARD=0;}#defineBAOSI{BACKWARD=1;FOREWARD=1;}#defineHUAXING{BACKWARD=0;FOREWARD=0;}//unsignedintDJ_R_MAX=2840,DJ_L_MAX=3580,DJ_MID=3210;2013-03-18//unsignedintDJ_R_MAX=2840,DJ_L_MAX=3540,DJ_MID=Servo_Mid;2013-4-18/*舵机参数*/#defineServo_L_Max2810#defineServo_Mid3140#defineServo_R_Max3480unsignedintDJ_R_MAX=Servo_R_Max,DJ_L_MAX=Servo_L_Max,DJ_MID=Servo_Mid;/*电感参数*/intAD_Left[]={0,0,0};intAD_Mid[]={0,0,0};intAD_Right[]={0,0,0};intsensor[]={0,0,0};unsignedintAD_value[]={0,0,0};unsignedintAD_Max[]={600,600,600};intMaxNum=0;byteRefAd=20,AD_Min=10;//丢线参考AD值charLost_Flag=0;//丢信号标志位intMid_AD_value=0,Last_Pos=0;//丢线处理intMid_AD=0;//偏移量舵机P值intAngle_Kp=0;//20charAngle_Kd=0;//50intAngle_PreDerr=0;//偏移量舵机P值intAngle_PrePreDerr=0;//偏差的偏差舵机D值intSumHead=0;intHeadi=0;intDouDong=0,Lderr=0;//加入抖动bytetemp_z=0,temp_w=0,Sum_Z=100,Sum_W=0,TESTi=0,temp_w_l=0,temp_w_r=0;intSevro_Correct=0;#defineLOCA_MAX330//最大调节量输出为正负660。#defineLOCA_MIN-320intAD[10]={0};bytez_limt=80,w_limt=60;intAD_Remember[100]={0};#defineChannel3/*速度参数*/intSpeed_set=2000;intvi_FeedBack=0;intMeasure=0,Speed_Measure1=0;floatlast_speed_pid_out=0,speed_pid_out=0;floatError_1=0,Error_2=0,Error_3=0;intspeed_Kp=0,speed_Ki=0,speed_Kd=0;voidSetBusCLK_64M(void){CLKSEL=0X00; //disengagePLLtosystemPLLCTL_PLLON=1; //turnonPLLSYNR=0xc0|0x07;REFDV=0x80|0x01;POSTDIV=0x00;//pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz;_asm(nop);//BUSCLOCK=64M_asm(nop);while(!(CRGFLG_LOCK==1)); //whenpllissteady,thenuseit;CLKSEL_PLLSEL=1; //engagePLLtosystem;}voidIO_init(){DDRB=0b11110000;//按键+LEDPORTB=0XF0;DDRE_DDRE4=1;LED1=0;LED2=0;LED3=0;LED4=0;DDRE_DDRE4=1;DDRE_DDRE5=1;//用于判断电机正反转ZHENGZHUANDDRT_DDRT4=0;DDRT_DDRT5=0;PTT_PTT4=0;PTT_PTT5=0;DDRT_DDRT6=1;DDRT_DDRT7=0;PTT_PTT6=1;DDRT|=0b00001111;//DDRT&=0b11110000;DDRJ_DDRJ7=1;//BEERPTJ_PTJ7=0;}voidPWM01_Init(void){PWME_PWME1=0;PWMCTL_CON01=1;//通道01级联PWMCAE_CAE1=0;//左对齐PWMPOL_PPOL1=1;//PWM输出起始为高电平PWMPRCLK_PCKA=1;//ClockA2分频结果为32MHzPWMSCLA=1;//ClockSA=ClockA/2ClockSA为16MHZPWMCLK_PCLK1=1;//时钟来源选择ClockSAPWMPER01=4000;//输出频率=通道频率/PWMPER01=4kHZPWMDTY01=0;//PWME_PWME1=1;//启动PWM输出}voidPWM23_Init(void){PWME_PWME3=0;PWMCTL_CON23=1;//通道23级联PWMCAE_CAE3=0;//左对齐PWMPOL_PPOL3=1;//PWM输出起始为高电平PWMPRCLK_PCKB=4;//ClockB16分频结果为4MHzPWMSCLB=1;//ClockSB=ClockB/2ClockSB为2MHZPWMCLK_PCLK3=1;//=1时钟来源选择ClocksBPWMPER23=40000;//输出频率=通道频率/PWMPER23=50HZPWMDTY23=Servo_Mid;//PWME_PWME3=1;//启动PWM输出}voidchangePWM01(intangles){staticintangleold=0;if(angles!=angleold)PWMDTY01=angles;angleold=angles;}voidchangePWM23(intangles){staticintangleold=0;if(angles!=angleold)PWMDTY23=angles;angleold=angles;}voidinitPIT0(void)//定时中断初始化函数1MS定时中断设置{PITCFLMT_PITE=0;//定时总中断关闭 PITCE_PCE0=1;//定时器通道0使能PITMUX=0X00;///PITMTLD0=8-1;//8位定时器初值设定(四个同道共用)。8分频,64MHz/8=8MHzPITLD0=8000-1;//第0同道16位定时器初值设定。8000000Hz/8000=1000Hz ///PITINTE_PINTE0=1;//定时器中断通道0中断使能 PITCFLMT_PITE=1;//定时器总中断打开}/**********************功能:脉冲累加器初始化***********************/voidPAOVF_Init(void){TSCR1_TEN=1;//(7)使能定时器模块PACTL_PAEN=0;//(6)累加器禁止PACTL_PAMOD=0;//(5)PAMOD=0,事件计数模式;PAMOD=1,门控时间累加模式PACTL_PEDGE=0;//(4)选择通道7的脉冲沿(0,下降沿)PACTL_PAOVI=0;//使能累加器溢出中断,即PAOVF=1时申请中断PACTL_PAI=1;//使能累加器输入中断,即PAIF=0时申请中断PACNT=0;//计算器初值为0PAFLG_PAOVF=1;//写入清除该位,当累加器溢出时置位PAFLG_PAIF=1;//写入时清除该位,当累加器有变化时置位PACTL_PAEN=1;//(6)累加器使能}//功能:AD初始化AD:8MHZ//*************************************************************************voidAD_int(void){ATD0CTL1=0b00100000;//10位精度,禁止外部触发ATD0CTL2=0b01000000;//自动清零,禁止外部触发,无等待模式ATD0CTL3=0b10011000;//bit3~bit6设置转换通道个数ATD0CTL4=0b00101001;//采样周期12个,ATDclock(2MHZ)=(BusClock(40MHZ)/(9+1))*0.5ATD0CTL5=0b00000000;//单个通道采样,输入通道可选bit:3210启动AD}/************************************************************************函数名称:byteADCvalue();函数功能:某一同道8位A/D转换函数全局变量:无入口参数:channel=通道号(0~7)出口参数:该通道的A/D转换结果(0~255)*************************************************************************/unsignedintADCvalue(bytechannel){unsignedinttemp;//暂存A/D转换的结果 //ATDCTL5.DJM=0,结果寄存器数据采用左调整 //ATDCTL5.SCAN=1,连续转换序列 //ATDCTL5.CC~CA=channel,启动通道转换 ATD0CTL5=(0x20|channel); while(1)//取A/D转换结果 if(ATD0STAT0_SCF)//判断ATD0STAT0的第7位是否为1 { temp=ATD0DR0L+ATD0DR0H*256;//从A/D数据寄存器0中读10位数据 //temp=(temp>>6);//对数据调整,使低十位有效 break; } returntemp;}/******************************************************函数名称:voidAD_Access();函数功能:针对某几个同道进行5次AD数据转换并求其平均值全局变量:无******************************************************/voidAD_Access(void){charAD_temp=0,i0;for(i0=0;i0<Channel;i0++)AD_value[i0]=0; //将每一个同道的AD值清零for(AD_temp=0;AD_temp<5;AD_temp++)//每个同道转换5次{ AD_value[0]+=ADCvalue(3); //i0要转换的同道 AD_value[1]+=ADCvalue(2); //i0要转换的同道 AD_value[2]+=ADCvalue(1); //i0要转换的同道}for(i0=0;i0<Channel;i0++){ AD_value[i0]=AD_value[i0]/5; //取平均值} AD_Right[0]=AD_value[2];AD_Mid[0]=AD_value[1];AD_Left[0]=AD_value[0];}/******************************************************函数名称:AD_Value_Max();函数功能:对获得的三个同道AD值求最大值全局变量:无******************************************************/voidAD_Value_Max(void){chari;for(i=0;i<Channel;i++) //冒泡法求最大值{AD_Access(); //AD转换并且求平均值if(AD_value[i]>AD_Max[i]) AD_Max[i]=AD_value[i];}}voidData_Process(void){ chari=0;for(i=0;i<3;i++)//将AD数值进行0~100标量化{ if(AD_value[i]<AD_Max[i])sensor[i]=200-(AD_Max[i]-AD_value[i])*200/AD_Max[i]; elsesensor[i]=200;}MaxNum=0;for(i=1;i<3;i++)//求那个电感是最大的{if(sensor[i]>=sensor[MaxNum])MaxNum=i;}if(sensor[MaxNum]<AD_Min)//如果最大的电感还小于一定值则这次丢失{ Lost_Flag=1;}if(Lost_Flag==1)//当在中间丢失数据时也会保持,但是这种情况是实际中不可能的!{ Mid_AD_value=Last_Pos;//如果丢失保持上一次的值Mid_AD_value小于0偏右应向左打角 if(Last_Pos<=0&&(MaxNum==0||MaxNum==1)&&sensor[0]>=AD_Min) { Lost_Flag=0; } elseif(Last_Pos>=0&&(MaxNum==1||MaxNum==2)&&sensor[2]>=AD_Min) { Lost_Flag=0; } if(Mid_AD<-60)Last_Pos=Last_Pos-3; if(Mid_AD>60)Last_Pos=Last_Pos+3; if(Last_Pos>200)Last_Pos=200; if(Last_Pos<-200)Last_Pos=-200; }elseif(Lost_Flag==0){switch(MaxNum){ case0: //车离开导线偏右 { if(sensor[0]>RefAd) { if(sensor[1]>RefAd) { Mid_AD_value=-66-66*(sensor[0]-sensor[1])/(sensor[0]-RefAd); } else Mid_AD_value=-200+67*(sensor[0]-RefAd)/(sensor[0]-sensor[1]); } else Mid_AD_value=-200; }break; case1: { if(sensor[1]>RefAd)//已修改 { if(sensor[2]>sensor[0])//右边大于左边说明车偏左 Mid_AD_value=66-67*(sensor[1]-sensor[2])/(sensor[1]-sensor[0]); else //左边大于右边 Mid_AD_value=-67+67*(sensor[1]-sensor[0])/(sensor[1]-sensor[2]); } }break; case2: { if(sensor[2]>RefAd) { if(sensor[1]>RefAd) Mid_AD_value=66+67*(sensor[2]-sensor[1])/(sensor

温馨提示

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

评论

0/150

提交评论