告武汉大学
时光机队
武汉大学
时光
第八届“飞思卡尔”杯全国大学生智能汽车竞赛技 术 报 告学校:武汉大学队伍名称:时光机参赛队员:石建炜 谈周宏 种传强带队教师:专祥涛 杨飞关于技术报告和研究论文使用授权的说明本人完全了解第八届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。参赛队员签名:带队教师签名:日期:第一章 总体方案设计.11.1 系统总体方案设计.1第二章 智能车机械结构调整与优化.22.1 智能车车体机械整体机构.22.2 智能车前轮定位的调整.22.2.2 主销内倾角.32.2.3 车轮外倾角.32.2.4 前轮前束.32.3 智能车转向机构调整优化.42.4 智能车后轮减速齿轮机构调整.52.5 其它机械结构的调整.5第三章硬件电路设计.63.1 硬件电路整体设计架构.63.1.1模块化.63.1.2方便性.73.1.3适应性.73.2 主板电路设计.73.2.1S12 单片机最小系统电路.73.2.2主板电源管理电路.83.2.3主板外围接口电路.93.3 驱动电路设计.103.3.1驱动方案选择.113.3.2 驱动芯片.113.3.3驱动电路.133.4 路线识别电路设计.143.4.1 路线识别原理概述.143.4.2 检测方案的选择.143.4.3检测电路.153.4.4电磁传感器空间布局.153.5 起跑线检测电路设计.16第四章 智能车控制软件设计说明.194.1 初始化.194.1.1 GPIO 初始化.194.1.2 PWM 模块初始化.194.1.3 脉冲累加模块初始化.204.1.4 PIT 模块初始化.21PIT 模块可以用来精确计时,以便完成延迟发车、定期获取反馈值跟赛道信息。214.2 速度获取.214.3 舵机控制.214.4 电机控制.234.5系统开发与调试.244.5.1 CodeWarrior IDE 工具介绍.244.5.2 系统安装.244.5.3 系统开发.254.5.4 系统在线调试.25第五章 开发工具、制作、安装、调试过程说明.275.1 开发工具.275.2 调试过程.27第六章、模型车的主要技术参数说明.276.1 智能车外形参数.276.2 电路部分参数.27附录 A车模系统比赛源程序.28引言这份技术报告中,我们小组通过对整体方案、电路、算法、调试、车辆参数的介绍,详尽地阐述了我们的思想和创意,具体表现在电路的创新设计,以及算法方面的独特想法,而对单片机具体参数的调试也让我们付出了艰辛的劳动。这份报告凝聚着我们的心血和智慧,是我们共同努力后的成果。在准备比赛的过程中,我们小组成员涉猎控制、模式识别、传感技术、汽车电子、电气、计算机、机械等多个学科,这次磨练对我们的知识融合和实践动手能力的培养有极大的推动作用,在此要感谢清华大学,感谢他们将这项很有意义的科技竞赛引入中国;也感谢武汉大学动力与机械学院对此次比赛的关注,我们的成果离不开学校的大力支持及指导老师悉心的教导;还要感谢的是和我们一起协作的队员们,协助,互促,共勉使我们能够走到今天。1第一章 总体方案设计1.1 系统总体方案设计根据竞赛规则规定,我们的智能车系统采用飞思卡尔的 16 位微控制器MC9S12DG128B 单片机作为核心控制单元用于智能车系统的控制。在选定智能车系统采用工字型电感传感器方案后,赛车的位置信号由车体前方的工字型电感传感器采集,经 S12 MCU 的 I/O 口处理后,用于赛车的运动控制决策,同时内部 ECT 模块发出 PWM 波,驱动直流电机对智能车进行加速和减速控制,以及伺服电机对赛车进行转向控制,使赛车在赛道上能够自主行驶,并以最短的时间最快的速度跑完全程。为了对赛车的速度进行精确的控制,在智能车后轴上安装光电编码器,采集车轮转速的脉冲信号,经 MCU 捕获后进行 PID 自动控制,完成智能车速度的闭环控制。此外,还增加了液晶作为输入输出设备,用于智能车算法参数的调试。根据以上系统方案设计,赛车共包括七大模块:MC9S12DG128B 主控模块、传感器模块、电源模块、电机驱动模块、速度检测模块辅助调试模块。各模块的作用如下:MC9S12DG128B 主控模块,作为整个智能车的“大脑”,将采集工字型电感传感器、光电编码器等传感器的信号,根据控制算法做出控制决策,驱动直流电机和伺服电机完成对智能车的控制。传感器模块,是智能车的“眼睛”,可以通过一定的前瞻性,提前感知前方的赛道信息,为智能车的“大脑”做出决策提供必要的依据和充足的反应时间。电源模块,为整个系统提供合适而又稳定的电源。电机驱动模块,驱动直流电机和伺服电机完成智能车的加减速控制和转向控制。速度检测模块,检测反馈智能车后轮的转速,用于速度的闭环控制。辅助调试模块主要用于智能车系统的功能调试、赛车状态监控等方面。2第二章 智能车机械结构调整与优化2.1 智能车车体机械整体机构2.2 智能车前轮定位的调整现代汽车在正常行驶过程中,为了使汽车直线行驶稳定,转向轻便,转向后能自动回正,减少轮胎和转向系零件的磨损等,在转向轮、转向节和前轴之间须形成一定的相对安装位置,叫车轮定位,其主要的参数有:主销后倾、主销内倾、车轮外倾和前束2。智能车竞赛模型车的四项参数都可以调整,但是由于模型车加工和制造精度的问题,在通用的规律中还存在着一些偶然性。2.2.1 主销后倾角主销后倾角是指在纵向平面内主销轴线与地面垂直线之间的夹角2。它在车辆转弯时会产生与车轮偏转方向相反的回正力矩,使车轮自动恢复到原来的中间位置上。所以,主销后倾角越大,车速越高,前轮自动回正的能力就越强,但是过大的回正力矩会使车辆转向沉重。通常主销后倾角值设定在 1到 3。模型车通过增减黄色垫片的数量来改变主销后倾角的,由于竞赛所用的转向舵机力矩不大,过大的主销后倾角会使转向变得沉重,转弯反应迟滞,所以设置为 0,以便增加其转向的灵活性。第八届全国大学生智能汽车邀请赛技术报告32.2.2 主销内倾角主销内倾角是指在横向平面内主销轴线与地面垂直线之间的夹角,它的作用也是使前轮自动回正2。角度越大前轮自动回正的作用就越强,但转向时也就越费力,轮胎磨损增大;反之,角度越小前轮自动回正的作用就越弱。通常汽车的主销内倾角不大于 8。对于模型车,通过调整前桥的螺杆的长度可以改变主销内倾角的大小,由于过大的内倾角也会增大转向阻力,增加轮胎磨损,所以在调整时可以近似调整为 03左右,不宜太大。主销内倾和主销后倾都有使汽车转向自动回正,保持直线行驶的功能。不同之处是主销内倾的回正与车速无关,主销后倾的回正与车速有关,因此高速时主销后倾的回正作用大,低速时主销内倾的回正作用大。2.2.3 车轮外倾角前轮外倾角是指通过车轮中心的汽车横向平面与车轮平面的交线与地面垂线之间的夹角2,对汽车的转向性能有直接影响,它的作用是提高前轮的转向安全性和转向操纵的轻便性1。在汽车的横向平面内,轮胎呈“八”字型时称为“负外倾”,而呈现“V”字形张开时称为正外倾。如果车轮垂直地面一旦满载就易产生变形,可能引起车轮上部向内倾侧,导致车轮联接件损坏。所以事先将车轮校偏一个正外倾角度,一般这个角度约在 1左右,以减少承载轴承负荷,增加零件使用寿命,提高汽车的安全性能。模型车提供了专门的外倾角调整配件,近似调节其外倾角。由于竞赛中模型主要用于竞速,所以要求尽量减轻重量,其底盘和前桥上承受的载荷不大,所以外倾角调整为 0即可,并且要与前轮前束匹配。2.2.4 前轮前束所谓前束是指两轮之间的后距离数值与前距离数值之差,也指前轮中心线与纵向中心线的夹角2。前轮前束的作用是保证汽车的行驶性能,减少轮胎的磨损。前轮在滚动时,其惯性力自然将轮胎向内偏斜,如果前束适当,轮胎滚动时的偏斜方向就会抵消,轮胎内外侧磨损的现象会减少。像内八字那样前端小后端大的称为“前束”,反之则称为“后束”或“负前束”。在实际的汽车中,一般前束为 012mm。在模型车中,前轮前束是通过调整伺服电机带动的左右横拉杆实现的。主销在垂直方向的位置确定后,改变左右横拉杆的长度即可以改变前轮前束的大小。在实际的调整过程中,我们发现较小的前束,约束 02mm 可以减小转向阻力,使模型车转向更为轻便,但实际效果不是十分明显。虽然模型车的主销后倾角、主销内倾角、车轮外倾角和前束等均可以调整,但是由于车模加工和制造精度的问题,在通用的规律中还存在着不少的偶然性,一切是实际调整的效果为准。42.3 智能车转向机构调整优化理想的转向模型,是指在轮胎不打滑时,忽略左右两侧轮胎由于受力不均产生的变形,忽略轮胎受重力影响下的变形时车辆的的转向建模。在这种理想的模型下,车体的转向半径可以计算得到。图 2.3 智能车转向示意图如图 2.3,假设智能车系统为理想的转向模型,且其重心位于其几何中心。车轮满足转向原理,左右轮的轴线与后轮轴线这三条直线必然交于一点。转向机构在车辆运行过程中有着非常重要的作用。合适的前桥和转向机构可以保证在车辆直线行驶过程中不会跑偏,能保证车辆行驶的方向稳定性;而在车辆转向时,合适的转向机构可以使车辆自行回到直线行驶状态,具有好的回正性。正是由于这些原因,转向系统优化设计成为智能车设计中机械结构部分的重点,直接关系到赛车能否顺利地完成比赛。在实际操作中,我们通过理论计算的方案进行优化,然后做出实际结构以验证理论数据,并在实际调试过程中不断改进。在模型车制做过程中,赛车的转向是通过舵机带动左右横拉杆来实现的。转向舵机的转动速度和功率是一定,要想加快转向机构响应的速度,唯一的办法就是优化舵机的安装位置和其力矩延长杆的长度。由于功率是速度与力矩乘积的函数,过分追求速度,必然要损失力矩,力矩太小也会造成转向迟钝,因此设计时就要综合考虑转向机构响应速度与舵机力矩之间的关系,通过优化得到一个最佳的转向效果。经过最后的实际的参数设计计算,最后得出一套可以稳定、高效工作的参数及机构。如图 2.4,我们最终设计的这套转向拉杆,我们综合考虑了速度与扭矩间的关系,并根据模型车底盘的具体结构,简化了安装方式,实现了预期目标。第八届全国大学生智能汽车邀请赛技术报告5图 2.4 转向拉杆图2.4 智能车后轮减速齿轮机构调整模型车后轮采用RS-380SH 电机驱动,电机轴与后轮轴之间的传动比为 18:76(电机轴齿轮齿数为 18,后轴传动齿数为 76)。齿轮传动机构对车模的驱动能力有很大的影响。齿轮传动部分安装位置的不恰当,会大大增加电机驱动后轮的负载,会严重影响最终成绩。调整的原则是:两传动齿轮轴保持平行,齿轮间的配合间隙要合适,过松容易打坏齿轮,过紧又会增加传动阻力,浪费动力;传动部分要轻松、顺畅,不能有迟滞或周期性振动的现象。判断齿轮传动是否良好的依据是,听一下电机带动后轮空转时的声音。声音刺耳响亮,说明齿轮间的配合间隙过大,传动中有撞齿现象;声音闷而且有迟滞,则说明齿轮间的配合间隙过小,或者两齿轮轴不平行,电机负载变大。调整好的齿轮传动噪音很小,并且不会有碰撞类的杂音,后轮减速齿轮机构就基本上调整好了,动力传递十分流畅。2.5 其它机械结构的调整另外,在模型车的机械结构方面还有很多可以改进的地方,比如说车轮、悬架、底盘、车身高度等。模型车在高速的条件下(2.3m/s3.5m/s),由于快速变化的加减速过程,使得模型车的轮胎与轮辋之间很容易发生相对位移,可能导致在加速时会损失部分驱动力。在实验中调试表明,赛车在高速下每跑完一圈,轮胎与轮辋之间通常会产生几个厘米的相对位移,严重影响了赛车的加速过程。为了解决这个问题,我们在实际调试过程中对车轮进行了粘胎处理,可以有效地防止由于轮胎与轮辋错位而引起的驱动力损失的情况。此外,我们还对模型车的前后悬架弹簧的预紧力进行调节,选用不同弹性系统的弹簧等方法进行了改进,并且对车身高度,以及底盘的形状和质量、后轮的轮距等,都进行了相应的改进和调整,均取得了不错效果。6第三章硬件电路设计硬件设计是整个系统的基础,只有搭建好了稳定可靠的硬件环境,才能为后续的软件提供帮助,同时硬件设计也能为软件算法提供一种补偿作用,所以说好的硬件设计是系统最初设计的关键。3.1 硬件电路整体设计架构MC9S12XS128控制部分起始线检测速度传感电池7.2V稳压模块拨码开关电机驱动舵机电机5V电磁传感器图 3-1系统电路总体框架图系统整体结构如图 3-1 所示,我们将电路分成几个模块单片机最小系统,电源电路,传感器电路,检波电路,电机驱动电路,调试用的液晶显示&按键电路。部分模块独立在单独的电路板上,方便随时修改方案,并实现物理上的隔离。强电流和弱电流分别分布在电路板上的两个角落。数字地与模拟地隔离。上述措施可以防止电磁干扰,显著的提高电路的稳定性。3.1.1模块化我们在进行硬件的电路设计时,将各功能模块进行模块化设计,并将部分模块分别做成独立的电路板,如电机驱动模块板、路径识别传感器检测电路模块板、起跑线检测板以及电源管理模块等,这样不但可以方便安装和调试,同第八届全国大学生智能汽车邀请赛技术报告7时单独做板可以方便电路的组合,从而选出最佳方案。3.1.2方便性电路板的设计采用叠加的方式,可以尽可能的节约空间,整个电路采用插拔的方式连接,这样在机械上也会比较方便,可以重心后移,使小车的稳定性更强,液晶的显示更加方便调试传感器的放大倍数等参数,无线控制小车停车功能使小车在调试尽可能减少意外损坏,节省很多时间。3.1.3适应性模块化的电路设计可以在某块电路出现问题时便于快速维修或替代,这点在比赛现场时是很重要的,传感器的放大倍数的可调范围较宽,这样在赛道导航磁场强弱不同时都能够正常检测赛道。3.2 主板电路设计主板电路是整个系统的硬件核心,只有正确合理的规划设计,才能高效地完成设计。3.2.1S12 单片机最小系统电路整个系统的核心控制采用 Freescale 的 MC9S12XS128 型号 16 位单片机,5V电压供电。单片机内部资源有:128KB 的 FLASH、8KB 的 RAM、8KB 的 DATAFLASH、I/O 口有 91 个、晶振频率为 16MHz,内部有 CAN 总线、SCI、SPI,16 路 12 位 A/D、8 路 8 位 PWM 输出(在实际使用时,为了提高输出精度将两路 PWM 合并为一路则有 4 路 16 位 PWM 输出)、16 位定时器、4 路 PIT。可见,此单片机有很丰富的资源,可以满足真个系统的需求。其中,16 位 PWM 输出能够很好的控制伺服器工作,实现精确转向;12 位 A/D 工作时钟最大可以达到8M,满足信号采样的需求;4 路 PIT 可以实现对脉冲信号的上升沿和下降沿捕捉;丰富的 I/O 口资源能够扩展外部设备,如键盘、LCD、Zigbee。单片机最小系统原理图如图 2-1 所示8图 3-2S12 最小系统原理图3.2.2主板电源管理电路智能车车模电源来源于 7.2V、2000mAh 的可充电镉镍电池,而车模电机、舵机、测速、传感器等不同的电路模块对电源的电压、电流的需求不同,所以设计供电模块针对不同电路模块进行供电。对于电源电压,我们采用了德州仪器的 TPS7350 芯片,它具有低压差工作特性,相比一般的稳压芯片而言,它所需的工作压差很小,这对于我们的应用十分有用。其次,为了防止由于电压的不稳定导致电路板复位,我们采用了最小系统电路电压和外部电路电压分别稳压并供电的思路,最后,我们的整体供电电路如下图 2-2,所示,其中 VCC 表示最小系统的供电电压,VCC5 用于外部电路的供电:第八届全国大学生智能汽车邀请赛技术报告9图 3-3 主板 5V 稳压电路另外,由于传感器采集回来的信号电压较低,为了提高 AD 转换的分辨率,我们降低了最小系统的 AD 参考电压,并将其设置为 3.3V,一下是我们的 3.3V 稳压电路:图 3-4 主板 3.3V 稳压电路3.2.3主板外围接口电路主板上的接口主要包括传感器、电机、舵机、编码器、无线模块、LCD 液晶模块等外设接口。这些接口的设计和使用能使电路板的整体设计和系统规划更加低灵活、方便。相关接口如下图:10图 3-5 主板外围接口电路图 3-6 系统主板 PCB3.3 驱动电路设计智能车比赛最终比的是速度,需要模型车能够以尽量快的速度跑完全程,有了好的算法之后,还需要有驱动电路对电机进行控制。由于本届车模使用的电机 RS380 输出功率比较(正常带载时输出电流在 5A 以上),对驱动电路的输出功率和散热要求较高。第八届全国大学生智能汽车邀请赛技术报告113.3.1驱动方案选择从他励直流电动机的机械特性方程式:可知,改变电枢电压 U、电枢回路中串接的附加电阻 Rad、主磁通都可以得到不同的人为机械特性,从而在负载不变时可以改变电动机的转速,达到调速的目的,故他励直流电动机的调速方法有以下三种:改变电枢电压 U 调速,改变电枢回路串接附加电阻 Rad 调速和改变主磁通调速。由于比赛所用直流电机励磁是永磁铁,故减弱励磁磁通的方案不可行。若采用改变电枢回路电阻的方法,则需要在电机电路中串入数字电位器,而且回路中电流很大需要大功率数字电位器,这将大大增加我们的成本,且在小车运动中速度需要频繁改变,若采用串接数据电位器来调速将满足不了高速的调速性能。故在本文中采用的是改变电枢电压 U 调速。这种调速方法的优点是:(1)调速时,机械特性硬度不变,故调速的稳定度较高。(2)调速时电能的损耗较小,电动机的效率较高。(3)当电枢电压连续变化时,调速平滑,即转速可以平滑无级调节。随着高速开关元件的发展,PWM 直流调速系统在生产实际中逐渐得到了广泛的引用。由于单片机自带 PWM 功能,本文选择了直流脉宽调制调压调速。这个方案更易于控制和调节电机的转速,调节范围大,硬件开销小,效率高,有利于减轻整个车的重量。本届比赛中电磁车使用的电机型号为 RS380-ST/3545 微型直流有刷电机,其功效在 68.4%时,转矩为 23.873mNm,速度为 18752APM,电流为 11.124A,功率为 59.67W。由上述指标可以看出,该电机在工作时电流大、功率高,发热量大。经过综合比较,本文选取了由两片 IR2104 半桥驱动芯片构成全桥驱动的方案。3.3.2 驱动芯片主电机为永磁式微型直流电动机,驱动电路采用集成驱动芯片 IR2104S,该IR2104(S)高电压,高速动力供养高驱动 MOSFET 和 IGBT 低侧参考输出通道.专有 HVIC 8-Lead SOIC IR2103S 和锁存免疫 CMOS 技术。逻辑输入 IR2104 兼容标准 CMOS 或 LSTTL 输出,到 3.3V 逻辑.输出驱动器具有高脉冲电流缓冲级,最低驱动器设计交叉传导。浮动通道可以用来驱动一个 N 沟道功率 MOSFET 在高端配置的可高达 0 或 600V.IR2104 引脚图:12图 3-7IR2104 引脚逻辑图如下图所示:图 3-8IR2104 时序图第八届全国大学生智能汽车邀请赛技术报告133.3.3驱动电路图 3-9 电机驱动原理图图 3-10 电机驱动 PCB143.4 路线识别电路设计3.4.1 路线识别原理概述智能汽车竞赛使用路径导航的交流电流频率为 20kHz,产生的电磁波属于甚低频(VLF)电磁波。甚低频频率范围处于工频和低频电磁波中间,为 3kHz30kHz,波长为100km10km,竞赛车模需要能够通过自动识别赛道中心线位置处由通有 100mA、20KHz 交变电流的导线所产生的电磁场进行路径检测。电流周围的电磁场示意图如下:图 3-11 电流周围电磁场示意图常见的交变磁场传感器有电感、霍尔元件、磁阻等,综合考虑到价格、灵敏度、易用性等因素后,我们选用了电感作为路径传感器。使用电感检测的核心是检测其在交变磁场中产生的感应电动势的幅值,这就是路径识别电路的作用。3.4.2 检测方案的选择传感器电路中的放大电路通常有两种方案,一种是三极管放大,一种是采用运放放大。两种方案各有优缺点。使用运放的放大电路具有增益可调、放大线性度好、输出纹波小等优点。但是运放一般都需要正负供电电源,而负电源较难设计;运放的输出电压范围要比输入电压低,从而限制了信号输入范围;且工作参数满足我们需求的运放价格都比较昂贵。使用三极管放大电路具有电路简单、开关速度高、能很好得放大交流信号等优点。但是三极管放大静态工作点难调、放大倍数不高、容易出现各种失真等现象。路径识别电路有竞赛秘书处给出的电磁组参考设计方案,使用了三极管放大和二极管检波输出的设计,此方案简单易行,但是在使用过程中发现,此方案在放大倍数、放大线性度以及各路对称性等方面不能令人满意,其输出不利于解算出精确的黑线位置,其原因主要在于使用了单个三极管进行放大。经过综合分析,为了得到更高质量的路径检测数据,我们设计使用了使用运算放大器的路径检测电路。经过实验比较,使用运算放大器的电路具有增益可调、放大线性度好、输出纹波小等优点。第八届全国大学生智能汽车邀请赛技术报告153.4.3检测电路电路原理图如下:图 3-12 运放检测电路图图 3-13 运放检测电路 PCB 板3.4.4电磁传感器空间布局从道路元素来看,赛道一般可以分成直道、单弯道、S 道、交叉道等形式,其中直道是最简单的,因此,分析清楚直道情况下的传感器响应及赛车控制是基础。为了讨论方便,在车体坐标系中令小车前进方向为 Y 轴正向,顺着 Y 轴的右手方向为 X 轴正向,Z 轴指向小车正上方。,具体如下所示:16图 3-14 车体坐标系示意图在本文后续的讨论中,X 线圈指的是线圈轴线平行于 X 方向的线圈,Y 方向线圈及 Z 方向线圈类推。当小车的前进方向与长直导线平行时,Y 线圈的感应电动势几乎为 0,但在弯道或交叉道时,Y 线圈中便存在了感应电动势,并且该电动势随着弯道半径的减小而增大。因此,Y 线圈可以用来检测弯道。本文设计了两个对称的 Y 线圈,其间距为 20cm。传感器效果图如下:图 3-15 运放检测板实物图3.5 起跑线检测电路设计按照比赛规则要求,跑完一圈后赛车需要自动停止在起始线之后三米之内的赛道内,赛道有一个长为 1m 的出发区,如下图所示,计时起始点两边分别有一个长度 10cm 黑色计时起始线,赛车前端通过起始线作为比赛计时开始或者结束时刻。黑线起始线的宽度与赛道边线宽度一致。在黑色计时起始线中间安装有永久磁铁,每一边各三只。磁铁参数:直径 7.5-15mm,高度 1-3mm,表面磁场强度 3000-5000 高斯。起跑区漆包线20kH z100m A10cm9cm10cm起始线 起跑区100cm赛道中心线车模运行方向赛道宽度距离:45cm图 3-16 的起跑区第八届全国大学生智能汽车邀请赛技术报告17起跑线附近的永磁铁的分布是在跑道中心线两边对称分布。相应的位置如下图所示:起始线永磁铁 3个永磁铁 3个12.5cm6.5cm9.5cm图 3-17 跑线下的永磁体安放位置用于检测起跑线的 6 个永磁铁按照一定间隔放置的磁钢组成,而且磁钢的极性是随机放置的,如果使用霍尔方式检测那么极性问题就一定要考虑进去,所以一对霍尔传感器至少是两个,但是如果使用干簧管,极性的问题就不用考虑。干簧管不用供电,将干簧管的一端接地,一端接 IO,然后利用单片机的内部上拉,用程序去检测低电平。这样就可以完全利用 Freescale 芯片的内部资源简化电路的设计。针对上述要求,利用干簧管设计起始线检测电路如下图所示。干簧管是磁机械效应的磁场传感器,其内部是一个常开触点开关,在磁场强度超过其阈值时,开关闭合。图中七个干簧管并联为“线或”关系,任何一个干簧管检测到磁铁,PT0 端都会输出正脉冲,引发中断程序使赛车停车。图 3-18起始线检测电路实际干簧管板:18图 3-19 干簧管效果图第八届全国大学生智能汽车邀请赛技术报告19第四章 智能车控制软件设计说明4.1 初始化4.1.1 GPIO 初始化对 MCU 的一些 IO 设备初始化,设置为输入或输出,以满足外接硬件的需求。程序代码如下。void GPIOinit(void)DDRB=0X00;/定义 B 口为输入0 1 2 3 拨码开关DDRK=0 xff;/K 口为输出PORTK=0 xff;/高电平灯灭PORTK_PK7=1;/电机使能DDRA_DDRA0=0;/A0 口为输入DDRA_DDRA1=0;/A1 口为输 RU此两口用来检测起跑线4.1.2 AD 模块初始化AD 模块能将片外的模拟信号转化为片内能够识别的数字信号。其中有电池的电压,各路传感器感应电动势。在调试中能够随时观察电池电压变化,同时也对电池加以保护,不至于过度放电。void ADC_Init(void)ATD0CTL0=0b00001000;/4321:0b0111=7,7 通道转换模式ATD0CTL1=0b01000000;/第 7 位:1-外部触发,第 65 位:10-12 位精度,第 4 位:放电,第 3210 位:ch/有修正ATD0CTL2=0b01000000;/禁止外部触发,中断时 AD 转换不停止,使用内部产生的时钟,中断禁止ATD0CTL3=0b11000000;/a 右对齐无符号,每次转换 4 个序列,No FIFO,Freeze 模式下继续转ATD0CTL4=0b11100011;/第 765 位:110 采样时间为 24 个 AD 时钟周期,ATDClock=BusClock*0.5/PRS+1=(64M*0.5)/(3+1)=8MATD0CTL5=0b00110011;/第 6 位:0 特殊通道禁止,第 5 位:1 连续转换,第 4 位:1 多通道轮流采样第 3210 位:0 第一个通道为 3ATD0DIEN=0b00000000;/禁止数字输入4.1.2 PWM 模块初始化PWM 在片外加低通滤波器可以当作单片机的DA 模块。智能车上,利用PWM来控制舵机的转向及电机的速度。舵机80Hz,电机10KHz,按不同的需求配置PWM20参数,代码如下。void InitPWM(void)PWME=0 x00;PWMPOL=0 xFF;/output waveform which high first then low when theduty counter is reachedPWMCAE=0 x00;/left align,1:center alignPWMCTL=0 x70;/选择级联,电机 CON01CON23,舵机CON45,PWMCLK=0 x00;/选择时钟,主机时钟 ACON01CON45B CON23PWMPRCLK=0 x55;/Clock A is 64MHz/32=2MHz,Clock B is64MHz/32=2MHzPWMPER45=40000;/100HZPWMx Period=Channel ClockPeriod*PWMPERx(CAE=0)=20000/2M=20-2s/2M/40000=50Hz/PWMx Period=Channel Clock Period*(2*PWMPERx)(CAE=1)PWMDTY45=MID;PWMPER01=200;/2MHZ/200=10KHZT=0.1msPWMPER23=200;PWMDTY01=0;PWMDTY23=0;/POL=1,CAE=0时,Duty=PWMDTY/PWMPER*100%PWME=0 x22;/允许 PWM 输出 1-电机正转 3-电机反转 7-舵机4.1.3 脉冲累加模块初始化此模块主要用来获取小车行驶的实际速度,以便进行控制。void PAInit(void)/脉冲累加初始化TIOS_IOS7=0;/PT7 口进行脉冲累加PACTL=0b01010000;/开启脉冲累加,事件记数方式,上升沿时增加计数器/预分频时钟,禁止溢出中断,禁止脉冲累加输入中断PACNT=0 x0000;/计数寄存器清 0第八届全国大学生智能汽车邀请赛技术报告214.1.4 PIT 模块初始化PIT 模块可以用来精确计时,以便完成延迟发车、定期获取反馈值跟赛道信息。void pitinit(void)PITCFLMT_PITE=0;/定时中断通道 0 关PITCE_PCE0=1;/定时器通道 0 使能PITMTLD0=64-1;/8 位定时器初值设定,64 分频,在 64MHzBusClock 下,为1MHz。即 1usPITLD0=5000-1;/16 位定时器初值设定。PITTIME*1uS即 5ms 中断一次PITINTE_PINTE0=1;/定时器中断通道 0 中断使能PITCFLMT_PITE=1;/定时器通道 0 使PACTL=0 x50;/16 位累加器 PACA 有效,PT7 引脚的上升沿触发计数器值增加PACNT=0 x0000;/计数器清零4.2 速度获取利用单片机的 ECT 模块捕捉编码器的脉冲个数,其中寄存器 PACNT 中存放的是有效脉冲的个数,再用定时器间隔一段时间读里面的值,每次得到的值的大小就能反映出车速的大小,程序的流程图如图 4.1 所示。图 4.1 速度获取程序流程图4.3 舵机控制舵机控制智能车行驶的方向。舵机的转向灵活性及准确性直接影响智能车的正确行驶。控制算法上要做到在直路上高速行驶,在进入弯道时及时转向才ECT初始化脉冲累加脉冲清零读脉冲数定时延时22是最佳方案。在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的 PID控制器(亦称 PID 调节器)是目前应用最为广泛的一种自动控制器。它具有原理简单,易于实现,适用面广,控制参数相互独立,参数选定简单等优点。在理论上可以证明,对于过程控制的典型对象“一阶滞后纯滞后”与“二阶 滞后纯滞后”,PID 控制器为最优控制。PID 调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活(PI、PD、)。图 4.2 所示为 PID 控制算法图解。图 4.2 PID 控制算法图解我们在传感器支架上安装了五路电感传感器,三个靠中间横放,两个分别靠最左最右竖放,如图 3.3 所示。传感器获取的数据,通过程序转化为舵机的偏角。我们对 PID 和 PD 控制算法做了理论分析和实验验证,选择了 PD 控制。调节两参数系数,使舵机的偏角能迅速跟上传感器的变化,又便于直道上的加速行驶。图 4.3 传感器安装示意图舵机的转角:ERROR2=ERROR1;ERROR1=A0+A1-A3-A4;Angle_out=Centre_Angle+k1*ERROR1+k2*(ERROR1-ERROR2)KpKpTiSKp/TiS被控制对象A1A2A3A4第八届全国大学生智能汽车邀请赛技术报告23k1 为误差的比例系数。k2 为误差的微分系数。图中 A2 传感器是用作标位,当 A2 的值小于定时,表明电磁线完全偏离赛车的一侧,这时再比较 A1 和 A3 的值,如果 A1 大于 A3 则转角转左极限,否则为右极限。算法流程图如下 4.4 图。图 4.4 舵机算法流程图4.4 电机控制通过对编码器测得的值及单片机的 PWM 输出来闭环控制电机的转速。PWM 的占空比就能控制加在直流电机上电压的有效值,从而控制电机的转速,而且闭环控制消除了外界的很多影响因素。在控制算法上我们选用了控制精度不高但响应快的 bang-bang 的算法,对于车模上的直流永磁电机,其转动惯性大,速度响应迟滞都有很大的改进。流程如图 4.5 所示。设定速度微控制器PWM测各传感器值A2100输出左极限输出右极限输出 Angle_outA1A3YYNN24图 4.5 电机控制流程图4.5系统开发与调试4.5.1 CodeWarrior IDE 工具介绍CodeWarrior 包括构建平台和应用所必需的工具-IDE、编译器、调试器、编辑器、链接器、汇编程序等。它是一个单一的开发环境,在所有所支持的工作站和个人电脑之间保持一致。在每个所支持的平台上,性能及使用均是相同的。无需担心主机的不兼容。CodeWarrior 包括完成大多数嵌入式开发项目所需的所有工具。4.5.2 系统安装打开安装文件,出现如下安装向导,如图 4.1 所示。图 4.5.1 CodeWarrior 安装向导单击“Next”直到安装完成。安装进程如图 4.2 所示。直流电 机编码器第八届全国大学生智能汽车邀请赛技术报告25图 4.5.2 CodeWarrior 安装进程4.5.3 系统开发图 4.3 为 CodeWarrior IDE C 语言程序编辑界面。其左小半边的项目编辑器,管理工程文件等,右大半边的文本编辑器,输入程序代码。图 4.5.3 系统开发界面4.5.4 系统在线调试图 4.4 为 CodeWarrior IDE 编辑器的程序烧写及在线调试界面,可进行在线硬件仿真,可查看各寄存器及用户定义的变量的值。26图 4.5.4 程序下载及在线调试第八届全国大学生智能汽车邀请赛技术报告27第五章 开发工具、制作、安装、调试过程说明5.1 开发工具程序的开发是在组委会提供的 CodeWarrior IDE 下进行的,包括源程序的编写、编译和链接,并最终生成可执行文件。CodeWarrior for S12 是面向以 HC1 和 S12 为 CPU 的单片机嵌入式应用开发软件包。包括集成开发环境 IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C 交叉编译器、汇编器、链接器以及调试器。5.2 调试过程使用液晶修改参数调车。第六章、模型车的主要技术参数说明6.1 智能车外形参数车长:65cm车宽:22cm车高:23cm车重:约 1.1kg6.2 电路部分参数我们小组所改造的智能车采用一块比赛标准 7.2V 电池供电,电路中共有44 个电容,容量总计 1500F。当模型车全功率开动时,功耗约为 50W。28附录 A车模系统比赛源程序#include MyHeader.h/头文件集/舵机占空比减小右转增加左转extern int zhi,yanzhong,v1,shizi,serError;/zhidao 舵机打中,越大范围KP 越大extern int KP,MID,KD,KX,KP1,KD1,KI1,vm,k0,k1,k2,k3;int b020=0,b120=0,b220=0,b320=0,b420=0,i=0,ch9=0;int x=0,x1=0,xc=0;/xc 是两次舵机转向之差inta=0,b12=0,b03=0,bpmax=0,bmin=0,bmax=0,b=0,ba=0,b00=0,b11=0,b22=0,b33=0,b44=0,b0a=0,b1a=0,b2a=0,b3a=0,b4a=0,cp=0,ccp=0,c=0,c0=0,c1=0,cc=0,cc0=0,bmax0=0,czong=0,yanshi=0;intsetpwm=0,speed1=0,speed0=0,setspeed=0,E1=0,E2=0,E3=0,spdflag=0,vjian=0,vjia=0;char tzhi=1,txiao=0,tda=0;int feedback=0;float OutData4=0;extern char track;extern int chu,chu_flag,jiasu,sign,serkp,jiasu,weifen;void interrupt 66 pitt(void);void main(void)/*put your own code here*/DisableInterrupts;Initclock();SCIInit();InitPWM();ADC_Init();GPIOinit();PAInit();pitinit();InitFlashLcd();/液晶屏 FLASH 初始化SetFlashLcd();/液晶屏 FLASH 设置函数EnableInterrupts;第八届全国大学生智能汽车邀请赛技术报告29for(;)/if(chu_flag=