电磁组-上海电力学院电自二队技术报告 - 图文

更新时间:2023-12-16 23:13:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第五届“飞思卡尔”杯全国大学生智

能汽车竞赛

技 术 报 告

学 校:上海电力学院 队伍名称:电自二队 参赛队员:王 博 杨嘉骏 徐凌波 带队教师:杨 宁 黄云峰

上海电力学院电自二队技术报告

关于技术报告和研究论文使用授权的说明

本人完全了解第五届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、

使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。

参赛队员签名:

带队教师签名: 日 期:

2

上海电力学院电自二队技术报告

目录

第一章 引言 ............................................................................................................................ 4 第二章 智能车整体设计思路 .............................................................................................. 5 2.1智能车硬件结构 ................................................................................................................ 5 2.2 智能车软件设计思想 ..................................................................................................... 6 第三章 机械结构设计 ............................................................................................................ 7 3.1 车模组装与改造 ............................................................................................................... 7 3.2 传感器的安装....................................................................................................................8 3.3 编码器的安装....................................................................................................................8 3.4 电路板的固定与安装........................................................................................................9

第四章 硬件电路模块设计 ................................................................................................ 10 4.1 信号源模块 ................................................................................................................. 10 4.3电源管理模块 .................................................................................................................. 17 4.4 电机驱动模块 ................................................................................................................. 18 4.5 测速功能模块 ................................................................................................................. 19 第五章 智能车软件设计 .................................................................................................... 20 5.1 Codewarrior简介 ............................................................................................................. 20 5.2 程序主要算法介绍 ......................................................................................................... 20 5.2.1 舵机控制 ...................................................................................................................... 20 5.2.2 电机控制 ...................................................................................................................... 21 第六章 总结 ........................................................................................................................ 22 6.1 模型车的主要技术参数 ............................................................................................... 22 6.2 小结 ............................................................................................................................... 22 参考文献.................................................................................................................................24 源程序.....................................................................................................................................25

3

上海电力学院电自二队技术报告

第一章 引言

在这届智能车比赛中,新增加了电磁组,竞赛车模需要能够通过自动识别赛道中心线位置处由通有频率为20KHz,大小为100mA左右的交变电流的导线所产生的电磁场进行路径检测。本智能车以飞思卡尔公司的16位单片机MC9S12XS128为核心控制器,利用电感线圈作为传感器采集路况信息,配合电机、舵机、电池等组成的驱动电路进行信息处理,以达到路径识别的目的,控制模型车高速稳定地在跑道上行驶。

硬件电路部分主要采用MC33886模块稳定、有力地驱动直流电动机和舵机。所选用的低压差电源管理芯片TPS7350和MAX734,可使在7.2伏电池供电的条件下为系统的各功能模块提供了稳定、可靠的工作电源,为智能车的稳定工作提供了有力的保证。赛道中心线通过的电流是由自己制作的信号源产生频率为20KHz、大小为100mA的交流电。测速部分采用光电编码器完成对速度的及时测量和反馈。

软件系统部分主要包括以下与路径识别系统相关模块的算法:(1) 电感线圈检测到的磁场强度也即电压的处理;(2)舵机调节模块算法;(3)速度调节模块;(4)基于上述三个模块的路径识别算法;(5)相应的调试函数。

本系统利用开发工具CodeWarrior进行编程开发,用BDM进行程序下载,利用串口传输的数据进行在线调试。这些工具的使用,使得软件的设计编程和调试工作得到了保证。

通过一系列的调试,本系统基本实现了路径识别的功能,在实际的测试中,小车也比较好的完成寻线行驶的任务。

4

上海电力学院电自二队技术报告

第二章 智能车整体设计思路

2.1智能车硬件结构

本智能车采用MC9S12XS128单片机为主控制器,利用红电感线圈采集赛道信息,然后利用适合的算法进行控制赛车沿赛道中心线行驶。整个系统的大致框架如下图所示:

测速模块 舵机转向模块 电机驱动模块 电源模块 MC9S12XS128 传感器检测模块 辅助调试模块 图1 系统框图

硬件结构包括智能车的机械结构与电路设计制版与安装。

2.1.1 机械结构

本部分包括车模组装,前轮定位调整,后轮差速调整,光电编码器的安装,舵机安装,舵机输出臂的制作与传感器的安装等。

2.1.2电路设计、制板与安装

本部分包括整车供电电源的电路设计,电机的驱动电路设计,信号采集电路设计,与单片机、电源的各个接口电路的连接设计,舵机、电源板、驱动板单片机和传感器在智能车上的安装。

由于考虑到损坏后便于更换,我们采用主办方提供的芯片主板与自己设计的外围电路板通过64芯双排插针进行衔接。传感器与控制主板之间用插接件与

5

上海电力学院电自二队技术报告

排线进行连接。

2.2 智能车软件设计思想

