分享
惠州学院天逆七队.doc
下载文档

ID:3499163

大小:8.80MB

页数:39页

格式:DOC

时间:2024-05-16

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
惠州学院 天逆七队 惠州 学院
第十届“飞思卡尔”杯全国大学生 智能汽车竞赛 技术报告 学 校:惠州学院 队伍名称:天逆七队 参赛队员:钟宇祺,陈宝昌 方文田,蔡俊豪 指导教师:段延喜,汪成龙 关于技术报告和研究论文使用授权的说明 本人完全了解第十届“飞思卡尔”杯全国大学生智能汽车邀请赛关于保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 日 期: 摘要 本文介绍了基于飞思卡尔32位微控制器的基于电磁场检测巡线智能车系统。针对比赛的具体情况,我们建立了赛车、赛道和自主控制系统的基本模型,给出了理论分析、仿真计算、在线调试的基本开发方法,在比较各种算法的性能特点后,我们确定最终方案,并完成了智能车的制作和调试。 本系统以M4系列微控制器K60为核心,软件平台为IAR EWARM开发环境,车模为组委会统一提供的B车模。 论文介绍了整个智能车系统的硬件和软件设计开发过程。使用K60作为主控芯片,用安装在车头的磁感应传感器来检测赛道信息,用光电编码器检测车模速度,用干簧管检测起跑线信息。整个系统的工作原理是由磁感应传感器采集赛道信息并经放大处理,与光电编码器采集的车模速度信息一起送给单片机,通过程序设计控制优化算法,控制舵机的转角和电机的转速以达到车模在赛道上的稳定高速行驶。 关键字:智能车 K60 循迹 舵机 速度 目录 第一章 引言 1 1.1 概述 1 1.2 整车设计思路 1 1.3 文本撰写框架 2 第二章 智能车机械结构设计 3 2.1底盘加固 3 2.2重心的调整 4 2.3舵机安装方式 5 2.5四轮定位 6 2.6差速器的调整 8 第三章 智能车硬件电路设计 8 3.1 单片机系统设计 8 3.2 电源模块设计 9 3.3 传感器方案 11 3.4 驱动电路设计 11 3.5 起跑线检测传感器 12 3.6 无线通讯模块 13 3.7 夏普红外测距模块 14 第四章 智能车系统软件设计 14 4.1 总体设计 14 4.2 中断的调用 15 4.3 赛道信息处理 16 4.4双车处理 16 4.5 PID控制算法介绍 17 第五章 系统调试 20 5.1 开发调试工具 20 5.2 液晶屏、按键、拨码开关调试 20 5.3 蓝牙及虚拟示波器调试 22 第六章 车模的主要参数及说明 23 第七章 总结 23 参 考 文 献 I 附录:源代码 II I 第十届飞思卡尔智能汽车竞赛技术报告 第一章 引言 飞思卡尔杯全国大学生智能车竞赛以“立足培养,重在参与,鼓励探索,追求卓越”为指导思想,系统涵盖了机械、电子、电气、传感、计算机、自动化控制等多方面知识,一定程度上反映了高校学生科研水平。本章节详细阐述了智能车系统的研究背景和本智能小车的设计总体概况。 1.1 概述 随着现代科技的飞速发展,人们对智能化的要求已越来越高,而智能化在汽车相关产业上的应用最典型的例子就是汽车电子行业,汽车的电子化程度则被看作是衡量现代汽车水平的重要标志。同时,汽车生产商推出越来越智能的汽车,来满足各种各样的市场需求。 第十届“飞思卡尔”杯全国大学生智能汽车竟赛就是在这个背景下举行的。比赛要求在大赛组委会统一提供的竞赛车模,我们选择了飞思卡尔微控制器K60为核心控制单元的基础上,自主构思控制方案及系统设计,包括传感器信号采集处理、控制算法及执行、动力电机驱动等,最终实现能够自我识别路线,并且可以实时输出车体状态的智能车控制硬件系统。 本文先从总体上介绍了智能车的设计思想和方案论证,然后分别从机械、硬件、软件等方面的设计进行论述,重点介绍了芯片的选择和路径识别的方法,接着描述了智能车的制作及调试过程,其中包含本队在制作和调试过程中遇到的问题及其解决方法。 1.2 整车设计思路 本组电磁车使用飞思卡尔龙邱K60作为核心控制单元,使用多传感器大前瞻进行巡线控制,并且检测起跑线。使用了光电编码器对小车速度进行检测。并且增加了OLED屏和按键以及拨码开关,以便更方便的查看小车数据,修改小车参数,以及修改整体策略。根据采集到的中线信息以及小车速度信息,对小车的转向以及速度进行控制,从而实现小车的循迹,整体结构框图如图1-1所示: 电感电容谐振 放大滤波电路 按键,拨码盘 蓝颜串口模块 K60 光电编码器 OLED屏显示 转向舵机 直流电机 图1.1 整体结构框图 1.3 文本撰写框架 本文简述小车的设计过程,主要分为:智能车车模机械设计、智能车系统硬件设计、智能车控制策略和软件设计、总结等四部分。并且附录中加入小车的算法程序。 第二章:智能车机械结构设计。主要介绍舵机的安装、车轮及底盘的调整、轮胎的固定等。 第三章:智能车硬件电路设计。主要介绍龙邱K60单片机系统、底层主电路、电感传感器、驱动电路等。 第四章:软件设计。主要介绍主程序流程、信号分析与识别、控制策略等。 第五章:系统调试。主要介绍开发调试工具、辅助模块和上位机的调试。 第二章 智能车机械结构设计 制造一辆出色的小车不仅需要很好的控制算法,车的机械结构也同样重要。在调试小车前期速度较低时,对小车的机械结构要求并不高,在匀速的情况下也能较好的过直角弯而不越出赛道。到了后期车速较高的时候,车模有明显的甩尾和侧滑现象,此时对小车机械结构就要求很高。因此,我们队在不违反规则的情况下对小车进行了多方面的改造以使小车具有良好的运行性能。 2.1底盘加固 图2.1 底盘结构 原装B型车模后悬挂底板与底盘采用的是活动柔性连接,但这种方式会占用底盘空间,并且使小车在行驶过程中不稳定,于是小组决定改掉这种结构,采用刚性连接,使后驱动底盘与车身底盘成为整体。 2.2重心的调整 通过重心的调整,可使模型车转弯时更加稳定、高速。其调整主要分为重 心高度的调整以及重心在整车上局部分布的调整。考虑到车子的稳定性,在保 证车模顺利通过坡道以及障碍的前提下,我们尽可能的降低车子的重心。同时 均匀车身重量,使重心在整车的中轴线上。由于靠前的重心会造成舵机负担, 过后的重心又会导致侧滑,经过多次试验,我们找到了一个合理的位置安排重 心。 为了降低底盘的高度,我们全部拆掉了车模底盘周围的防护架,直接将主板用热熔胶固定在底盘面板上,电池也用自锁带固定在底盘面板上,这样也有利于电池的更换。 图2.1(1) 车模底盘的防护架 图2.1(2) 主板与电池的固定 2.3舵机安装方式 舵机响应速度是整车过弯速度的一个瓶颈。为了加快车轮转向速度,我们 设计并安装了舵机转向机构。在并非改变舵机本身结构的条件下,改变了舵机的安装位置,安装更长的舵机输出臂。采用杠杆原理,在舵机的输出舵盘上安装一个较长的输出臂,将转向传动杆连接在输出臂末端。这样就可以在舵机输出较小的转角下,取得较大的前轮转角,从而提高了整个车模转向控制的速度。如图2-3所示,但是过长的输出臂又会使舵机输出的扭矩不够而影响小车的转弯性能。 图2.3 舵机的安装 2.4电感支架的设计安装 电感支架的重量对小车的转弯性能影响非常大,因为电感支架远离车重心的部分在转弯时会形成较大的离心力,如果支架较重的话就会导致车模在转弯的过程中发生甩尾。因此,我们尽力减轻电感支架的重量。图2.4是单杆T字方案。为了追求质量的轻量化,我们在碳素杆的连接处并没有使用带金属螺丝的锁定结,而是用热熔胶连接。 图2.4 电感支架的安装 2.5四轮定位 对于B车来说,现实中四轮的定位并不适用,因为车的质量,车轮的弹性,赛道的材料与现实中的不同而导致运行过程中发生的变化和现实中的不一样。因此,我们不但要了解现实中车轮的定位,还要不断的摸索适用于B车的定位方案。 图2.5(1)转弯时前轮与赛道的贴合 分析上图,如果存在主销内倾和主销后倾,转弯时车轮就会部分脱离地面,主销内倾和后倾越厉害,车轮脱离地面的面积就会越大。经过长期的试验,两个前轮转弯时接触赛道的面积越大,前轮打滑发生的可能性越小。由于B车主销后倾角很难更改,我们组只能更改主销内倾角为零使前轮转弯时最大面积接触赛道。调整后的前轮基本和后轮平行,如图2.5(2)四轮定位俯视图。 图2.5(2)四轮定位俯视图 2.6差速器的调整 在车模运行过程中差速齿轮不打滑的情况下,应尽量调松差速锁紧螺母以使两边车轮在转弯时更容易形成差速,从而减少转弯时轮胎的滑动。 图2.6 差速器 第三章 智能车硬件电路设计 3.1 单片机系统设计 单片机最小系统是智能车系统的核心控制部件。我们采用了M4内核32位的K60芯片。原理图如图3.1所示: 图3.1 单片机系统原理图 3.2 电源模块设计 电源是智能车的原动力,电源供电的稳定性直接关系到整个系统的稳定性。所以我们要考虑电源的转换效率,尽量降低噪声,防止干扰。比赛规定智能车供电电源只能使用指定型号的7.2V 2000mAh Ni-Cd 电池供电。而系统单片机需要3.3V 电源;电机驱动电压为7.2V;一些运放电路以及其它IC大多需要 5V 电源,舵机需要5V-5.5V可调电源。 5V电压,主要为放大电路、传感器模块、蓝牙、OLED模块、编码器等功能模块供电。但由于总量大所以需要比较大的电流,经比较对比,我们采用LM2940为它们供电,基本满足要求。电路原理图如下3.2图所示: 图3.2 电源电路原理图 3.3V电压,主要供给主控芯片。所以该部分供电电压要求十分稳定,否则将影响到主控芯片的正常工作。因此我们选用具有稳定输出电压,较大输出电流的LM2937。设计中,采用先5V稳压再经3.3V稳压,目的是为了减小LM2937的压差,降低发热,基本达到要求。其电路图如3. 3图所示: 图3.3 芯片供电电路原理图 SD-5舵机的工作电压为5V至5.5V。选型时,采用大电流线性稳压电源,故我们采用LM1084-ADJ芯片,该芯片配合外围电路后可调输出电压,我们将电压普遍调至5.5V,使得舵机工作在5.5V。如电路图如3. 4图所示: 图3.4 舵机供电电路原理图 3.3 传感器方案 传感器是电磁车的眼睛,所以传感器模块即放大电路对于小车能否快速准确的捕捉路况信息十分重要。本系统根据LC谐振电路检测小信号的原理,选取10mH工字电感和6.8nf电容搭建LC谐振电路,但采集到的正弦信号的振幅一般只有几十毫伏,对于单片机来说太微弱。为了使单片机能够识别这种微弱信号,采用仪表放大器INA118放大信号,该芯片具有稳定,放大倍数大,外围电路简单等特点。再通过检波模块得到所需要信号。如电路图如3. 5图所示: 图3.5 传感器电路原理图 3.4 驱动电路设计 电机驱动的设计,采用HIP4082+4NMOS构成H桥进行驱动。HIP4082是H桥式N通道MOS管驱动器集成电路,特别针对于脉宽调制电动机控制。它使基于桥式电路的设计更为简单和灵活。MOS管选用IRLR7843,具有大电流内阻极小的特点。其它外围电路还有BS0512,5V升12V集成电源模块,74hc02D,数字控制部分,也当隔离部分。如图3.6所示: 图3.6 电机驱动电路原理图 3.5 起跑线检测传感器 起跑线附近的永磁铁的分布是在跑道中心线两边对称分布的,相应位置如3.7所示: 图3.7 永磁铁分布说明 、 我们采用干簧管来作为检测元器件,当干簧管靠近到永磁铁时,会产生一个通断信号。因为干簧管防抖动的性能较差,且碰撞易损坏,如果选择常闭式干簧管,在赛车运动过程中发生碰撞或抖动时,干簧管会由闭合变成断开,产生误检测起跑线信号。为了避免误触发,且让单片机的信号是低电平触发,我们选用的是常开干簧管。选型上,我们采用塑封型的干簧管,稳定耐碰撞。如3.8所示: 图3.8 塑封干簧管 因为永磁铁的分布是在跑道中心两边对称分布的,因此我们干簧管的位置也根据永磁铁的分布一样,对称的左边三个右边三个. 3.6 无线通讯模块 第十届飞思卡尔电磁组采用的是双车追逐,行车过程中,需要有稳定可靠的通讯,及时反馈路面信息进而更好的控制双车。我们采用NRF24L01,2.4G无线通讯模块。该产品上市时间久,性价比高,通讯协议简单,具有丰富的开发资料,容易上手和移植。模块图和原理图如下: 3.7 夏普红外测距模块 第十届飞思卡尔电磁组采用的是双车追逐,行车过车中,我们使用夏普红外测距模块。它具有以下几个优点:1. 红外传感器连接使用简单,对于1米以内的中距离测试精度良好、性能优越。2. 数据测量值稳定,测量结果波动较小。3. 数据传输稳定,程序读取简单不会在数据传输过程中出现卡死的现象,错误信号较少。 第四章 智能车系统软件设计 4.1 总体设计 软件运行需要配置单片机各个模块寄存器数值,使得单片机各个模块工作正常。初始化包括:单片机时钟配置、I/O口配置、PWM模块配置、A/D模块配置、中断配置、脉冲捕捉模块配置。初始化完成后,开始对传感器输入信号进行采样,当完成一次采样后,将采样值输入控制算法,控制算法经过运算得到舵机的打舵值以及电机所应有的速度。通过改变PWM模块内部寄存器数值可以得到不同占空比的方波信号,实现对舵机和电机的同步调节。这一届电磁式双车,首先先讨论单车运行,首先进行各模块的初始化,在主函数while语句中实现拨码开关,按键的检测以及OLED的显示,主系统的周期为4ms,定时器定时2ms,奇数次进入进行AD采值,数据处理,然后控制舵机打舵,偶数次进入进行脉冲采集,数据处理,控制电机工作。程序流程如图4.1所示: 开始 模块初始化 定时器定时2MS 是 停车 停车检测 Case1 Case0 否 脉冲采集 电感AD采值 数据处理 归一化 控制电机 赛道信息处理 舵机转向 图4.1 程序流程图 4.2 中断的调用 我们调用中断,用2ms的时间进入一次中断,包括ad采集、速度控制和方向控制。以确保主程序执行过程中不被打断。 4.3 赛道信息处理 我们的智能小车的行驶的前提是有一个准确的赛道信息的输入,通过这个输入量的获取,我们可以进行分析,得到小车行驶过程中的所需要输出的参数,从而为后面的路径优化做好准备。 为了防止因外部因素导致的信号干扰,采用了中值滤波器对AD采样值进行滤波。每4ms采集10次AD值,取其中值作为该控制周期的采样值,巡线部分主要依靠提线算法。 提线算法是智能车至关重要的一个步骤,车之所以能沿着赛道快速奔跑首先要提取出车子与赛道的偏移量得到一个误差,然后将这个误差送给控制器处理,最后控制器输出信号控制舵机和电机来纠正车子的姿态和控制车子的速度。电感排布如图4.2所示: 图4.2 电感排布 4.4双车处理 我们的双车思路是保证主车,从车都能独立工作的基础上根据两车实时距离对从车进行速度控制。控制流程如图4.3所示: 电机控制 两车是否小于距离 两车是否同时处于直道 从车根据车距加速 否 是 是 否 两车是否大于期望距离 从车根据车距减速 是 图4.3 双车控制流程图 4.5 PID控制算法介绍 控制算法包括方向控制和速度控制。方向控制采用位置式PD控制,速度控制采用增量式PID-棒棒控制。 PID控制是工程实际中应用最为广泛的调节器控制规律。问世至今70多年来,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。 (1)PID控制算法简介 PID调节是Proportional(比例),Integral(积分),Differential(微分)三者的缩写,是一种过程控制算法,就是对误差信号(采样信号与给定信号的差)通过比例,积分,微分的运算后的结果作为输出控制信号,来控制所要控制的对象。 比例调节作用:是按比例反应系统的偏差,系统一旦出现了偏差,比例调节作用用以减少偏差。比例作用大,可以加快调节,减少误差,但是过大的比例使系统的稳定性下降,甚至造成系统的不稳定。 积分调节作用:是使系统消除稳态误差,提高误差度。当有误差时,积分调节就进行,直至无误差,积分调节停止,积分调节输出一常值。积分作用的强弱取决与积分时间Ti,Ti 越小,积分作用就越强。反之Ti 大则积分作用弱,加入积分调节可使系统稳定性下降,动态响应变慢。 微分调节作用:微分作用反应系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。因此,可以改善系统得动态性能。在微分时间选择合适的情况下,可以减少超调,减少调节时间。微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。单位反馈的PID控制原理框图如图4.4所示: 图4.4 单位反馈的PID控制原理图 单位反馈e代表理想输入与实际输出的误差,这个误差信号被送到控制器,控制器算出误差信号的积分值和微分值,并将它们与原误差信号进行线性组合,得到输出量u。 公式1 式中Kp、Ki、Kd分别称为比例系数、积分系数、微分系数。u接着被送到了执行机构,这样就获得了新的输出信号,这个新的输出信号被再次送到感应器以发现新的误差信号,这个过程就这样周而复始地进行。 (2)位置式PID控制算法 用矩形数值积分代替上式中的积分项,对导数项用后向差分逼近,得到数字PID控制器的基本算式(位置算式): 公式2 其中x0为偏差信号为 0 时的控制作用,是控制量的基础。 其中T是采样时间,、、为三个待调参数。 (3)增量式PID控制算法 在用计算机控制的离散系统中,PID的算式为: 公式3 ,那么 公式4 两式相减得增量式 PID的算式 公式5 ∆反映的是第 k 次和第 k-1 次之间的增量,而且可以看出,使用增量式 PID 只需要保存前两次的误差即可。因此代码简单高效,并且无积分的累加误差。 增量型算法与位置型算法相比,具有以下优点: (a) 增量型算法不需要做累加,控制量增量的确定仅与最近几次误差采样值有关,计算误差或计算精度问题,对控制量计算影响较小。而位置型算法要用到过去的误差的累加值,容易产生大的累加误差。 (b) 增量型算法得出的是控制量的增量,误动作影响小,必要时通过逻辑判断限制或禁止本次输出,不会严重影响系统的工作,而位置型算法的输出是控制量全量输出,误动作影响大。 根据我们实际情况的调试,发现单一套用PID公式并不能达到预期的效果。适当对PID公式进行优化可以达到更好的效果。根据智能车系统提出的改进方法有不完全微分、微分先行、前馈控制等。对智能车算法的采用最好是知其道,才能达到用其妙的效果,根据具体的情况使用PID,不能完全按照理论照本宣科,墨守成规。 第五章 系统调试 5.1 开发调试工具 软件开发工具选用的是 Embedded Workbench for ARM。Embedded Workbench*for ARM 是 IAR Systems 公司为 ARM 微处理器开发的一个集成开发环境(下面简称 IAR EWARM)。比较其他的 ARM 开发环境,IAR EWARM 具有入门容易、使用方便和代码紧凑等特点。它为用户提供一个易学和具有最大 量代码继承能力的开发环境,以及对大多数和特殊目标的支持。嵌入式 IAR Embedded Workbench 有效提高用户的工作效率,通过 IAR 工具,可以大大节省软件调试时间。调试界面如图5.1所示: 图5.1 IAR调试界面 5.2 液晶屏、按键、拨码开关调试 在小车的调试过程中需要不断地修改变量的值来达到整定参数的作用,对此我们选用了液晶配合按键和拨码开关的调试方法。此外,比赛的时候,修改参数我们同样用这个模块进行修改。 液晶我们选用OLED液晶,该液晶具有以下特点: ·尺寸小,显示尺寸为0.96吋,而模块的尺寸约29.5mm*29.5mm 。具有普通LCD无法比拟的体积的优势。 ·高分辨率,分辨率为128*64,显示效果远超过LCD。 ·可以显示的数据更多,方便观察内部的变量的变化情况。 但同时,它的缺点也是显而易见的: ·价格远高于普通LCD,易损坏,质量不如普通LCD; ·耗费更多的单片机资源,通过高精度示波器测量刷新时间,每刷新液晶屏幕上一个变量值需要耗时1ms,这对高精度的高实时性的智能车是最大的不利。 最后,我们选用了OLED液晶,更加看重变量可显示个数和体积带来的优越。刷新变量的耗时巨大的问题可以通过软件解决,即在主函数分时刷新,避免影响主体函数的运行。界面如图5.2所示: 图5.2 液晶界面 按键我们采用普通的独立按键,设立4个按键和6个拨码开关进行开始,调试,运行,方案选择四个部分。 5.3 蓝牙及虚拟示波器调试 赛车在同样的赛道上走过的路都是不一样的,所以大家无论怎么考虑车的状态都是不够完全的,因此需要有一套完备的方案来解决对运行中的车辆进行实时监控。 为了解决这个问题,我们使用蓝牙模块配合上位机进行实时观测车模运行状态。如下图所示: 图5.3 蓝牙模块 图5.4 上位机 第六章 车模的主要参数及说明 项目 参数 路径检测方法(赛题组) 电磁组 车模几何尺寸(长、宽、高)(毫米) 700、240、200 电路电容总量(微法) 1820 传感器种类及个数 5(7个电感、1个光电编码器、1个红外测距、1个无线通讯模块、6个干簧管) 新增加伺服电机个数 0 赛道信息检测频率(次/秒) 250 主要集成电路种类/数量 主板(1)、运放(1)、驱动电路(1)、起跑线检测模块(1) 第七章 总结 自从决定参加“飞思卡尔”杯智能汽车竞赛以来,我们小组成员查找资料,设计机构,组装车模,编写程序,分析问题,智能车终于达到了稳定、快速、简单的性能目标,最终确定了我们的作品。 在此份技术报告中,我们主要介绍了准备比赛时的基本思路,包括机械,电路,以及智能车的控制算法。 在传感器布局,我们分析了前几届中出现的电感排布方法,综合考虑到程序的稳定性、简便性,我们最后敲定了现在的电感排布,并通过反复实践决定了传感器的数量和位置,在软件上不断完善控制算法,最终智能车在跑道上能稳定完成自主循迹行驶。 在电路方面,我们以模块形式分类,在电源管理,电机驱动,接口,控制,信号采集,传感器这六个模块分别设计,在查找资料的基础上各准备了几套方案;然后我们分别实验,最后以报告中所提到的形式决定了我们最终的电路图。 在算法方面,我们使用C语言编程,利用比赛推荐的开发工具调试程序,经过小组成员不断讨论、改进,终于设计出一套比较通用的,稳定的程序。在这套算法中,我们结合路况调整车速,做到直线加速,弯道减速,保证在最短时间跑完全程。 在之前的备战过程中,场地和经费方面都得到了学校和系的大力支持,在此特别感谢一直支持和关注智能车比赛的学校和系领导以及各位指导老师、指导学长,同时也感谢比赛组委会能组织这样一项有意义的比赛。 现在,面对即将到来的大赛,在历时近一年的充分准备以及 华南赛区 赛的考验之后,我们有信心在全国比赛中取得优异成绩。也许我们的知识还不够丰富,考虑问题也不够全面,但是这份技术报告作为我们小组辛勤汗水的结晶,凝聚着我们小组每个人的心血和智慧,随着它的诞生,这份经验将永伴我们一生,成为我们最珍贵的回忆。 参 考 文 献 (1) 邵贝贝.单片机嵌入式应用的在线开发方法 [M].北京.清华大学出版社.2004. (2) 刘金琨.先进 PID 控制及其 MATLAB 仿真[M].北京.电子工业出版. (3) 李仕伯,马旭,卓晴.基于磁场检测的寻线小车传感器布局研究[J].电子产品世界 2009. (4) 卓晴,黄开胜,邵贝贝.学做智能车——挑战“飞思卡尔”杯[M].北京:北京航空航天大学出版社,2007. (5) 吴成东. Labview虚拟仪器程序设计及应用[M]. 北京:邮电出版社 2008. (6) 贾翔羽,季厌庸,丁芳.前馈-改进PID算法在智能车控制上的应用 (7) 何宝祥,朱正伟,刘训飞,储开斌.模拟电路及其应用 [M] .北京: 清华大学出版社,2008. (8) 阎石.数字电子技术基础 [M] .北京: 高等教育出版社,2000. (9) 谭浩强著.C程序设计.北京:清华大学出版社,2003. 附录:源代码 void main() {    static uint8 KEY=2;    DELAY_MS(200);   //_______Beep________    gpio_init(PTE9,GPO,0);         key_init(KEY_MAX);     // port_init(PTA4, ALT1 | IRQ_FALLING | PULLUP );   // port_init(PTA5, ALT1 | IRQ_FALLING | PULLUP );   // port_init(PTA10, ALT1 | IRQ_FALLING | PULLUP );   // port_init(PTA11, ALT1 | IRQ_FALLING | PULLUP );        //port_init(PTE10, ALT1 | IRQ_RISING | PULLDOWN );//2272红外遥控    set_vector_handler(PORTE_VECTORn , PORTE_IRQHandler);    enable_irq (PORTE_IRQn);       // set_vector_handler(PORTA_VECTORn , PORTA_IRQHandler);   // enable_irq (PORTA_IRQn);        //GAN HUANG GUAN    //port_init(PTD5, ALT1 | IRQ_FALLING | PULLUP );    //port_init(PTB23, ALT1 | IRQ_FALLING | PULLUP );    //set_vector_handler(PORTD_VECTORn , PORTD_IRQHandler);    //enable_irq (PORTD_IRQn);    gpio_init(PTD4,GPI,0);    port_init_NoALT(PTD4,PULLUP);           NVIC_SetPriorityGrouping(4);    NVIC_SetPriority(PIT0_IRQn,1);          //配置优先级    NVIC_SetPriority(PIT1_IRQn,3);          //配置优先级    NVIC_SetPriority(PIT2_IRQn,2);        //配置优先级    NVIC_SetPriority(PORTE_IRQn,0);    // NVIC_SetPriority(PORTA_IRQn,1);    //NVIC_SetPriority(PORTD_IRQn,4);        adc_init(ADC0_SE8);    adc_init(ADC0_SE9);    adc_init(ADC1_SE10);    adc_init(ADC0_SE12);    adc_init(ADC0_SE13);    adc_init(ADC1_SE11);    adc_init(ADC1_SE12);    adc_init(ADC1_SE13);        gpio_init(PTE6,GPO,0);    gpio_init(PTE7,GPO,0);    gpio_init(PTD6,GPO,0);    gpio_init(PTD7,GPO,0);        LCD_Init();     // gpio_init(PTA17,GPO,1);           if(key_check(KEY_B) == KEY_DOWN)      KEY=1;         if(key_check(KEY_D) == KEY_DOWN)      KEY=3;      switch(KEY)    {          case 1://flash      {         Flash();        while(1)        {        Flash_write();        }      }break;      case 2:      {            while(!nrf_init());        gpio_init(PTD15,GPO,0);        gpio_init(PTE26,GPO,1);        FTM_QUAD_Init(FTM2);        gain_max_min();        printf("\nok!\n");        pit_init_ms(PIT0,2);  //runing system        set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler);        enable_irq (PIT0_IRQn);         FTM_PWM_init(FTM0,FTM_CH4,13*1000,0);//motor         FTM_PWM_init(FTM1,FTM_CH0,300,4500);//steer          pit_init_ms(PIT2,20);//         set_vector_handler(PIT2_VECTORn ,PIT2_IRQHandler);         enable_irq (PIT2_IRQn);         //set_vector_handler(PORTD_VECTORn , PORTD_IRQHandler);         //enable_irq (PORTD_IRQn);         //128 28 30         motor.KP=85;//142  85         motor.KI=42; //62  42         motor.KD=0; //40  0         steer.KP=73-8;  //73   75   75         steer.KD=110;  //105  120  115         steer.KI=12;    //74    80   77         valve.cr=150;         base_speed=65;         if(key_check(KEY_C) == KEY_DOWN)  //L 3         {           steer.KI=9;           steer.KP=72-8;           steer.KD=105;         }         if(key_check(KEY_J) == KEY_DOWN)//H 5         {           steer.KI=15;           steer.KP=74-8;           steer.KD=115;         }         if(key_check(KEY_K) == KEY_DOWN)//O 6         {           steer.KI=6;           steer.KP=72-8;           steer.KD=105;         }          while(1)         {           Oled_Show();           Rotk_Key();        sent_information();          //sent_buff[0]++;         }          }break;      case 3:      {        //Beep_flag=1;//Beep        //Beep();         pit_init_ms(PIT1,20);        set_vector_handler(PIT1_VECTORn ,PIT1_IRQHandler);        enable_irq (PIT1_IRQn);            while(1);      }break;          default :      {         while(1)        {                  LCD_P6x8Str(6,1,"MP99 :");        }      }    }         } void PIT1_IRQHandler(void) {      LCD_P6x8Str(6,0,"1 :");      LCD_P6x8Str(6,1,"2 :");      LCD_P6x8Str(6,2,"3 :");      LCD_P6x8Str(6,3,"4 :");      LCD_P6x8Str(6,4,"5 :");      LCD_P6x8Str(6,5,"6 :");      LCD_P6x8Str(6,6,"7 :");      LCD_P6x8Str(6,7,"8 :");       show_value();     show_osc();     PIT_Flag_Clear(PIT1);       } void PIT0_IRQHandler(void) {   //  pit_time_start

此文档下载收益归作者所有

下载文档
收起
展开