全国电子设计大赛智能小车报告Word文档格式.docx

上传人:b****3 文档编号:18459748 上传时间:2022-12-16 格式:DOCX 页数:23 大小:411.48KB
下载 相关 举报
全国电子设计大赛智能小车报告Word文档格式.docx_第1页
第1页 / 共23页
全国电子设计大赛智能小车报告Word文档格式.docx_第2页
第2页 / 共23页
全国电子设计大赛智能小车报告Word文档格式.docx_第3页
第3页 / 共23页
全国电子设计大赛智能小车报告Word文档格式.docx_第4页
第4页 / 共23页
全国电子设计大赛智能小车报告Word文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

全国电子设计大赛智能小车报告Word文档格式.docx

《全国电子设计大赛智能小车报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《全国电子设计大赛智能小车报告Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

全国电子设计大赛智能小车报告Word文档格式.docx

直流电动机驱动采用TI提供的TMS320F2812芯片,结合Mini红外避障传感器及ST188黑白线检测传感器,检测小车运动轨迹,产生占空比可调的PWM波实现调速。

本模块用于驱动车上两个直流电机,能够较好的实现小车速度及方向的控制。

DSP的4个IO口输入信号给A1A2控制A电机,输入信号给B1B2控制B电机,5V直流扩展输出可以给传感器供电,3.3V直流扩展输出可以给DSP或3.3V电压工作的模块供电。

1.1.2避障模块

方案一:

采用HC-SR04超声波测距传感器(图2所示)可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;

模块包括超声波发射器、接收器与控制电路。

方案二:

Mini红外探测传感器(图3所示),此传感器对环境光线适应能力强、精度高,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,此时指示灯亮起,经过电路处理后,信号输出接口输出数字信号,可通过电位器旋钮调节检测距离,有效距离3~35cm,工作电压为3.3V-5V,由于工作电压范围宽泛,在电源电压波动比较大的情况下仍能稳定工作。

方案三:

红外避障传感器(图4)这是一种集发射与接收于一体的光电传感器。

检测距离可以根据要求进行调节。

该传感器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点,可以广泛应用于机器人避障、流水线计件等众多场合。

4.5—5V供电,3-80cm检测距离,TTL电平输出,输出低电平有效。

前方无障碍输出高电平,有障碍输出口(黄色)电平会从高电平变成低电平。

背面图有一个电位器可以调节障碍的检测距离,一旦调节好电位器(如调节好的最大距离60cm)则在有效距离内(如40cm处有障碍物、10cm处有障碍物)则输出低电平,低电平刚好给DSP识别。

经过小组讨论,使用红外避障传感器检测范围大,更加方便合适我们对小车对障碍物的检测,并且对环境适应能力更强,而HC-SR04超声波测距模块成本比较高,而且输出端口连接较复杂,Mini红外探测传感器抗干扰能力不好,因此该模块选择方案三。

1.1.3黑白线检测模块

方案一:

使用反射式红外光电传感器ST188(图5所示),在黑线检测的测试中,若检测到白色区域,发射管发射的红外线没有反射到接收管,测量接收管的电压为4.8,若检测到黑色区域,接收管接收到发射管发射的红外线,电阻发生变化,所分得的电压也就随之发生变化,测得的接收管的电压为0.5。

使用TCRT5000红外反射式接近开关传感器(图6),可以实现寻迹、壁障等功能,TCRT5000光电传感器模块是基于TCRT5000红外光电传感器设计的一款红外反射式光电开关。

传感器采用高发射功率红外光电二极管和高灵敏度光电晶体管组成,输出信号经施密特电路整形,稳定可靠。

使用TK-20黑白线检测传感器(图7),有效探测距离达5cm。

通过调节电位器,最远可以达到10cm(该距离下,探测黑白线的精度降低)。

这款黑白线传感器继承了TK-10的受可见光干扰小,输出信号为开关量,信号处理简单,使用非常方便。

方案四:

使用三片芯片、一片电压比较器339N芯片、一个电位器和电阻若干焊接的三路黑白线检测电路板(图8所示)可以完成边线及转弯标志线的检测。

工作电压在3.3—5V之间,且功耗小。

经过多次试验验证可以达到检测要求。

经过分析比较,为更好的实现该模块,我们选用方案二。

1.2信号的检测控制方案

智能小车采用TI公司的TMS320F2812芯片作为控制核心,通过红外发射管和接收管识别有无小车在前,判断是否要超车,通过黑白线检测模块来识别路径循迹,利用PWM技术控制两个直流电机的前进速度和方向,硬件电路包括升压电路、电机驱动电路、检测电路。

模块化结构保证了小车成为一个可靠整体,软件采用C语言编程,完成小车所要实现的任务。

TMS320F2812DSP是TI公司新推出的功能强大的32位定点DSP,是TMS320LF2407A的升级版本,最大的特点是速度比TMS320LF2407A有了质的飞跃,从最高40M跃升到TMS320F2812的150M,处理数据位数也从16位定点跃升到32位定点。

最大的亮点是其拥有EVA、EVB事件管理器和配套的12位16通道的AD数据采集,使其对电机控制得心应手。

再加上丰富的外设接口,如CAN、SCI等,在工控领域占有不少份额。

DSP跟单片机相比,在数字运算方面功能更强大一点,所以DSP都有硬件乘法器,除法器,在做乘法运算的时候,就会比单片机上千百倍。

1.2.1电机的信号控制过程

通过编程由控制芯片TMS320F2812产生PWM发出驱动信号,输出的四路PWM作为直流电机的输入,输出控制信号使电机转动,进而带动车轮转动。

PWM输出占空比的大小则可以控制直流电机转动的快慢,当占空比大时,转速高,占空比小时,转速低。

当左轮转速小于右轮转速时,小车右转。

当右轮转速小于左轮转速时,小车左转。

小车直行时尽量加大PWM占空比以提高小车运行速度;

在直行道上,小车的左右边缘触到黑线时,适当改变PWM占空比,控制左右两电机的转速调整小车的方向;

遇到转弯标志线时,根据转弯角度,控制PWM占空比,使小车转弯。

1.2.2黑白线、障碍信号检测的控制

当黑白线检测传感器检测到黑线时,小车做出转弯或起跑停止响应。

小车左右两边各有一个黑白线检测传感器,用于检测跑道两边的边界线,及时做出调整使小车在预定轨道行驶,防止小车跑出边界。

车头正下方有一个黑白线检测传感器,当小车检测到超车弯道标志线时,小车转弯。

车头上方安装红外传感器,当小车通过红外传感器检测到前方有车时,在超车区做出超车的响应。

1.3系统算法与误差分析

系统在算法上能够较好的完成了其轨迹的要求,但是会有误差,通过小车传感器上的反馈以及相应的算法设计,已经减少了系统误差。

在转弯处对转弯程度的大小,以及转弯的时间上的要求很高。

产生的误差主要来源于电机转速与电源幅度大小有关,而且小车在转弯标志处时,处于轨道的位置,以及转弯的幅度都有较大又不确定的因素。

面对上诉因素引起的各种误差我们采取了各种方案,减小误差对系统带来的不稳定性。

1.3.1直流电机同步算法与误差分析

即使是在相同电压的条件下,再加上系统上的摩擦,两个相同的直流电机存在的转速的差异是不可避免的,当在对小车直行的测试上,经过测量发现小车并不能严格的按照直线行走,为提高小车的性能,我们反复调节输入的PWM波的占空比,使小车能够直行。

1.3.2转弯角度的大小算法与误差分析

当小车检测到前方不同的转弯标志线时,根据不同的弯做出不同的转弯响应,刚开始的实验,小车的转弯幅度和时间上总会对小车下面的行走产生各种影响,为了小车更能顺利的转弯,我们尝试了各种转弯时的幅度以及转弯设定的时间,使得转弯能够顺利过去。

