第七届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告_第1页
第七届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告_第2页
第七届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告_第3页
第七届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告_第4页
第七届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

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

文档简介

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

智能汽车竞赛

技术报告

0

学校:电子科技大学

队伍名称:ZEUS

参赛队员:罗江波

严长国

严高俊

带队教师:田雨

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

本人完全了解第七届“飞思卡尔”杯全国大学生智能汽车邀

请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著

作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相

关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模

型车的视频、图像资料•,并将相关内容编纂收录在组委会出版论

文集中。

参赛队员签名:罗江波

严长国

严高俊

带队教师签名:田雨

日期:OL

-2-

14日

目录

第一章引言错误!未定义书签。

1.1大赛介绍•1•

1.2系统设计框架介绍-2-

第二章智能车机械结构调整与优化错误!未定义书签。

2.1智能车参数要求-5-

2.2智能车整体参数调校-5-

2.3编码器安装-7-

2.4陀螺仪与加速度计安装错误!未定义书签。

第三章硬件电路设计说明-11-

3.1单片机最小系统模块-11-

3.2传感器模块-12-

3.3电机模块错误!未定义书签。

3.4测试模块-14-

3.5陀螺仪与加速度计模块-15-

3.6人机交互模块-16-

第四章智能车控制软件设计说明-17-

4.1巡线原理-11-

4.2控制算法-12-

4.3软件系统设计及实现错误!未定义书签。

4.4偏差获取-14-

第五章系统调试-26-

第六章车辆主要参数-28-

第七章总结-30-

参考文献-30-

附录:部分程序源代码-32-

-4-

第一章引言

1.1大赛介绍

为加强大学生实践、创新能力和团队精神的培养,促进高等教育

教学改革,受教育部高等教育司委托(教高司函[2005]201号文,附件

1),由教育部高等自动化专业教学指导分委员会(以下简称自动化分

教指委)主办全国大学生智能汽车竞赛。该竞赛以智能汽车为研究对

象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践

活动,是教育部倡导的大学生科技竞赛之一。该竞赛以“立足培养,

重在参与,鼓励探索,追求卓越”为指导思想,旨在促进高等学校素

质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新

意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系

实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而

出创造条件。

该竞赛由竞赛秘书处为各参赛队提供/购置规定范围内的标准硬

软件技术平台,竞赛过程包括理论设计、实际制作、整车调试、现场

比赛等环节,要求学生组成团队,协同工作,初步体会一个工程性的

研究开发项目从设计到实现的全过程。该竞赛融科学性、趣味性和观

赏性为一体,是以迅猛发展、前景广阔的汽车电子为背景,涵盖自动

控制、模式识别、传感技术、电子、电气、计算机、机械与汽车等多

第七届全国大学生智能汽车竞赛技术报告

学科专业的创意性比赛。该竞赛规则透明,评价标准客观,坚持公开、

公平、公正的原则,保证竞赛向健康、普及,持续的方向发展。

该竞赛以飞思卡尔半导体公司为协办方,得到了教育部相关领

导、飞思卡尔公司领导与各高校师生的高度评价,已发展成全国30

个省市自治区近300所高校广泛参与的全国大学生智能汽车竞赛。

2008年起被教育部批准列入国家教学质量与教学改革工程资助项目

中科技人文竞赛之一(教高函[2007]30号文)。

全国大学生智能汽车竞赛原则上由全国有自动化专业的高等学

校(包括港、澳地区的高校)参赛。竞赛首先在各个分赛区进行报名、

预赛,各分赛区的优胜队将参加全国总决赛。

本次比赛分为光电、摄像头和电磁三个赛题组,在车模中使用透

镜成像进行道路检测方法属于摄像头赛题组,使用电磁信号巡线属于

电磁赛题组,除此之外则属于光电赛题组。本论文主要介绍电磁赛题

组的智能车制作。

1.2系统设计框架介绍

系统是以检测电磁场信号为基础,通过单片机处理信号实现对车

体控制,实现车体能够准确沿着预设路径寻迹。系统电路部分需要

包括单片机控制单元、电机驱动电路、陀螺仪与加速度计电路、电

-2-

第七届全国大学生智能汽车竞赛技术报告

磁传感器电路等部分,除此之外系统还需要一些外部设备,例如编

码器测速、直流电机驱动车体和控制车体方向。综上所述,本智能

车系统包含了以下几个模块:

1.电源模块

2.单片机最小系统模块

3.传感器模块

