单片机/MCUwilliam hill官网
直播中

5260yezhu

11年用户 13经验值
擅长:模拟技术
私信 关注
[问答]

求循迹小车思路

我参加了学校的一个迅疾小车比赛,传感器是红外的,基于AT89C52,四个直流电机驱动四个轮子,L289N驱动板
我想请教一下大家,关于过弯,大家有什么好的思路?我尝试过用PWM波控制内侧轮子减速过弯,也尝试过内侧反转过弯,效果都不是很理想。因为速度太快,总是冲出迹线。
下面是我写的PWM调制程序,大家看看有什么问题
       TR0=1;
       TH0=(65536-1000)/256;
       TL0=(65536-1000)%256;
       num++;
       if(num          P2=0xe8;
       else
        {
         if(num<100)
           P2=0x00;
         else
           num=0;
         }
下面是我应经写出来的,还没有成功的程序,麻烦大家看看在那么改,我是新手,好多东西都不懂,希望大家指导。
#include
#define uint unsigned int
#define uchar unsigned char
#define ZKB 20
#define ZKB1 50
uint num=0,tt;

***it gg1=P1^7;
***it gg2=P1^6;
***it gg3=P1^5;
***it gg4=P1^4;

void delay(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

void go_straiht();
void turn_left();
void turn_right();

void main()
{   
P0=0x48;
P2=0x48;
delay(100);
P0=0xe8;
P2=0xe8;
EA=1;
TH0=(65536-10)/256;
TL0=(65536-10)%256;
ET0=1;
  while(1)
  {
   if((gg1&&gg2&&gg3&&gg4)==1)
    {
     go_straiht();
     delay(100);
    }   
   if(gg1==0)
    {
     turn_left();
     delay(500);
    }
   if(gg2==0)
    {
     turn_left();
     delay(500);
    }   
   if(gg3==0)
    {
     turn_right();
     delay(500);
    }
   if(gg4==0)
    {
     turn_right();
     delay(500);
    }      
  }
}
void go_straiht()
{
TR0=1;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
num++;
if(num   {
    P2=0xe8;
    P0=0xe8;
  }
else
  {
   if(num<100)
    {
      P2=0x00;
      P0=0xe8;
     }
   else
     num=0;
  }
}
void turn_left()
{
TR0=1;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
num++;
if(num     P2=0xe8;
else
  {
   if(num<100)
      P2=0x00;
   else
     num=0;
  }
}

void turn_right()
{
TR0=1;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
num++;
if(num     P0=0xe8;
else
  {
   if(num<100)
      P0=0x00;
   else
     num=0;
  }
}

更多回帖

发帖
×
20
完善资料,
赚取积分