飞思卡尔智能车电磁组技术报告.docx

上传人:b****3 文档编号:3655449 上传时间:2022-11-24 格式:DOCX 页数:37 大小:604.61KB
下载 相关 举报
飞思卡尔智能车电磁组技术报告.docx_第1页
第1页 / 共37页
飞思卡尔智能车电磁组技术报告.docx_第2页
第2页 / 共37页
飞思卡尔智能车电磁组技术报告.docx_第3页
第3页 / 共37页
飞思卡尔智能车电磁组技术报告.docx_第4页
第4页 / 共37页
飞思卡尔智能车电磁组技术报告.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

飞思卡尔智能车电磁组技术报告.docx

《飞思卡尔智能车电磁组技术报告.docx》由会员分享,可在线阅读,更多相关《飞思卡尔智能车电磁组技术报告.docx(37页珍藏版)》请在冰豆网上搜索。

飞思卡尔智能车电磁组技术报告.docx

飞思卡尔智能车电磁组技术报告

第六届“飞思卡尔”杯全国大学生智能车竞赛技术报告

 

学校:

队伍名称:

参赛队员:

带队教师:

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

本人完全了解第六届全国大学生“飞思卡尔”杯智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:

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

参赛队员签名:

带队教师签名:

日期:

 

第一章引言

全国大学生智能汽车竞赛是全国高等教育司委托高等学校自动化专业教学指导分委会主办,旨在培养创新精神、协作精神,提高工程实践能力的科技活

动。

该竞赛是以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技

术、电子、电气、计算机、机械等多个学科交叉的科技创意性比赛。

本校积极组队参加第六届“飞思卡尔”杯全国大学生智能汽车竞赛。

从2010年底着手准备,历时半年多,经过不断试验设计,最终设计出较为完整的智能赛车。

在赛区比赛中获得了较好的综合性能和成绩。

在本次比赛中,采用大赛组委会统一提供的竞赛车模,采用飞思卡尔16位微控制器MC9S12XS128作为核心控制单元,构思控制方案及系统设计,进行包括机械结构的调整与优化,硬件的设计与组装、软件控制算法的编写与改进等过程(小车上的具体方案模块有传感器信号采集处理、控制算法及执行、动力电机驱动、转向舵机控制等)从而实现小车智能化的识别道路,最终实现智能化竞速。

本技术报告主要对小车的整体设计思路,硬件与软件设计与优化,机械结构的安装以及赛车的调试操作等过程作简要的说明。

 

第二章方案设计

2.1总体设计思路

赛车是以检测通以20KHz、100mA的导线的电磁场为基础,通过单片机处理采集到的磁感应电压信号,实现对赛车的转向控制,进而识别赛道达到路径寻迹的目的。

根据电磁寻迹的设计方案,赛车整体包括以下四大模块:

1.单片机控制模块2.电磁传感器模块3.电机驱动模块4.电源管理模块等,除此之外系统还有一些外部设备,例如编码器测速、舵机控制转向、直流电机驱动车体,干簧管起跑线识别等。

系统总体结构如图2.1所示。

图2.1系统结构图

 

第三章机械结构调整与优化

3.1机械结构部分

机械结构部分工作主要包含传感器的安装、前轮注销倾向的调节、舵机的安装、主控板得连接与固定,干簧管的安装、驱动模块的安装、编码器的安装以及后轮差速的调整等。

3.1.1传感器的安装

传感器采用的是6个磁场检测电感一致字匀布的布局安装,如图3.1所示。

传感器伸出车体一定的距离以获得相应的前瞻性。

图3-1传感器布局

3.1.2前轮定位的调节

对于汽车而言,要保持车辆直线行驶的稳定性,使之转弯自动回正、转向轻便,必须确定车轮定位参数,包括主销后倾、主销内倾、前轮外倾和车轮前束。

主销后倾角和车轮前束可以提高车模行驶时的转向回正力。

所使用的车模中,车轮和主销是平行的,调成了0度左右,适当的正前束可以提高连续转向的反应能力。

主销内倾角给了一个适当的值,会更有利于过弯。

3.1.3舵机的安装

考虑到适当增加力臂来提高舵机的灵敏度和为了赛车布局的的紧凑,采取了如图3.2所示的安装方法。