4.电机模块

5.陀螺仪与加速度计模块

6.测速模块

7.人机交互模块

系统的整体模块如图121所示:

第七届全国大学生智能汽车竞赛技术报告

图1.2.1系统框架图

-4-

第二章智能车机械结构调整与优化

2.1智能车参数要求

1.车模尺寸要求:车模尺寸宽度不超过250mm,长度没有限制,比

赛过程中长度不得发生改变。

2.传感器数量要求:传感器数量不超过16个:磁场传感器在同一位

置可以有不同方向传感器,计为一个传感器。

3.电机型号:RN260-CN38-18130

4.全部电容容量和不得超过2000微法;电容最高充电电压不得超过

25伏。

2.2智能车整体参数调校

智能车的整体参数,包括车体重心、高度、传感器排布方式等,

都对整个智能车系统的稳定运行起着至关重要的作用。因此,对智

能车机械系统的调节,有助于小车更快更稳定的运行。

小车的布局以精简、可靠、稳定为前提,通过对小车的布局,尽

量保证小车左右平衡,以及寻找一个合适的重心,保证小车既能稳

定快速前进,又能在转弯时流畅。电磁组车模如图221所示

-5-

第七届全国大学生智能汽车竞赛技术报告

图221车模示意图

车模运行状态如图222所示

