tceic.com
简单学习网 让学习变简单
当前位置:首页 >> 学科竞赛 >>

湖北汽车工业学院电磁二队技术报告


第八届“飞思卡尔”杯全国大学生 智能汽车竞赛

技 术 报 告

学校:湖北汽车工业学院 队伍名称:电磁二队 参赛队员:魏超 王艳明 王兴伟 带队教师:雷钧 高志敏

第八届 全国大学生智能汽车邀请赛技术报告

关于技术报告和研究论文 使用授权的说明
本人完全了解第八届“飞思卡尔”杯全国大

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

参赛队员签名:

带队教师签名:



期:

目录
引言 ............................................................... 3 背景介绍 ........................................................ 3 控制简述 ........................................................ 5 第一章 机械结构设计及体现 .......................................... 5 1.1 主板、电池等电子器件的安装 ................................. 6 1.3 前轮定位的调整 ............................................. 8 1.3.1 Toe_In(主销内倾) .................................... 9 1.3.2 Caster(后倾角) ........................................ 9 1.3.3 Camber(内倾角) ....................................... 10 1.4 前悬挂调整 ................................................. 10 1.5 后悬架改善 ................................................. 11 1.6 轮胎选用 .................................................. 12 1.7 差速结构调整 ............................................... 12 1.8 齿轮间隙调整 .............................................. 12 第二章 传感器分析与布局 ........................................... 13 2.1 电磁感应原理 ............................................... 13 2.2 传感器布局 ................................................. 15 2.3 电磁感应线圈在磁场中的特性 ................................. 20 第三章 硬件电路设计 ............................................... 22 3.1 循迹传感器放大电路 ......................................... 23 3.2 测速模块 ................................................... 24 3.3 电机驱动模块 ............................................... 25 3.4 主板电路设计 ............................................... 26 3.5 转向部分电路设计 ........................................... 27 3.6 停车检测部分...............................................28 第四章 软件控制算法及策略 ......................................... 28 4.1 智能车软件控制算法及策略 ................................... 28 4.1.1 软件系统设计及整体思路 ................................... 28 4.2 程序整体思路 ............................................... 29 4.2.1 程序初始化 ........................................... 29 4.2.2 主函数 ............................................... 30 4.2.3 PIT 中断函数 .......................................... 31 4.3 传感器信号采集处理算法 ..................................... 32 4.4 传感器方案设计及路径识别算法 ............................... 34 4.5 速度控制算法与方向控制策略 ................................. 35 4.5.1 速度控制算法 .......................................... 37 4.5.2 调速策略 .............................................. 39 4.6 小结 ....................................................... 43

1

第八届 全国大学生智能汽车邀请赛技术报告

第五章 开发与调试 ..........................................43 5.1 BDM 调试 ..........................................43 5.2 上位机调试 ........................................44 第六章 智能车相关技术参数说明 ..............................45 第七章 鸣谢 ................................................46 第八章 总结 ................................................48 参考文献 ..................................................49 附录 部分程序源代码 .......................................49

2

引言
背景介绍
飞思卡尔杯全国大学生智能车竞赛以“立足培养,重在参与,鼓励探索, 追求卓越”为指导思想,涵盖了机械、模式识别、电子、电气、传感技术、计 算机、自动化控制、汽车理论等多方面知识,从一定程度上反映了当代大学生 综合运用所学知识和探索创新的精神。同时该赛事是教育部高等教育司委托(教 高司函[2005]201 号文),由教育部高等自动化专业教学指导分委员会(以下简 称自动化分教指委)主办的全国性/多学科交叉、趣味性、创新性赛事,旨在加 强大学生实践与团队合作精神,促进高等教育改革。竞赛规则透明,评价客观 标准,坚持公开、公平、公正的原则,从而保持了竞赛的健康、普及、持续的 发展。鉴于飞思卡尔全国大学生智能车竞赛已成功举办了5届,大赛前年为了扩 展赛道检测的多样化和锻炼学生的各项能力,在原来的摄像头组与光电组基础 上新增以20 KHZ、100ma交变电流(方波)为引导方式的电磁组。学校积极响应 教育部关于加强大学生的创新意识、合作精神和创新能力的培养的号召,成立 智能车队伍参加比赛。 我们积极组队参加第八届“飞思卡尔”杯全国大学生智能车 比赛,多方搜索资料。由于电磁组的信号采集与摄像头组和光电组有很大差别, 所以我们延续了很多学校包括杭州电子科技大学在内所使用的工字谐振电感作 为传感器来检测信号,加以合理的传感器布局,经过后续电路处理,完成对赛 道信号检测并以此来控制车子的转向和行驶速度。关于软件,我们采用鲁棒性 较强的PID控制算法来作为车子的主导控制。为满足智能车在高速与急转等恶劣
3

第八届 全国大学生智能汽车邀请赛技术报告

情况下的动力性能和稳定性能,我们参考了前几届的队伍参赛经验,经过深思 熟虑对整车经行了合理的重心与电路等的布局。本技术报告主要讲述电磁二队 智能车的制作历程,包括机械和硬件的设计、改装,HCS12单片机的学习和使用, 控制算法的研究与应用,车模机械参数的讨论和修改等。为了提高全国大学生智 能汽车竞赛创新性和趣味性,激发高校学生参与比赛的兴趣,提高学生的动手 能力、创新能力和接受挑战能力。

图 1.1 小车整体图

4

控制简述
由于传感器感应得到的电压信号只有几十mv,所以我们采用集成运放把信 号进行放大,然后将其检波为直流电平送入XS128的AD口。同时编码器的信号也 同步输入,由计数芯片HEF4520BT计数,从而计算得到车子行驶的速度。舵机采 用PID控制算法进行控制,并且加入连续控制函数进行修正,使前轮的转向更加 具有连续性和精确性;采用增量式PID控制XS128PWM通道的占空比而调整电机输 出功率。电磁组的优势与劣势电磁组的信号采集与处理与摄像头组和光电组有 很大差异,所以对于信号的采集问题,我们曾经尝试过磁敏二极管、磁敏电阻、 谐振电感等方法,后来发现谐振电感的效果较好。电磁组的信号由LC并联谐振 得到,相比摄像头和光电,信号为模拟信号,而且赛道的磁场信号会发生叠加 与抑制等。磁场是三维矢量,在空间的分布有很大的方向性和对称性,水平变 化率和竖直变化率有一定联系和区别,从而我们将传感器放置为对赛道信号变 化敏感的方向以便最快、最灵敏的检测到赛道变化引起的信号变化。这一点可 以参考官方的文档: 《电磁小车设计参考》 。

第一章 机械结构设计及体现
智能小车的机械性能对于其行驶表现具有非常重要的影响,任何控制算法 和软件程序都需要通过智能小车的机械结构来执行和实现。为使模型车在比赛 中发挥出最佳性能,使其直线行驶高速稳定,入弯转向灵活,结合现代汽车控

5

第八届 全国大学生智能汽车邀请赛技术报告

制理论对智能车的运动特性进行分析,并据此对智能小车的机械结构进行相应 的调整和参数优化。

1.1

主板、电池等电子器件的安装
前期在对电路主板进行组装时,由于布置不当,致使做软件的同学调整电

子器件参数非常麻烦,比如调节电位器参数的时候,芯片主板将电位器覆盖, 每次调试时都需要将芯片主板取下来在进行调节,这种方法费时费力。后来将 两块电路板采用错落叠层分布式组装,并将电位器调节钮裸露出来。这种排布 方式,使调节起来更加快捷,而且也节省了空间。如图1.1所示 在后期的 组装过程中, 我们以简单、 方便、便捷为 指导思想,进 行组装。另外 在保证顺利通
图1.1 电路板组装

过坡道的前提下,底盘尽量降低,从整体上降低模型车的重心,可使模型车转 弯时更加稳定、高速。

1.2

舵机安装式德国站 维特尔

6