图3.2舵机安装结构

3.1.4主控板的连接与固定

采用接插件与焊接结合的方式连接传感器、主控板、编码器、电机驱动电路、电机、赛道起始检测等单元,既考虑可靠性,又兼顾结构调整与安装的便利性。

具体安装结构如图3.3所示,

图3.3主控板安装结构

3.1.5赛道起始检测元件及安装

采用干簧管作为赛道起始线检测元件,如图3.4,采用两两并联,在实际比赛时,与比赛用的起始线磁铁水平宽度相比,我们的赛车干簧管的安装宽度较大,如此考虑,可以增大检测的范围,好处是可以有效地防止车子临近终点时因跑偏太多而导致不能检测到起跑线不能停车的情况的发生。

图3.4赛道起始线检测干簧管部位

3.1.6电机驱动模块的安装

驱动模块采用英飞凌半桥MOS驱动电路BTS7960构成H全桥驱动电路,由于车模电机自身的空载电流很大,导致工作时电流偏大,但赛车实际运行中,快速加减速十分频繁,易导致芯片过热,为提高可靠性,采用了双H全桥并联分流驱动,运行稳定。

安装结构如图3.5所示。

图3.5电机驱动电路的安装

3.1.7编码器的安装

轴编码器用于电机测速,是电机闭环控制的关键检测反馈元件。

采用每转500线的编码器通过齿轮传动安装,固定于赛车尾部。

安装部位结构如图图3.6所示。

图3.6轴编码器的安装

3.1.8后轮差速的调整

车在转弯时后轮的速度会不同,再不打滑的情况下,存在差速。

在后轮不打滑的情况下,差速越松,转向效果越好,但是太松的差速会影响驱动力的提供。

实际中在赛道上调整到比较平衡的值就可以了。

在差速和摩擦轴承中适当加点油保持良好的轮滑,也可以一定程度上改善差速的性能。

 

第四章电路的设计说明

4.1电磁传感器电路的设计

电磁传感器是赛车循迹的前提,采用图4.1电路,由谐振回路,放大电路和倍压整流电路三部分组成,电路如下图所示。

图4.1电磁传感器电路

 

4.2主控板的设计

主板承担着整部赛车各类电源的提供以及信号采集控制任务,主要由各类电源电路和单片机系统与接口电路组成。

我们没有将传感器和传感器电路设置在主板上。

否则,将大量消耗狭小的底盘安装空间,使得主板面积过小元件信号线过度密集导致抗干扰性能变差,不利于系统的可靠性,电路图与PCB图分别如图4.2、4.3所示。

图4.2主控板电路图

图4.3主控板PCB图

4.3电机驱动模块的设计

电机驱动电路的功率问题比较重要,驱动的好坏将会影响电机速度的PID调节,本次比赛的B车模电机空载损耗很大,空载电流可达到2安培以上,考虑赛道运行机械负载与加速的加速度负载等,依据常规经验粗略推断,电机电流至少可达十几安培以上,对于低压小型电机,如此的电流损耗是较为惊人的。

驱动电路必须能够驱动如此大的电机电流且必须拥有较为完善的过流、超温保护等功能有效防止驱动电路的损坏。

比较分立原件和集成芯片的优劣之后我们选择了英飞凌半桥BTS7960构成全桥以实现正反转以及能耗制动。

BTS7960电路不需要升压电路,可耐受瞬时45A以上的电流,具备较为完善的保护功能。

但在B车的使用过程中它也出现了一些问题:

对PWM的频率有要求,过高或过低都会使芯片发烫。

频繁的PID调速也会使芯片发烫。

以上导致的的芯片发烫会偶然触发其内部的过温保护电路,导致赛车中途停车。

为了解决以上问题我们采用并联双H桥的形式,从而保证了赛车的稳定运行。

图4.4与4.5分别是是电机驱动电路的电路图与PCB图。

图4.4电机驱动板电路图

图4.5电机驱动板PCB图

 

第五章控制软件的设计说明

5.1程序流程图

整个系统由单片机为主控MCU,对模拟和数字传感器信号进行采集处理,并对输出的PWM分别控制,进行舵机和电机的控制,控制舵机来决定赛车的角度,通过电路驱动来控制电机,决定赛车的速度。