(4;r,向

I原表的转向

[拘没疗用.

n可以去除掉

图221车模示意图

-6-

智能车机械结构调整与优化

2.3编码器安装

选用可以3.3V工作电压的光电编码器进行速度的测量。根据光

电编码器的形状,我们自制了一个支架,速度传感器用螺钉通过支

架固定在后轮支架上,这样固定好之后,就有了较高的稳定性。然

后调节编码器齿轮,使其与差速齿轮紧密咬合,增大测速的精确性,

但是咬合过紧也增大了摩擦,减小了对电机做功的利用率,影响小

车的快速行驶,因此减小摩擦同时增强齿轮间的咬合是我们主要考

虑的因素。编码器安装示意图如图241所示:

第七届全国大学生智能汽车竞赛技术报告

图2.4.1编码器安装示意图

2.4陀螺仪与加速度传感器安装

本次设计中陀螺仪采用的是村田公司的ENC-03系列的陀螺仪。

智能车在行进过程中,车体仅绕两后轮的轴心线做转动。芯片外观

是长方形的,安装时,应注意将长的一边与后轮轴心线平行。此外,

还应注意的是,陀螺仪的输出受温度的影响比较大,为避免环境温

度变化对输出的影响,我们将陀螺仪和加速度计作为一个单独的模

块。

-8-

智能车机械结构调整与优化

与陀螺仪一样,加速度传感器的性能与安放位置也有很大的关

系。加速度传感器是根据其XYZ轴上的模拟输出电压来确定车身的

倾角。由于我们测量的倾角只有一个,所以可以使用Z轴的输出来

计算,当小车倾角为。时一,Z轴对应的面应该处于水平。

图2.5ENC-03陀螺仪与加速度计

第七届全国大学生智能汽车竞赛技术报告

-10-

第三章硬件电路设计说明

本智能车硬件系统以稳定为设计的原则,在有限的条件下做到

最好。单片机采用MCF52259。AMS1117-3.3产生的3.3V电压单独

为单片机供电,再使用一片AMS1117-3.3为陀螺仪和加速度计、蓝

牙串口供电,使用LM2940-5为传感器供电,电机驱动使用芯片

BTS7970o调试过程中,采用OLED、蓝牙等模块辅助,方便小车的

调试。本章均有详细介绍。

3.1单片机最小系统模块

以MCF2259为核心的单片机最小系统是本智能车的核心。

wH誉

d装

一A

«•

一§

运§

整B

-H

-11-

第七届全国大学生智能汽车竞赛技术报告

图3.1.1主板电路

3.2传感器模块

传感器是电磁组小车最重要的模块之一,能够对变化的磁场信

号作出灵敏的检测,对道路状况的检测起着至关重要的作用。本系

统根据LC谐振的原理,选取lOmH电感和6.8nF电容作为LC谐振

电路,产生感应电流,再通过滤波、放大、检波,然后将结果送入

单片机AD进行相应的处理,以判断赛道当前信息。如图3.2.1所示。

图3.2.1

传感器的排布,直接影响了对磁场的敏感程度。

直导线磁场分布交

叉导线磁场分布

-12-

硬件电路设计说明

图3.2.2赛道磁场分布

第七届全国大学生智能汽车竞赛技术报告

图3.2.3传感器排布方案

如图所示,根据左右两水平电感的差值来判断赛道信息。

3.3电机模块

电机采用芯片BTS7970,其应用非常简单,只需要向芯片第2引

脚输入PWM波就能控制。当系统中只需要单向控制时,只需要让电

机一端接地,另一端接BTS7960第4弓|脚。如果需要电机双向旋转

控制,则需要另一片BTS7960共同组成全桥。由于小车使用双电机,

所以我们使用4片BTS7970构成两个全桥分别控制两个电机。

-14-

硬件电路设计说明

图341电机驱动电路

3.4测速模块

本小车使用光电编码器进行小车的测速,并由AMS1117-3.3为

其提供3.3V工作电压。光电编码器输出5%-85%VCC的方波信号。

这种测试方式电路较为复杂,需要增加外围电路,但相对于其带来

的,测量精度的提高和测量稳定性的提高而言,终究利大于弊。

3.5陀螺仪与加速度计模块

我们采用AMS1117为陀螺仪(ENC-03MB)和加速度计

(MMA7361)提供3.3V的工作电压。由于陀螺仪数据手册上的

输出有过冲,不利于积分,我们采用官方提供的电路。

第七届全国大学生智能汽车竞赛技术报告

3.5.1陀螺仪电路

3.5.2加速度计电路

3.6人机交互模块

为了方便调试,本车有蓝牙模块,有效进行运行参数之间的传

送,除此之外,还设置了键盘、液晶显示屏,以方便控制参数的修

改,便捷的智能车的调试。

-16-

第四章智能车控制软件设计说明

4.1巡线原理

比赛中存在两种磁场:一种是用来作为起跑线的永磁铁产生的固

定磁场,用于标识终点;一种是赛道中通过100mA交变电流的导线

所产生的电磁场,用于赛道识别。由于本届电磁不需在终点处停车,

所以不必考虑第一种磁场。而后者可选取原理简单、价格便宜、体

积小(相对小)、频率响应快、电路实现简单电磁感应线圈作为传感

器。交流电信号产生交变磁场,交变磁场在电感线圈中产生与磁场

强度相关的电流。

由于本届电磁为立着跑,速度相对往年来说比价慢,我们只采

用了水平双电感,通过两者感应值之差来来控制电机的转速,从而

控制小车的前进方向。

4.2控制算法

智能车的控制包主要是电机控制。具体的控制算法有PID控制、

bang-bang算法控制和模糊控制。

4.2.1PID控制

PID控制是工业过程控制中历史最悠久,生命力最强的控制方

式。这主要是因为这种控制方式具有直观、实现简单和鲁棒性能好

等一系列的优点。PID控制主要有三部分组成,比例、积分、微分。

比例控制是一种最简单的控制方式。其控制器的输出与输入误差信

-17-

智能车控制软件设计说明

号成比例关系。偏差一旦产生,调节器立即产生控制作用使被控量

朝着减小偏差的方向变化,控制作用的强弱取决于KP。当仅有比例

控制时系统输出存在稳态误差(Steady-stateerror)o

为了消除稳态误差,引入积分控制。积分项对误差取决于时间

的积分,随着时间的增加,积分项会增大。这样,即便误差很小,

积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳

态误差进一步减小,直到等于零。

为了预测预测误差变化的趋势,引入微分的控制器,这样就能

够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被

控量的严重超调。

PID控制框图如下图所示

-18-

第七届全国大学生智能汽车竞赛技术报告

对应的误差传递函数为:

U(s)/E(s)=Kp(l+l/Ti+Td)

式中,Kp为比例增益;Ti为积分时间常数;Td为微分时间

常数;U(s)为控制量;E(s)为被控量与设定值R(s)的偏差。

”(f)=Kp「e(f)+JfeQ)df+7;苧]

时域表达式为L1“山」(式一)

在单片机中,我们仅能对数字信号处理,即数字PID控制。将上式

离散化,得错误!未找到引用源。(式二)

A.位置式PID算法

直接利用上述离散化公式计算,框图如右图所示。由于积分项

(Pi)是将所有采集值偏差相加,在

一段时间后会很浪费单片机资源。对其稍加改进,

得到增量型PID算法。

智能车控制软件设计说明

B.增量式PID算法

根据式二得第k-1个采样周期的控制量为

