8.2.3 嵌入式智能车循迹、左转和右转程序设计_第1页
8.2.3 嵌入式智能车循迹、左转和右转程序设计_第2页
8.2.3 嵌入式智能车循迹、左转和右转程序设计_第3页
8.2.3 嵌入式智能车循迹、左转和右转程序设计_第4页
8.2.3 嵌入式智能车循迹、左转和右转程序设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

8.2.3嵌入式智能车循迹、左转和右转程序设计嵌入式智能车循迹、左转和右转程序设计在前面完成了嵌入式智能车停止、前进和后退的控制设计,那么,我们如何能完成实现嵌入式智能车循迹、左转和右转控制的设计呢?嵌入式智能车循迹、左转和右转程序设计嵌入式智能车循迹目的,是在规定的跑道上,能按照指定的路线进行循迹行驶。(1)循迹功能实现分析在8.1中介绍了循迹板上有15组红外对管,采用前7后8交叉排列方式。红外对管照在黑线上,没有光反射回来,该组红外对管反馈为低电平“0”,对应的发光二极管会熄灭;若未照到黑线上,有光反射回来,该组输出高电平,对应的发光二极管点亮。嵌入式智能车循迹控制此处以后8组为例,当车在十字路口处,红外对管反馈的数据(循迹码)与车位置的关系。情况第一组第二组第三组第四组第五组第六组第七组第八组循迹码车位置1111001110xE7居中2111101110xF7偏右111100110xF33111110110xFB偏右+111110010xF94111111010xFD偏右++111111000xFC嵌入式智能车循迹灯状态情况第一组第二组第三组第四组第五组第六组第七组第八组循迹码车位置5111111100xFE偏右+++6111011110xEF偏左110011110xCF7110111110xDF偏左+100111110x9F8101111110xBF偏左++001111110x3F9011111110x7F偏左+++说明:“1”表示指示灯亮,并在黑线外;“0”表示指示灯灭,并在黑线内。嵌入式智能车循迹灯状态在执行循迹任务中,若智能车的位置居中,也就是反馈的数据是第一种情况时,可以全速前进,即Control(80,80)。若智能车位置是偏右的,则需要调整智能车身,如Control(60,80),左边速度降低20,右边速度高即可,将车身调至居中位置,再全速前进。若智能车位置是偏左的,则需要调整智能车身,如Control(80,60),左边速度高,右边速度降低20即可,将车身调至居中位置,再全速前进。嵌入式智能车循迹控制循迹函数Track_Correct()能识别跑道上的黑色路线、十字路口等,达到循迹的功能。在roadway_check.c文件中的Track_Correct(uint8_tgd)函数,gd为循迹数据,函数代码如下:循迹函数voidTrack_Correct(uint8_tgd){

if(gd==0x00)//全在黑线上,循迹灯全灭,停止,表示循迹到一个十字路口

{

Track_Flag=0;

//循迹标志状态为0

Stop_Flag=1;

//状态标志位Stop_Flag=1:表示停止循迹

Send_UpMotor(0,0);//停止

}

else

if(gd==0xE7)//(1)处在中间位置(4和5),全速运行

{

LSpeed=Car_Spend;

RSpeed=Car_Spend;

}

else

if((gd==0xF7)||(gd==0XF3))

//(2)处在5(或5和6)位置(微偏右一点位置),左转小弯

{

LSpeed=Car_Spend+20;

RSpeed=Car_Spend-40;

}else

if((gd==0XFB)||(gd==0XF9))//(3)处在6(或6和7)位置(偏右位置+),左转小弯+

{

LSpeed=Car_Spend+40;

RSpeed=Car_Spend-60;

}

else

if((gd==0XFD)||(gd==0XFC))//(4)处在7(或7和8)位置(偏右位置++),左转小弯++

{

LSpeed=Car_Spend+60;

RSpeed=Car_Spend-90;

}

else

if(gd==0XFE)//(5)处在8位置(偏右位置+++),左转小弯+++

{

LSpeed=Car_Spend+80;

RSpeed=Car_Spend-120;

}

else

if((gd==0XEF)||(gd==0XCF))//(6)处在4(或4和3)位置(微偏左一点位置),右转小弯

{

RSpeed=Car_Spend+20;

LSpeed=Car_Spend-40;

}

循迹函数else

if((gd==0XDF)||(gd==0X9F))//(7)处在3(或3和2)位置(偏左位置+),右转小弯+

{

RSpeed=Car_Spend+40;

LSpeed=Car_Spend-60;

}

else

if((gd==0XBF)||(gd==0X3F))//(8)处在2(或2和1)位置(偏左位置++),右转小弯++

{

RSpeed=Car_Spend+60;

LSpeed=Car_Spend-90;

}

else

if(gd==0X7F)//(9)处在1位置(偏左位置+++),右转小弯+++

{

RSpeed=Car_Spend+80;

LSpeed=Car_Spend-120;

}

循迹函数

else

{

LSpeed=Car_Spend;

RSpeed=Car_Spend;

}

if(gd==0xFF)//全在黑线外,循迹灯全亮,行驶一段时间停止

{

LSpeed=Car_Spend;

RSpeed=Car_Spend;

if(count>1200)

{

count=0;

Send_UpMotor(0,0);

Track_Flag=0;

Stop_Flag=4;//表示在黑线外停止

}

else

{

count++;

}

}

else

{

count=0;

}

if(Track_Flag!=0)

{

Control(LSpeed,RSpeed);

}}循迹函数代码中的循迹数据,是通过CanP_HostCom.c文件中的Get_Host_UpTrack()函数来获取,函数代码如下:

uint16_tGet_Host_UpTrack(u8mode)//获取循迹数据{

uint16_tRt=0;

switch(mode)

{

caseTRACK_ALL:

Rt=(uint16_t)((Track_buf[0]<<8)+Track_buf[1]);

break;

caseTRACK_Q7:

Rt=Track_buf[1];

break;

caseTRACK_H8:

Rt=Track_buf[0];

break;

}

returnRt;}循迹函数代码说明:函数返回为uint16_t类型的循迹数据;参数mode为TRACK_ALL时,获取所有数据;参数mode为TRACK_Q7时,获取前面7位数据;参数mode为TRACK_H8时,获取后面8位数据;TRACK_ALL=“0”,TRACK_Q7=“7”,TRACK_H8=“8”。循迹函数嵌入式智能车循迹控制函数Car_Track(),代码如下:voidCar_Track(uint8_tspeed)//主车循迹参数:速度{

Stop_Flag=0;

//运行状态标志位

Go_Flag=0;

//前进标志位

wheel_L_Flag=0;

//左转标志位

wheel_R_Flag=0;

//右转标志位

wheel_Nav_Flag=0;

//码盘旋转标志位

Back_Flag=0;

//后退标志位

Track_Flag=1;

//循迹标志位

Car_Spend=speed;

//速度值

Control(Car_Spend,Car_Spend);//电机驱动函数

while(Stop_Flag!=0x01);//等待循迹完成}循迹控制函数左转的目的是使智能车在十字路口左转90度,到达另一条黑线上。通过前面的介绍,左侧车轮给予向后的速度,右侧车轮给予向前的速度,即可完成左转动作,当再次发现黑线时停止,即可完成左转。嵌入式智能车左转控制函数Car_Left(),代码如下:voidCar_Left(uint8_tspeed)//主车左转参数:速度{

delay_ms(100);

Stop_Flag=0;

//运行状态标志位

Go_Flag=0;

//前进标志位

wheel_L_Flag=1;

//左转标志位

wheel_R_Flag=0;

//右转标志位

wheel_Nav_Flag=0;

//码盘旋转标志位

Back_Flag=0;

//后退标志位

Track_Flag=0;

//循迹标志位

Car_Spend=speed;

//速度值

Control(-Car_Spend,Car_Spend);//电机驱动函数

while(Stop_Flag!=0x02);//等待左转完成

delay_ms(100);}左转控制函数右转的目的是使智能车在十字路口右转90度,到达另一条黑线上。通过前面的介绍,左侧车轮给予向前的速度,右侧车轮给予向后的速度,即可完成右转动作,当再次发现黑线时停止,即可完成右转。嵌入式智能车右转控制函数Car

温馨提示

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

评论

0/150

提交评论