测得转弯角度大约为90°

,时间约为5秒。

1.3.3预防小车出轨的算法与误差分析

为使小车完全在跑道上行走,防止小车冲出跑道,智能小车必须加入跑道边缘调整的反馈算法,使得小车的两测检测到边缘时,智能小车自动调整,保证小车的行走方向。

但是,小车车身两边的黑白线传感器在检测跑道边缘的同时,对转弯标志线的也进行了检测,这样会得到不期望的结果,于是在算法上我们又加入了智能屏蔽检测的功能,确保了小车能在跑道上的安全运行。

测试后小车自动调节较为灵敏。

二、电路设计

电路设计见附件2

三、系统软件设计

根据题目要求,将软件分为两种模式,一是小车单行,二是小车交替领跑。

设计思路:

在模式一中,检测到标志线即执行转弯的程序,同时计数,直到达到起跑终点标志线。

在模式二中,将小车的运行分为四种情况,一是小车直跑转弯,直到超车标志区转弯处,然后用红外模块检测前方是否有车,没有的话继续前行,有车的话则走超车区的轨迹,然后到达超车区后的标志线,最后又达到了最初的状态。

系统主要程序见附录。

四、测试与结果分析

当题目下来之后,我们就分工准备做各个模块,其中有负责做小车整体构架的,有负责做小车完成功能所需模块的,有负责做软件编程的。

经过仔细的分工,整个系统由各个相对独立模块组成,使我们更方便搭建整个系统构架,分工协作各有所长,使我们更快更好的解决调试过程中出现的种种问题。

为了更好地进行测试,我们搭建了1:

1的跑道,并反复的进行测试调整。

4.1硬件测试与结果分析

4.1.1小车车体

根据题目要求我们快速的选购了两辆履带式小车组件,并且进行了组装,分别放置两个相同的直流电机,用于控制车的运动方向,并经过测试,小车摩擦系数良好,有益于小车的控制。

4.1.2直流电机驱动

为使小车能够正常运行,为电机加上了直流电机驱动模块,由于题目的要求,我们又准备了电池盒,通过该模块对直流电机进行供电,通过对其输入占空比相等的PWM波,并观察小车的运动方向,但是发现小车并不是严格的走直线,而是有些偏差,在最后经过反复调试,确定了一组合适的PWM信号,使小车能较好的直线运行。

经测量两路PWM占空比只差大约为5%左右。

4.1.3黑白线检测模块

选用了性能较好的TCRT5000红外反射式接近开关传感器,经过学习用法,焊接之后进行了测试,发现该模块对于黑线有很好的检测效果,但是在后来的小车运行轨迹观察中发现,有些检测盲点,后来经过该模块电路上的测量排查,发现并无问题,紧接着对环境进行检查,发现该模块在不平的路面上,如果物体距离灯头太近的话,该模块就会做出错误的判断,经过调整该模块的高度,已经能够稳定的检测黑白信号。

最佳检测距离测得为5-8mm。

4.1.4红外壁障模块:

该模块用于检测在超车区域前方是否有小车,以做出超车响应,刚开始时会有漏测,但后来经过调节电位,已能够对是否有车做出正确的判断。

4.5—5V供电,3-80cm检测距离,我们最后调节使其检测距离约为40cm。

4.2软件测试与结果分析

4.2.1单行模式

在该模式下,我们很快就有了一个算法,用车体前部的一个黑白线传感器检测转弯标志线,然后用两侧的黑白线传感器来检测跑道的边界以防止小车掉落,但在实际的运行结果上出了些问题。

先是对转弯标志器的检测,由于要求即使是检测到了起始位置的标志线,也要直行,不能转弯,再以后的标志线才能转弯,然后车体两侧的黑白线传感器的主要用于对小车轨迹的修正,通过设定的反馈量来调节小车的行走轨迹。

最后是车体两侧的传感器对于检测到的转弯标志线,或者起点终点标志线不用做出相应。