对于智能车来说,讲究的是智能控制。因此算法是其核心部分,相当于人的思维,负责按预先定好的流程处理传感器采集过来的数据。

首先,安装在车前的电感线圈检测到赛道中心线下铺设的交流电产生的磁场,将磁场强度大小转换为电压大小送往单片机进行AD转换。转换后的数字量经过一系列的运算得出小车与中心线的位置,从而通过PWM波脉宽的控制使舵机转相应的角度。

其次,利用光电编码器负责采集电机的转速,可以得到赛车的实时速度,再结合小车当前的位置状况,利用PWM波脉宽的控制来控制电机的速度何刹车力度,以形成速度闭环控制。

6

上海电力学院电自二队技术报告

第三章 机械结构设计

在智能车比赛中,最主要的比赛内容是速度和稳定性,而模型车的机械结构无疑是影响速度和稳定性的关键因素之一。因此我们对模型车的机械结构做了大量的调整,使其达到理想的效果。

3.1 车模组装与改造

拿到车子后要做的第一件事就是将车子组装起来,对于新手,组装车子之前得仔细阅读说明书,通过阅读模型车的装配图,了解各个不同零件的用途和安装顺序才好动手。

然后,根据模型车的装配图组装智能车模型。由经验知,在组装过程中,除了要注意模型车的组装顺序外,还要注意不要把里面那些微小的零件丢失了。而且由于模型车上的大部分零部件材质均为塑料,在拧螺丝以及对零件进行加工时要格外的小心,以免损坏。 3.1.1前轮定位调整

在调试中我们发现,模型车过弯时,转向舵机的负载会因为车轮转向角度增大而增大。为了尽可能降低转向舵机负载,我们对前轮定位进行了调整。前轮定位的作用是保障汽车直线行驶的稳定性,转向轻便和减少轮胎的磨损。前轮定位参数主要包括:主销后倾角、主销内倾角、前轮外倾角和前轮前束。

主销后倾角是主销轴线与地面垂直线在汽车纵向平面内的夹角,能在车子偏移的时候产生一回正力矩,纠正车轮的偏转。,通常后倾角值设定在1~3度。

主销内倾角是主销轴线与地面垂直线在汽车横向断面内的夹角,它也有使车轮自动回正的作用,小车转向时路面作用在后轮上的阻力矩也会减小,从而可减小转弯时驾驶员施加在转向盘上的力,使转向操纵轻便,通常其调整范围为0~10度。

7

上海电力学院电自二队技术报告

前轮外倾角是汽车横向平面与车轮平面的郊县与地面垂线之间的夹角,它可以增加零件的使用寿命,提高汽车的安全性,一般为1°左右。

汽车两轮前边缘距离与后边缘距离之差称为前轮前束,一般前束值为0~12mm,它是为了消除车轮外倾带来的不良后果而调整的。 3.1.2差速的调整

模型车的差速对转弯时的影响很大,差速太松不好会导致后轮空转,传动效果不好,容易发生侧滑现像;太紧又达不到差速的效果,使转弯性能下降。我们通过添加润滑油的手段,改进差速装置,提高了差速的效果,进而也提高了小车的转向性能。 3.1.3舵机力臂的调整

组委会规定使用的舵机的响应速度对于S12单片机的处理速度来说存在很大的延时,为了提高舵机的响应速度,我们对舵机的力臂进行了调整。我们知道在相同的舵机转速条件下,转向连杆在舵机一端的连接点离舵机轴心距离越远,转向轮转向变化越快,本模型车中通过用自制的转向盘代替舵机上的曲柄来增大舵机的上连接点到舵机中心的距离,增加了输出转动力矩,使得前轮在转向时更加灵敏。

3.2 传感器的安装

传感器的安装如右图所示:

图1 传感器安装示意图

8

上海电力学院电自二队技术报告

3.3编码器的安装

其在智能车上的安装方式如图所示: 光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器,这是目前应用最多的传感器。由于光电码盘与电动机同轴,电动机旋转时,光栅盘与电动机同速旋转,经发光二极管等电子元件组成的检测装置检测输出若干脉冲信号,通

图2 编码器安装

过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。

3.4 电路板的固定与安装

为了使整个车子看起来轻巧灵活,结构简单,我们将电路板用长角螺钉支起来了,下面的空间可以用来放置电池。如右图所示:

图3电路板的固定

9

上海电力学院电自二队技术报告

第四章 硬件电路模块设计

4.1 信号源模块

根据组委会要求,竞赛车模需要能够通过自动识别赛道中心线位置处由通有100mA 交变电流的导线所产生的电磁场进行路径检测。信号源电路包括振荡电路、功率输出电路、恒流控制电路以及电源等组成。根据技术要求,设计方案如下:

图1 信号源组成框图

4.1.1 震荡电路