另外使用编码器采集速度值,作为辅助速度控制。

程序整体框架如图5.1所示。

图5.1程序整体框架图

程序中用到的硬件资源有PWM模块、AD模块、脉冲累加器、普通数字I/O口,主程序流程图如下:

图5.1主程序流程图

5.2舵机控制

经实际调试,舵机采用PD控制方可确保其闭环稳定性。

基本原理是通过比较两路A/D采集传感器电压大小,可以得知传感器与赛道通电漆包线中心线之间的位置,通过传感器采集到的赛车与赛道中心线的几何偏移量,利用前后几次偏移量之差进行PD控制。

因为无法保证传感器的绝对线性,故程序中采用线性拟合的办法将用六个电感传感器采集的模拟量拟合成线性关系。

具体代码可参见本文附录所附的源程序清单。

程序调试中,须反复调试试验,逐渐逼近最佳状态,确定合适的Kp、Kd参数,并在程序中区分不同的赛道状况,动态切换不同的Kp、Kd参数组合,最终实现最佳状态的循迹效果。

舵机PD的具体代码可参见本文附录所附的源程序清单。

5.3速度控制

速度采用PID控制,PID控制控制直观,技术可靠,对被控对象的模型适应性强。

位置式PID算式连续控制系统中的PID控制规律是:

其中

是偏差信号为零时的控制作用,是控制量的基准。

利用外接矩形法进行数值积分,一阶后向差分进行数值微分,当选定采样周期为T时,可得如下位置式PID的离散差分方程:

计算机控制时,常采用增量式PID算法。

计算每周期的PID输出增量,在于前一周期的输出相加,得出最终的PID控制输出。

增量式PID算法的每周期的PID输出增量计算算法如下:

每周期的PID输出增量反映了第k和第k-1周期输出之间的增量。

算式的结果可正可负的。

利用增量算式控制执行机构,执行机构每次只增加一个增量,因此执行机构起了一个累加的作用。

对于整个系统来说,位置和增量式两种算式并无本质区别,但增量式有不少优点:

算式只与最近几次采样值有关,不易引起误差累积;误动作影响小,易于加逻辑保护;增量算法在实际控制中应用得比位置式更为广泛。

电机PID的具体代码可参见本文附录所附的源程序清单。

 

第六章开发工具与调试过程说明

使用CodeWarriorDevelopmentStudioforHCS12(X)V4.7作为程序编写、编译、下载、调试工具。

在调试中,建议使用无线模块进行赛车运行的实时在线电机速度与舵机角度监视。

实现了闭环控制参数的完全在线调试验证,极大改进了调试效果,提高了解决问题的效率。

 

第七章赛车的主要技术参数

车模重量

1.4kg

车模几何尺寸(长/宽/高)

460/240/69(mm)

总电容量

约669.51微法

传感器个数

电磁传感器×6;编码器×1;

干簧管×4

电机个数

舵机×1;电机×1

芯片个数

MC9S12XS128×1;电机驱动×1;

赛道位置检测精度

5mm

赛道检测频率

100次/秒

总功率

12W

 

第八章总结

在这四个月的赛车设计制作中我们的收获与体会都相当的多,在运用了现有的理论基础之上,再通过课外的拓展,将理论应用于实际,在这过程中充分锻炼了我们的动手能力、项目统筹安排的能力、解决问题的态度与技巧,以及与队友的团结合作等等。

在参加赛区比赛赛后,与兄弟学校的赛车的对比,发现了一些不足之处,主要如:

赛车的重心偏靠前,导致后轮摩擦力不够,长直道加速后若紧接小弧度弯道,后轮容会打滑漂移;前瞻的的潜力没有充分挖掘,前瞻相对而言偏短;电机驱动电路的散热尚显不足,有待改进;整体结构加工工艺及坚固性有待进一步改进完善。

 

参考文献

[1]宋文绪,杨帆.传感器与检测技术[M].第1版,北京:

高等教育出版社,2004.1

[2]卓晴.黄开胜.邵贝贝.学做智能车――挑战“飞思卡尔”杯.北京:

北京航空航天大学出版社,2007.3.