错误!未找到引用源。(式三)

式二减式三得

错误!未找到引用源。(式四)

由此,第k个采样时刻实际控制量为错误!未找到引用源。,为方便

书写,写为

错误!未找到引用源。(式五)

其中,错误!未找到引用源。

<?1=-KpU+-y-)

由上可知,利用三个历史数据,递推使用,

即可完成PID控制量。框图如右图所示:

4.2.2模糊控制

一般控制系统包含了五个主要部分,即:定义

变量、模糊化、知识库、逻辑判断及反模糊

化,底下将就每一部分做简单的说明:

(1)定义变量:也就是决定程序被观察的状

-20-

第七届全国大学生智能汽车竞赛技术报告

况及考虑控制的动作,例如在一般控制问题上,输入变量有

输出误差E与输出误差之变化率CE,而控制变量则为下一

个状态之输入U。其中E、CE、U统称为模糊变量。

(2)模糊化(fuzzify):将输入值以适当的比例转换到论域的

数值,利用口语化变量来描述测量物理量的过程,依适合的

语言值(linguisitcvalue)求该值相对之隶属度,此口语

化变量我们称之为模糊子集合(fuzzysubsets)o

(3)知识库:包括数据库(database)与规则库(rulebase)

两部分,其中数据库是提供处理模糊数据之相关定义;而规

则库则藉由一群语言控制规则描述控制目标和策略。

(4)逻辑判断:模仿人类下判断时的模糊概念,运用模糊逻辑和

模糊推论法进行推论,而得到模糊控制讯号。此部分是模糊

控制器的精髓所在。

(5)解模糊化(defuzzify):将推论所得到的模糊值转换为明

确的控制讯号,做为系统的输入值。

模糊算法可以解决一些非线性问题,将赛道分为直线、入大小弯、

出大小弯、蛇形弯道,对应的直线加速、入大弯减速转方向、入小

弯制动转方向、出弯加速、蛇形弯道直接通过(若可以达到这种前

智能车控制软件设计说明

瞻性)。要达到这种控制要通过实际检测,分析大量赛道磁场信息,

找出它们的特征。

4.2.3总结

虽然模糊控制可以较好解决一些非线性问题,但控制复杂,实际

调试中较PID控制无明显优势,所以我们采用PID控制。电机控制

为增量式PID,由于给定速度频繁变化,采用微分先行PID,使电机

能够快速响应。

4.3.软件系统设计及实现

软件运行需要配置单片机各个模块寄存器数值,使单片机各个模

块正常工作。初始化中包括:单片机时钟配置、I/O口配置、PWM

模块配置、A/D模块配置、RTI实时中断配置、脉冲捕捉模块配置。

当初始化完毕后,进入跑车程序:对传感器输入信号进行采样,当

完成一次采样后将采样值映射成车相对于跑道的位置,根据当前与

过去位置决定舵机转角和电机速度,通过改变PWM模块内部寄存

器数值可以得到不同占空比的方波信号,实现对舵机和电机的调节。

软件整体流程如下图所示:

-22-

第七届全国大学生智能汽车竞赛技术报告

开始

模块初始化

输入参数一I

1——J——否

卷入跑车程定〉—

4

开中断

读取编码器的值,

计算速度

偏差计算

I.I

采集AD值

电机控制

赛车调试上述算法参数的获取必须通过实际的测量,赛道信息

的获取我们打算用蓝牙蓝传送数据。利用蓝牙串口模块,将所需数

据发回PC机,通过MATLAB仿真分析偏差变化,对数据进行处理

得到赛道信息,从而调整参数使之达到最佳值。

4.4偏差获取

智能车控制软件设计说明

传感器感应值与距离导线距离成负相关关系,四个传感器感应值

与小车距离导线偏差之间关系图像如下图所示:

传感器特性曲线图

2500

6oo

OOO

50

偏差

将数据导入MATLAB中进行传感器到偏差的映射计算,得到偏差计

算公式

err=0.0360*(sensor0-sensor?)+0.0029*(sensor3-sensor4);

将计算值与实际值比较,可得

-24-

第七届全国大学生智能汽车竞赛技术报告

第五章系统调试

开发工具使用的是大赛组委会提图的Codewarrior5.0开发环境,如

图5.1.1所示。它能够为单片机MCF52259提供与之配套的应用程序

开发模块。在目标程序的下载方面,通过BDM与单片机之间的连接

下载程序。在调试方面,使用了MCF52259的串口,利用串口线将