不过本模式的最大难点还是在于如何选择适合的参数使小车自动的在跑道上行驶。

通过程序算法的反复修改与测试,上述问题都已较好的解决,并能符合比赛的要求。

4.2.2超车模式

在该模式下,小车通过红外壁障模块自动调节稳定两小车之间的间距防止发生碰撞,在超车区内,在乙车超越甲车的过程中,乙车转过超车标志线后,进入超车区,超越甲车后,领跑下一圈;

在甲车超越乙车的过程中,甲车转过超车标志线后,进入超车区,超越乙车后,领跑下一圈;

甲乙小车交替领跑四圈。

重新设定甲车起始位置(在离起点标志线前进方向40cm范围内任意设定),使甲、乙两车四圈交替领跑功能。

附件

附件1.件模块

图1直流电动机驱动模块

图2HC-SR04超声波测距传感器图3Mini红外探测传感器

图4红外避障传感器图5反射式红外光电传感器st188

图6TCRT5000红外反射式接近开关传感器图7TK-20黑白线检测

图8三路黑白线检测电路板

附件2.电路设计

图9TMS320F2812最小系统图

图10st188光电传感器电路图

附件3.小车实体照片

图11智能小车

附件4.主要程序清单

voidmain(void)

{

InitSysCtrl();

//初始化系统函数

memcpy(&

secureRamFuncs_runstart,&

secureRamFuncs_loadstart,(Uint32)&

secureRamFuncs_loadsize);

InitFlash();

DINT;

IER=0x0000;

//禁止CPU中断

IFR=0x0000;

//清除CPU中断标志

InitPieCtrl();

//初始化PIE控制寄存器

InitPieVectTable();

//初始化PIE中断向量表

InitGpio();

//初始化Gpio口

InitEv();

while

(1)

{

if(m1==1)//模式选择

deal_surpass();

else

deal_turn();

}

}

/****************************************************************************

*

*名称:

InitSysCtrl()

*功能:

该函数对2812的系统控制寄存器进行初始化

*入口参数:

*出口参数:

****************************************************************************/

voidInitSysCtrl(void)

Uint16i;

EALLOW;

//对于TMX产品,为了能够使得片内RAM模块M0/M1/L0/L1LH0能够获得最好的性能,控制寄存器的位

//必须使能,这些位在设备硬件仿真寄存器内。

TMX是TI的试验型产品

DevEmuRegs.M0RAMDFT=0x0300;

DevEmuRegs.M1RAMDFT=0x0300;

DevEmuRegs.L0RAMDFT=0x0300;

DevEmuRegs.L1RAMDFT=0x0300;

DevEmuRegs.H0RAMDFT=0x0300;

//禁止看门狗模块

SysCtrlRegs.WDCR=0x0068;

//初始化PLL模块

SysCtrlRegs.PLLCR=0xA;

//如果外部晶振为30M,则SYSCLKOUT=30*10/2=150MHz

//延时,使得PLL模块能够完成初始化操作

for(i=0;

i<

5000;

i++){}

//高速时钟预定标器和低速时钟预定标器,产生高速外设时钟HSPCLK和低速外设时钟LSPCLK

SysCtrlRegs.HISPCP.all=0x0001;

//HSPCLK=150/2=75MHz

SysCtrlRegs.LOSPCP.all=0x0002;

//LSPCLK=150/4=37.5MHz

//对工程中使用到的外设进行时钟使能,在本例中,我们将用到EVA

SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;

//使能EVA的时钟

EDIS;

InitGpio()

初始化Gpio,使得Gpio的引脚处于已知的状态,例如确定其功能是特定功能

*还是通用I/O。

如果是通用I/O,是输入还是输出,等等。

voidInitGpio(void)

//将GPIO中和PWM相关的引脚设置为PWM功能

GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0=1;

//设置PWM1引脚

GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1=1;

//设置PWM2引脚

GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2=1;

//设置PWM3引脚