产生中心频率为 20KHz 的对称方波信号。为了满足功率输出电路的需要,一般输出极性相反的信号。可以使用普通的555 时基电路产生振荡信号,也可以使用简易的单片机产生振荡信号。为了方便调试,信号频率能够在一定范围内进行调整。

4.1.2 功率输出电路

由于输出驱动信号电压、电流、频率较大,需要一定输出功率驱动跑道线圈,因此最后需要功率输出电路。可以采用分立大功率晶体管搭建输出电路,也可以使用的电机驱动桥电路集成模块。选择时需要注意电路的频率响应应该

10

上海电力学院电自二队技术报告

大于20KHz,输出功率大于2W,在制作时需要注意电路的散热。

4.1.3 恒流控制

恒流电路控制输出电流在 100mA 左右稳定,不随着电源的变化而发生波动。根据比赛规则的要求,恒流输出控制不需要特别的精确。一般要求不高的情况下可以使用限流电阻控制电流的稳定,也可以利用晶体管的在放大区集电极的恒流特性进行控制。 4.1.4 电源

电源部分提供电路中所需要的各种低压稳压电源。保证信号振荡电路和恒流控制电路的稳定性。可以使用一般串联稳压集成电路实现 4.1.5 整个方案的确立

振荡电路选择基于555芯片方案,由于需要对频率进行改变,在使用单片机方案时,须利用电脑改变参数。而基于555芯片的方案只需要改变电阻的大小即可,方便可行。

功率输出电路选择L298方案,集成电路的可靠性更高,并且减少设备体积,轻便可行。

恒流输出电路对于电流值的大小没有过高的要求,选择线路最简易的串联电阻方法。 4.1.6 实物图以及波形

图2 整个信号源电路图

11

上海电力学院电自二队技术报告

图3 信号源实物图 图5 负载波形

图4 空载波形

由上图可看出,空载的波形良好,该波形为两个矩形波的反响错位叠加,所以在0V跳变点有延时。负载后的波形在跃变点波形会振荡,分析后认为是负载的非纯电阻性所造成的,所占比例小,在要求的范围内。 4.1.7 调试

电源设计完制作完毕后需要进行如下的调试:

1、输出电流调试:

电源安装完毕后可以外接 10-100 欧姆的负载进行调整输出电流。可以直接使用示波器测量阻性负载的外加电压的峰峰值,再除以电阻的阻值,便可以得到输出电流的数值。也可以在电路的功率输出桥下外接一个直流毫安表来显示输出电流的大小。

12

上海电力学院电自二队技术报告

2、输出频率调试:

可使用的示波器或者具有频率测量的万用表测量输出电压的频率。外接10 欧姆的负载进行测量负载上电压的频率。

调节频率设定电位器使得电源频率输出在 20±2kHz。

调试完毕后,使得电源在负载10 欧姆之下连续工作1 个小时,电源输出的电流、频率都不会漂移出要求的范围。

4.2 路径检测模块

4.2.1 电磁场检测原理

根据麦克斯韦电磁场理论,交变电流会在周围产生交变的电磁场。在载流导线内通的交流电流频率为20kHz,大小为100mA左右。通过检测相应的电磁场的强度和方向可以反过来获得距离导线的空间位置。根据电磁学的知识,载流导线周围充满了交变的的磁场,在当中放置一个电感线圈,电磁感应会使线圈内产生交变的电流。在导线位置和导线中电流既定的条件下,线圈中感应电流(或者电压)是空间位置的函数。

小车行走的轨迹可以分成直道、大弯、小弯和交叉弯道。为了方便后述说明,建立下图所示空间直角坐标系。小车车体坐标系中,定义小车前进的方向为Y轴正向,顺着Y轴的右手边为X轴的正向,Z轴指向小车正上方。水平线圈是指轴线平行于Z轴的电感线圈,垂直线圈是指轴线平行于X轴的线圈,通过分析 可知,

图5 车体坐标系

13

图6 导线周围的感应电磁场

上海电力学院电自二队技术报告

轴线平行于Y轴的线圈所感应到的电动势远小于上述两类线圈。

导线中通过的电流频率较低,为20kHz,且线圈较小,令线圈中心到导线的距离为r ,认为小范围内磁场分布是均匀的,则线圈中感应电动势可近似为:

E??

d?(t)kdIK???(1)dtrdtr即线圈中感应电动势的大小正比于电流的变化率,反比于线圈中心到导线的距离。其中常量K 为与线圈摆放方法、线圈面积和一些物理常量有关的一个量,具体的感应电动势常量须实际测定来确定。

由于电感线圈可以用来敏感磁场,根据上述检测到的电压与距离的关系可以得出小车与轨迹中心线的距离,可以用以下几种传感器布局方案来检测磁场得出小车的实时位置。

4.2.2 传感器布局

如果只使用一个电感线圈作为传感器,感应电动势E 是位置x 的偶函数,只能够反映到水平位置的绝对值x 的大小,无法分辨左右。因此,必须使用两个或者两个以上的线圈作为传感器进行检测。