MCF52259和PC的串口相连,使用串口调试工具或PC的超级终端进

行程序的调试。使用AltiumDesigner设计硬件电路。

FreesualeCodeWarrior-[init.c]

-I:cEditSc?JrchProjectProce-ss.orExper*V7ir»du,,DQ

xc//A

St.aCLKsEL-O^Oo;

PLLcTLFILoN-1

|LinJcOrder*|T<•SYNR-OxDB;

REFDVIoXO8;

SI1vOoo

D-X-

W«n0P»:

TnP

blvi«tooth.csme?0;

il<CRGF工G8K

blvielootX-hEL-

Ks1ELsE工;

Hait■-曰

inith

input.,e

inpuths101i.uvoxdpoart(voId)

Jc・y.c'DDRA-Oxcf;.网—:fcT

k«y.h

PORTA-Ox££.

DDRB-Oxel;"Ba+TMT坨仃

DDRE=Oxff;//led

IRQCR_IRQEN-0;“PE中断谕止

DDRJ-Oacf£.

selectcar.hDDRS-Oxff;

SetPscrameter-cPORTB«Ox7f;

S«tPwn*terKDDRJ-Oxff.PTJ-0x£f;心f/L快育/

speedpid.cDDRk«=Oxff,FORTK-Oxff,

sp««dpidK1U-b.1-0x7f;PTT-Oxff;PERT-Oxff;

cs.cDDRM-Oxff;PTM-Oxf£;

tactics.KDDRF-Oxff,PTF-0x7f,

d0t■1>•«0cDDRH=0xff;PTH=0xff;

(■»!XncludesECLKCTL|-OxcO;^/Dxsabl®ECLKoutput

.f1Proj«ctS«ttin<s

■[*.C3LibxvoadPWM(void)

图5.1.1

-26-

第七届全国大学生智能汽车竞赛技术报告

第六章车辆主要参数

车模主要参数名称参数

车模重量0.835kg

车模长度45cm

车模宽度24.5cm

车模高度23cm

传感器种类及数量电感*2、陀螺仪*1、加速度计*1、编

码器*2

电路电容总量1950uf

赛道信息检测频率500次/秒

赛道信息检测精度5mm

-28-

第七届全国大学生智能汽车竞赛技术报告

第七章总结

虽然这是电磁组第三届比赛,并经过这么长时间的调试,但依

然存在的问题还很多,下面我们想说说存在的问题及改进方向。

首先,电磁传感器的方案中,输出电压与输入的磁场强度不成

正比,这导致了测量时存在误差,可以采用补偿的方法加以消除,

可以进行硬件和软件的补偿,硬件上用高精度电感电容电阻,相对

应的电感和电容尽量接近,软件上滤波。还有一点就是前瞻问题,

由于不限车长,但前瞻依然无法做到很大,因为传感器过长的话,

前端一点点的晃动,对小车的直立都会有很大的影响。

然后,由电磁传感器测得的电压来计算相对偏移量的算法中,

可以大幅改进,根据理论推导和实验测得数据,开发更稳定、更精

确地算法,如拟合直线,二次曲线等方法,更精确的得出相对位置

的大小。而采用模糊控制也是一种很好处理非线性问题的解决方法。

最后C车模的电机性能比较差和功率较小,一对新的电机调

试几天后,性能明显下降,各种参数有很大的变动,不得不更换新

的电机,影响调车的进度。由于功率较小,使小车的过弯速度受到

比较大的限制,从而影响小车的整体速度。可以采用功率比较大的

电机来代替目前的电机,使小车的转弯性能得到提高。

从2月开始做智能车开始到现在,我们把所学的理论知识化为

实际,增强了实践动手能力,加深了对理论知识的理解。并接触了

很多新的知识,拓宽了视野。在感谢比赛组委会为我们搭建这样一

个平台的同时,我们还特别感激我们学校和学院里一直支持和关注

智能车比赛的领导以及老师。

参考文献

[1]邵贝贝.嵌入式实时操作系统[LC/OS-II(第2版)[M].北

京.清华大学出版社.2004

-30-

第七届全国大学生智能汽车竞赛技术报告

[2]谭浩强,C语言程序设计[M].清华大学出版社,2006.1

[3]新型PID控制及其应用2002年作者:陶永华主编

[4]周金萍等《MATLAB6.5实践与提高》,中国电力出版社

[5]MC33886TechnicalData,FreescaleSemiconductorJuly

2005.

[6]卓晴.基于电磁引导的智能车控制算法

[7]RamonPallas-Areny,JohnG.Webster,传感器和信号调节

(第二版)[M].北京:清华大学出版社,2003.

附录:部分程序源代码

#include"alldefine.h"

#include"carsub.h"

#include"support_common.h"/*includeperipheraldeclarationsand

more*/

#include"UART.h"

#include"Debug.h"

//#definefilter〃滤波调试开关

voidmain(void)

(

unsignedcharArray[8]={0},Rcvbuf[2]={0};

inti=0;

staticfloatsend1[8];

staticinttemp_r=0;

#ifdeffilter

UartInit(0,80,9600,0);//蓝牙串口初始化,注意调整波特率

#else

UartInit(0,80/15200,0);〃蓝牙串口初始化,注意调整波特率

#endif

All_init();

-32-

第七届全国大学生智能汽车竞赛技术报告

CardebugO;

for(;;)

(

//MCF_GPIO_PORTNQI:

MCF_GPIO_PORTNQ_PORTNQ1;

CheckCarStand();

somesets();〃相关参数设置

#ifndeffilter

if((temp_rec=:

l)&&(!((g_fCarAngle>MAXERRANGLE)ll(g_fCarAngle<MINER

RANGLE)ll(g_LoseLineFlag==l)ll(!L_flag))))

(

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

(

UartSendl(O,send[i]);

)

temp_rec=0;

)

#else

if(temp_r==0)

智能车控制软件设计说明

sendl[O]=g_fCarAngle;

sendl[l]=g_foriginal_angle;

send1⑵=VOLTAGE_RIGHT;

send1[3]=g_fSpeedControlOut*100;

send1[4]=g_fAngleControlOut*100;

send1[5]=g_fDirectionControlOut*100;

send1[6]=g_fLeftMotorOut*100;

send1[7]=g_fRightMotorOut*100;

temp_r=1;

)

if((temp_r=:

1))//&&(!((g_fCarAngle>30)ll(g_fCarAngle<-50)ll(g_LoseLineFlag

==l)ll(!L_flag))))

