安徽赛区-电磁组-合肥工业大学-斛兵7队技术报告_第1页
安徽赛区-电磁组-合肥工业大学-斛兵7队技术报告_第2页
安徽赛区-电磁组-合肥工业大学-斛兵7队技术报告_第3页
安徽赛区-电磁组-合肥工业大学-斛兵7队技术报告_第4页
安徽赛区-电磁组-合肥工业大学-斛兵7队技术报告_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

第九届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告学校:合肥工业大学队伍名称:斛兵7队参赛队员:蔡柏林陈黎明田超带队教师:张阳史久根关于技术报告和研究论文使用授权的说明 本人完全了解第九届“飞思卡尔”杯全国大学生智能汽车邀请赛关于保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。参赛队员签名: 带队教师签名: 日期:

目录摘要 1Abstract 2第一章引言 3 3 3 4第二章机械结构部份的设计及调整 5 5 5 7 8 9 9 11 11第三章硬件设计 12 12 12 12 13 14 14 15 17 17 19 19 21 22第四章算法实现及软件设计 24 24 25 25 26 26 26 27第五章智能车系统模块调试 28 29 29 30第六章智能车主要技术参数说明 31结论 32参考文献 33附录A 34第九届全国大学生智能汽车邀请赛技术报告摘要摘要本文以第九届全国大学生智能车竞赛为背景,介绍了智能赛车设计、制作的技术信息。该比赛采用大赛组委会统一提供的1:10仿真车模,以Freescale半导体公司生产的32位单片机MK60FX512VLQ15为核心控制器,采用IAREmbeddedWorkbench作为开发环境,自主构思控制策略和算法结构,硬件上采用IR2104S驱动MOS管,用两路PWM波控制电机正反转,传感器采用普通工字电感构成谐振回路,通过感应赛道导线上方的磁场,控制规定车模在50cm宽的赛道上稳定行驶。硬件上通过对汽车动力学理论的学习来优化智能车的机械结构,软件上通过对PID控制,来提高智能车的速度和鲁棒性。关键词:智能车单片机电磁导航PID控制器ABSTRACTThisarticleintroducestheinformationaboutdesigningandmakingthecarinthebackgroundofthe8thNationalIntelligentCarContestforCollegeStudents.Thiscontestadopting1/10EPon-racingcarprescribedbythecontestorganizationcommittee,Usingtheprovided32bitMCUMK60FX512VLQ15offreescalecorporationasthemaincontroller,selectingtheIAREmbeddedWorkbenchasthedevelopmentenvironment,designthetactics.UsingtheIR2104andMOSFETtocontroltherunningdirectionsofthemotorbytwoPWM-waves.AdoptingthenormalDRCOREasthesensor,controlthesmartcartorunonthe50cm-wide-trackbyinducingthemagneticfieldabovethewireatthecenterofthetrack.Bystudyingtheautomobiledynamicstooptimizethemechanisminthehardwareandthecombinationofdifferentcontrol-theoriessuchasPIDcontrol,wecanmakethesmartcarmoresteadyandmorefastandreachhigherrobustness.【Keyword】Smart-CarMCUElectromagneticNavigationPIDController第一章引言第一章引言比赛背景智能车是一种高新技术密集型的新型汽车,它涵盖的范围广泛包括模式识别、传感器技术、自动化控制实现、电力电子技术、计算机技术等多个领域。在国际上已经形成智能汽车研究、设计、开发、竞赛的热潮。 在我国,教育部为了加强大学生实践、创新能力和团队合作精神的培养,委托教育部高等学校自动化专业教学指导分委员会主办了每年一度的全国大学生智能汽车竞赛。全国大学生智能汽车竞赛是在竞赛组委会提供的统一汽车模型平台上,使用飞思卡尔半导体公司的8位、16位微控制器作为核心控制模块,通过设计道路识别传感器和电机驱动电路、编写相应软件及装配模型车,制作一个能够自主识别道路的模型汽车,按照规定路线(路线赛前未知)行进,以完成时间最短者为优胜。智能车竞赛目前已经发展有摄像头与光电组和电磁组三个组别比赛,赛车速度与比赛质量也越来越高,竞争更是日趋激烈。1.2总体方案介绍本智能控制系统可以由传感器、信息处理、控制算法、执行机构、速度反馈五个部分组成。其中,以单片机为核心,配有传感器、测速电路,执行机构以及它们的驱动电路构成了控制系统的硬件;信息处理与控制算法由运行在单片机中的控制软件完成。在检测方面,系统是以电感传感器检测赛道中间的通有100mA,20KHz电流的铜线作为识别路径的手段的,其重点之一就是通过电感传感器来提高获取路径信息的准确度和速度,从而提高智能车的速度及可靠性。在控制方面,系统重点研究大赛指定型号舵机和电机的控制方案及算法。舵机的控制目标:脉宽与转角呈线性变化,能够以较快的速度控制舵机,延迟控制在10ms内,误差控制尽可能的小。电机的控制目标:能根据路况进行快速地加速和减速,使电机尽可能快地接近目标速度,能够获得很好的期望速度,以较快的速度跑完整个赛道。此外,机械结构的调整是保证智能车系统能够稳定可靠运行的前提。因此,机械结构的调校是至关重要的,尤其是前轮的调校。机械结构调整的原则是:减少质量,降低重心,加固安装,使车体的转向惯量尽量最小。1.3本文结构本文共分为五章。第一章主要是介绍了比赛的背景及智能车系统总体方案的介绍;第二章从智能车系统的机械结构出发,详细阐述了智能车系统各部分机械结构的安装和调整;第三章重点介绍了系统中所涉及的硬件设计方案和原理;第四章是介绍了智能系统的软件算法;第五章则对智能车部分模块的调试仿真做出相关的介绍;第六章对智能车的技术参数作简要说明。第三章硬件设计第二章机械结构部份的设计及调整智能车的核心是控制策略和算法,但是,机械结构也是限制赛车速度的巨大瓶颈,如果一辆赛车的程序架构很好,但是机械部分做的不好的话,其速度也会被大大的限制。2.1整车布局(1)车模底盘降低,主板低放,以降低重心。(2)舵机竖直放置,方便控制。(3)用轻便坚固的碳纤杆作为前端传感器的支撑材料。(4)电感安装在最前方,碳纤杆的长度大概是50cm,为了能够提前检测到,以至车体能够及时反映。(5)电池后移,从而使智能车重心能够尽量位于车体中间偏后,这样才能保证智能车在高速行进时的稳定性,减少甩尾现象图2.1整车图2.2转向舵机的安装舵机转向是整个控制系统中延迟较大的一个环节,为了减小此时间常数,通过改变舵机的安装位置,而并非改变舵机本身结构的方法可以提高舵机的响应速度。通过分析舵机控制转向轮转向的原理可以发现,在相同的舵机转向条件下,转向连杆在舵机一端的连接点离舵机轴心距离越远,转向轮转向变化越快。这相当于增大力臂长度,提高线速度。针对上述特性,本设计采用“长连杆”方式将舵机竖直放在前面,大大的增加了舵机的力臂,如图2.1所示。图2.2转向舵机安装示意图上述安装方式的优点主要有:(1)改变了舵机的力臂,使转向更灵敏;(2)舵机安装在了正中央,使左右转向基本一致,避免了多级传动可能带来的空程和死区;(3)增加前轮下压力,从而提高了前轮的抓地力,当然这样也加重了舵机的负载;2.3传感器的安装电感传感器安装的高度以及碳纤杆的长度共同决定了前瞻的大小。在本设计中,最终选取的碳纤杆的长度为50cm,碳纤杆的长度超过60cm后,在过弯的时候容易内切,而且转弯时盲区比较多。而且我们在保证信号足够的前提下,应尽量前端电感放高,这样能检测的范围更广。碳纤杆的一段用热熔胶固定在车模的前面,再用连杆连接到舵机上,保障其固定牢固。如图2.3.1图2.图测速传感器的安装为实现车速的闭环控制,需使用光电编码器测量车速。光电编码器安装主要考虑的问题是与齿轮的咬合,太紧会使电机转动吃力并且会发出很大的噪声,太松有时候会丢齿。因此最好使得安装的编码器松紧程度能够调整最好,我们采用的是500线的编码器,每转一圈会产生500个脉冲。光电编码器的安装如图2.4所示。图2.4光电编码器安装示意图2.5智能车前轮及后轮定位的调整2.5.1前轮及后轮定位的定义前后轮的定位对于小车机械性能影响巨大。前轮定位包括主销后倾角、主销内倾角、前轮外倾角和前轮前束四个内容。后轮定位包括车轮外倾角和逐个后轮前束。这样前轮定位和后轮定位总起来说叫车轮定位,也就是常说的四轮定位。车轮定位的作用是使车模保持稳定的直线行驶和转向轻便,并减少车模在行驶中轮胎和转向机件的磨损。车轮外倾和主销内倾的情形如图2.6所示。所谓主销内倾,是将主销(即转向轴线)的上端向内倾斜。从智能车的前面看去,主销轴线与通过前轮中心的垂线之间形成一个夹角,即主销内倾角。主销内倾的作用是使车轮转向后能及时自动回正和转向轻便。图2.5.1主销后倾如图2.7所示,过车轮中心的铅垂线和真实或假想的转向主销轴线在车辆纵向对称平面的投影线所夹锐角为主销后倾角,向前为负,向后为正。图2.5.2主销后倾示意图车轮前束如图2.8所示。从上往下看,两个车轮指向的方向在前端指向内称为车轮前束,指向外的则称为车轮后束。图2.5.3后轮定位主要包括后轮前束和后轮外倾,其作用与前轮对应定位项目作用一致。2.5.2前后轮定位的调节经验从理论上讲,主销内倾的作用是使前轮自动回正。角度越大前轮自动回正的作用就越强烈,但转向时也越费力,轮胎磨损增大;反之,角度越小前轮自动回正的作用力就越弱,因此这个主销内倾角都有一个范围,约5°~8°之间。而前轮外倾角对智能车的转弯性能有直接影响,它的作用是提高前轮的转向安全性和转向操纵的轻便性。由于本车模的主销内倾,前轮外倾界定不明显,本设计按照经验来进行前轮内外倾角的调节。前轮内外倾角的调节靠改变相应丝杆长度来实现,丝杆调长可达到前轮外倾,从经验上来说,前轮外倾有利于小车转向轻便,但是,容易导致前轮抓地力不足,而前轮内倾可使前轮抓地力增大,使小车在过弯的时候不易出现前轮打滑的现象,本次设计使用了前轮外倾,这样可以使小车在转向的时候更加轻便。对于前轮前束,可以通过调节相应丝杆长度来实现,丝杆调长可以达到前轮前束,若调短丝杆长度,可以达到前轮后束的作用。从经验上讲,前轮前束可以让小车在直道上走得更直,但同时会降低小车转向的灵活性,前轮后束则完全相反。无论选择怎样的前轮定位,都必须考虑到一个至关重要的忠告,那就是选择参数要适当,不要太极端,比如前轮的倾角,调节1°~2°即可,绝对不能调节得让人很远就感到车轮有明显的倾角。2.6车底盘的调整根据总结的智能车机械结构的设计原则,智能车底盘必须足够低。车模底盘的高度主要由赛道中的坡道以及减速带决定,在顺利过坡的前提下,底盘越低越好.此外,适当增大底盘的刚度有利于提高车体走直线的稳定性。通过增加垫片来增大弹簧的预紧力或调整弹簧的另一个支点的位置来改变预紧力可以提高底盘的刚度。第三章硬件设计3.1硬件设计概述以单片机为核心,配有传感器电路、测速电路,执行机构以及它们的驱动电路构成了智能车的硬件系统,硬件系统结构如图3.1所示。图3.1智能车硬件系统结构图图3.1中,MK60FX512VLQ15是本系统的核心控制器,该控制器拥有32位内核处理器,丰富的硬件资源,满足智能车设计的要求。信号转接板用来获取前端信息,从而测出偏移量;舵机是用来控制车身的转向;电机驱动与控制模块是用来控制电机的转动,包括加减速与正反转;测速传感器用来获取电机转速,以实现电机的闭环控制。键盘显示用于系统参数的设定和系统运行状态的获取。电源管理模块用来为各个模块供电。起跑线检测模块就是干簧管电路,用来检测起跑线的。从功耗和工作方式角度可将系统电路分为功率电路和数字电路。从供电电压角度可以将电路分为7.2V、6V、5V、12V电路。本系统中,电压分配如下:为保证驱动芯片正常工作,将7.2V经过升压电路到12V;舵机稳压后的6V供电;人机接口模块、编码器电路和电感传感器模块由一片5V电源芯片供电,只是主控芯片的5V电源单独供给。3.2MK60FX512VLQ15单片机系统设计3.2.1MK60FX512VLQ15单片机为144引脚LQFP封装的单片机,其特性如下:单任务、32位CPU核综合体(e200z0)符合Power架构嵌入式类包括指令集增强功能,允许可变长度编码(VLE),使得代码长度减少。具有可选的混合16位和32位混合指令,使代码尺寸显著减少成为可能高达512KB的片上代码Flash,有Flash控制器支持高达64KB的片上数据Flash,有Flash控制器支持高达48KB的片上SRAM存储器保护单元(MPU),具有8个区域描述和32字节区域间隔尺寸中断控制器(INTC)具有处理148个可选择优先级中断源能力频率调制锁相环(FMPLL)交叉开关架构,能够并发访问多个总线主机外设、Flash或SRAM引导协助模块(BAM)支持通过一个串行连接(FlexCAN或LINFlex)内部Flash编程定时器支持输入/输出通道提供范围16位的输入捕捉、输出比较和脉冲调试功能(eMIOS)10位ADC多达3个串行外设接口(DSPI)模块多达4个串行通讯接口(LINFlex)模块LINFlex1、2和3:主机能力LINFlex0:主机和从机能力多达6个增强型全速CAN(FlexCAN)模块,具有64个可配置消息缓冲区1个IIC模块多达123个可配置通用引脚,支持输入和输出操作来自FIRC或SIRC的实时计数器(RTC),支持最大超时时间为2秒,分辨率为1ms的自动唤醒6个周期中断定时器(PIT),具有32位计数器分辨率1个系统模块定时器(STM)Nexus开发接口(NDI)片上稳压器(VREG)从输入供给为所有内部各级提供电压调节3.2.2电源电路MK60单片机使用5V供电,I/O口能够兼容忍受5V的输入电压。较低的片内电压使CPU运算速度快、功耗低,故MK60单片机特别适合低功耗场合。本设计采用了5V外部电源为K10单片机供电。为了去除单片机运行时产生的高频噪声,本设计在MK60电源引脚旁边加了磁珠和电容典型值为0.1uF的去耦电容。3.2.3时钟电路对于Kinetis系列单片机,虽然单片机内部有RC振荡电路产生的自时钟,但RC时钟的频率不稳定,会随温度变化,主要用来在检测到主时钟电路故障时起作用,靠自由时钟单片机就能运行,这种运行模式被称为自时钟模式。为了给单片机提供一个可设定频率并且稳定的工作时钟,单片机需要外接一个石英或陶瓷振子,产生一个频率稳定的时钟信号,再通过片内的锁相环电路(PLL)将时钟频率锁定。本系统的时钟电路采用了8MHz的晶振,晶振振两端对地接典型电容值为10pF的电容,如图3.3所示。图3.3时钟电路原理图3.2.4单片机系统引脚分配如表3.2所示:表3.2单片机系统引脚分配模块名称分配引脚无线通讯模块PTB[16,17]接收数据指示灯PTA[12,13,14,15]拨码开关PTD[0,1,2,3,4,5,6,7]信号转接板PTC[0,1,2],PTC[4,5,6,7,8,9,10,11,12]编码器PTE17电机驱动PTB[0,1]舵机PTB[18,19],PTC3NOKIA5510模块PTE[0,1,2,3,4,5,6,16,18,19]3.3电感传感器电路设计组委会规定本次电磁组竞赛车模需要能够通过自动识别赛道中心线位置处由通有100mA交变电流的导线所产生的电磁场进行路径检测。可首先讨论赛道上的直道部分(弯道可以看作很多小直道微元的积分,故只要直道研究透彻,弯道就可以迎刃而解),如图:图3.3.1无限长直导线周围的磁场[5]利用毕奥-萨伐尔原理可计算得到:无限长直导线通以恒定电流I的时候周围的磁场为:下面在计算放置在无限长直导线周围的电感线圈能感应出的电动势:图3.3.2根据法拉第定律:将线圈内部小范围内磁场近似认为是均匀分布的,将会得到即导线周围放置的线圈感应出来的磁场与导线到线圈的直线距离成反比。因此根据此种特性即可制作出电磁感应传感器。本设计采用LC谐振放大整流的方法来得到最终的信号。首先通过一级LC的谐振,达到一个初步的选频滤波功能,即只感应20KHZ的电流产生的交流磁场,感应信号为正弦波,其幅值随着导线到传感器的距离而变化。在查询资料后,我们摘选出了4中方案,方案1:两级放大电路,通过INA129初级放大后,再经NE5532二级放大,通过滤波后得到信号。方案2:LMV358一级放大电路后再接一级RC滤波稳定纹波后得到最终的输出。方案3:LM386一级放大电路。方案4:三极管放大电路。电路原理图见图3.3.3、3.3.4、3.3.5、3.3.6。经过试验,我们发现方案2比方案3和方案4数据更稳定,而且相对于方案1电路更加简洁.考虑到这些因素,我们最终选择LMV358的放大电路作为电感信号的处理电路。图3.3.3电路原理图图3.3.4电路原理图图3.3.5电路原理图图3.3.6电路原理图3.4直流电机驱动模块设计电机驱动电路板为一个由分立元件制作的直流电动机可逆双极型桥式驱动器,其功率元件由四支N沟道功率MOSFET管组成,额定工作电流可以轻易达到100A以上,大大提高了电动机的工作转矩和转速。由于C车电机为双电机,所以,我们用两路相同的驱动器分别驱动两个电机。该驱动器主要由以下部分组成:PWM信号输入接口、逻辑换向电路、死区控制电路、电源电路、上桥臂功率MOSFET管栅极驱动电压泵升电路、功率MOSFET管栅极驱动电路、桥式功率驱动电路、缓冲保护电路等,电路如图3.8所示。电路中肖特基二极管IN5819保证了电平VB_1、VB_2低于12V,VB_1高于MOTOR_A,VB_2高于MOTOR_B。电路如下图示,首先使能端为高时,驱动桥这时才会起作用。PWM0为某一占空比,PWM1为低时,使得IR2104驱动输出分别为低电平和相应的电压值。驱动桥电路左边上方IRLR7843与右边下侧的IRLR7843导通,另外的两个MOS管不导通,此时电机正转。因此,一个电机是由两路PWM控制,显然当PWM输出状态与上述相反则为反转。转速的大小取决于占空比的大小。图3.8电机驱动电路原理图3.5测速模块设计为了精确控制智能车的速度,需要设计速度反馈电路检测智能车运动速度,同时获取车模运动的里程信息。本设计采用的是单片机控制编码器的方法来检测小车的电机转速。编码器选用的是一款旋转编码器,其引出红、黑、白三根线。红色是电源线,黑色是地线,白色是信号线。编码器的工作电压为5~12V,可直接将编码器的电源线接到5V电源上。编码器的地线要和单片机的地线连在一起。每转一周,白色信号线就输出500个脉冲,将信号线接到单片机的PTA10和PTC15口,进行脉冲累加,再用单片机定时器定时,每5ms记一次PCANT数据,作为小车速度的参考值,然后清空脉冲累加器,再定时计数。编码器接口电路如图3.5所示。图3.5编码器接口电路图3.9中,因为编码器信号端是开漏输出结构,所以需在编码器信号输出端接上拉电阻。信号线上的脉冲信号接至PTA10和PTC15引脚,供脉冲累加器计数。3.6人机交互模块设计3.6.1OLED模块设计OLED模块主要包括OLED液晶,4个背光LED灯和4个按键。OLED模块主要用于显示检测信息,设置控制参数。OLED液晶广泛应用于各类便携式设备,与其它类型的产品相比,具有以下特点:84X48点阵LCD,可显示4行汉字;采用串行接口与主处理器进行通信,传输速率达4Mbps,可全速写入显示数据,无等待时间;可通过导电胶连接模块与印制版,而不用连接电缆;采用低压供电,正常显示时的工作电流在200uA以下。OLED引脚顺序与含义如表3.3所示:表3.3OLED引脚定义管脚定义说明电平备注1VDD电源输入引脚+5V3.3-5V2CLK同步时钟输入GND最高可达4Mbps3DIN数据输入TTL时钟上升沿采样4D/C数据/命令输入TTL0:命令;1:数据5CS片选信号TTL低电平有效6RES外部时钟输入TTL7GND地GNDOLED模块的背光电路和按键电路原理图分别如图3.6.1和图3.6.2所示。图3.6.1OLED模块的背光电路图3.6.2OLED模块的按键电路背光电路中的4个LED灯采用一个8550同时驱动,8550控制端接单片机的PM0引脚,这样既能保证LED的可靠工作,又能降低功耗。按键电路采用的是独立按键形式,简单而易于编程。按键电路中,K1~K4分别接至单片机的PTD7~PTD10引脚。3.6.2拨码开关电路设计拨码开关电路如图3.13所示。拨码开关有八位,每位可以独立开合。PTE0/SW1~PTE7/SW8端分别接单片机的PTE0~PTE7I/O端口。当开关闭合时,相应端为低电平。当开关断开时,相应端为高电平。改变拨码开关的开合状态,可以改变单片机PTE口的值,单片机根据从PTE口读到的值进行相应的操作,从而实现了单片机的控制,PTE口采用内部上拉。图3.13拨码开关电路3.7电源管理模块设计智能车电池提供的是7.2V的电压。为了使智能车正常工作,需要将7.2V的电压转化为5V和6V的电压。智能车系统用的5V稳压芯片是LM2940。LM2940可以提供较大的稳压电流,具有较好的稳压性能,且纹波电压较小。主控芯片和电感传感器、编码器等都需要5V供电,为减少单片电源芯片的功耗,避免电感传感器、编码器等影响主控芯片工作,本设计采用了一片LM2940和一片LT1086分别为主控芯片和其他需要5V的模块供电。电源管理模块框图如图3.7.1所示:图3.7.1电源管理框图其中5VLM2940稳压电路如图3.7.2所示。图3.7.25V稳压电路其中5VLT1086稳压电路如图3.7.3所示。图3.7.35V稳压电路驱动电路采用的12V升压电路给驱动芯片供电,稳压电路如图3.7.4所示。图3.7.412V升压电路智能车采用的6V稳压芯片是LM2941,稳压电路如图3.7.5所示,用于为转向控制舵机供电。图3.7.56V稳压电路图3.7.5中,LM4951OUT端输出的电压值与R52、R53之间的关系式为:第四章算法实现及软件设计第四章算法实现及软件设计软件是存在于单片机内一系列指令的集合,是智能车设计的核心部分,需要花费很多的精力去设计编写。优秀的软件运行在良好的硬件平台上,将使智能车能够平稳高速地行驶。4.1路径识别算法分析及选定智能车的路径识别算法是智能车设计的关键部分,智能车设计的大部分工作都是围绕它来展开的。经过分析,利用电感传感器识别路径一般有两种不同的方法:(1)数字型寻线算法。利用多个水平放置的电感传感器,将整个赛道分为多个区域,感应电动势最大的电感是最靠近导线的电感,来判断电磁线的位置。这种查询方式的优势在于算法简单,易于实现。但是这种方法采集到的信息是离散的点,不利于精细控制;且要用到多个电感,会加重车头重量,增大小车的转动惯量,造成小车在高速行驶时发生甩尾;且多个电感“一”字排布,不得不考虑离得太近时相邻电感的互感作用。(2)模拟型寻线算法。使用少数传感器,直接使用感应电动势的模拟量精确值来进行赛道的精确定位。该方式可以达到赛道精确定位的目的,同时可以利用归一化的方法来解决每个电感线圈不完全相同的问题。这种方法的特点是用了较少个数的传感器进行道路识别,而且充分利用MCU里的ADC功能。最终我们选择了方案二,即模拟型寻线算法。我们利用对称电感的差值斜率方法来解算车体相对于导线偏离的距离。这种方法简单直观,对于MCU的负担较小,但是其两端线性度不高,且其是基于无限长直导线周围的磁场来拟合的,所以误差较大,但是经过分析,误差在我们可以接受的范围内,所以选用此方案。由于磁场是矢量,为了接收更多方向的信息,我们选用了水平和向前的电感作为一组电感用于计算位置,且向前电感对于弯道与十字弯较为敏感,对于直道很不敏感,所以同时可用于路径识别。图4.1.1电感排布方式图示用两边电感做差得出曲线如下图4.1.2所示,可以看出,近似接近线性:图起跑线识别程序设计起跑线的识别决定着智能车能否正确停车。起跑线处埋有磁铁的产生静磁场,检测时可直接使用干簧管。当干簧管在磁铁上方时,干簧管导通,从而产生低电平,在本系统中,我们使用的是单片机查询方式,即每次大循环开头时查询相应IO口是否为低电平,如果是低电平就停车。此外,为了防止误判,起跑线识别并不是在单片机刚上电时就进行,而是在发车后10s后才进行。4.3转向舵机控制程序设计本智能车系统的舵机控制采用的是基于位置式PID的方向控制算法。通过对模拟控制系统PID控制规律表达式的离散化,可得数字式PID表达式如下:对于本智能车系统,u(k)即为舵机转角,e(k)为车体相对于导线的偏移量。本算法响应时间快,稳态误差低,由于舵机本身就是一个延时较大的环节,而积分项会导致相应更加滞后,所以为了使舵机的响应速度加快,只使用PD算法。4.4电机控制程序设计4.4本智能车系统的电机控制采用的是基于增量式PID的方向控制算法。通过对模拟控制系统PID控制规律表达式的离散化,可得数字式PID表达式如下:对于本智能车系统,u(k)即为输给电机的PWM占空比,e(k)即为目标速度与实际速度之差。由于微分项会导致电机振荡,故只是用PI算法。4.4.2速度分配赛道分为直道,弯道,十字弯,坡道部分,在直道部分需要加速,在入弯之前需要提前减速,在十字弯和坡道处适当减速。由于侧滑现象和舵机反应速度的限制,弯道上存在所谓的极限速度,而转弯半径越小,此极限速度越小。所以如果在弯道里全部采取匀速,那么这个速度因为受到最小转弯半径的约束会比较小,非常不利于提升小车的速度。所以在弯道里,我们采取的策略是:设置弯道最低与最高速度,再根据偏差大小的不同来设置速度,偏差最大时采用弯道最小速度,偏差最小时采用弯道最大速度。4.5程序流程图系统程序流程图如图4.5示。图4.5第五章智能车系统模块调试第五章智能车系统模块调试5.1路径探测模块调试路径探测模块为电感探测模块调试电感探测模块时,按如下步骤进行:(1)进行电感的标定工作。(2)依次将车体偏移导线一定距离,记录下这些位置的电感的感应电动势值。(3)对所得数据进行归总,对两边电感做差,拟合直线,并替换不正常的电感。5.2转向舵机调试转向舵机的性能决定着智能车的转向性能,因此,转向舵机的调试是系统设计的重要环节。测试一:舵机工作在5.8V,50HZ下,PWM输出脉宽对应转角与理论转角对比舵机电压频率(Hz)负载情况占空比寄存器对应脉宽(ms)转角(度)理论转角1号5.850空载2801.4933333330-0.61号5.850空载2701.44-4-5.41号5.850空载2601.386666667-9.5-10.21号5.850空载2501.333333333-14-151号5.850空载2401.28-20-19.81号5.850空载2301.226666667-24.5-24.61号5.850空载2201.173333333-30-29.41号5.850空载2101.12-35.5-34.21号5.850空载2001.066666667-40-391号5.850空载1901.013333333-44-43.81号5.850空载1800.96-50-48.61号5.850空载1700.906666667-56-53.4测试二:舵机工作在5.9V,50HZ下,舵机转过一定角度所对应的响应时间舵机电压频率(Hz)负载情况转角(度)时间(ms)1号5.950空载602001号5.950空载301001号5.950负载10501号5.950负载1560测试三:舵机工作在5.8V,不同频率下,舵机转过一定角度所对应的响应时间观测舵机在不同控制频率下转过相同的角度所花费的时间,100Hz和50Hz的响应速度差不多。通过对测试数据的分析,可获得如下结论:1、舵机在给定一定脉宽以后转过的角度和理论上给出的角度(即1.5ms对应0度等)差不多,且线形较好。 2、舵机工作在5.9V,50HZ下,空载时的响应速度大概为200ms/60度,在负载时为50ms/10度,由于在真实比赛环境赛道摩擦力的不同,负载时的响应速度可能有所不同。 3、舵机工作在5.9V,负载时,50Hz和100Hz的响应速度差不多。5.3系统调试在各模块的基础测试均进行完毕后,便可进入系统级调试。进行系统调试的条件是设计出具备大赛指定元素的跑道。调试前期,宜设计较小较简单的跑道供智能车行驶。调试中后期,则应适当增加跑道的大小和难度。为保证智能车对各类跑道的适应性,应将智能车放到各类跑道上去调试,综合各类跑道的特征和智能车自身性能,确定出恰当的控制算法,调试出最佳的控制参数。调试控制参数的典型方法是观察智能车过小s和大弯时的转向情况。当智能车既能以较小的摆动量过小s,又能及时转弯时,控制参数便选取得比较理想。第六章智能车主要技术参数说明第六章智能车主要技术参数说明项目参数路径检测方法(竞赛组)电磁组车模几何尺寸(长、宽、高)750mm/250车模平均电流(匀速行驶)(毫安)2000电路电容总量(微法)1328uF传感器种类及个数电感4路,测速1路,干簧管2路避障2路新增加伺服电机个数无赛道信息检测空间精度(毫米)5赛道信息检测频率(次/秒)12主要集成电路种类/数量4/8车模重量(带有电池)(千克)1.17结论电感传感器工作稳定可靠,抗干扰能力强,因此,基于电感路径探测传感器的自主寻迹智能车有较强的抗干扰能力,能够很好的适应赛场环境。系统执行一个周期所用的时间为5ms左右。唯一的时间瓶颈是舵机的响应时间。舵机作出响应需要十多毫秒的时间。因此,不断优化舵机控制策略是令智能车平稳高速行驶的有效方法。目前,智能车系统研究还存在如下问题:(1)智能车在过十字交叉时路径不够平滑。(2)智能车在直线上加减速度不够迅速。(3)智能车以较高速运行时,转向舵机不够灵敏,致使小车冲出赛道。针对智能车过十字交叉路径不平滑的问题,将主要从软件上优化路径识别算法方面解决。针对智能车加减速不够迅速的问题,将主要从软件上优化电机控制算法的参数方面解决。针对智能车高速运行转向不灵敏的问题,一方面可提高前瞻,使小车能够更早判断出赛道特征,另一方面可优化路径识别算法和转向舵机控制算法。此外,参数的高效率选取需做到:在调试程序的过程中,建立相应的数学模型,提高调试程序的目的性。参考文献[参考文献][1]卓晴,黄开胜,邵贝贝.《学做智能车——挑战“飞思卡尔”杯》[M].北京:北京航空航天大学出版社,2007.[2]华成英,童诗白.《模拟电子技术基础》[M].北京:高等教育出版社,2006.6.[3]阎石.《数字电子技术基础》[M].北京:高等教育出版社,2006.5.[4]凌阳科技股份有限公司.《PID调节控制做电机速度控制》,2006.6.[5]黄惟一,胡生清.《控制技术与系统》[M].北京:机械工业出版社,2006.2.[6]BrianW.Kermighan,DennisM.Ritchie.TheCProgramingLanguage,SecondEdition[7]邵贝贝.《单片机嵌入式应用的在线开发方法》[M].北京:清华大学出版社,2004.10.[8]谭浩强.《C程序设计》[M].北京:清华大学出版社,2005.[9]黄开胜,金华民,蒋狄南.韩国智能模型车技术方案分析[J].电子产品世界,2006,3:150~152.[10]JinghuaZhong.PIDControllerTuning:AShortTutorial.MechanicalEngineering,Purdue[11]FreescaleSemiconductor.PK10N512VLL100ReferenceManual.,2011.附录A源程序代码附录A源程序代码#include"common.h"#include"include.h"/**********宏定义*********************************************//*********变量声明******************************************//***********************传感器采集信息*********************/floatad[6];floatad_max;uint8MaxNum;uint8ErrorFlag;uint8ErrorFlag_search;unsignedintAD_NORM[6];uint8turn_direction;/**********************避障信息*****************************/uint16Infrared[2];uint8LeftAvoidFlag=0;uint8RightAvoidFlag=0;floatAvoidTimes;int16Avoidance;/***********************路径偏差信息***********************/floatSensorShift[2];floatSensorY;floatSensorY_ahead_horizontal;floatERROR0;floatY_reverse;floatX_reverse;/**********************赛车状态信息************************/uint8stop_detect=0;uint8stop_flag=0;uint16stop_delay;//停车uint16stop_times;uint8brake_delay;/*uint8RAngleLeftFlag=0;uint8RAngleRightFlag=0;//直角弯uint8ReadyRampFlag=0;//中间电感的值非常大,探测杆已在坡道上方uint8RealRampFlag=0;//中间电感的值极小,说明车体已倾斜入坡,但需要在Ready的状态下uint8Rampflag=0;//坡道标志uint16Rampcountflag=0;//坡道计数标志floatRampratio;//坡道上电感乘的系数uint16Ramptimes;*//**********************舵机控制****************************/uint16ui_pwmdty67;uint16Angle_max;uint16Angle_min;uint16Angle_middle;floatdirection_Kp;floatdirection_Kd;floatShiftToSteer[2];floatKp_base;floatKp_increase;/**********************速度控制***************************/floatv_target;floatspeed_target_left;floatspeed_target_right;int16g_uc_motorduty_left;int16g_uc_motorduty_right;uint8PulseCount_left;//根据给定速度换算得来的编码器脉冲数uint8PulseCount_right;uint8encoder_flag;uint16encoder_value0;uint16encoder_value1;int16error_left[3]={0,0,0};int16error_right[3]={0,0,0};int16QUAD;//正交解码有可能出现负值floatg_speedMin;floatg_speedMax;/**********************路径识别信息***********************/uint8straightFlag=1;uint8curveToStraight=0;uint8straightToCurve=0;uint8leftFlag=0;uint8rightFlag=0;uint8lose_flag=0;uint8RightAngleFlag=0;floatPulse_sum=0;floatRoadShift3CM[20];floatRoadShift[20];uint8ShiftCount_num=0;floatShift_sum=0;floatShift1=0;floatShift5=0;floatShift10=0;floatShift20=0;floatShiftD6=0;floatShiftD10=0;floatShiftD20=0;floatShiftDD10=0;floatShiftDD20=0;uint8PulseLeft;int8PulseRight;/*********************定时相关变量*********************/uint8PIT_num;uint8PIT_flag;/********************宏定义***********************/#definekp_left11.9//电机的PID参数#defineki_left0.8#definekd_left0#definekp_right9.0#defineki_right0.7#definekd_right0#defineD52//后轮直径#defineratio0.64//传动比#defineencoder_line_num500//编码器线数#definePulse3CM60//走过3CM是140个脉冲#defineDetect_Num5#defineSTOP_TIME10000#defineSpeedDifRatio0.005#defineAvoidFinish3500#defineROAD_SHIFT_MAX300/************************************************************************取绝对值函数************************************************************************/floatAbs(floatvalue){floatreturn_value;if(value>=0){return_value=value;}elseif(value<0){return_value=value*(-1);}returnreturn_value;}/********************************************************************两数比大小并输出较大的值*********************************************************************/floatcompare(floatvalue1,floatvalue2){floatvalue_max;if(value1>value2){value_max=value1;}else{value_max=value2;}returnvalue_max;}/*********************************************************************警告!核心板上所有LED快速闪烁5次用于电感断线提示*********************************************************************/voidWarning(void){uint8m;for(m=0;m<5;m++){led(LED0,LED_ON);led(LED1,LED_ON);led(LED2,LED_ON);led(LED3,LED_ON);dwt_delay_ms(200);led(LED0,LED_OFF);led(LED1,LED_OFF);led(LED2,LED_OFF);led(LED3,LED_OFF);dwt_delay_ms(200);}}voidscan_deal(void){uint8m;/////////////////////AD采样与数据处理//////////////////////////ad[0]=adc_once(ADC0_SE16,ADC_12bit);//实际ad5左边电感ad[1]=adc_once(ADC0_SE18,ADC_12bit);//实际ad4右边电感ad[2]=0;ad[3]=adc_once(ADC0_SE17,ADC_12bit);//实际ad3ad[4]=adc_once(ADC0_SE10,ADC_12bit);//实际ad2ad[5]=0;////////////////////////归一化//////////////////////////////ad[0]=ad[0]*2372/AD_NORM[0];ad[1]=ad[1]*2370/AD_NORM[1];ad[3]=ad[3]*1871/AD_NORM[3];ad[4]=ad[4]*2076/AD_NORM[4];//////////////////////////避障数据采集///////////////////////Infrared[0]=adc_once(ADC0_DM0,ADC_12bit);Infrared[1]=adc_once(ADC1_SE16,ADC_12bit);///////////////////////避障处理///////////////////////////////if((Infrared[0]>1300&&Infrared[1]<500)||(Infrared[1]>1300&&Infrared[0]<500)){//滤波for(m=0;m<5;m++){Infrared[0]=Infrared[0]+adc_once(ADC0_DM0,ADC_12bit);Infrared[1]=Infrared[1]+adc_once(ADC1_SE16,ADC_12bit);}Infrared[0]=Infrared[0]/6;Infrared[1]=Infrared[1]/6;if(Infrared[0]>1300&&Infrared[1]<500){if(ad[0]>1600&&ad[0]<2700&&ad[1]>1600&&ad[1]<2700){Avoidance=-100;LeftAvoidFlag=1;led(LED0,LED_ON);led(LED1,LED_ON);led(LED2,LED_ON);led(LED3,LED_ON);}}if(Infrared[1]>1300&&Infrared[0]<500){if(ad[0]>1600&&ad[0]<2700&&ad[1]>1600&&ad[1]<2700){Avoidance=100;RightAvoidFlag=1;led(LED0,LED_ON);led(LED1,LED_ON);led(LED2,LED_ON);led(LED3,LED_ON);}}}/*********************************************************************舵机的PD控制*********************************************************************/voiddirection_PD(){ShiftToSteer[1]=ShiftToSteer[0];ShiftToSteer[0]=SensorShift[0];if(LeftAvoidFlag||RightAvoidFlag){if(gpio_get(PTE6)==0){ShiftToSteer[0]=ShiftToSteer[0]+Avoidance;}}direction_Kp=Kp_base+ShiftToSteer[0]*ShiftToSteer[0]/(Kp_increase*10000);if(direction_Kp>5){direction_Kp=5;}ui_pwmdty67=(unsignedint)(Angle_middle+direction_Kp*ShiftToSteer[0]+direction_Kd*(ShiftToSteer[0]-ShiftToSteer[1]));if(ui_pwmdty67>Angle_max){ui_pwmdty67=Angle_max;}if(ui_pwmdty67<Angle_min){ui_pwmdty67=Angle_min;}FTM_PWM_Duty(FTM1,FTM_CH0,ui_pwmdty67);}/*********************************************************************测速与控制速度*********************************************************************/voidspeedcount(void){encoder_value0=lptmr_pulse_get();QUAD=FTM_QUAD_get(FTM2);if(QUAD<0){QUAD=-QUAD;}encoder_value1=QUAD;//////////////////////////////////////////////////////////////将设置的速度转换成了脉冲数,设置速度按照类似1.8m/s设置,//即赋speed_target_xxxxx为1.8//////////////////////////////////////////////////////////speed_target_left=speed_target_left*5/(3.14*D);speed_target_left=speed_target_left/ratio;speed_target_left=speed_target_left*encoder_line_num;PulseCount_left=(unsignedchar)speed_target_left;speed_target_right=speed_target_right*5/(3.14*D);speed_target_right=speed_target_right/ratio;speed_target_right=speed_target_right*encoder_line_num;PulseCount_right=(unsignedchar)speed_target_right;motorcontrol(PulseCount_left,PulseCount_right);lptmr_pulse_clean();FTM_QUAD_clean(FTM2);}/************************************************停车*************************************************/voidstop(){if(stop_flag){stop_times++;if(stop_times>=100){gpio_set(PTC0,0);gpio_set(PTC6,0);//关电机}}}/************************************************差速控制*************************************************//************主函数***************/voidmain(){/********变量声明******************************/fb_clk_init();trace_clk_init();/********初始化******************************//////////////////电机使能端//////////gpio_init(PTC0,GPO,1);gpio_init(PTC6,GPO,1);/////////////////拨码开关初始化///////port_init(PTE0,ALT1|PULLUP);port_init(PTE1,ALT1|PULLUP);port_init(PTE2,ALT1|PULLUP);port_init(PTE3,ALT1|PULLUP);port_init(PTE4,ALT1|PULLUP);port_init(PTE5,ALT1|PULLUP);port_init(PTE6,ALT1|PULLUP);

温馨提示

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

评论

0/150

提交评论