在我们最终的方案中,采用的是5个电感线圈的检测方案。 其模型如图:

图7 5个电感线圈模型图

由上图可以看出,共用了5个电感线圈,分别为A、B、C、D、E,且线圈A、B、C

14

上海电力学院电自二队技术报告

与水平线成一定夹角,D、E线圈与小车运动方向成一定夹角。

假设在车模前方安装两个水平的线圈A和B。这两个线圈的间隔为L,线圈的高度为h。左边线圈的坐标为(x,h,z),右边的线圈的位置(x-L,h,z)。由于磁场分布是以z轴为中心的同心圆,所以在计算磁场强度的时候仅仅考虑坐标(x,y)。由于线圈的轴线是水平的,所以感应电动势反映了磁场的水平分量。根据公式(1)可以知道感应电动势大小与

h成正比。 22h?x假设h = 6cm, 要求小车在距离跑道中心线左右15cm范围内运动,即x∈(?15,+15)cm,两个传感器水平距离为20cm,计算两个电感线圈的感应电动势的差值

Ed?hh??(2)2222h?(x?10)h?(x?10)

下图为用MATLAB做出来的的曲线图,该曲线代表Ed的变化趋势。

0.2

0.15

0.1 0.05

0 -0.05

-0.1

-0.15

-0.2 -15-10-5051015

图8 Ed的拟合曲线图

可见,当小车位于导线正上方时,两边电势差为零;当小车的左边线圈或者右边线圈位于导线正上方时,两边的差值最大,且在(-10,10)cm之间,差值呈线性,即电动势差值Ed 与位移x 是一个单调函数。因此可以使用这个量对于小车转向进行负反馈控制,从而保证两个线圈的中心位置跟踪轨迹的中心线。 由于两个线圈的电势差值成线性的斜率没办法直接获得,只能通过实验测得数

15

上海电力学院电自二队技术报告

据计算出来,这样的话可检测方案适应性不强,当换个环境或者是导线里电流大小不一样都可能会造成小车无法沿线行驶。综上考虑,需要在双水平线圈的基础上再增加一个水平电感线圈C,形成三水平线圈布局方案。 用三个水平传感器拟合出来的曲线如下:

图7中两条曲线所代表的数学意义为:

EAE?1?红线: rEB

E蓝线: Eb?Er*A/ad_mEB

中间线圈的作用是在小车开始运动的时候取到中间线圈感应的那个值ad_m,然后取左右两个线圈感应的平均值,中间值减去平均值再除以中间线圈与左右线圈的距离10cm,就可以得到电势差值那条直线的斜率,再用随时取到的差值除以斜率就可以得到小车与导线的位置。

由上图就可以看出,蓝线在0~10cm的区域内有蛮好的线性,且当小车偏离中心线不远的时候,纵轴Ed的值变化也不是很大。这就保证了小车在偏离中线一定的范围内还可以认为小车是沿着线走的,避免了小车行驶过程中的抖动。

引入了中间位置的传感器后,当外界条件改变时,小车是可以自动寻迹的。

16

10.90.80.70.60.50.40.30.20.10051015图9 控制中用到的拟合曲线

上海电力学院电自二队技术报告

在上面的基础上再增加两个运动方向的向前的传感器D和E,为了获得较好的前瞻,它们能很好地反应出赛道的变化,因此对弯道很灵敏。同理,当遇到大弯道时,检测到的数据很小,当线圈与到现有一定的夹角时就可以得到较大的数据,控制小车达到需要的转角。经过实验可知,小车可以获得15cm的前瞻。它的实际模型如下:

图10 5个电感线圈的实际布局

通过长期的调试发现,这种布局与安装方法结合算法能较好地控制智能车的运动,不仅在直道上不抖动,过弯也能很流畅。

4.3电源管理模块

为了保证整个系统运行的可靠性,单片机的供电采用LM2940CT低压差5V稳压管,该电源芯片最大输出电流为3A,压差在最大输出电流时也不会超过500mV。它具有低压差电压、瞬态响应快的优点,是小功率微处理器理想的配套件。内部电流限制及发热限制可以防止可能造成结温过高的过载现象。因此,MCU和测速模块以及传感器的电源采用它供应。

17

上海电力学院电自二队技术报告

电池 2940 传感器

测速 2940 MCU 图11 电源管理模块

舵机 驱动电机 为了使单片机的供电稳定可靠,我们采用了两片2940芯片,一片单独供给MCU工作,一片供给其他。

考虑到电机的理想空载转速与电枢电压成正比关系,设计时将电池的电压不经过稳压电路而直接加在电机驱动模块上,这样保证了驱动电机速度具有较大的可调范围,且使电路设计简化。同理,舵机也直接采用电池供电。

4.4 电机驱动模块

电机驱动采用集成驱动芯片MC33886。

