预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

智能循迹/避障小车研究工作报告智能循迹小车程序结构框图Proteus仿真图软件程序设计智能循迹小车程序结构框图经过几天在网上得查找,对智能循迹/避障小车有了大致得了解,一般有三个模块:1、最基本得小车驱动模块,使用两个二相四线步进电机对小车得两个后轮分别进行驱动,前轮最好用万向轮,能使小车更好地转弯;2、小车循迹模块,在小车底部有三个并排安装得红外对管,对黑色与白色得反射信号不同,经单片机处理后对小车进行相应处理;3、避障模块,我写得程序中对于避障模块就是用中断来处理得(即安装在小车车头得红外对管检测到有障碍物后,就会向单片机得P3_2口输出一个高电平或就是低电平,这时中断程序将对小车进行预先设定好得避障处理),但就是在程序结构框图中,我不太会表示中断处理方式,所以就用查询得方式画了。启动小车开始避障?NY避障模块循迹模块停止?NY停止二、Proteus仿真图我用Proteus大概地仿真了小车得运行状态。图中得两个二相四线步进电机就代表小车得左右轮(假定步进电机顺时针转动方向为小车前进方向),网上有很多种驱动芯片,在仿真时我只使用L298N芯片来驱动步进电机。用三个单刀双制开关模拟用于小车循迹得三个红外对管得输出信号,经一个与门与三极管开关连接到P3_3口,中断程序对P1_0,P1_1,P1_2三个口进行检测,并做出相应处理。同时因为避障模块得优先级高于循迹模块,所以将外部中断0用于避障,外部中断1用于循迹。P1_3口则用于检测小车就是否到达终点。1、小车驱动模块:使用一片298芯片驱动一个二相四线步进电机,电机得电压为12V.2、小车循迹模块:左边为三个单刀双制开关模拟小车循迹使用得红外对管得输出信号,经一个与门与三极管开关送至P3_3口,有P1_4口定时响应中断程序。又经或门送至P1_3口(图因找不到或门,所以用7411与7404代替),检测小车就是否到达终点、3、避障模块:(用一个开关代替车头红外对管得输出信号)4、仿真结果:根据两个步进电机得转动情况,小车可以按照预先设计好得程序进行循迹(转弯,直走),避障处理,最后停止前进。三、软件程序设计#include<reg52、h>#defineucharunsignedcharsbitP1_2=P1^2;//P1口得低三位作为小车循迹得三个红外对管与单片机得信号接口sbitP1_0=P1^0;sbitP1_1=P1^1;sbitP1_3=P1^3;//三个循迹得红外对管输出口经或门后得结果与P1_3接,用于实时检测sbitP1_7=P1^7;//控制两个二相四线步进电机得启动与停止sbitP1_6=P1^6;sbitP1_4=P1^4;//为循迹中断所用得定时/计数器0输出口uchari,j,ms;uchardianji[]={0x11,0x22,0x44,0x88};//电机得转动使小车前进ucharback[]={0x88,0x44,0x22,0x11};//电机得转动使小车后退voiddelay(intz)//延时程序{intx,y;for(x=0;x〈z;x++)for(y=0;y〈500;y++);}voidgoahead()//小车前进程序,一个循环使小车得车轮转动一周{P1_6=1;P1_7=1;for(i=0;i<4;i++){P2=dianji[i];delay(50);}}voidturnleft()//小车左转程序,小车采用两个步进电机驱动,分别控制小车左右{两个车轮得转动。小车左转时,左边得电机停止转动,右边得电机P1_6=0;仍然转动,即实现小车得左转动作;反之则就是小车得右转动作P1_7=1;for(i=0;i〈4;i++){P2=dianji[i];delay(50);}}voidturnright()//小车右转程序{P1_6=1;P1_7=0;for(i=0;i<4;i++){P2=dianji[i];delay(50);}}voidqianjin()//小车前进程序,此程序就是为小车遇到障碍时进行躲避处理时小车前{进程序,一个循环小车得车轮转动三周P1_6=1;P1_7=1;for(j=0;j<3;j++){for(i=0;i〈4;i++){P2=dianji[i];delay(50);}}}voidgoback()//小车后退程序,此程序也就是小车避障环节中得为小车后退得程序,{一个循环,小车得车轮向后转动三周P1_6=1;P1_7=1;for(j=0;j〈3;j++){for(i=0;i<4;i++){P2=back[i];delay(50);}}}voidmain(void)//主程序{TMOD=0x01;//为循迹中断时,设置了一个定时/计数器0,使得循迹中断会定时被响应TH0=(65536-50000)/256;//设置定时/计