智能循迹小车设计之欧阳体创编.docx
- 文档编号:11865163
- 上传时间:2023-04-06
- 格式:DOCX
- 页数:7
- 大小:28.02KB
智能循迹小车设计之欧阳体创编.docx
《智能循迹小车设计之欧阳体创编.docx》由会员分享,可在线阅读,更多相关《智能循迹小车设计之欧阳体创编.docx(7页珍藏版)》请在冰豆网上搜索。
智能循迹小车设计之欧阳体创编
智能循迹/避障小车研究
时间:
2021.02.03
创作:
欧阳体
工作报告
一、智能循迹小车程序结构框图
二、Proteus仿真图
三、软件程序设计
一、智能循迹小车程序结构框图
经过几天在网上的查找,对智能循迹/避障小车有了大致的了解,
一般有三个模块:
1、最基本的小车驱动模块,使用两个二相四线步进电机对小车的两个后轮分别进行驱动,前轮最好用万向轮,能使小车更好地转弯;
2、小车循迹模块,在小车底部有三个并排安装的红外对管,对黑色与白色的反射信号不同,经单片机处理后对小车进行相应处理;
3、避障模块,我写的程序中对于避障模块是用中断来处理的(即安装在小车车头的红外对管检测到有障碍物后,就会向单片机的P3_2口输出一个高电平或是低电平,这时中断程序将对小车进行预先设定好的避障处理),但是在程序结构框图中,我不太会表示中断处理方式,所以就用查询的方式画了。
N
Y
N
Y
二、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
#defineucharunsignedchar
sbitP1_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 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;//设置定时/计数器的初值 TL0=(65536-50000)%256; TR0=1;//开启定时/计数器0 IE=0x87;//打开T0,INT0,INT1的中断 IT0=1;//两个外部中断的中断触发方式 IT1=1; P1_4=0;//设定初值 ms=0; while(P1_3)//场地为白纸黑线,红外对管发射接收后,若为黑色则向单片机输出低电 {平,若为白色则输出高电平。 三个红外对管接一个或门后到P1_3口,只 goahead();要有一个对管检测到白线,小车就一直向前走。 场地的终点为一条与循 }迹线路相垂直的黑线,若三个对管都检测到黑线,即输出都为低电平, P1_6=0;此时跳出循环,关闭两个步进电机,小车停止运行。 P1_7=0; } voidtime0()interrupt0//避障中断处理程序。 在小车车头安装一个或是两个红外对 {管,用于检测循迹轨道上的障碍物。 若有障碍物出现则红外 P1_6=0;对管向单片机的P3_2口输出低电平,做出相应处理。 P1_7=0;//先关闭两个步进电机,使其正转与反转之间有一个缓冲时间 goback();//后退,左转,前进,右转,前进,右转,直走 turnleft(); qianjin(); turnright(); qianjin(); turnright(); goahead(); } voidtt_0()interrupt2//循迹中断程序。 由于安装在小车下面的三个红外对管会长时间地保持一个电平不变,若直接将此信号经与门连接到P3_3口时,中断程序只执行一次便不再继续响应,所以我加了一个三极管开关。 这样隔一段时间三极管导通,将信号传送到P3_3口。 由定时器设定每100ms导通三极管一次,将三个用于循迹的对管的输出经或门后送到P3_3口。 { if(P1_0==0&&P1_2==1)//若左边红外管输出为低电平,右边的为高电平,则左转 turnleft(); if(P1_0==1&&P1_2==0)//若左边红外管输出为高电平,右边的为低电平,则右转 turnright(); if(P1_0==0&&P1_1==0&&P1_2==0)//若三个都为低电平,则关闭步进电机,小车停止 { P1_6=0; P1_7=0; } } voidtime_0()interrupt1//定时100ms,P1_4口反相 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; ms++; if(ms>=2) { P1_4=! P1_4; ms=0; } } 时间: 2021.02.03 创作: 欧阳体
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 小车 设计 欧阳 创编