MC33886是一个单片的H桥集成驱动芯片,主要面向小功率直流电机的驱动。最大能够提供连续5A的驱动电流,通过PWM控制时,频率可以达到10KHz。有错误状态警告,输出短路保护,欠压关闭等各种完善的保护功能。桥路的通态电阻为0.12Ω,可以使电机具有较好的硬度。控制端可直接与单片机接口,输出端可直接与电机相连。它完善的保护措施,降低了硬件故障发生机率,提高了运行的稳定性。在本设计中采用该方案,电路接口设计如图所示。

18

上海电力学院电自二队技术报告

图12 mc33886原理图

这里,本设计采用了两片MC33886。每一片的输出并联在一起,从而提供更大的驱动电流。

4.5 测速功能模块

本设计的测速功能采用光电式编码器,它具有测量准确度高、响应速度快、可靠性高、结构简单、测速准确度高以及使用寿命长等优点。光电式编码器的工作原理就是利用光码盘上透光与不透光区域交替变换,在码盘的另一侧形成光脉冲。该光脉冲照射在光电敏感元件上产生与其相对应的电脉冲,即可完成速度测量功能。

19

上海电力学院电自二队技术报告

第五章 智能车软件设计

5.1 Codewarrior简介

此次智能车大赛的软件开发平台为Metroworks 公司的Code Warrior 4.7,Codewarrior 是由Metrowerks 公司提供的专门面向Freescale 所有MCU 与DSP 嵌入式应用开发的软件工具。其中包括集成开发环境IDE、处理器专家、全芯片仿真、可视化参数显示工具、项目工程管理、C 交叉编译器、汇编器、链接器以及调试器。用户可以将芯片的类库添加到集成环境开发环境中生成就是一个最小系统,就能直接在新建工程时添加所需的程序代码。

在用户源程序编译连接生成.abs文件之后,可借助CodeWarrior 4.7 自带的hiwave.exe进行调试工作,如监视寄存器状态、修改指针、设置断点、实时查看源程序各数据的变化等,最后先擦除flash中的源程序,之后再将abs文件烧入flash中。

5.2 程序主要算法介绍

5.2.1 舵机控制

根据车头两边与导线垂直的两个传感器的值经过简单运算可以得到一条线性度很大的一条直线,x轴是传感器中心线距离赛道引线的距离,y轴则是当先传感器回传的数据量。在对回传数据与输出到舵机的PWM波占空比建立一个线性关系则建立起了舵机PWM波占空比与当前传感器中心到赛道中心引线的线性关系,这样就可以实时的根据当前偏差量输出一定的舵机转角使小车一直沿着赛道路径前行。

经过实践之后我们发现,如果PWM波占空比与偏移距离用简单的线性关系会有弊端:如果比例系数较大弯道会有比较灵敏的表现,但直道会发生抖动而不稳定;比例系数太小直道比较稳定,而弯道则会因转角过小发生冲出赛道的

20

上海电力学院电自二队技术报告

现象。基于此,我们建立了一个非线性的数据对应关系:当小车偏移较小时比例系数比较小来使直道行驶稳定,而偏移变大时加大比例系数来增大弯道的灵敏度。实践证明通过这样的非线性的算法此外再配合简单而有效的PD控制,就保证了小车平稳流畅的通过各种赛道情况。 5.2.2 电机控制

我们此次的比赛拼的速度,因此如何让小车以最快的速度而又不发生冲出赛道的氢醌个完成比赛是我们最终的目的。速度控制则是程序的重点,小车能在以较快速度完成比赛取决于直道入弯有效的刹车和弯道内的灵敏的速度调节。

在弯道内部和出弯进入直道我也通过简单的速度pd算法完成加速,当速度大于设定值的时候再适当减少pwm波占空比,通过调整参数,这种简单的速度控制方式就可以完成稳定的速度控制。

而直道入弯的刹车控制我们采用了多点递减的刹车方式:即在小车入弯的每个位置分别给一定的点刹,刹车的大小量根据小车当前舵机转角量来决定,舵机转角越大刹车给的越多,而舵机转角越小刹车给的就小。

21

上海电力学院电自二队技术报告

第六章 总结

6.1 模型车的主要技术参数

车模总体重量:1.4Kg 长:38cm 宽:24cm 高:8cm

传感器种类以及个数:3个水平电磁感应线圈,2沿行驶方向且与其行使方向成一定角度的线圈,共5个,即3组;一个光点编码器 除了车模原有的驱动电机、舵机之外伺服电机个数:0个 赛道检测空间信息精度:5mm 赛道信息检测频率:5000次/秒

主要集成电路种类/数量:MC33886*2,2940CT*2 电路电容总量:40.000094微法

6.2 小结

记得是在去年快放寒假的时候,老师把我们几个找来开会,说是要参加一个全国性的比赛,叫我们回去查下资料有没有兴趣。回去后看了相关方面的资料,觉得这个比赛挺有意思,涉及的知识很多,我们是电自学院的学生,这个比赛刚好可以加强我们专业课的应用。

