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