[3]李仕伯.马旭.卓晴.《基于磁场检测的寻线小车传感器布局研究》,清华大学,2009.12

[4]竞赛组秘书处.《路径检测设计参考方案》.2010.1

[5]竞赛组秘书处技术组.《20KHz电源参考设计方案》

[6]卓晴.基于磁场检测的寻线小车传感器布局研究[J].清华大学.2009

[7]杨延玲.载流直导线的电磁场特性分析[J].山东师范大学.2007

[8]王毅敏.马丽英等.一种改进的数字PID控制算法及其在励磁系统中的应用电网技术[J].1998

[9]高金源,夏洁.计算机控制系统[M].清华大学出版社.2007

[10]第五届北京交通大学电磁二队的技术报告.2010

[11]第五届哈尔滨工程大学电磁组—极品飞车三号队的技术报告.2010

[12]第五届清华大学三角洲电磁队的技术报告.2010

 

附录

源代码

(1)main.c文件代码

#defineMotorMax14000

#defineMotorMin10

#defineNMAX3//使用3个电感拟合

#defineZSPEED130//100

//#defineK10

//#defineKp1;//PID的三个参数

//#defineKi1;

//#defineKd1;

#include

#include

#include

#include

#include

intad[8]={0};

floata=0,b=0,y1=0,y2=0;

unsignedint*p=ad,*pold4=0,*pold5=0,admax=0;

intstop=0;

intnowspeed=0,setspeed=0;

unsignedcharLEDflag=1,admaxnum=0;

staticfloatek[3]={0};

//#include"PBset.h"

#include"SCI.h"

#include"derivative.h"/*derivative-specificdefinitions*/

#include"abs.h"

#include"delay_1ms.h"

#include"readad.h"

#include"ZXEC.h"

#include"wait.h"

#include"PID.h"

#include"PIT.h"

//#include"CopyofPIT.h"

#include"Busclock80MHz.h"

#include"PWM.h"

#include"Portinit.h"

#include"AD_Init.h"

#include"intmoto.h"

#include"intsteer.h"

#include"IOC.h"

#include"Set_almode.h"

voidmain(void)

{

//unsignedinta=0,b=0;

Set_almode();

Dly_ms(2000);//延时两秒等AD

ZXEC();//直线拟合

//PORTB_PB1=0;

wait();

setspeed=50;

EnableInterrupts;

for(;;)

{

if((ad[2]>2|ad[3]>2|ad[4]>10|ad[5]>10)&LEDflag)//ad[2]>10||ad[3]>10||

{

PORTA_PA1=0;//接驱动板上的IN2;IN1接PWM01

stop=0;

//PWMDTY01=3000;

PORTA_PA0=1;//INH

}else

{setspeed=0;

//Dly_ms(500);

//count=0;

//while(count==500);

//PORTA_PA0=0;

}

while((stop==1)&(nowspeed!

=0)&(ad[2]>10|ad[3]>10|ad[4]>10|ad[5>10]))//

{

if(nowspeed==0)

{

stop=0;

}

else

{

PWMDTY01=200*nowspeed;

PORTA_PA0=1;

Dly_ms

(1);

PORTA_PA1=1;

Dly_ms(6);

//PORTA_PA0=0;

//Dly_ms

(1);

//PWMDTY01=0;

PORTA_PA0=0;

Dly_ms

(1);

}

}

//Dly_ms(1000);

/*

Dly_ms(1000);

a=ad[5]*100/51;

b=a/100;

a=a%100;

sprintf(txtbuf,"\nAD5:

%d.%02dV%d\n",b,a,ad[5]);

putstr(txtbuf);

Dly_ms(1000);

a=ad[2]*100/51;

b=a/100;

a=a%100;

sprintf(txtbuf,"\nAD2:

%d.%02dV%d\n",b,a,ad[2]);

putstr(txtbuf);

Dly_ms(1000);

a=ad[3]*100/51;

b=a/100;

a=a%100;

sprintf(txtbuf,"\nAD3:

%d.%02dV%d\n",b,a,ad[3]);

putstr(txtbuf);

Dly_ms(1000);

a=ad[4]*100/51;

b=a/100;

a=a%100;

sprintf(txtbuf,"\nAD4:

%d.%02dV%d\n",b,a,ATD0DR4L);

putstr(txtbuf);

Dly_ms(1000);

a=ad[5]*100/51;

b=a/100;

a=a%100;

sprintf(txtbuf,"\nAD5:

%d.%02dV%d\n",b,a,ATD0DR5L);

putstr(txtbuf);/*

Dly_ms(1000);

a=ad[6]*100/51;

b=a/100;

a=a%100;

sprintf(txtbuf,"\nAD6:

%d.%02dV%d\n",b,a,ad[6]);

putstr(txtbuf);

Dly_ms(1000);

a=ad[7]*100/51;

b=a/100;

a=a%100;

sprintf(txtbuf,"\nAD7:

%d.%02dV%d\n",b,a,ad[7]);

IOCcnt=IOCcnt/500*50/107*206.298/10;

sprintf(txtbuf,"\nmotorspeed:

%f%s%s%s\n",IOCcnt,"M","/","S");

putstr(txtbuf);

Dly_ms(1000);

sprintf(txtbuf,"\nPWM23dutyratio:

%f%%\n",(float)PWMDTY23/PWMPER23*100);

putstr(txtbuf);

Dly_ms(1000);

sprintf(txtbuf,"\nPWMDTY23:

%u\n",PWMDTY23);

putstr(txtbuf);*/

//Dly_ms(200);

//sprintf(txtbuf,"\nPWMDTY01:

%d\n",PWMDTY01);//,stop,

//putstr(txtbuf);

Dly_ms(100);

sprintf(txtbuf,"\n%d\n",nowspeed);//,stopMotorPWM:

%f,MotorPWM

putstr(txtbuf);

PORTB_PB0=~PORTB_PB0;

//_FEED_COP();/*feedsthedog*/

}

}