真正开始准备做智能车是从今年开学也就是3月份开始。我们小组在做车过程中,电路、硬件、软件等都分工明确。当然,团队合作精神是很重要的,这点我在这次比赛当中深有体会。除了团队里面各自队员做自己的事情外,还经常在一起讨论车子的进度、安装以及控制算法等。

历时将近半年的时间,我们完成了对智能赛车的制作和改进。我们小组成

22

上海电力学院电自二队技术报告

员查找资料,设计机构,组装车模,编写程序,分析问题,最后终于完成了最初目标,定下了现在这个方案。在此份技术报告中,我们主要介绍了准备比赛时的基本思路,包括机械,电路,以及最重要的控制算法的创新思想。

在机械结构方面,我们分析了舵机转向系统的改进办法,前轮束角和主销倾角的调整,各个电路板的安装方式和高度,在后面调试的时候还经常改动以达到更好地状态。

在电路方面,我们分为电源管理、电机驱动、接口、控制、信号采集、传感器这六个模块。我们先设计,再进行实验,最后报告中所出现的就是最终的电路图。

在算法方面,以CodeWarrior为开发工具,使用C语言编程控制。程序从开始很粗糙的算法到现在比较成熟的、通用的、稳定的程序,当中我们是经过不断调试得来的。在这套算法的控制下,结合自己的传感器布局方案,智能车能很好地沿线行驶,直道入弯减速、弯道内加速、切弯等都能体现出来,保证在最短时间跑完全程。

很开心能挺进全国决赛,取得这样的成绩也是相当不易的。赛场上激烈的斗争,紧张的气氛让我们深深感受到每个队伍、每个队员都在为做好智能车努力着,不管结果如何,大家都是有收获的。“天外有天,人外有人”这句俗话说得很好,通过华东区的比赛我们看到了自己与其他队伍的差距。为了能在全国总决赛当中也取得好成绩,我们的队员回校后马上投入紧张的调试当中。在这过程中有多少个不眠夜大家心里都清楚,但是没人会在意。

参加这个比赛以来,在场地、经费等方面得到了学校和学院的大力支持,在感谢比赛组委会能组织这样一项很有意义的比赛的同时,我们还特别感激我们学校和学院里一直支持和关注智能车比赛的领导以及老师。正是有了这个展示的平台和大家的支持,才让我们有机会提高自己。也许我们的知识还不够丰富,考虑问题也不够全面,但是这份技术报告作为我们辛勤汗水的结晶,凝聚着我们小组每个人的心血和智慧,这份经验将永伴我们一生,成为我们最珍贵的回忆。

23

上海电力学院电自二队技术报告

参考文献

[1] 卓晴,黄开胜,邵贝贝.学做智能车——挑战“飞思卡尔”杯[M].北京:北京航空航天出版社,2007

[2] 王威.HCS12微控制器原理及应用.北京:北京航空航天大学出版社,2007

[3] BDM_for_S12_TBDML_用户手册V3.1 中国2北京 清华大学Freescale MCU/DSP 应用开发研究中心 2006.12.

[4] 林锐.高质量C++/C编程指南.

[5] 李仕伯,马旭,卓晴.基于磁场检测的寻线小车传感器布局研究.北京:清华大学 [6] 谭浩强,C语言程序设计[M].清华大学出版社,2006.1

[7] 张宏建,蒙建波,自动检测技术与装置[M].化学工业出版社 2004.7

24

上海电力学院电自二队技术报告

源程序

#include /* common defines and macros */ #include /* derivative information */ #include \

#pragma LINK_INFO DERIVATIVE \#pragma DATA_SEG DEFAULT #define N 10; char fuhao;

char old_fuhao; char shizi; char type;

char old_type;

unsigned char speed; unsigned char old_speed; unsigned char v;

unsigned char qishixian=0; unsigned char qishicishu=0; unsigned char pvz; unsigned char pvw1; unsigned char pvw2; unsigned char shache; unsigned char dwei; unsigned char flag; unsigned char flag1; unsigned char flag2; unsigned char flag3; unsigned char flag4;

unsigned int count; unsigned int count1; unsigned int count2; unsigned int count3; unsigned int count4; unsigned char count5; unsigned char count6; unsigned int count7; unsigned int count8; unsigned int count9=0; unsigned int count10=0;

25

上海电力学院电自二队技术报告

unsigned int ad_z,ad_y,ad_m,ad_fz,ad_fy,ad_zz,ad_yy; unsigned int fz,fy; unsigned int m;

unsigned int wb; unsigned int xielv1; unsigned int xielv2;

unsigned int zhidao,wandao1,wandao2;

unsigned int adchu; int

