1、小车循迹壁障等流程图#inclurg1。hiludmath #defie crunned cha #define uiunigneditsbit en1=P1; /* 29的Enable A /bi en2P11; /* L298的Enab B sbs1=P12;/* L29的Iput 1* bi s=3;/* L298的Inu 2 / bi s3=P14;/* 29的Inpu 3 i s4=P15; L29的Ipu4 */char t=; / 中断计数器 uchar m10;/ 电机速度值 */uc m2=; / 电机2速度值 / cha tmp1,tp2; / 电机当前速度值 */ /*电
2、机控制函数 ie-电机号(1,2); peed-电机速度(-10010) */ vo moor(cha ndex, carseed) if(spe=10& pe=100) if(indx=1)/电机1的处理 * m=bs(peed);/ 取速度的绝对值 / if(sp0;j-); vod main() chri;TMOD=x0; /* 设定T0的工作模式为2 / TH09B; / 装入定时器的初值 * TL0=0x9;EA=1; * 开中断 */ E=1; /定时器0允许中断 * T0=1;/* 启动定时器 / wile() /* 电机实际控制演示 */ for(i=0;i=10;i+) /*
3、 正转加速 *mtr(1,); moto(2,i); dely(500); or(=0;i0;i-) / 正转减速 */ motor(1,i); motor(2,i); ey(5000); for(i=0;i=100;i) / 反转加速 * to(,i); oor(2,i); ey(5000); for(i0;0;i) /* 反转减速/ moto(1,); to(2,-); dly(00); voidtimr0() nterrupt 1 T0中断服务程序 * (=0) /* 个PW周期完成后才会接受新数值 * tmp1=1; tmp2=m; if(ttmp1) e1=1; ee en=0; /
4、*产生电机1的WM信号 /i(ttm2)n2=1; lseen2=0;/ 产生电机2的PW信号 /+; if(t10) =0; /*个W信号由1次中断产生 有两路W,希望对你有帮助!incude ”rg52Hcle MType.h/=L298端口定义=sbitENA =P36; /左轮驱动使能sbit IN =03;/左轮黑线()b I2 P4; /左轮红线(+)sbit IN3 05; /右轮红线()sbIN=P6; 右轮黑线(+)sbit ENB P37; /右轮驱动使能/=PW=define PWM_CUST 00 /PWM细分等份10uchar MOTO_speed1; /左边电机转速
5、uca MOTO_sed2; /右边电机转速uhar PM_b1; /左边电机取绝对值后占空比c PWMabs2; /左边电机取绝对值后占空比 char PWM_va1=20; /左边电机直走速度 (不同的电机,此参数不同)char P_ar2=20; /右边电机直走速度ch PWMAnd=0; /PWM自增变量/*名称:motr(ch peed,char sped2);功能:同时调节电机的转速参数:eed1:电机的M值;speed2:电机2的WM值 pee0。正转;ped0。反转(-100100)调用:eternn ab(int l); 取绝对值返回:/* od mt(cr see1,car
6、speed2) /=左边电机= i(peed0) IN1=0;IN =;/正转 ese if (ped1PWMAnd) EN1; /右边电机占空比输出 els ENB=0; f (PMnd=PWM_CUST) PWMAn0; /M计数清零lse PMd+=1; /*名称:vodTIMEInt ();功能:定时器初始化指令:调用:无返回:无/*/ vodTIEnit () /=定时器2初始化PWM= TON = 000; TMOD = x00; CAPH =0xff; /定时01ms CP = 0x; TH0 = 0xff; T0 = 0x47; ET0 1; /定时器2中断开 TR0 = 1;
7、 /PWM定时器关,PM周期为ms /*名称:void PWM_ime2 () terrt 功能:T2中断,PWM控制参数:调用:motor_PM();/PM占空比输出返回:/*/ voi me2 () inerpt 5 TR2= ; TF2 = 0; ET2 = 0; 定时器0中断禁止 ot_P();/PWM占空比输出 ET2= 1; /定时中断0开启 R2 = ;mai() E_Ini () ; moo(0,5);/左右电机的转速都是5 图 31 ST188实物图 图 3-2 88管脚图及内部电路通过ST8检测黑线,输出接收到的信号给324,接收电压与比较电压比较后,输出信号变为高低电平,
8、再输入到单片机中,用以判定是否检测到黑线。图35 传感器模块电路图PWM1为,PWM2为1时,1和Q2导通,节点和节点2都是低电平,Q5和Q16导通,电机不工作。PWM1为0,PW为0时,Q1和Q2导通,节点1和节点2都是高电平,Q13和Q导通,电机不工作.WM1为1,PWM2为0时,Q1导通但Q2不导通,节点1是低电平而节点2是高电平,Q4和导通,电机逆时针转动。W为,WM为1时,Q1不导通但Q导通,节点1是高电平而节点2是低电平,1和Q16导通,电机顺时针转动。图2-系统实现原理结构图小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/口,一旦检测到某个I/O口有信号,即进入判断处
9、理程序,先确定4个探测器中的哪一个探测到了黑线,如果左面第一级传感器或者左面第二级传感器探测到黑线,即小车左半部分压到黑线,车身向右偏出,此时应使小车向左转;如果是右面第一级传感器或右面第二级传感器探测到了黑线,即车身右半部压住黑线,小车向左偏出了轨迹,则应使小车向右转。在经过了方向调整后,小车再继续向前行走,并继续探测黑线重复上述动作.循迹流程图如图42所示上电运行后,放到没有障碍物的空地上,小车直走。当前方没有障碍物的的时候车就一直直走。如果前方遇到障碍物,则小车做左转运动.直至前方没有障碍物,这时小车恢复直走. 如果前方有障碍物的时候,左边同时也有障碍物,则小车右转。直至左边没有障碍物或
10、者前方没有障碍物。这时小车恢复左转,或者直走。如果前面没有障碍物,则先执行直走。 如果前方,左方,右方均有障碍物,则小车后退,直至前方,左方,右方任一方向没有障碍,则此时小车开始以前方,左方,右方的优先级开始执行转向。也就是说如果前方没有障碍物,即使其他任意方向都有障碍则小车依然直走,如果前方有障碍,左边没有则右转,前方左方都有障碍,则小车右转。否则小车后退。避障及寻光源子程序 在没有检测到障碍物时调用光源检测子程序,寻找光源。当检测到障碍物时,控制小车左转一定时间后,再右转一定时间,再次判断前方是否有障碍物,直到没有障碍物的信号再调用寻光源子程序。绕障碍物程序流程图如图6. 外避障传感器,这是一种集发射与接收于一 体的光电传感器。检测距离可以根据要求进行调节,调节范围为8cm。该传感器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点, 可以广泛应用于机器人避障、流水线计件等众多场合.应用如图。13 红 传 + (V) 感 黄 信号输出 器 绿 - 图 2.1.3传感器应用图示
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1