小车循迹壁障等流程图.docx

上传人:b****2 文档编号:23238568 上传时间:2023-05-15 格式:DOCX 页数:15 大小:704.77KB
下载 相关 举报
小车循迹壁障等流程图.docx_第1页
第1页 / 共15页
小车循迹壁障等流程图.docx_第2页
第2页 / 共15页
小车循迹壁障等流程图.docx_第3页
第3页 / 共15页
小车循迹壁障等流程图.docx_第4页
第4页 / 共15页
小车循迹壁障等流程图.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

小车循迹壁障等流程图.docx

《小车循迹壁障等流程图.docx》由会员分享,可在线阅读,更多相关《小车循迹壁障等流程图.docx(15页珍藏版)》请在冰豆网上搜索。

小车循迹壁障等流程图.docx

小车循迹壁障等流程图

#include<reg51。

h〉 ﻪ#include<math.h〉ﻪ#defineuchar unsignedchar#defineuint unsigned int ﻪsbiten1=P1^0;/*L298的EnableA*/ ﻪsbiten2=P1^1;/*L298的EnableB*/ sbit s1=P1^2; /*L298的Input1 */ﻪsbits2=P1^3; /*L298的Input2*/ﻪsbits3=P1^4; /*L298的Input3*/ﻪsbits4=P1^5;/*L298的Input 4*/ ﻪuchart=0;/*中断计数器*/ ﻪucharm1=0; /*电机1速度值*/ ucharm2=0;/*电机2速度值*/ﻪuchartmp1,tmp2;/*电机当前速度值*/ﻪ/* 电机控制函数index-电机号(1,2);speed-电机速度(-100—100)*/voidmotor(ucharindex,char speed)ﻪ{ if(speed>=—100 &&speed<=100)ﻪ{if(index==1) /* 电机1的处理*/ﻪ{m1=abs(speed); /*取速度的绝对值*/if(speed<0)/*速度值为负则反转*/ ﻪ{s1=0;s2=1;}ﻪ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>0;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>0;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 传感器应用图示

 

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

当前位置:首页 > 外语学习 > 英语考试

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

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