change0[41]={ -640,-620,-600,-580,-550,-510,-470,-430,-395,-345,-310,-290,-260,-220,-190,-150,-125,-90,-60,-30, 0,

30,80,110,144,170,205,240,275,310,350,400,440,460,490,530,570,590,590,590,590

};

unsigned int lucheng; int dz,dy,yjj; int xlb; // int old_xlb; int adjian1; int adjian2; int change1; int chg;

int old_change1; int dch; int change; int weizhi1; int weizhi00; int weizhi0; float weizhi01; //int wz;

//int old_wz;

float weizhi; float k1; float k2; float k;

26

上海电力学院电自二队技术报告

void ADsave() {

unsigned char n,i; n=N; ad_z=0; ad_y=0; ad_m=0; ad_fz=0; ad_fy=0; ad_zz=0; ad_yy=0;

for(;n>0;n--) {

for(i=0;i<20;i++);

if(ATD0STAT2_CCF0!=0) {

ad_z+=ATD0DR0; }

for(i=0;i<20;i++);

if(ATD0STAT2_CCF1!=0) {

ad_y+=ATD0DR1; }

for(i=0;i<20;i++); if(ATD0STAT2_CCF2!=0) {

ad_m+=ATD0DR2; }

for(i=0;i<20;i++);

if(ATD0STAT2_CCF3!=0){ ad_fz+=ATD0DR3; }

for(i=0;i<20;i++);

if(ATD0STAT2_CCF4!=0){ ad_fy+=ATD0DR4; } }

for(i=0;i<20;i++);

if(ATD0STAT2_CCF6!=0){

27

上海电力学院电自二队技术报告

ad_yy+=ATD0DR6; } */

} ad_z/=N;

ad_y/=N; ad_m/=N; ad_fz/=N;

ad_fy/=N; }

#pragma CODE_SEG NON_BANKED #pragma TRAP_PROC

void interrupt 8 isr0(void) {

TFLG1_C0F=1; qishixian=1; }

/*void interrupt 9 isr1(void) {

TFLG1_C1F=1; qishixian=1; } */