|

UartSendl(0,Oxfl);

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

(

UartSendl(O,(int8)sendl[i]);

-34-

第七届全国大学生智能汽车竞赛技术报告

UartSendl(O,(int8)((int)sendl[ij»8));

)

UartSendl(O,0xf2);

temp_r=0;

)

#endif

)

)

#definecarsub_global

#include"UART.h"

#include"Debug.h"

#include"stdio.h"

#include"carsub.h"

#include"support_common.h"

#include"math.h"

voidCarSublnit(void)//各全局变量初始化

(

inti;

L_flag=0;

智能车控制软件设计说明

temp_rec=0;

g_nDirection_Selflag=1;〃默认选择电磁传感器

g_SensorChooseFlag=1;〃传感器切换标志

g_StartCount=0;//起步计数

g_nStartSpeed=20;

g_nStartTime=3;

g_nSpeedMax_Int=15;

g_ntempcount=0;

g_timecount=0;

g_fLeftMotorOut=0;〃左轮电机输出

g_fRightMotorOut=0;//右轮电机输出

g_fAngleControlOut=0;//角度输出控制量

g_fSpeedControlOut=0;//速度控制输出量

g_fDirectionControlOut=0;〃方向控制输出量

g_nLeftMotorPulseSigma=0;

g_nRightMotorPulseSigma=0;

count=0;〃脉冲计数

g_fCarSpeed=0;

g_nSpeedControlPeriod=0;

-36-

第七届全国大学生智能汽车竞赛技术报告

g_nCarSpeedSet=34;//期望速度!!!!!!!!!!!!!

g_nCarSpeedSet_temp=g_nCarSpeedSet;

g_fSpeedControlIntegral=0;

g_fSpeedControlOutOld=0;

g_fSpeedControlOutNew=0;

//重要参数

g_fSPEED_CONTROL_P=0.95;//速度P参数

g_fSPEED_CONTROL_P_temp=g_fSPEED_CONTROL_P;

g_fSPEED_CONTROL_I=0.0077;//0.0477;〃速度I参数

g_fSPEED_CONTROL_D=0;

g_ANGLE_CONTROL_P=0.2088;//0.26//角度P参数

g_ANGLE_CONTROL_D=0.3030;〃0.00345〃角度D参数

g_ANGLE_CONTROL_I=0.00000;//角度I参数

g_fDIRECTION_CONTROL_P=0.0812;//方向P参数

g_fDIRECTION_CONTROL_D=1.5700;

g_fDIRECTION_CONTROL_I=0.0;

//重要参数

智能车控制软件设计说明

g_fLeftVoltageSigma1=0;

g_fRightVbltageSigmal=0;

g_nDirectionControlPeriod=0;

g_nDirectionControlFlag=1;〃改为0则关掉方向控制

g_nAngleControlFlag=0;

g_fDirectionControlOutOld=0;

g_fLeftRightSub_old=0;

g_fDirectionControlOutNew=0;

g_fDirection_add45min_L=10000;//先赋一个较大的值,以便

初始化时修改

g_fDirection_add45min_R=10000;

g_fDirection_sub18max=-10000;//先赋一个较小的值,以便初

始化时修改

g_fDirection_subl8min=10000;

-38-

第七届全国大学生智能汽车竞赛技术报告

g_nSpeedControlFlag=0;

//

g_fgyroscopestandard=1967;

g_fanglezstandard=1790;//31482868//2970

g_fGyroscopeAngleIntegral=0;

g_nInputVoltageCount=0;

g_nADresult=0;

g_fangleratio=0.1363;

g_cmeumselectnew=0;

g_ckeyvalue=0;

g_nCurveFlag=0;

g_BeepEnableFlag=0;

g_StraitEnableFlag=0;

g_CurveIntFlag=0;

g_StraightAddTime=99;

g_AddSpdPeriod=50;

智能车控制软件设计说明

g_AddSpdPeriod2=50;

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

(

g_lnInputVbltageSigma[iJ=O;

g_nInputVoltage[i]=0;

)

)

voidDelaylOus(void)

(

intii;

for(ii=0;ii<200;ii++)

(

)

)

voidMotorOutput(void)〃电机输出函数

floatfLeft,fRight;

-40-

第七届全国大学生智能汽车竞赛技术报告

staticuint32i,Temp_count=0;

Temp_count++;

if((int)g_nCarSpeedSet_temp==5)〃方向调试

(

fRight=g_fDirectionControlOut+g_fAngleControlOut;

fLeft=-g_fDirectionControlOut+g_fAngleControlOut;

)

elseif(((int)g_nCarSpeedSet_temp==

6)ll((int)g_nCarSpeedSet_temp==7))//6直立调试,7速度闭环

(

fRight=g_fAngleControlOut;

fLeft=g_fAngleControlOut;

)

else〃正常情况

(

fRight=g_fAngleControlOut+g_fDirectionControlOut;

fLeft=g_fAngleControlOut-g_fDirectionControlOut;

/*if(Temp_count%10==0)

智能车控制软件设计说明

if(!((g_fCarAngle>40)ll(g_fCarAngle<-40)ll(g_LoseLineFlag==

DH(L_flag==0)))

(

for(i=(RECORD_PAGENUM*24-2);i>0;i-=2)

|

g_err_rec[i+l]=g_err_rec[i-l];

g_err_rec[i]=g_err_rec[i-2];

)

g_err_rec[OJ=g_fAngleControlOut*100;

g_err_rec[l]=g_fDirectionControlOut*100;

)

}*/

if((ABS(fRight)>l)ll(ABS(fLeft)>l))

(

BEEP_ON;

if((ABS(g_fDirectionControlOut)>=0.4)&&(ABS(g_fAngleCont

rolOut)>=0.6))

-42-

第七届全国大学生智能汽车竞赛技术报告

g_fDirectionControlOut=

(float)(0.4*g_fDirectionControlOut/(ABS(g_fDirectionControlOut))

);

g_fAngleControlOut=

(float)(0.6*g_fAngleControlOut/(ABS(g_fAngleControlOut)));

)

elseif((ABS(g_fDirectionControlOut)>=0.4))

|

g_fDirectionControlOut=

(l-ABS(g_fAngleControlOut))*g_fDirectionControlOut/(ABS(g_fD

irectionControlOut));

)

elseif((ABS(g_fAngleControlOut)>=0.6))

(

g_fAngleControlOut=

(l-ABS(g_fDirectionControlOut))*g_fAngleControlOut/(ABS(g_fA

ngleControlOut));

)

fRight=g_fAngleControlOut+g_fDirectionControlOut;

fLeft=g_fAngleControlOut-g_fDirectionControlOut;

智能车控制软件设计说明

else

(

BEEP_OFF;

)

g_fRightMotorOut=fRight;

g_fLeftMotorOut=fLeft;

if<(g_fCarAngle>MAXERRANGLE)ll(g_fCarAngle<MINERRA

NGLE)ll(g_LoseLineFlag==1))