#pragmaCODE_SEG__NEAR_SEGNON_BANKED

interrupt29voidpll_selfclock(void)

{

CRGFLG_SCMIF=1;

SetBusCLK_80M();

}

(2)SCI.h文件代码

byteu8_RCV_Ch=0;

chartxtbuf[30]="";

staticvoidSCI_Init(void)

{

SCI0CR2=0x2c;//enableReceiveFullInterrupt,RXenable,Txenable

SCI0BDH=0x02;//busclk8MHz,19200bps,SCI0BDL=0x1a

SCI0BDL=0x08;//SCI0BDL=busclk/(16*SCI0BDL)

//超频到48M

}

//----------------------useSCI-----------------------------

voiduart_putchar(charch)

{

if(ch=='\n')

{

while(!

(SCI0SR1&0x80));

SCI0DRL=0x0d;//output'CR'

return;

}

while(!

(SCI0SR1&0x80));//keepwaitingwhennotempty

SCI0DRL=ch;

}

voidputstr(charch[])

{

unsignedcharptr=0;

while(ch[ptr]){

uart_putchar((unsignedchar)ch[ptr++]);

}

}

unsignedcharuart_getkey(void)

{

byteres=0;

while(!

(SCI0SR1&0x80));//keepwaitingwhennotempty

return(SCI0DRL);

}

#pragmaCODE_SEG__NEAR_SEGNON_BANKED

voidinterrupt20SCI0_ISR(void)//串口中断

{

SCI0CR2_RIE=0;

//此处为串口中断需要处理的事情

uart_putchar(u8_RCV_Ch=uart_getkey());

PORTB_PB1=~PORTB_PB1;

switch(u8_RCV_Ch)

{

case'1':

putstr("ok");

u8_RCV_Ch=0xff;

if((PWMDTY01<14545)&&(PWMDTY01>=0))

PWMDTY01+=50;

if((PWMDTY23<65535)&&(PWMDTY23>=0))

PWMDTY23+=100;

break;

case'0':

putstr("ok");

u8_RCV_Ch=0xff;

if((PWMDTY01<=14545)&&(PWMDTY01>0))

PWMDTY01-=50;

if((PWMDTY23<=65535)&&(PWMDTY23>0))

PWMDTY23-=100;

break;

case'W':

PORTA_PA1=0;//接驱动板上的IN2;IN1接PWM01

stop=0;

PORTA_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1