车辆的机械性能的优劣,在高速时体现的尤为明显。好的机械性可以高速 流畅的运行,并且能够适应不同摩擦系数的赛道,其稳定性不会随时间改变而 改变。在对小车的组装过程中,我们不断摸索,不断总结,发现舵机安装的对 称性,能有效提高小车的稳定性。而对四轮定位的主要参数进行调整,则能够 显著改善高速时的过弯性能。舵机的灵敏程度同样对小车高速时的性能有着至 关重要的作用。

图1.2 小车总体布局

机摆杆是将舵机的旋转运动转换成横摆运动的一种机构。在智能车比赛里, 通过它将舵机转矩传递到连接轮子上面的横拉杆,实现轮子的左右转动,从而 实现转向。转向在智能车比赛中是至关重要,而摆杆的设计直接关系到智能车 转向灵敏度。
舵机转矩=舵机摆杆作用力*摆杆长度

通过公式可以得出:拉杆作用力越大,反应越灵敏,转向速度越快!转矩

7

第八届 全国大学生智能汽车邀请赛技术报告

一定时,摆杆越长,作用力就越小,所以摆杆又不能太长。经过实验,我们选 择舵机摆杆的长度在 30mm 比较合适。同时最终的转向机构还应该尽量满足符 合阿克曼转向理论, 依据阿克曼转向 几何设计的车辆,沿着弯道转弯时, 利用 四连杆的相等曲柄使内侧轮的转向 角比外侧轮大大约 2~4 度,使四个 轮子路径的圆心大致上交会于后轴
图1.3 阿克曼转角调整

的延长线上瞬时转向中心,这样可以使车辆在过弯时 转向轮处于纯滚动状态,减少过弯时的阻力,减小轮胎的磨损。示意图如1.3

1.3

前轮定位的调整
车辆在高速过弯时,转向舵机的负载会因为车轮转向角度增大而增大。为

了尽可能降低转向舵机负载对前轮的安装角度;对前轮定位进行了调整,使车 辆直线行驶更稳定,转向更轻便,转向后能自动回正,减少轮胎和转向系零件 的磨损。前轮是转向轮,它的安装位置由主销内倾、主销后倾、前轮外倾和前 轮前束等 4 个参数决定,反映了转向轮、主销和前轴等三者在车架上的位置 关系。

8

1.3.1 Toe_In(主销内倾)

主销内倾是指主销装在前 轴略向内倾斜的角度,它的作 用是使前轮自动回正。角度越 大前轮自动回正的作用就越强 烈,但转向时也越费力,轮胎 磨损大;反之,角度越小前轮
图1.4 主销内倾效果图

自动回正的作用就越弱。

1.3.2 Caster(后倾角)

Caster(后倾角)是指转向杯的旋转轴向车子后方倾斜的角度。正值的 Caster旋转轴顶部倾向后方。它使车辆转弯时 产生的离心力所形成的力矩方向与车轮偏转方 向相反,迫使车轮偏转后自动恢复到原来的中 间位置上。由此,主销后倾角越大,车速越高, 前轮稳定性也愈好。可以通过改变悬挂上前后 黄色小垫片

图1.5 主销后倾效果图

9

第八届 全国大学生智能汽车邀请赛技术报告

的数量(原车前后各有两个黄色小垫片,主销处于垂直状态) ,当模型车需 过坡道,或在比较颠簸的路面行驶时,主销宜有一定后倾角,但后倾角不能过 大,否则会产生过大的回正力矩,导致模型车在出弯进入直道时发生左右摆动。
1.3.3 Camber(内倾角)

Camber(内倾角)就是轮子的上端倾向或者倾离车身的角度。负值的 Camber 角度指车轮上端向内倾,正值的 Camber 指车轮上端向外倾。Camber 的主要作 用是控制轮胎在直路和弯路的接触地面的 面积。前轮前束的作用是保证汽车的行驶 性能,减少轮胎的磨损。前轮在滚动时, 其惯性力会自然将轮胎向内偏斜,如果前 束适当,轮胎滚动时的偏斜方向就会抵消, 轮胎内外侧磨损的现象会减少。
图1.6 小车前束效果图

1.4 前悬挂调整
在调试车的过程中我们发现,在高速通过急转弯时,前轮会出现较大的跳 动,严重影响车辆行驶的稳定性,经过我们小组成员的查阅资料分析得出是悬 架上原装的弹簧的刚度较大,因此我们换用较软的弹簧,经试验在高速过弯下 跳动明显改善。

10

1.5 后悬架改善
在前述四轮定位中提到,当前轮转弯时,符合阿克曼定理,过弯时车轮属 于纯滚动状态,此时过弯时最为流畅,且弯道速度进一步提高。然而实际上在 对前轮进行四轮定位时,不可能完全符合阿克曼定理。为达到理想效果,我们 对小车的后悬架进行了改进。 我们在车模地板与后 轮支架的衔接过渡处左右 各增设一个刚度适合的弹 簧, 在过弯时利用小车自身 的离心力使前轮轴线与后 轮轴线能相交于一点, 从而 达到改善弯道性能的目的。 此外,在尝试的过程中,我 们能发现, 若后悬架沿底板 中心轴线旋转限位过大, 高
图1.7 小车随动实体图

速过弯道时,势必会内侧后轮与赛道悬空,使小车出现抖动迹象。为解决此问 题,并且预留一定限位,我们在连接片上方增设了一个限位片,最后有效解决 了此问题。

11

第八届 全国大学生智能汽车邀请赛技术报告

1.6

轮胎选用
轮胎是选用对小车的影响也是尤为重要。轮胎的质地直接影响到摩擦力的

大小,摩擦较小时,过弯道时就容易出现滑移,甩尾等现象。未拆装的模型车 的轮胎表面一般都经过防氧化处理,在灯光下观察,有明显的反光现象,说明 表面过于光滑。此时,需要对轮胎表面略作处理,以增大摩擦力。

1.7 差速结构调整
差速结构的作用是在车模转弯的时候,降低后轮与地面之间的滑动;并且 还可以保证在轮胎抱死的情况下不会损害到电机。差速器的特性是:阻力越大 的一侧,驱动齿轮的转速越低;而阻力越小的一侧,驱动齿轮的转速越高,以此 次使用的后轮差速器为例,在过弯时,因外侧前轮轮胎所遇的阻力较小,轮速 便较高;而内侧前轮轮胎所遇的阻力较大,轮速便较低。差速器的调整中要注 意滚珠轮盘间的间隙,过松过紧都会使差速器性能降低,转弯时阻力小的车轮 会打滑,从而影响车模的过弯性能。好的差速机构,在电机不转的情况下,右 轮向前转过的角度与左轮向后转过的角度之间误差很小,不会有迟滞或者过转 动情况发生。

1.8

齿轮间隙调整
正常情况下小车在运行时声音是非常小的,理想状态下是没有声音的。小

车运行时的声音来源主要有两个方面。其一,车轮与赛道产生滑移时所产生的 声音。产生这种原因,可能是前轮的四轮定位没做好,转弯不够灵活。其二, 齿轮盘与电机齿轮之间间隙过大或过小,以及电机长时间工作,齿轮磨损严重。 齿轮盘与电机齿轮间的间隙过小时,电机转动时,声音刺耳嘈杂,此时需调整 电机齿轮与齿轮盘间的距离,使两齿轮齿顶与齿根间的间隙大约1mm。若在两齿
12

轮间滴一定润滑油也可使声音更小,需要注意的是润滑油不能侵入齿轮盘内, 否则将会使差速失效。电机若长时间不更换,将会使电机齿轮磨损严重,齿形 将会变的很尖,使得齿轮啮合间隙增大。在这个时候,小车拿在手里电机转动 时,声音比较小,一旦放到赛道上时,声音就会很大很刺耳,这就需要更换新 电机。