(

g_fRightMotorOut=0;

g_fLeftMotorOut=0;

)

if(g_fLeftMotorOut>MOTOR_OUT_MAX)

g_fLeftMotorOut=MOTOR_OUT_MAX;〃输出限幅

if(g_fLeftMotorOut<MOTOR_OUT_MIN)g_fLeftMotorOut=

MOTOR_OUT_MIN;

-44-

第七届全国大学生智能汽车竞赛技术报告

if(g_fRightMotorOut>MOTOR_OUT_MAX)

g_fRightMotorOut=MOTOR_OUT_MAX;

if(g_fRightMotorOut<MOTOR_OUT_MIN)

g_fRightMotorOut=MOTOR_OUT_MIN;

SetMotorVoltage();

)

voidSetMotorVoltage(void)//PWM输出函数

(

#definenPeriod255

uint8nOut;

if(g_fLeftMotorOut>0){〃左轮正转(注意校正左右轮)

MCF_PWM_PWMDTY(O)=0;〃反转清零

nOut=(uint8)(g_fLeftMotorOut*nPeriod);

MCF_PWM_PWMDTY(2)=nOut;

}else{〃左轮反转

MCF_PWM_PWMDTY(2)=0;//正转清零

nOut=(uint8)(-g_fLeftMotorOut*nPeriod);

MCF_PWM_PWMDTY(O)=nOut;

)

智能车控制软件设计说明

if(g_fRightMotorOut>0){〃右轮正转

MCF_PWM_PWMDTY(1)=0;//反转清零

if((g_fRightMotorOut*nPeriod)>255)

nOut=255;

else

nOut=(uint8)(g_fRightMotorOut*nPeriod);

MCF_PWM_PWMDTY(3)=nOut;//+10右轮补偿

}else{〃右轮反转

MCF_PWM_PWMDTY(3)=0;〃正转清零

if((-g_fRightMotorOut*nPeriod)>255)

nOut=255;

else

nOut=(uint8)(-g_fRightMotorOut*nPeriod);

MCF_PWM_PWMDTY(1)=nOut;

voidPWMJnit(void)//PWM模块初始化

-46-

第七届全国大学生智能汽车竞赛技术报告

MCF_GPIO_PUAPAR&=Ox3f;〃驱动芯片使能3

MCF_GPIO_PNQPAR&=Ox3fff;〃驱动芯片使能7

MCF_GPIO_DDRUA1=0x08;

MCF_GPIO_DDRNQ1=0x80;

MCF_GPIO_PORTUAl=MCF_GPIO_PORTUA_PORTUA3;

MCF_GPIO_PORTNQ1=0x80;

MCF_GPIO_PTCPAR=MCF_GPIO_PTCPAR_DTINO_PWMO

IMCF_GPIO_PTCPAR_DTIN1_PWM2;

MCF_GPIO_PTAPAR=MCF_GPIO_PTAPAR」COCO_PWM1

IMCF_GPIO_PTAPAR_1COC1_PWM3;

MCF_PWM_PWMPOL=MCF_PWM_PWMPOL_PPOLO//设置

高电平开始

IMCF_PWM_PWMPOL_PPOL1

IMCF_PWM_PWMPOL_PPOL2

IMCF_PWM_PWMPOL_PPOL3

IMCF_PWM_PWMPOL_PPOL4

IMCF_PWM_PWMPOL_PPOL5

IMCFPWMPWMPOLPPOL6

智能车控制软件设计说明

IMCF_PWM_PWMPOL_PPOL7;

MCF_PWM_PWMCLK=MCF_PWM_PWMCLK_PCLKO//选

择时钟SA

IMCF_PWM_PWMCLK_PCLK1〃选择时钟SA

IMCF_PWM_PWMCLK_PCLK2〃选择时钟SB

IMCF_PWM_PWMCLK_PCLK3〃选择时钟SB

IMCF_PWM_PWMCLK_PCLK4〃选择时钟SA

IMCF_PWM_PWMCLK_PCLK5〃选择时钟SA

IMCF_PWM_PWMCLK_PCLK6〃选择时钟SB

IMCF_PWM_PW

温馨提示

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

最新文档

评论

0/150

提交评论