GpioMuxRegs.GPAMUX.bit.PWM4_GPIOA3=1;

//设置PWM4引脚

GpioMuxRegs.GPBMUX.bit.PWM7_GPIOB0=0;

GpioMuxRegs.GPBMUX.bit.PWM8_GPIOB1=0;

GpioMuxRegs.GPBMUX.bit.PWM9_GPIOB2=0;

GpioMuxRegs.GPBMUX.bit.PWM10_GPIOB3=0;

GpioMuxRegs.GPBMUX.bit.PWM11_GPIOB4=0;

GpioMuxRegs.GPDMUX.bit.T1CTRIP_PDPA_GPIOD0=0;

GpioMuxRegs.GPDDIR.bit.GPIOD0=0;

GpioMuxRegs.GPADIR.all=0x00ff;

GpioMuxRegs.GPBDIR.all=0xff00;

}

/****************************************************************************

InitEv()

初始化EVA或者EVB,本例中EVA产生PWM波形,各个全比较单元的死区时间为4.27us

voidInitEv(void)

//EVA模块

EvaRegs.T1CON.bit.TMODE=2;

//连续增模式

EvaRegs.T1CON.bit.TPS=1;

//T1CLK=HSPCLK/2=37.5M

EvaRegs.T1CON.bit.TENABLE=0;

//暂时禁止T1计数

EvaRegs.T1CON.bit.TCLKS10=0;

//使用内部时钟,T1CLK

EvaRegs.T1CON.bit.TECMPR=1;

//使能定时器比较操作

EvaRegs.T1PR=0x927B;

//1KHz的PWM,周期为1ms

EvaRegs.T1CMPR=0x3A98;

//占空比为40%,低电平有效

EvaRegs.T1CNT=0;

EvaRegs.COMCONA.bit.CENABLE=1;

//使能比较单元的比较操作

EvaRegs.COMCONA.bit.FCOMPOE=1;

//全比较输出,PWM1-6引脚均由相应的比较逻辑驱动

EvaRegs.COMCONA.bit.CLD=2;

//死区时间为:

4.27us

EvaRegs.DBTCONA.bit.DBT=10;

//死区定时器周期,m=10

EvaRegs.DBTCONA.bit.EDBT1=1;

//死区定时器1使能位

EvaRegs.DBTCONA.bit.EDBT2=1;

//死区定时器2使能位

EvaRegs.DBTCONA.bit.EDBT3=1;

//死区定时器3使能位

EvaRegs.DBTCONA.bit.DBTPS=4,//死区定时器预定标因子Tdb=37.5M/16=2.34M

EvaRegs.ACTR.all=0x0999;

//设定引脚PWM1-PWM6的动作属性

voiddelaym2(Uint32k)

while(k>

0)

{

k--;

if(flag1!

=1)

flag=1;

voiddelaym1(Uint32k)

while(k--)

if(flag2==1||flag3==1)

break;

voiddelay(Uint32k)

while(k--);

voidldelay(Uint32k)

while(k>

{

EvaRegs.CMPR1=0x668A;

//PWM1占空比为70%

EvaRegs.CMPR2=0x8B29;

//PWM3占空比为95%

EvaRegs.T1CON.bit.TENABLE=1;

//enableT1计数

delay(5000);

while((flag2!

=1)&

&

(count!

=4))

EvaRegs.CMPR1=0x668A;

EvaRegs.CMPR2=0x9270;

//PWM3占空比为99%

EvaRegs.T1CON.bit.TENABLE=1;

delaym2(3000);

}

while((flag3!

EvaRegs.CMPR1=0x9270;

//PWM1占空比为99%

EvaRegs.CMPR2=0x668A;

//PWM3占空比为70%

voiddeal_turn(void)

while(flag1==1)

{

EvaRegs.CMPR1=0x83D6;

//PWM1占空比为90%

EvaRegs.CMPR2=0x83D6;

//PWM3占空比为90%

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

当前位置:首页 > 高中教育 > 理化生

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

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