小车循迹壁障等流程图Word文件下载.docx
《小车循迹壁障等流程图Word文件下载.docx》由会员分享,可在线阅读,更多相关《小车循迹壁障等流程图Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
}ﻪelse/* 不为负数则正转 */ﻪ{ﻪs1=1;
ﻪs2=0;
}}if(index==2) /* 电机2的处理*/ﻪ{ﻪm2=abs(speed);
/*电机2的速度控制*/ﻪif(speed〈0)/*电机2的方向控制 */ﻪ{ s3=0;
ﻪs4=1;
}ﻪelse {ﻪs3=1;
s4=0;
}ﻪ}ﻪ} }ﻪvoiddelay(uintj)/*简易延时函数 */{for(j;
j>
0;
j—-);
}ﻪvoidmain(){ﻪuchar i;
ﻪTMOD=0x02;
/*设定T0的工作模式为2*/ﻪTH0=0x9B;
/*装入定时器的初值*/TL0=0x9B;
ﻪEA=1;
/*开中断*/ET0=1;
/* 定时器0允许中断*/TR0=1;
/*启动定时器0*/while(1)/*电机实际控制演示*/{for(i=0;
i〈=100;
i++)/*正转加速*/ { motor(1,i);
ﻪmotor(2,i);
ﻪdelay(5000);
ﻪ} ﻪfor(i=100;
i>
i--)/*正转减速*/ﻪ{motor(1,i);
ﻪmotor(2,i);
ﻪdelay(5000);
ﻪ}ﻪfor(i=0;
i<=100;
i++)/*反转加速*/ﻪ{ motor(1,-i);
motor(2,-i);
delay(5000);
}for(i=100;
i>
i-—)/*反转减速 */{ﻪmotor(1,-i);
motor(2,-i);
delay(5000);
}ﻪ}ﻪ}ﻪvoid timer0()interrupt1/*T0中断服务程序*/ﻪ{if(t==0)/*1个PWM周期完成后才会接受新数值*/{ﻪtmp1=m1;
ﻪtmp2=m2;
}ﻪif(t<tmp1)en1=1;
elseen1=0;
/* 产生电机1的PWM信号*/ ﻪif(t〈tmp2) en2=1;
else en2=0;
/*产生电机2的PWM信号*/ ﻪt++;
ﻪif(t〉=100)t=0;
/* 1个PWM信号由100次中断产生*/ﻪ有两路PWM,希望对你有帮助!
#include”reg52.H"#include"
MyType.h"
//=============L298端口定义===============sbit ENA= P3^6;
//左轮驱动使能ﻪsbitIN1= P0^3;
//左轮黑线(—)ﻪsbitIN2= P0^4;
//左轮红线(+)ﻪsbitIN3 =P0^5;
//右轮红线(—)ﻪsbit IN4 = P0^6;
//右轮黑线(+)sbitENB= P3^7;
//右轮驱动使能//=============PWM================ﻪ#definePWM_COUST100//PWM细分等份100ﻪucharMOTO_speed1;
//左边电机转速ﻪucharMOTO_speed2;
//右边电机转速ucharPWM_abs1;
//左边电机取绝对值后占空比ﻪucharPWM_abs2;
//左边电机取绝对值后占空比ﻪucharPWM_var1=20;
//左边电机直走速度(不同的电机,此参数不同)ucharPWM_var2=20;
//右边电机直走速度ﻪucharPWMAnd = 0;
//PWM自增变量ﻪ/******************************************************************ﻪ名称:
motor(charspeed1,charspeed2);
ﻪ功能:
同时调节电机的转速参数:
speed1:
电机1的PWM值;
speed2:
电机2的PWM值 speed>0。
正转;
speed<0。
反转(-100~100)ﻪ调用:
extern intabs(intval);
取绝对值ﻪ返回:
/******************************************************************/ﻪvoidmotor(charspeed1,char speed2){ﻪ//==============左边电机=============ﻪif (speed1>
0) {ﻪ IN1 =0;
IN2=1;
//正转ﻪ} elseif(speed1<
0){IN1=1;
IN2=0;
//反转 }ﻪ //==============右边电机=============if (speed2〉0)ﻪ{ﻪ IN3 =1;
IN4=0;
//正转ﻪ }ﻪelse if (speed2<0)ﻪ {ﻪ IN3 =0;
IN4=1;
//反转ﻪ }}/******************************************************************ﻪ名称:
motor_PWM();
功能:
PWM占空比输出参数:
无ﻪ调用:
无返回:
无ﻪ/******************************************************************/voidmotor_PWM ()ﻪ{ucharPWM_abs1;
ucharPWM_abs2;
ﻪPWM_abs1=MOTO_speed1;
ﻪPWM_abs2=MOTO_speed2;
if(PWM_abs1〉PWMAnd)ENA=1;
//左边电机占空比输出elseENA=0;
if (PWM_abs2>
PWMAnd)ENB=1;
//右边电机占空比输出ﻪ elseENB=0;
ﻪif(PWMAnd>=PWM_COUST)PWMAnd=0;
//PWM计数清零 elsePWMAnd+=1;
ﻪ} ﻪ/******************************************************************ﻪ名称:
void TIME_Init();
ﻪ功能:
定时器初始化ﻪ指令:
ﻪ调用:
无返回:
无/******************************************************************/void TIME_Init(){ﻪ//=========定时器T2初始化 PWM================== TCON=0x00;
TMOD=0x00;
ﻪ RCAPH= 0xff;
//定时0.1msﻪRCAPL=0x47;
TH0=0xff;
TL0=0x47;
ET0=1;
//定时器2中断开ﻪ TR0=1;
//PWM定时器关,PWM周期为10msﻪ}ﻪ/******************************************************************名称:
voidPWM_Time2()interrupt5功能:
T2中断,PWM控制参数:
调用:
motor_PWM();
//PWM占空比输出返回:
/******************************************************************/ﻪvoidPWM_Time2()interrupt5ﻪ{ﻪ TR2 =0;
ﻪ TF2=0;
ﻪET2=0;
//定时器0中断禁止ﻪ motor_PWM();
//PWM占空比输出ﻪET2 =1;
//定时中断0开启ﻪTR2=1;
}ﻪﻪmain(){ﻪ TIME_Init();
motor(50,50);
//左右电机的转速都是50}
图3—1 ST188实物图 图3-2ST188管脚图及内部电路
通过ST188检测黑线,输出接收到的信号给LM324 ,接收电压与比较电压比较后,输出信号变为高低电平,再输入到单片机中,用以判定是否检测到黑线。
图3-5传感器模块电路图
PWM1为1,PWM2为1时,Q1和Q2导通,节点1和节点2都是低电平,Q15和Q16导通,电机不工作。
PWM1为0,PWM2为0时,Q1和Q2导通,节点1和节点2都是高电平,Q13和Q14导通,电机不工作.
PWM1为1,PWM2为0时,Q1导通但Q2不导通,节点1是低电平而节点2是高电平,Q14和Q15导通,电机逆时针转动。
PWM1为0,PWM2为1时,Q1不导通但Q2导通,节点1是高电平而节点2是低电平,Q13和Q16导通,电机顺时针转动。
图2-1 系统实现原理结构图
小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信号,即进入判断处理程序,先确定4个探测器中的哪一个探测到了黑线,如果左面第一级传感器或者左面第二级传感器探测到黑线,即小车左半部分压到黑线,车身向右偏出,此时应使小车向左转;
如果是右面第一级传感器或右面第二级传感器探测到了黑线,即车身右半部压住黑线,小车向左偏出了轨迹,则应使小车向右转。
在经过了方向调整后,小车再继续向前行走,并继续探测黑线重复上述动作.循迹流程图如图4—2所示
上电运行后,放到没有障碍物的空地上,小车直走。
当前方没有障碍物的的时候车就一直直走。
如果前方遇到障碍物,则小车做左转运动.直至前方没有障碍物,这时小车恢复直走.
如果前方有障碍物的时候,左边同时也有障碍物,则小车右转。
直至左边没有障碍物或者前方没有障碍物。
这时小车恢复左转,或者直走。
如果前面没有障碍物,则先执行直走。
如果前方,左方,右方均有障碍物,则小车后退,直至前方,左方,右方任一方向没有障碍,则此时小车开始以前方,左方,右方的优先级开始执行转向。
也就是说如果前方没有障碍物,即使其他任意方向都有障碍则小车依然直走,如果前方有障碍,左边没有则右转,前方左方都有障碍,则小车右转。
否则小车后退。
避障及寻光源子程序ﻫ 在没有检测到障碍物时调用光源检测子程序,寻找光源。
当检测到障碍物时,控制小车左转一定时间后,再右转一定时间,再次判断前方是否有障碍物,直到没有障碍物的信号再调用寻光源子程序。
绕障碍物程序流程图如图6.
外避障传感器,这是一种集发射与接收于一
体的光电传感器。
检测距离可以根据要求进行调节,调节范围为3~80cm。
该传
感器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点,
可以广泛应用于机器人避障、流水线计件等众多场合.应用如图2。
1.3.
红
传 +(5V)
感黄
信号输出
器
绿
-
图2.1.3 传感器应用图示