第二章 传感器分析与布局
2.1 电磁感应原理
电磁组的智能车是基于100mA的交变电流产生的电磁场上,为了容易研究小 车的策略必须先了解相关的电磁场知识。 由于赛道是通有20KHz交变电流的导线,因此需要通过检测导线周围所产生 的电磁场确定道路与小车的相对位置。磁场传感器利用了物质与磁场之间的各 种物理效应,如磁电效应(电磁感应,霍尔效应,磁致电阻效应) ,磁机械效应, 核磁共振等。现代检测磁场的传感器有很多,常见的有磁通门磁场传感器,磁 阻抗磁场传感器,半导体霍尔传感器、磁敏二极管,磁敏三极管。因为各种传 感器测量磁场所依据的原理不相同,测量的磁场精度和范围相差也很大, 10-11~107G。图3.1为各类磁场传感器的测量范围示意图。

13

第八届 全国大学生智能汽车邀请赛技术报告

图2.1各类磁场传感器的测量范围示意图

先估算赛道的磁场强度。把赛道看作无限长直导线,载 流为直流100mA,距离导线r=5cm时,由毕奥-萨伐尔定律知,磁场强度B如(公 式1) :
B?

?0 I 4? ? 0.1 ? ? 10 ?7 ? 4 ? 10 ?7 T ? 4 ? 10 ?3 G 2?r 2? ? 0.05 (公式1)

一般霍尔元件的检测范围在1mT以上,即10G以上,可以想象到需要贴着地 面进行检测,而且精度大大受到限制。 磁阻传感器如Honeywell的高灵敏度磁阻HMC1001,分辨率可达27微高斯, 还可以使用多轴的磁阻传感器检测不同方向的磁场。 普通的电感线圈测量范围广,理论上只要加上合适的谐振电容和放大电路, 不但能够筛选出特定频段进行放大,而且有较强的抗干扰能力。

14

我们需要选择适合车模竞赛的检测方法,除了检测磁场的精度之外,还需 要对于检测磁场的传感器的频率响应、尺寸、价格、功耗以及实现的难易程度 进行考虑。由于霍尔元件和磁阻传感器的检测精度比较低,价格比较高。 因而我们选取最为传统的电磁感应线圈的,它具有原理简单、价格便宜、 体积小、频率响应快、电路实现简单等特点。感应线圈可以自行绕制,也可以 采用市面上的工字电感。

2.2 传感器布局
根据电感的摆放方向不同,采集的信息也不同。一般可规范为4类方向: 以跑道所在的平面为水平面,车前进的方向为x方向,在水平面上与x垂直 的为y方向,垂直于水平面的为z方向 水平摆放,如图所示:

图 2.2.1 传感器摆放图1

这是最简单的摆放方式,但却拥有了其它摆放方式所没有的稳定性,具有 单调性,对于稳定求快的队伍采用水平摆放是比较好的选择 如官方文档所示:

15

第八届 全国大学生智能汽车邀请赛技术报告

图 2.2.2 磁场坐标图

16

图 2.2.3 B'Z 的曲线图

实际使用过程中,当水平两个电感之间的距离越远,得到的赛道信息也越 丰富,一般都采用接近小车限定的宽带,如24CM左右。一般水平摆放的电感离 跑道距离在12CM左右线性比较好。 该摆放的优点是稳定性好,不管是十字交叉弯还是上下坡道都可以顺利完 成,谐振电压还算比较大。缺点是只能检测到电感垂直下去所在的线上,没有 提前预判的作用。

向前摆放,如图所示

17

第八届 全国大学生智能汽车邀请赛技术报告

图 2.2.4 传感器摆放图 2

向前摆放的电感一般会有5~10或者更大的前瞻,谐振回来的电压较小。缺 点是在十字弯不是垂直入或者不是垂直出弯时会在十字交叉弯里面兜圈。 垂直摆放,如图所示

图 2.2.5 传感器摆放图 3

垂直摆放的谐振电压算最大,但是往往会在十字交叉弯时忽略了十字弯直 接转向另一边,前瞻性虽然比较大,但没有前向摆放的好,还有的缺点是在水 平偏离导线是并非呈现线性。 有一定角度的摆放
18

由于没有多余的时间实践,好处是检测到更丰富的信息。缺点是需要滤掉 更多的干扰。 我们小车的传感器实图:

19

第八届 全国大学生智能汽车邀请赛技术报告

2.3 电磁感应线圈在磁场中的特性
为了讨论方便,我们作以下约定: (1)小车车体坐标系中,定义小车前进的方向为Y轴正向,顺着Y轴的右手边 为X轴的正向,Z轴指向小车正上方,如图3.2.1所示; (2)水平线圈是指轴线平行于Z轴的电感线圈,垂直线圈是指轴线平行于X轴 的线圈,轴线平行于Y轴的线圈所感应到的电动势远小于上述两类线圈,但该类 摆放线圈在回环路检测中将可以用到。 (3)BX是指向载流导线右手边的电磁感应强度,BZ是指向载流导向正上方的 电磁感应强度。显然,垂直线圈感应的是BX变化率,水平线圈感应的是BZ的变 化率。

图 2.3.1 假定车体坐标系

20

直道附近的磁场分布,可以近似为无限长的直导线上的磁场分布,容易算 得距离长直导线距离为r的点的磁感应强度如(公式2) :
B?

?0 I 2?r

(公式 2)

进而可以推出:
BX ?

?0 I h ? 2 2? x ? h 2

(公式 3)

BZ ?

?0 I x ? 2 2? x ? h 2

(公式 4)

其中h是电感线圈距离地面的垂直距离。为了讨论的方便,记
' BX ?

h x ? h2
2

(公式5)
' BZ ?

x x ? h2
2

(公式 6)

则从(公式3)(公式4)(公式5)(公式6)可以得出B'X、B'Z分别和BX、 、 、 、 BZ有相同的变化趋势。图3.2.2和图3.2.3显示了当分别取h为5、8、10时B'X和 B'Z的变化趋势。由图可知: (1)B'X是x的偶函数,在Y轴两侧单调;B'Z是x的奇函数,在Y轴两侧没有单 调关系; (2)在相同的高度下,B'X幅值是B'Z的两倍,但是在x=20的时候,B'X只有 B'Z的一半左右了,因此B'X的衰减较B'Z快很多。综上可推知,水平线圈比较适 合做x的正负判别,垂直线圈比较适合用来解算x的具体数值,B'Z较B'X衰减慢 得多,说明水平线圈对远处道路状况相对比较敏感,可以用来预测前方的弯道。
21

第八届 全国大学生智能汽车邀请赛技术报告

图 2.3.2 B'X 的曲线图

图 2.3.3 B'Z的曲线图

第三章 硬件电路设计
整个硬件系统采用的是模块化的设计思想,整体的硬件框图如下图所 示:

22

控制器模块

停车检测模块

电源模块

S12XS128 控制核心

检波放大电路模 块

测速模块 前轮转向模块

电机驱动模块

3.1 循迹传感器放大电路
1、双电源运放 采用双电源运放可以得到很大的输出直流电压,但是多圈高精度滑动变阻 器对信号影响较大,往往在弯道发生突变电压。可能是负电源做的不好,我们 采用单电源供电,由于需要放大的信号是非常弱的信号,所以需要运放的单位增 益带宽比较大(至少1M以上),这样对小信号的放大作用就比较好,经过对比选 择,我们最终选择了NE5532。

23

第八届 全国大学生智能汽车邀请赛技术报告

图 3.1.1 寻迹放大电路

如上图,采用NE5532放大电路,可以避免信号失真,同时线性度够好。而 且放大电路简单,有一个2.5V左右的抬压就不需要负电压,便于电路的设计, 最后我们采用了NE5532放大电路作为谐振电压的放大电路。

3.2 测速模块
测速模块用了500线AB两相的编码器作为测速传感器,经过换算12ms定时器 计算一次速度,每5ms调一次

24

3.3 电机驱动模块
B A 输 输 入 入 V

25
C 5.1K R C ? V C 5.1K R C ? 3 2 D C L K V 4 C P L R C R C Q Q SN74LS74AD U?A 6 5













