电磁组 大连工业大学步行者 技术报告Word格式文档下载.docx
《电磁组 大连工业大学步行者 技术报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电磁组 大连工业大学步行者 技术报告Word格式文档下载.docx(39页珍藏版)》请在冰豆网上搜索。
本文将对电磁组的车进行详细的讲解。
在本届比赛上,智能汽车竞赛组委会为了提高全国大学生智能汽车竞赛创新性和趣味性,激发高校学生参与比赛的兴趣,提高学生的动手能力、创新能力和接受挑战能力,将电磁组比赛规定为车模直立行走。
车模直立行走比赛是要求仿照两轮自平衡电动车的行进模式,让车模以两个后轮驱动进行直立行走。
近年来,两轮自平衡电动车以其行走灵活、便利、节能等特点得到了很大的发展。
国内外有很多这方面的研究,也有相应的产品。
在电磁组比赛中,利用了原来C型车模双后轮驱动的特点,实现两轮自平衡行走。
1.1总体方案介绍
根据比赛规则要求,维持车模直立也许可以设计出很多的方案,本方案假设维持车模直立、运行的动力都来自于车模的两个后车轮。
后轮转动由两个直流电机驱动。
因此从控制角度来看,车模作为一个控制对象,它的控制输入量是两个电极的转动速度。
通过调节车模的倾角来实现车模速度控制,实际上最后还是演变成通过控制电机的转速来实现车轮速度的控制。
车模运动控制任务可以分解成以下三个基本控制任务:
(1)控制车模平衡:
通过控制两个电机正反向运动保持车模直立平衡状态;
(2)通过调节车模的倾角来实现车模速度控制,实际上最后还是演变成通过控制电机的转速来实现车轮速度的控制。
(3)控制车模方向:
通过控制两个电机之间的转动差速实现车模转向控制。
后面章节将会对这三个控制任务进行详细的讲解。
1.2章节介绍
第一章是引言部分,对比赛的背景意义与系统的总体方案进行简单的叙述。
第二章是直立行走基本原理部分。
第三章是机械结构与硬件的设计部分。
第四章是算法设计部分。
第五章是开发工具、调试制作过程的说明部分。
第六章是车模的技术参数说明。
第二章基本原理
第一章节里讲到车模运动控制任务可以分解成以下三个基本控制任务。
这三个三个分解后的任务各自独立进行控制。
由于最终都是对同一个控制对象(车模的电机)进行控制,所以它们之间存在着耦合。
为了方便分析,在分析其中之一时假设其它控制对象都已经达到稳定。
比如在速度控制时,需要车模已经能够保持直立控制;
在方向控制的时候,需要车模能够保持平衡和速度恒定;
同样,在车模平衡控制时,也需要速度和方向控制也已经达到平稳。
这三个任务中保持车模平衡是关键。
由于车模同时受到三种控制的影响,从车模平衡控制的角度来看,其它两个控制就成为它的干扰。
因此对车模速度、方向的控制应该尽量保持平滑,以减少对于平衡控制的干扰。
以速度调节为例,需要通过改变车模平衡控制中车模倾角设定值,从而改变车模实际倾斜角度。
为了避免影响车模平衡控制,这个车模倾角的改变需要非常缓慢的进行。
这一点将会在后面速度控制中进行详细讨论。
2.1车模平衡控制
世界上还没有任何一个天才杂技演员可以蒙着眼睛使得木棒在自己指尖上直立,因为没有了眼睛观察进行负反馈,当木棒在人的指尖上直立时,眼睛观察到木棒的倾斜角度和倾斜趋势(角速度),相应的通过人脑做出反应,使手掌移动以抵消木棒的倾斜角度和趋势,从而保持木棒的直立。
这就形成了反馈机制。
其反馈机制如图2.1
图2.1人保持木棒直立的反馈机制
车模平衡控制也是通过负反馈来实现的,与上面保持木棒直立比较则相对简单。
因为车模有两个轮子着地,车体只会在轮子滚动的方向上发生倾斜。
控制轮子转动,抵消在一个维度上倾斜的趋势便可以保持车体平衡了。
如图2.2所示。
图2.2通过车轮运动保持车模平衡
2.2车模速度控制
对于直立车模速度的控制相对于普通车模的速度控制则比较复杂。
由于在速度控制过程中需要始终保持车模的平衡,因此车模速度控制不能够直接通过改变电机转速来实现。
要实现对车模速度的控制,必须测量车模的实时速度,改变车模的倾角,以及如何根据速度误差控制车模倾角。
安装在电机输出轴上的光电编码器来测量得到车模的车轮速度。
通过给定车模直立控制的设定值,在角度控制调节下,车模将会自动维持在一个角度。
在车模直立控制下,为了能够有一个往前的倾斜角度,车轮需要往后运动,这样会引起车轮速度下降(因为车轮往负方向运动了)。
由于负反馈,使得车模往前倾角需要更大。
如此循环,车模很快就会倾倒。
原本利用负反馈进行速度控制反而成了“正”反馈。
如图2.3所示。
图2‐27车模倾角控制速度中的正反馈
车模的速度控制本质上是通过调节车模的倾角实现的,由于车模是一个非最小相位系统,因此该反馈控制如果比例和速度过大,很容易形成正反馈,使得车模失控,造成系统的不稳定性。
因此速度的调节过程需要非常缓慢和平滑。
2.3车模方向控制
实现车模方向控制是保证车模沿着竞赛道路比赛的关键。
直立车模所在的电磁组的道路中心线铺设有一根漆包线,里面通有100mA的20kHz交变电流。
因此在道路中心线周围产生一个交变磁场。
通过道路电磁中心线偏差检测与电机差动控制实现方向控制,从而进一步保证车模在赛道上。
将在下面分别进行介绍。
(1)道路电磁中心线的偏差检测
道路电磁中心线检测简单的方法可以通过安装在车模前方的两个电磁感应线圈实现。
线圈一般采用10mH的工字型电感。
(2)电机差动控制
利用电磁线偏差检测信号分别与车模速度控制信号进行加和减,形成左右轮差动控制电压,使得车模左右轮运行角速度不一致进而控制车模方向。
第三章机械机构及硬件电路的设计与实现
本章节主要对车模的设计制作及硬件电路进行介绍,软件控制算法进行系统的介绍。
3.1车模机械结构的安装
车模的机械部分是整辆小车的基础,它代表着硬件架构的稳定性,影响小车行驶的性能,其重要性为小车的所有方面之最。
一旦对其进行改动将会影响以后的设计,所以一开始一个良好的机械架构将会节省很多不必要的麻烦。
因此,车模的机械性能是我们最优先所考虑的问题。
为使小车能更稳定的上跑道,必须使小车的重心降得更低,这样是小车在转弯时不会出现甩尾,今年的车模是两轮着地,小车的质量主要是来之电池,所以将电池放的越低越好。
小车的整体效果图如图3.1所示。
图3.1小车整体效果图
3.1.1电磁传感器的安放
电磁传感器安放原则前瞻远,质量轻,宽度大。
我们选择3mm*2mm的碳纤维管作为传感器的固定支架。
碳纤维管质量轻,硬度高。
传感器所用的线圈一般采用10mH的工字型电感,由于市场上售的电感误差一般都较大,我们可以自己动手缠线圈。
电磁传感器的安放图如图3.2所示
图3.2电磁传感器安放图
3.1.2角度传感器和陀螺仪的安放
我们使用的是官方提供的现成模块,模块上将两者集成到一起,实物图如图3.3所示。
车模在运行过程中会有强烈的晃动,如果安放太高将会对角度传感器和陀螺仪产生很大的偏差,所以我们选择将其安放在车模的中心位置,这样振动小,敏感度也较高。
安装位置如图3.4所示
图3.4角度和陀螺仪的安放图
3.1.4PCB板的安放
陀螺仪和角度传感器用的是官方提供的现成模块,所以我们的PCB板相对往届较小,安放图如图3.5所示
图3.5PCB板安放图
3.1.5速度传感器的安装
测速模块才用增量式光电编码器,增量式编码器的安装于车的最后部分,考虑到齿轮的间隙,编码器的中心安装距赛道2.3cm,编码器的中心距后轮中心为2.7cm。
如图3.6所示:
图3.6编码器的安装图
3.2硬件电路的设计与实现
硬件上要做到稳定可靠,简洁高效。
本章节将对小车各模块的硬件电路进行详细的介绍。
3.2.1电路实现
整个智能车控制系统是由三部分组成的:
S12X为核心的最小系统板、电源模块、电机驱动电路板。
我们使用的是官方提供的S12X核心板的现成模块,这里就不对它进行详细的介绍,为了使小车更简洁轻巧,我们在主板上为最小系统板的预留好了插槽,将其他所有模块都做到主板上了。
其原理图见附件1,PCB板效果图3.8
图3.8PCB效果图
3.2.2电磁传感器的设计
考虑到电流的大小,方向和频率,依据经可靠、稳定、经济的要求,我们选择10mH的电感,然后进行选频、放大、滤波、检波;
其原理图如图3.9所示
图3.9电磁传感器原理图
通过选频的电磁信号经过LMV358进行运放放大处理,再经过滤波和检波处理直接送到单片机。
3.1.2电源稳压电路
图3.10稳压电路原理图
把电压为7.2V的电池经LM2940稳压后完成如下功能:
经过稳压芯片LM2940稳压后,输出5V电压以驱动单片机工作;
经过稳压芯片LM2940稳压后,输出5V电压以对传感器和光电编码器供电;
3.1.3电机驱动电路
我们采用BTS7960芯片作为电机驱动芯片。
BTS7960通路内阻为16m4,最大电流为43A,具有集成度高、外接电路少、内阻小等特点,因此,我们采用4片BTS7960芯片组成全桥驱动电路进行驱动。
BTS7960电路图如图3.1.3所示,
图3.1.3电机驱动原理图
3.1.5测速方案选择
速度采集是闭环控制系统中必不可少的环节。
为了使得车模能够平稳地沿着赛道运行,车速要与舵机配合,以保证车模在各种道路上性能稳定。
所以要实时检测当前车模速度,并根据车模在赛道上所处的情况来调整速度。
车速检测可用光电码盘、编码器、透射式光电检测和霍尔传感器检测等。
在实际运用中我们对这几种方式进行了比较发现编码器的精确度更高,因此最后我们采用了编码器对电极进行测速。
第四章软件算法的设计
4.1系统软件工作流程图
如图4.1所示,为系统软件整体结构框图,主要包括:
系统参数的手动调节;
电磁传感器;
角度传感器和陀螺仪模块;
路径控制模块;
电机控制模块。
图4.1系统软件工作流程图
系统接通电源后,经初始化;
通过系统参数的手动调节,使系统能够按照准确的设想方式运行;
然后通过电磁传感器采集数据和角度传感器及陀螺仪对车模与地面的角度及角速度角度的感知,经过相应处理得出当前赛道路径和车模的信息;
同时,电机测速模块测得模型车当前的运行速度,反馈给系统;
最后,经路径控制系统综合当前赛道路径信息和车模速度值作出相应的处理,来控制电机的运行。
第五章开发工具及安装调试过程
5.1开发工具介绍
Codewarrior是Metrowerks公司开发的软件集成开发环境(简称IDE)。
飞思卡尔所有系列的微控制器都可以在codewarriorIDE下进行软件开发【5】。
开发人员可以在不同的操作系统下使用codewarriorIDE来开发自己的软件。
这些操作系统包括Windows,Macintosh,Solaris,和Linux.IDE在不同操作系统下的界面完全相同。
IDE支持高级语言,比如:
C,C++,和Java。
另外还支持大多数微控制器的汇编语言。
它的开发环境界面统一,IDE支持许多通用的桌面或嵌入式处理器。
IDE的功能可以通过加入各种插件来扩展。
现在IDE支持的插件包括:
编译器,链接器,预先链接器,后链接器,常用的面板,版本控制以及其他工具。
插件可以让CodeWarriorIDE支持不同的语言和处理器。
在软件开发过程中,通常需要经过以下几个步骤:
•新建:
创建新项目,源文件;
•编辑:
按照一定的规则编辑源代码,注释;
•编译:
将源代码编译成机器码,同时还会检查语法错误和进行编译优化;
•链接:
将编译后的独立的模块链接成一个二进制可执行文件;
•调试:
对软件进行测试并发现错误;
在软件开发中,每个过程都会用到不同的工具。
如果每个工具都单独存在,这样就会给开发人员带来很多不便。
所以公司为开发人员提供了非常方便的集成开发环境。
开发人员可以在同一个工作平台上完成以上全部的工作。
第六章车模的技术参数
项目
参数
路径检测方法(赛题组)
电磁组
车模几何尺寸(长、宽、高)(毫米)
290、170、390
车模轴距/轮距(毫米)
车模平均电流(匀速行驶)(毫安)
1500
电路电容总量(微法)
800
传感器种类及个数
电磁传感器2个,编码器2个,角度传感器1个,陀螺仪1个
新增加伺服电机个数
赛道信息检测空间精度(毫米)
10
赛道信息检测频率(次/秒)
25
主要集成电路种类/数量
LMV358*1、74HC244*1、LM2940*2、CD4520*1、BTS7960B*4
车模重量(带有电池)(千克)
0.75
第七章结论
经过这个飞思卡尔比赛,感觉自己学到了很多,比赛是个很漫长的过程,让我学会了坚持不懈,对于我们电磁车,我觉得降低重心很重要,因为如果重心位置太高会容易引起侧翻,所以必须得降低重心,还有加速度传感器与陀螺仪必须也放下来,这样才能减少车模对它的震动,还有电磁传感器电容要贴近电感,这样才能减少分布电容对其影响。
开始准备制作小车到现在有了大半年的时间,参赛车队由三名本科生和两位指导老师构成,小组三人分工协作在老师的指导下,从对小车的一无所知到现在自己写程序、调硬件,最后小车慢慢的跑起来了。
在这个半年中我们曾因为程序迷茫过,也曾为小车的慢慢跑起来而喜悦。
我想说,“飞思卡尔,我要征服你”,这个过程中感觉不像是在和其他的车竞争,而是和自己在竞争,因为我们不知外界的情况是如何,我们只有不断地超越自己现在的速度,不断地去突破,才能使自己走的更远。
最后说句,飞思卡尔,谢谢你!
参考文献
[1]李仕伯,马旭,卓晴.基于磁场检测的寻线小车传感器布局研究.电子产品世界,2009(12),41-44
[2]张昊飏,马旭,卓晴.基于电磁场检测的寻线智能车设计.电子产品世界
[3]清华大学2队技术报告.//卓晴,黄开胜,邵贝贝.学做智能车.北京:
北航出版社,2007.3
[4].卓晴黄开胜邵贝贝,学做智能车[M],北京:
北京航空航天大学出版社,2007
[5].邵贝贝,单片机嵌入式应用的在线开发方法,北京:
清华大学出版社,2004
[6].FreescaleSemiconductor,Inc.MC9S12DG128DeviceUserGuide.
[7].童诗白,华成英.模拟电子技术基础[M].北京.高等教育出版社.2000
[8].刘敬忠,于玲.车辆侧滑与行车安全浅谈.江苏农机化.2006
[9].张葵葵,吴义虎.汽车急转侧滑的预防控制原理.现代制造工程.2006
[10].魏道高,李克强等.汽车前束值算法研究.农业机械学报.2006
附件1系统原理图
附件2程序算法
/****************************初始化*********************************/
#include"
main.h"
#defineucharunsignedchar
#defineuintunsignedint
intleftdianci,rightdianci,r=0;
//unsigned
unsignedintresult1,result2,w,k,y=0;
unsignedcharcelve=0;
unsignedintTimeCount=0;
intcarspeed,left,fcha1,fcha0,j=0,c,a;
uintzuixiaozhouqi=5;
//直立控制周期
floatgyroscope_rate=0,g,accelerometer_angle=0;
floatAcc_z=0,Gyro=0,t=0;
floatchajiao=0,fchajiao=0,speedold=0.0;
floatspeednew=0.0,speedout=0.0;
floatleftdc,rightdc,directionout,directionnew,directionold,sub,add;
floatajifen=0,m=0,n=0.0,sum,fi=0.0;
floatsiqu=10.0;
//电机死区
uintsuduzhouqi=100;
//速度控制周期
uintsuduzhouqicushu=20;
floatzhilifenduan=12;
floatpfenduan=3.8;
//待修改3.5
floatpfenduanzenyi=0.2;
//待修改0.2
floatdfenduan=60;
floatdfenduanzenyi=0.05;
intset=0;
floatlinyi=1332.0;
//陀螺仪零偏1656.
floatlinjiao=1399.0;
//加计零偏908.
floatp=2.0,d=0.25;
//p=2.0,d=0.28;
/
floatP=0.5,D=0.0,I=0.0;
//速度P=0.5,D=-0.2,I=0.05
floatPdirection=170.0,Ddirection=1100.0;
//方向Pdirection=175.0,Ddirection=660.0;
floatmotoroutr=0;
//右电机
floatmotoroutl=0;
//左电机
intmaichong;
uintdianci=0,ci=0;
uintdiancizhouqi=15;
floatg,g0;
uintsetsudu=40;
floatduan=50.0;
floatec;
floatweifend=0.0;
floatzhuanxianlingpian=1216.0;
floatzhuanxiangtlyi;
floatdiancizenyip=25.0,diancizenyid=90.0;
//diancizenyip=15.0,diancizenyid=100.0;
floatezenyi,eazenyi;
floatdiancip=75.0,diancid=400.0;
//diancip=120.0,diancid=390.0;
floatg1,g2,jiasudud=0.0;
/****************************设置总路线频率*********************************/
/****************************设置总路线频率*****l****************************/
voidSetBusCLK_64M(void)
{
CLKSEL=0X00;
//disengagePLLtosystem
PLLCTL_PLLON=1;
//turnonPLL
SYNR=0xc0|0x07;
REFDV=0x80|0x01;
POSTDIV=0x00;
//pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz;
_asm(nop);
//BUSCLOCK=64M
while(!
(CRGFLG_LOCK==1));
//whenpllissteady,thenuseit;
CLKSEL_PLLSEL=1;
//engagePLLtosystem;
}
/****************************初始化设备**************************************/
voidDeviceInit()
{
SetBusCLK_64M();
UART_Init();
voidDly_ms(unsignedintms)
unsignedinti,j;
for(i=0;
i<
ms;
i++)
for(j=0;
j<
20000;
j++);
voidAD_Init(void)
ATD0CTL0=0x07;
//06
ATD0CTL1=0x4f;
//TD005TD14fTD200td3a0td430
ATD0CTL2=0x40;
///*使能ATD模块正常清除标志,不是用外部出发*/
ATD0CTL3=0xc8;
//b890/*只转换一个通道*/
ATD0CTL4=0x05;
///*10位精度,12分频*/
ATD0CTL5=0x30;
//0x32/*右对齐,无符号,扫描模式,使用通道0*/从第3个通道开始
voidGet_AD(void)
ATD0STAT0_SCF);
/