void interrupt 11 isr3(void) {

TFLG1_C3F =1; //clear interrupt request flag v++; }

void interrupt 15 isr7(void) {

TFLG1_C7F=1; TC7=TCNT+2000; speed=v; if(speed>200) speed=old_speed; old_speed=speed; v=0; flag=1; }

28

上海电力学院电自二队技术报告

#pragma CODE_SEG DEFAULT

void delay1(int i) /*24MHz--1ms*/ {

int j;

for(;i>0;i--)

for(j=0;j<4052;j++) ; }

void delay(int i) /*24MHz--10.6us*/ {

int j;

for(;i>0;i--)

for(j=0;j<41;j++); }

void main(void) {

init_PLL(); init_Duoji(); init_AD(); init_Dianji(); init_Capture3RTI(); init_7RTI(); init_qishixian0RTI(); init_qishixian1RTI(); EnableInterrupts; PORTE=0; DDRE=0xF0; DDRM&=0xc7; PERM|=0x38; DDRJ_DDRJ6=0; PORTA=0; DDRA=0XC1; delay1(1000);

ADsave(); wb=(ad_z+ad_y)/2; xielv1=(ad_m-wb)/12; xielv2=ad_m/10; fz=ad_fz;

29

上海电力学院电自二队技术报告

fy=ad_fy;

yjj=xielv2/4; shizi=0;

count=0; count1=0; count2=0; count3=0; count4=0; count5=0; count6=0; weizhi=0; type=1; for(;;) {

dwei=PTJ_PTJ6<<3; dwei|=PTM_PTM5<<2; dwei|=PTM_PTM4<<1; dwei|=PTM_PTM3;

if(dwei==0) {

zhidao=0; pvz=0; wandao1=0; pvw1=0; wandao2=0; pvw2=0;

}else if(dwei==1) {

zhidao=2000; pvz=80;

wandao1=1500; pvw1=70;

wandao2=1000; pvw2=65;

}else if(dwei==2) {

zhidao=1700; pvz=75;

wandao1=1500;

30

上海电力学院电自二队技术报告

pvw1=67;

wandao2=1200; pvw2=64;

}else if(dwei==3) {

zhidao=1700; pvz=68;

wandao1=1400; pvw1=64;

wandao2=1000; pvw2=62;

}else if(dwei==4) {

zhidao=1500; pvz=68;

wandao1=1200; pvw1=60;

wandao2=1200; pvw2=60;

} else if(dwei==5) {

zhidao=1200; pvz=63;

wandao1=1200; pvw1=60;

wandao2=1200; pvw2=60;

}else if(dwei==6) {

zhidao=1200; pvz=55;

wandao1=1200; pvw1=55;

wandao2=1200; pvw2=55;

} else if(dwei==7) {

zhidao=1000; pvz=50;

wandao1=1000;

31

上海电力学院电自二队技术报告

pvw1=50;

wandao2=1000; pvw2=50; }

PORTA_PA0=~PORTA_PA0; ADsave();

weizhi1=(ad_m-wb)/xielv1; adjian1=ad_z-ad_y;

if(weizhi1>0&&weizhi1<20){ if(adjian1>0){ fuhao=1; }else{

fuhao=-1; } }

if(adjian1<0)

adjian1=-adjian1; weizhi=weizhi01;

weizhi01=2*(float)adjian1/xielv2*fuhao; dz=ad_fz-fz; dy=ad_fy-fy; if(dz<0) dz=0; if(dy<0) dy=0;

k1=dz/yjj; k2=dy/yjj; k=k1-k2; if(!shizi)

weizhi01=(k+weizhi01)/2; weizhi0=(int)weizhi01; if(weizhi01>19) { weizhi01=19; weizhi0=19;

}else if(weizhi01<-19){ weizhi01=-19; weizhi0=-19; }

if((k1>2)&&(k2>2)){ shizi=1;

32

上海电力学院电自二队技术报告

}else shizi=0;

if(weizhi1>0&&weizhi1<50){

change1=change0[weizhi0+20];

chg=(int)((change0[weizhi0+21]-change0[weizhi0+20])*(weizhi01-(float)weizhi0));

dch=(int)((weizhi01-weizhi)*200); old_change1=change1; change=change1+dch+chg; }else{

old_change1+=5*fuhao; if(old_change1>640) old_change1=640;

else if(old_change1<-640) old_change1=-640; change=old_change1; }

PWMDTY45=4795+change; //PORTE_PE7=shizi; if(shizi) type=1; else{

if(k<7&&k>-7) { if(type!=1) {

if(count2>500) { count2=0; count3=0; count4=0;

type=1; } else

count2++; }

}else if((k>=7&&k<=20)||(k<=-7&&k>=-20)){ if(type!=2) { if(count3>10){ count2=0; count3=0; count4=0;

33

上海电力学院电自二队技术报告

type=2; }else

count3++; }

}else {

if(type!=3) { if(count4>30){ count2=0; count3=0; count4=0; type=3; }else

count4++; } } }

if(flag==1) { flag=0;

if(type==1) { count5=0; if(speed>pvz)

if(speed>pvz+8) xlb=zhidao-1000; else

xlb=zhidao-500; else if(pvz-speed>6) {

xlb=zhidao+(pvz-speed)*20; if(xlb>2400) xlb=2400; } else

xlb=zhidao; }else if(type==2){

if((old_type==1)&&(count5==0)) { count5=25;

}else if(count5==0){ if(speed>pvw1) xlb=wandao1-500; else

34

上海电力学院电自二队技术报告

xlb=wandao1; } }else {

if(speed>pvw2)

xlb=wandao2-500; else

xlb=wandao2; }

if(count5!=0)

if(speed<54) {

xlb=wandao1-200; count5--;

if(change<200&&change>-200) { xlb=zhidao; count5=0; } }else {

count5--;

//PORTE_PE7=1; if(speed>68)

xlb=-300+(speed-68)*25; else if(speed>64) xlb=-200;

else if(speed>62) xlb=-100;

else if(speed>60) xlb=0;

else if(speed>57) xlb=50;

else if(speed>54) xlb=100; }

old_type=type; }

if(type==1) PORTE_PE7=1; else

PORTE_PE7=0;

35

上海电力学院电自二队技术报告

//if(xlb<=0&&speed!=0) //xlb=0;

if(ad_z<(xielv2+20)&&ad_y<(xielv2+20)&&ad_m<(xielv2+20)) if(dwei==0) xlb=0; else

xlb=10;

if(qishixian&&type==1) { count++;

if(count==3000) { count=0;

qishixian=0; qishicishu++; } }

if(qishicishu>=2&&PORTA_PA5) { if(speed>3) { xlb=speed*20; xlb=-xlb; } else

xlb=0; } if(xlb<0) {

if(dwei!=0) { Backward(); PWMDTY23=-xlb; }else{ xlb=0; } }else {

Forward(); PWMDTY01=xlb; }

} }

36

上海电力学院电自二队技术报告

//if(xlb<=0&&speed!=0) //xlb=0;

if(ad_z<(xielv2+20)&&ad_y<(xielv2+20)&&ad_m<(xielv2+20)) if(dwei==0) xlb=0; else

xlb=10;

if(qishixian&&type==1) { count++;

if(count==3000) { count=0;

qishixian=0; qishicishu++; } }

if(qishicishu>=2&&PORTA_PA5) { if(speed>3) { xlb=speed*20; xlb=-xlb; } else

xlb=0; } if(xlb<0) {

if(dwei!=0) { Backward(); PWMDTY23=-xlb; }else{ xlb=0; } }else {

Forward(); PWMDTY01=xlb; }

} }

36

本文来源:https://www.bwwdw.com/article/zpd5.html

Top