1

V



C

C























图 3.2.1 编码器输出波形图



驱动的选择:

3.4 主板电路设计

使用,TPS7350的性能很好。
2 Header P 1 4 Header P 2 1 2 1 2 3 4 7.2V 4 C PWM3 PWM7 7 2 0

1、采用专用芯片BTN系列的7971

n

O

O

F

U

U

7.2V

T

T

第八届 全国大学生智能汽车邀请赛技术报告

1

2

电源作为小车的核心,除了满足小车所需,尽量简单稳定。主要用了

TPS7350单独为单片机供电,另一个给检波电路和直立传感器供电。经过测试

26
7.2V PWM7 R R 6 5 1 1 0 0 k k 2.2k R 7 1 R K 8 5 6 3 2 U 2 S I INH I

7.2V

PWM3

R

R

2

1

1

1

0

0

k

k

2.2k

R

3

1

R

K 4

5

6

3

2

U

1

S

I

INH

I

3.3.1BTN7971 驱动电路图
R S N O G U N V T D S 4 1 O U T 2

R

S

N

O

G

U

N V

T

D S

7

4

1

7

7.2V

7.2V

O

U

T

1

PTV

P

V

1

Battery C

P

2

C

3

2

1

1

2

+7.2

3

2

1

1

C

0 9

T C f G +

4 +5V

u

L

N

5

V

K

D

SW1 1 R

K 1

1

2

1

C

0 1

u

f

T

5

0.1uF

C10

SW2

SPST

SW

S

1

0.1uF

C

4 2

3

2

1

TPS7333QDR

U

I

I

E

G

3

N

N

N

N

3

L

3

L

D 3 1 2 3

+7.2

T

3 1 1 2

0

0

u

u

T

2 2 1 1

SENSE

RESET H H

O

O

J

7 3 1

0

提供舵机的供电电压
U U J T P 6 4 9 T T 4 S 3 5 8 1 2 S 2 6 7 5 6 7 8 T T 0 1 0 R DIP6 SW SW3 K 6 4 C 7 3 1 C11 0

3.5 转向部分电路设计
图 3.4.2 主板原理图
0 u u f f 0.1uF C12 V D 0.1uF C D 4 V C C SCI0 P 6 PTV P 3 RXD0 TXD0 1 1 2 1 2 2 3 4 3 S 2 S A A 3 D 7 D 6 2 1 3 4 3 4 J 7 J A A 6 D 5 D 4 5 6 5 6 3 A D A 3 D 2 2 1 7 8 7 8 R T G + A D A 1 D 0 X X N 5 G Vservo 9 1 0 9 1 0 V V P N D A 7 A 6 C D D 3 1 1 1 1 1 2 1 2 0 0 2 D C P 7 P A A 5 5 4

按照规则要求本次电磁车用的是大赛要求的FUTABA3010舵机,用下图电路

27
2 1 3 1 1 1 4 3 4 P 3 A A 3 2 1 5 1 1 1 6 5 6 P A 1 A 0 2 P 1 1 7 1 1 1 8 7 8 P 0 T E 0 0 E 1 1 9 2 1 2 0 9 0 T 1 T E 2 2 E 3 2 1 2 2 2 2 1 2 T 3 T E 4 4 E 5 2 3 2 2 2 4 3 4 4 Header P T 5 E 6 E 7 5 2 5 2 2 2 6 5 6 T 7 2 7 2 2 8 7 2 8 1 2 3 4 2 9 3 2 0 9 3 0 +5V 3 1 3 2 3 1 3 2 O O HDR16x2 JPB HDR16x2 JPA U U 7.2V T T 1 2 HDR2X4 P A A A A A A A A 8 D 7 5 3 1 D D D D D D D 7 6 5 4 3 2 1 0 7.2V 8 6 4 2 A P D 8 7 7 6 5 4 3 2 1 4 C32 8 7 0 n F V D D V C C 0.1uF C26 G P N 2 D 2 3 1 K U 8 7 I 6 N R22 HEF4520BT G 1 LM1084-ADJ A A vss A reset N D D J 1 2 2 O K 1 U T 2 B enable B clock 1 R23 2 0

1

0

C

u 5

f

0.1uF

C

6

4

3

2

1

TPS7333QDR

U

I

I

E

G

2

N

N

N

N

D

SENSE

RESET

O

O

U

U

图 3.4.1 电源模块

T

T

5

6

7

8

1

C

0 7

u

f

0.1uF

C +

8

5

V

A

A

A

A

+

C

3

2

1

0

5 L

V

K

1

6

5

4

3

2

1

U

A

Q4

A

Q3

A

Q2

A

Q1

A

enable

A

clock

1

c

d

4

5

2

0

B

reset

B

Q1

B

Q2

B

Q3

B V

Q4

D

D

第八届 全国大学生智能汽车邀请赛技术报告

U

6

V

C

C

3

LM1084-ADJ

2

I

N

O

U

A

D

J

T

1

R23

2

1

0

1

C28

0

Vservo

0

u

C26

0.1uF

R22

2

1

K

1

G

N

D

图 3.5.1 舵机供电电路

3.6 停车检测部分
关于停车检测,根据大赛提供的磁铁,我们选用干簧管并联进行检测,通过单 片机的输入捕捉模块对小车进行停车控制。

第四章 软件控制算法及策略
4.1 智能车软件控制算法及策略
4.1.1 软件系统设计及整体思路 在本届智能车比赛中,我们选择了MC9S12XS128 为核心控制芯片, CodeWarrior IDE 为软件开发环境。软件控制基本是按照路径识别=>舵机控制 =>速度控制。首先,采用单片机的AD模块进行路径信息采集与识别;然后,通 过采集到的数据计算出小车距离赛道中线的距离,控制舵机转向;最后,利用 脉冲计数功能对小车的速度进行检查,计算出速度偏差来控制电机,从而达到 设定的速度。除此之外,还用到了单片机的电源管理模块,电机驱动,无线模 块等。

2

K

1

0.1uF

C27

F

28

4.1.1 软件的整体设计框图

4.2 程序整体思路
程序上电复位后,先进行初始化,包括时钟初始化、I/O 端口初始化、PWM 初始化、AT D 初始化、ECT 初始化等,对各个全局变量进行必要的初始化设置。 然后进入for()无线循环函数,进入等待中断模式,通过外部的两个个按键设置 不同的模式,包括速度的选择减速程度的选择等,通过PIT中断定时进行速度和 方向的控制。 4.2.1 程序初始化

void Init_Dev(void) {

29

第八届 全国大学生智能汽车邀请赛技术报告

SetBusCLK_64M(); AD_init(); Pit_Init(); Pwm_init(); PORTA_Init(); PORTB_Init(); PORTE_Init(); PORTJ_Init(); PORTP_Init(); PORTS_Init(); PORTT_Init(); PORTM_Init(); DFlash_Init(); UART_Init(); }
4.2.2 主函数

void main(void) { /* put your own code here */ Init_Dev(); delay(1000);
30

PITCE_PCE0 = 1;//中断使能 ATD0CTL5 = 0x30; CarInit(); EnableInterrupts; for(;;) { if(Process_Flag){ Process_Flag=0; sprintf(txtbuf,"\n_%d___%d___\n",(int)(Offset*10)); uart_putstr(txtbuf); delay(1000); /* */ /* OutPut_Data(); */ } _FEED_COP(); } }
4.2.3 PIT 中断函数

//串口输出字符串

void interrupt VectorNumber_Vpit0 VPIT0(void){ 2ms int i;
31

//时间

第八届 全国大学生智能汽车邀请赛技术报告

asm(MOVB #$01,PITTF);

//程序执行时间 1ms

if(StartFlag==1){ start_delay++; if(start_delay==1250){ //延时 2.5s 启动 StartFlag=2; start_delay=0; } } SampleCarVoltage(); DirectionControl(); GetMotorPulse(); SpeedControl(); Process_Flag = 1; }

4.3 传感器信号采集处理算法
我们都知道单片机的AD模块只能转换正电压,而我们传感器感应到的 是正弦波,所以外部电路把正弦波抬高。那么我们AD转换以后的值一定要把这

32

个抬高的电压(后简称抬压)减掉才能真正表示传感器采集到的信号。这个抬 压的确定有两种方法:其一就是直接用万用表测量硬件电路相关引脚上的电压, 编程时直接减掉;其二就是软件实现,将AD转换到的值进行累加,求出平均值, 这个平均值当做抬压。 实际中,虽然每路信号的抬压是共用一个电压源的,但是由于电感的不 同以及硬件的细小差别,往往导致每路信号的抬压不一样,这时候,第二种确 定抬压的方案明显有优势,不需要外部测量,更不需要分路给定。综上所述, 我们选择第二种方案。 具体程序如下:

Mag_data0[CarVoltageCount]=ATD0DR0;

CarVoltageSigma[MAGNET_0] +=ATD0DR0;

CarVoltage[i]= CarVoltageCount);

(unsigned

int)(CarVoltageSigma[i]

/

CarVoltageSigma[i] = 0;

CarVoltageSigma[0]+=N_Abs(Mag_data0[j]-

CarVoltage[0]);

33

第八届 全国大学生智能汽车邀请赛技术报告

MagnetSensor[0] = ((int)(CarVoltageSigma[0]/CarVoltageCount));

4.4 传感器方案设计及路径识别算法
对智能车来说,传感器是个相当重要的部分,就好比人的眼睛一样。 传感器的稳定性以及传感器的布局,都直接影响了赛道路径的识别。 对于直导线,当装有小车的中轴线对称的两个线圈的小车沿其直线行 驶,即两个线圈的位置关于导线对称时,则两个线圈中感应出来的电动势大小 应相同、且方向亦相同。若小车偏离直导线,即两个线圈关于导线不对称时, 则通过两个线圈的磁通量是不一样的。这时,距离导线较近的线圈中感应出的 电动势应大于距离导线较远的那个线圈中的。根据这两个不对称的信号的差值, 即可调整小车的方向,引导其沿直线行驶。 但是,当两个线圈偏离导线较远时,他们感应的电动势差值就会随 着他们离导线的距离增大而减小了,当传感器前瞻比较大时,这样的算法就完 全不行。所以我们要另寻他路。 根据毕奥萨伐尔定理可知,如果导线的电流不发生变化时,电感的感 应电压通过后级电路后产生的直流电平正比于sinθ /(h^2+l^2),其中h为传 感器距离导线的竖直距离,L 为传感器距离导线的水平距离,θ 为工字电感与 导线的夹角。把传感器的高度测出来,代入水平方向放置的两个电感数值就可 以得到L和θ 的具体数值。

34

从而就可以算出偏移距离。在通过水平放置的两个电感就可以知道传感器 是往那边偏的,最后就得到了偏移量。最终我们的传感器选择了四个电感的排 布方案。

4.5 速度控制算法与方向控制策略
1. PID 控制算法

PID控制是工程实际中应用最为广泛的调节器控制方法。问世至 今70多年来,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控 制的主要技术之一。 PID控制系统原理框图如下:

其基本控制规律为:

式中,P、k 、I、k 、D、k 分别被称为比例系数、积分系数和微分系数,e 为 输入与输出间的误差。 在使用离散的数字量代替该式的连续量后, 可以得到 PID 控制的离散形式,即数字 PID 控制方式,便于计算机进行运算和处理。

式中,T i为积分时间常数,T d为微分时间常数。 从以上公式可知,控制器的输出由三个部分组成:

35

第八届 全国大学生智能汽车邀请赛技术报告

(1)比例控制部分:只要偏差e 一出现,控制器立即产生控制作用,使被 控参数朝着减小偏差的方向变化,具有控制及时的特点。但控制作用的强弱取 决于Pk 的大小,过小时控制作用不明显,过大时会使系统动态品质变坏,引起 被控量的振荡而导致系统不稳定。 (2)积分控制部分:只要偏差e 不为0,它将通过累积作用影响控制量, 以求减小偏差。偏差为0 时不再变化,系统达到稳定。所以积分作用的加入, 可以消除系统静差。积分时间 Ti 小,积分响应速度快,积分作用强。增大 Ti 将减慢消除静差的过程,降低响应速度,但可以减小超调,提高系统稳定性。 (3)微分控制部分:只要偏差出现变化趋势,即使很小,也会立刻产生控 制作用,以调整系统的输出,阻止偏差的变化。它是一种“超前”控制作用, 在偏差出现或变化的瞬间作用明显。偏差变化越快,反馈校正量越大。微分控 制有助于减小超调、克服振荡,使系统趋于稳定。 在实际应用中,根据被控对象的特点,合理调节三个参数,就能达到比较 理想的控制效果。在目前的许多工业控制领域,其应用仍相当广泛。

2 PID 参数的作用
1、比例环节:即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生, 调节器立即产生控制作用以减小偏差。 2、积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取 决于积分时间常数TI,TI越大,积分作用越弱,反之则越强。

36

3、微分环节:能反应偏差信号的变化趋势(变化速率),并能在偏差信号的 值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动 作速度,减小调节时间。 3 方向控制算法 考虑到积分饱和的问题, 在实际方向控制中, 我们采用了PD控制算法。

fDelta = Offset - Offset_Last;

fP=DIR_CONTROL_P * Offset;

fD=DIR_CONTROL_D*fDelta;

DirectionControlOut=(int)fP+(int)fD;

其中的DIR_CONTROL_P和DIR_CONTROL_D是我们在调试过程中根据实际效果 确定下来的参数。

4.5.1 速度控制算法 纯比例控制会存在一个静态误差,而积分主要用于消除静差,提高系统的 无差度。所以速度控制我们采用PI控制。

37

第八届 全国大学生智能汽车邀请赛技术报告

nDelta = CarSpeedSet - CarSpeed;

fP = nDelta * SPEED_CONTROL_P;

fI = nDelta * SPEED_CONTROL_I;

SpeedControlIntegral += fI;

SpeedControlOutNew = fP + SpeedControlIntegral;
其中 SPEED_CONTROL_P和SPEED_CONTROL_I是调试的经验值,最终调 试的速度控制曲线如下图:

38

其中,红色为设定速度,红色为小车实时速度,紫色为积分量。 4.5.2 调速策略 首先设定一个整体速度CarSpeedSet 弯道部分:电磁组前瞻较小,S道处理较困难,S道的处理的好坏对整 体速度有较大的影响。处理方法如下:初始化一个容量为50的数组,记录每次 的弯曲度,动态更新数组。然后对50个数据求绝对值和和代数和,如果代数和绝 对值很小,则车在直道,如果代数和和绝对值和较小,但是前20个数据较大, 则可以判定小车在出弯,如果代数和和绝对值和较小,后20较大,则判定小车 在入弯,如果代数和很小,但绝对值和很大,则在s弯道。经过调试,虽然有一 点滞后性,还可以继续完善。但是这个算法可以非常好的处理弯道。 直道部分:小车在直道上运行时偏移量是很小的,这是我们可以充 分的加速。首先判别出直道,具体做法如下:初始化一个容量为10的数组,小 车每前进4cm就把偏移量记录一次,实时更新。然后对这10个数据进行分析,如 果10个偏移量都小于3,则判断我直道,这是设定速度就提升一个档位。速度提 升的档位可以根据实际的调试效果来确定,最终的加减速效果还是很明显的。 经过以上的速度控制策略分析最终我们的速度控制部分程序如下:

fDeltasmall_count=0; Offsetsmall_count=0; Offsetmin_count=0; for(j=7;j>=0;j--){
39

第八届 全国大学生智能汽车邀请赛技术报告

if(N_Abs(Offset_[j])<=8) Offsetsmall_count++; if(N_Abs(Offset_[j])<=3) Offsetmin_count++; } for(j=5;j>=0;j--){ if(N_Abs(fDelta_[j])<=1) fDeltasmall_count++; }

if(StartFlag==2&&CarStopFlag==0){ if(fDeltasmall_count>=5) { Prespeed=(int)(CarSpeedSet*12.5/10); // PORTB=0X00; } else ; //PORTB=0Xff;

if(Offsetsmall_count>=7){ Prespeed=(int)(CarSpeedSet*12.5/10);

40

//PORTB_PB1=0; } else ; //PORTB_PB1=1;

if(Offsetmin_count>=8){ Prespeed=(int)(CarSpeedSet*13.5/10); PORTB=0X00; } else{ PORTB=0XFF; } }

nDelta

=

Prespeed-CarSpeed-F_Abs(fDelta*2)-F_Abs(Offset/2);

//F_Abs(fDelta)最大在 15--20 之间

if(nDelta>=10) fP = nDelta * SPEED_CONTROL_P1; else //速度差 比例 积分

41

第八届 全国大学生智能汽车邀请赛技术报告

fP = nDelta * SPEED_CONTROL_P;

fI = nDelta * SPEED_CONTROL_I;

SpeedControlOutOld = SpeedControlOutNew;

SpeedControlOutNew = fP + SpeedControlIntegral;

nValue =SpeedControlOutNew - SpeedControlOutOld; if(nMotorVol > 0){ PWMDTY1 = (unsigned char)nMotorVol; PWMDTY5 = 0; }else{ nMotorVol = -nMotorVol; PWMDTY1 = 0; PWMDTY5 = (unsigned char)nMotorVol; }

42

4.6 小结
软件部分是整个控制系统的核心。首先要解决的一个难点就是怎么样准确 的提取赛道信息,算出控制需要的小车偏移量,不同的设计方案,算出来的小 车位置信息就不一样,控制也就会受到影响;其次,怎样根据算出的小车偏移 量来很好的控制舵机打角,控制的不好会直接影响小车的运行轨迹。最后就是 怎样将舵机打角和速度控制相互配合,这将会影响小车的整体运行速度。配合 的好,小车不仅运行稳定,而且速度也不会低。这就需要调试过程中尽量多的 取分析数据,以达到精确控制!

第五章
5.1 BDM调试
BDM调试界面如下:

开发与调试

43

第八届 全国大学生智能汽车邀请赛技术报告

5.2 上位机调试
我们这调车过程中主要用到了一下两种上位机进行调试的。在这些 上位机的数据窗口中,我们可以看到单片机内部的一些寄存器以及程序 中定义的变量,这对我们调试程序是很有帮助的。

虚拟示波器用来调速是一个非常方便的调试工具,它的界面如下:

44

第六章 智能车相关技术参数说明

项目 路径检测方法(赛题组) 车模几何尺寸 (长、 宽、 (毫米) 高) 车模轴距/轮距(毫米)

参数 电磁组 710、250、170 150

45

第八届 全国大学生智能汽车邀请赛技术报告

电路功耗 电路电容总量(微法) 传感器种类及个数 3 种 个 新增加伺服电机个数 赛道信息检测空间精度(毫米) 赛道信息检测频率(次/秒) 电路主要元器件种类/数量 HEF4520 TPS7350 BTS7960 NE5532 车模重量(带有电池) (千克)

20W 1683uf 电感 4 个 编码器 1 干簧管 4 个 0个 10mm 200 1片 2片 2片 5片 0.898

第七章 鸣谢
作为一个融合多学科交叉的的复杂系统,完成整智能车的设计、制作和调 试是一个非常庞大的工程,仅靠几名队员是很难完成的,它需要一个高效运作、 规范管理的团队的紧密合作才能完成。 感谢指导老师们在技术上的指导、物资上支持和多方面的帮助。

46

感谢学院提供的调试场地和测量仪器。同时感谢各个队伍之间在技术上进 行的交流和在技术上的对我们提供的帮助,虽然是不同组别,但对我们的小车 的提高起到不小的作用。 最后还要感谢我们每一位队员在这么长的时间里不懈地努力,付出了不少 的汗水,最后能够取得一定的成果。整个比赛的过程,磨练了每个队员的意志, 提高了队员的素质,总体而言,我们学到了很多,提高了很多,这将对以后的 学习和工作起到很大的作用。

47

第八届 全国大学生智能汽车邀请赛技术报告

第八章 总结
1、制作成果 经过大半年的“飞思卡尔”智能车的制作和研究过程中,从赛道的电源制 作、信号检测模块再到小车的主板的制作;从小车可以起跑,分析其可行性来 让小车得到提速。我们一步一步地走过来,从中学到了不少的知识,总结了不 少的经验。在每个阶段中,我们都尽量地将小车改进和完善,争取达到最优效 果。 2、问题与思考 在智能车的制作过程中,我们的小车曾经出现过很多问题,如小车的循迹 传感器撞坏,电机驱动烧毁,因为信号微弱经常冲出赛道等问题,或多或少拖 慢了我们的进度,但经队员们不断的努力,和指导老师的帮助,我们从硬件和 软件上做了一步步的改良和升级,渐渐对各模块有了深入的认识,对整体有了 清晰的把握,我们在不断的前进的同时,小车也不断的加速前进。 3、不足与改进 从小车总体性能各因素考虑,小车系统分为采集、处理、控制三部分。对 于采集部分:由于电磁组特点决定了小车的前瞻比较小,而前瞻的大小对速度 是有着很大的影响。在这个过程中,我们分析了电感的各种摆放方式对磁场的 检测结果。电磁组的传感器的摆放具有比较大的灵活性,这是优点。但对采集 回来的信息如何进行有效处理是个难题。由于我们对空间磁场的具体分布的认 识不足,也没找到比较好的分析方法,只是运用最简单的左右手法则来确定。 这是我们队不足的地方,没有科学的分析方法。关于处理和控制部分:传感器 的摆放决定了控制算法。由于没有太多的时间与分析,我们采用的是最简单的

48

摆放方式,但也是很有效的方式,因为信号变化在区间内单调,而双排传感器 的摆放能够得到一定的前瞻距离 (电磁组的车长度不限) 但长度不是越长越好, 。 太长的话容易在过弯的时候检测到临近的赛道而冲出跑道。

参考文献
[1] 王威等.HCS12 微控制器原理及应用[M]. 北京:北京航空航天大学出版社,2007 [2] 孙同景 陈桂友.Freescale 9S12 十六位单片机原理及嵌入式开发技术[M].北京:机械工业 出版社,2008 [3] 卓晴等.学做智能车--挑战飞思卡尔杯[M]. 北京:北京航空航天大学出版社,2007 [4] 毛振珑.磁场测量[M].北京:原子能出版社.1985 [5] 张肃文.高频电子线路(第四版)[M].北京:高等教育出版社.2007 [6] [7] 华成英 童诗白.模拟电子技术基础(第四版)[M].北京:高等教育出版社.2007 [8] 张吴肠 马旭 卓晴.基于电磁场检测的寻线智能车设计[J].电子产品世界,2009,11 : 48-50 [9] 李仕伯 马旭 卓晴.基于磁场检测的寻线小车传感器布局研究 [J].电子产品世界, 2009,12 :41-44

附录 部分源代码
1. main.c void main(void) { Init_Dev(); delay(1000); PITCE_PCE0 = 1;//中断使能
49

第八届 全国大学生智能汽车邀请赛技术报告

ATD0CTL5 = 0x30; CarInit(); EnableInterrupts; for(;;) { if(Process_Flag){ Process_Flag = 0; if(Bit4==1) //sprintf(txtbuf,"\n__%d__%d__%d__%d__%d_\n",SE0,SE1,SE2,SE 3,(int)(Offset*10)); sprintf(txtbuf,"\n_%d__%d__%d__%d___%d__\n",(int)(Offset0*10), (int)(Offset1*10),(int)(Offset2*10),(int)(Offset3*10),(int)(Offset*10)) ; if(Bit4==0) // sprintf(txtbuf,"\n_%d__%d__%d__%d__%d__\n",MagnetSensor[0], MagnetSensor[1],MagnetSensor[2],MagnetSensor[3],(int)(Offset*10) ); // sprintf(txtbuf,"\n_%d__%d__%d__%d_\n",E0MAX,E1MAX,E2MA X,E3MAX);

50

sprintf(txtbuf,"\n__%d__%d__%d__%d__%d_\n",SE0,SE1,SE2,SE3, (int)(Offset*10)); uart_putstr(txtbuf); delay(1000); /* */ /* OutPut_Data(); */ } _FEED_COP(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave main */ } 2. function.c #include "function.h" void CarInit(void) { ADFlag = 1; Process_Flag = 0; CarVoltageCount = 0; EventCount_1MS = 0; SpeedControlPeriod = 0; CarSpeed = 0; CarSpeedSet = 0;
51

//串口输出字符串

第八届 全国大学生智能汽车邀请赛技术报告

MotorOut = 0; SpeedControlOutOld = SpeedControlOutNew = 0; SpeedControlPeriod = 0; SpeedControlIntegral = 0; DirectionControlPeriod = 0; MagnetSensorOverFlag = 0; DirectionControlCount = 0; DirectionControlOut = 0; MotorPulseSigma = 0; Offset_Last = 0; } void GetMotorPulse(void) { //2ms unsigned int nPulse; nPulse = PORTA; PTP_PTP2 = 1; //4520 芯片复位

MotorPulse = (int)nPulse; PTP_PTP2 = 0; }

void SpeedControl(void) {

52

Speed,j=0; float nDelta,fP,fI; static int Speed_Last = 0; CarSpeed =MotorPulseSigma; MotorPulseSigma = 0; Prespeed = CarSpeedSet; } nDelta = Prespeed-CarSpeed-F_Abs(fDelta*2)-F_Abs(Offset/2); if(nDelta>=10) fP = nDelta * SPEED_CONTROL_P1; 分 else fP = nDelta * SPEED_CONTROL_P; fI = nDelta * SPEED_CONTROL_I; //速度差 比例 积

if(CarStopFlag==1){ fP = nDelta * 0.7; } SpeedControlIntegral += fI; if(fP > 2.5*MOTOR_OUT_MAX) //防止超调可加积分值的上限 //2.5

53

第八届 全国大学生智能汽车邀请赛技术报告

fP = 2.5*MOTOR_OUT_MAX; if(fP < 2.5*MOTOR_OUT_MIN) fP = 2.5*MOTOR_OUT_MIN;

if(SpeedControlIntegral > SPEED_CONTROL_OUT_MAX) //SPEED_CONTROL_OUT_MAX 100

SpeedControlIntegral = SPEED_CONTROL_OUT_MAX; if(SpeedControlIntegral < SPEED_CONTROL_OUT_MIN) SpeedControlIntegral = SPEED_CONTROL_OUT_MIN;

SpeedControlOutOld = SpeedControlOutNew; SpeedControlOutNew = fP + SpeedControlIntegral; }

void SpeedControlOutput(void) { float nValue; nValue =SpeedControlOutNew - SpeedControlOutOld; if(nValue >50 ){ nValue = 50; SpeedControlOutNew = SpeedControlOutOld +50;

54

} if(nValue < -50){ nValue = -50; SpeedControlOutNew = SpeedControlOutOld - 50; } SpeedControlOut = nValue * (SpeedControlPeriod + 1.0) /6 + SpeedControlOutOld; }

void MotorOutput(void){ float fspeed; fspeed =SpeedControlOut; if(fspeed > 230) if(fspeed < -230) MotorOut=(int)(fspeed); SetMotorVoltage(); /* OutData[0] = CarSpeedSet; OutData[1] = CarSpeed; //OutData[2] = (Offset+CarSpeedSet); fspeed = 230; fspeed = -230;

55

第八届 全国大学生智能汽车邀请赛技术报告

OutData[3] = SpeedControlIntegral; Process_Flag = 1; */ }

void SetMotorVoltage (void) { int nMotorVol;

nMotorVol=MotorOut; if(nMotorVol > 0){ PWMDTY1 = (unsigned char)nMotorVol; PWMDTY5 = 0; }else{ nMotorVol = -nMotorVol; PWMDTY1 = 0; PWMDTY5 = (unsigned char)nMotorVol; } } void erase_flash(void) { if(FSTAT_ACCERR==1||FSTAT_FPVIOL==1){ FSTAT=0x30; }

56

FCCOBIX=0x00; FCCOB=0x1210; //12 FCCOBIX=0x01; FCCOB=0x0000; FSTAT_CCIF=1; while(!FSTAT_CCIF); }

void save2flash(int data01,int data23,int data45,int data67){ erase_flash(); if(FSTAT_ACCERR==1||FSTAT_FPVIOL==1) { FSTAT=0x30; } FCCOBIX=0x00; FCCOB=0x1110;//11 表示在 Dflash 中写 4 个字, 表示 Dflash 10 的高八位 FCCOBIX=0x01; FCCOB=0x0000; FCCOBIX=0x02; FCCOB=data01;

57

第八届 全国大学生智能汽车邀请赛技术报告

FCCOBIX=0x03; FCCOB=data23; FCCOBIX=0x04; FCCOB=data45; FCCOBIX=0x05; FCCOB=data67; FSTAT_CCIF=1; while(!FSTAT_CCIF); } void SampleCarVoltage(void) { unsigned int nCarVoltage [4] ={0}; AD_A_GetValue16(nCarVoltage); Mag_data0[CarVoltageCount]=nCarVoltage[MAGNET_0]; CarVoltageSigma[MAGNET_0] += nCarVoltage[MAGNET_0]; //每 4ms 执行 300 次

Mag_data1[CarVoltageCount]=nCarVoltage[MAGNET_1]; CarVoltageSigma[MAGNET_1] += nCarVoltage[MAGNET_1]; Mag_data2[CarVoltageCount]=nCarVoltage[MAGNET_2]; CarVoltageSigma[MAGNET_2] += nCarVoltage[MAGNET_2]; Mag_data3[CarVoltageCount]=nCarVoltage[MAGNET_3];

58

CarVoltageSigma[MAGNET_3] += nCarVoltage[MAGNET_3]; CarVoltageCount ++; }

void GetCarVoltageAverage(void){ int i,j; if(CarVoltageCount == 0) { for(i = 0; i < 4; i ++) CarVoltageSigma[i] = 0; return; } for(i = 0; i < 4; i ++) { CarVoltage[i] CarVoltageCount); CarVoltageSigma[i] = 0; } for(j=0;j<CarVoltageCount;j++){ CarVoltageSigma[0]+=N_Abs(Mag_data0[j]CarVoltage[0]); = (unsigned int)(CarVoltageSigma[i] /

59

第八届 全国大学生智能汽车邀请赛技术报告

CarVoltageSigma[1]+=N_Abs(Mag_data1[j]CarVoltage[1]); CarVoltageSigma[2]+=N_Abs(Mag_data2[j]CarVoltage[2]); CarVoltageSigma[3]+=N_Abs(Mag_data3[j]CarVoltage[3]); } MagnetSensor[0] = ((int)(CarVoltageSigma[0]/CarVoltageCount)); MagnetSensor[1] = ((int)(CarVoltageSigma[1]/CarVoltageCount)); MagnetSensor[2] = ((int)(CarVoltageSigma[2]/CarVoltageCount)); MagnetSensor[3] = ((int)(CarVoltageSigma[3]/CarVoltageCount)); CarVoltageSigma[0]=0; CarVoltageSigma[1]=0; CarVoltageSigma[2]=0; CarVoltageSigma[3]=0; CarVoltageCount = 0; }

void DirectionVoltageSigma(void) { static int PORTB_pb2;

60

SE0=MagnetSensor[0]; //保存原始值 SE1=MagnetSensor[1]; SE2=MagnetSensor[2]; SE3=MagnetSensor[3]; if(Bit5==0) { PORTB_pb2=1; PORTB_PB2=0; if(MagnetSensor[0]>E0MAX){ E0MAX=MagnetSensor[0]; } if(MagnetSensor[1]>E1MAX){ E1MAX=MagnetSensor[1]; } if(MagnetSensor[2]>E2MAX){ E2MAX=MagnetSensor[2]; } if(MagnetSensor[3]>E3MAX){ E3MAX=MagnetSensor[3]; } save2flash(E0MAX,E1MAX,E2MAX,E3MAX);

61

第八届 全国大学生智能汽车邀请赛技术报告

} E0MAX=*E0max; //读取 Dflash 的值 E1MAX=*E1max; E2MAX=*E2max; E3MAX=*E3max; if(MagnetSensor[0]<1) MagnetSensor[0]=1; if(MagnetSensor[1]<1) MagnetSensor[1]=1; if(MagnetSensor[2]<1) MagnetSensor[2]=1; if(MagnetSensor[3]<1) MagnetSensor[3]=1; }

void DirectionControl(void) { int i=0,j=0; float fP,fD; k1=100*H*H/MagnetSensor[1]-H*H; k2=100*H*H/MagnetSensor[2]-H*H; k0=100*H*H/MagnetSensor[0]-H*H; k3=100*H*H/MagnetSensor[3]-H*H; Offset0=sqrt(k0); Offset1=sqrt(k1);

62

Offset2=sqrt(k2); Offset3=sqrt(k3); if(k1<=0) Offset1=Offset1_last; if(k2<=0) Offset2=Offset2_last; if(k0<=0) Offset0=Offset0_last; if(k3<=0) Offset3=Offset3_last; if(Offset0>=55) Offset0=55; if(Offset1>=55) Offset1=55; if(Offset2>=55) Offset2=55; if(Offset3>=55) Offset3=55; Offset1_last=Offset1; Offset2_last=Offset2;

63

第八届 全国大学生智能汽车邀请赛技术报告

Offset0_last=Offset0; Offset3_last=Offset3; if(Offset1<=Offset2) Offset=Offset2-5.0; else Offset=Offset1-5.0; if(Offset<0) Offset=-Offset; if(Offset<20) { if(MagnetSensor[0]>MagnetSensor[3]){ //if(MagnetSensor[1]>MagnetSensor[2]) MagnetSensorOverFlag=1; } if(MagnetSensor[0]<MagnetSensor[3]){ //if(MagnetSensor[1]<MagnetSensor[2]) MagnetSensorOverFlag=-1; } } Offset=Offset*MagnetSensorOverFlag; if(F_Abs(Offset-Offset_Last0)>=20)

64

Offset=(Offset_Last0+Offset)/2; Offset_Last0 =Offset; fDelta = Offset - Offset_Last; if((MotorPulseSigma1>=140)||(StartFlag==0)) { MotorPulseSigma1=0; dis_fd_count++; if(dis_fd_count==2){ dis_fd_count=0; Offset_Last= Offset; //微分距离 3.6cm for(j=5;j>0;j--){ fDelta_[j]=fDelta_[j-1]; } fDelta_[0]=(int)fDelta; } for(j=7;j>0;j--){ Offset_[j]=Offset_[j-1]; } Offset_[0]=(int)Offset; } fP=DIR_CONTROL_P * Offset*2/3; //用于直道判断

65

第八届 全国大学生智能汽车邀请赛技术报告

fD=DIR_CONTROL_D*fDelta;

if(fD > 0 && fP > 0 && fD > fP / 10) fD = fP / 10; if(fD < 0 && fP < 0 && fD < fP / 10) fD = fP / 10; DirectionControlOut=(int)fP+(int)fD; }

void DirectionControlOutput(void) { float pwmdty01;

pwmdty01=DirectionControlOut+PWM_MID; if(pwmdty01 > PWM_MAX){ pwmdty01 = PWM_MAX; } if(pwmdty01 < PWM_MIN){ pwmdty01 = PWM_MIN; } PWMDTY23 =(int) pwmdty01; }

66

void delay(int ms) { int ii,jj; if (ms<1) ms=1; for(ii=0;ii<ms;ii++) for(jj=0;jj<2670;jj++) {} } int N_Abs(int a){ if(a < 0) return -a; else return a;} float F_Abs(float a){ if(a < 0) return -a; else return a; } extern double sqrt (double x)

67

第八届 全国大学生智能汽车邀请赛技术报告

{ unsigned int ans=0,p=0x8000; while(p!=0) { ans+=p; if((unsigned long int)ans*ans>x) ans-=p; p= p/2; } return(ans); } void AD_A_GetValue16(word *Values) { *Values++ = ATD0DR0; *Values++ = ATD0DR1; *Values++ = ATD0DR2; *Values++ = ATD0DR3; } } {

68

69


推荐相关:

2012年湖北省大学生物理实验创新设计竞赛获奖名单

联网技术磁场测量 湖北师范学院 及室内环境监测的研究与 实现 湖北工业大学 基于...湖北第二师范 恶劣环境下电磁辐射探 王志强, 彭亮, 吴强, 学院 湖北文理学院 ...


北京科技大学电磁组一队技术报告

第八届“飞思卡尔”杯全国大学生 智能汽车竞赛 技术报告 学 校:北京科技大学 队伍名称:北京科技大学电磁一队 参赛队员:山峰 刘刚 郭文俊 带队教师:张文明 杨珏 ...


电磁学课程报告

哈尔滨大学出版社 2/4 电磁学课程报告 光信二班 ...因 而广泛应用在日常生活、 工业生产 以及军事等方面...实践证明,利用 MMLC 技术制作 4/4 电磁学课程报告...


2012-2014自然科学基金青年基金资助项目列表(材料+机械)

基金资助项目列表(材料+机械)_调查/报告_表格/模板...电磁力径向助推筒形件渐进复合拉深变形基础研究 多...湖北汽车 工业学院 东北大学 燕山大学 南京航空 航天...


毕业实习(技术)报告

毕业实习(技术)报告_实习总结_总结/汇报_实用文档。实习报告湖北汽车工业学院职业...2. 机械手一般故障的检查及排除 ① 换向阀 S19 没有换向。应将电磁阀的电源...


电控发动机不能起动的故障诊断与排除(开题报告)

湖北汽车工业学院 Hubei Automotive Industries Institute 毕业论文开题报告 题目 ...元器件及外壳、接插件、 线束等都要求具备良好的抗振、耐高温、抗电磁干扰以及...


汽车线控转向系统开题报告

汽车线控技术 63页 免费 开题报告 8页 2下载券汽...汽车线控转向系统的研究》来源于湖北汽车工业学院汽车...武汉理工大学利用电磁施力器进行转向盘力 反馈,设计...


第五届飞思卡尔杯智能汽车竞赛决赛陕西理工学院-和磁共阵

湖北汽车工业学院电磁组... 30页 1下载券 智能车比赛--华中科技大... 26页...1.2、技术报告内容安排说明此技术文档的正文部分大致分为九个部分:第一章,引言...


PCB电磁兼容性设计报告

PCB 电磁兼容性设计报告 学科专业:测控技术与仪器 本科生:张亚新 学班号:20121002445 号:232121 指导教师:宋恒力 中国地质大学(武汉)自动化学院 2014 年 10 月...


第五届飞思卡尔杯智能汽车竞赛决赛阜阳师范学院-昔日同盟技术报告

第五届飞思卡尔杯智能汽车... 45页 2财富值如要...阜阳师范学院 昔日同盟队 FLySky 关于技术报告和研究...分赛区和全国总决赛的比赛规则相同,都具有电磁组、...

网站首页 | 网站地图
All rights reserved Powered by 简单学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com