我用了一个l298n驱动,现在会使用,会前进后退,左右转弯,只是无法直行因为左右电机转速不同,请问
答案:1 悬赏:60 手机版
解决时间 2021-03-27 15:24
- 提问者网友:人生佛魔见
- 2021-03-26 18:38
我用了一个l298n驱动,现在会使用,会前进后退,左右转弯,只是无法直行因为左右电机转速不同,请问
最佳答案
- 五星知识达人网友:污到你湿
- 2021-03-26 18:53
解决L298N驱动两直流电机要实现不跑偏的问题
直流电机采用有刹减速直流电机
附代码:
利用2051的T0产生双路PWM信号,推动L293D或L298N为直流电机调速,程序已通过调试。
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit en1=P1^0;
sbit en2=P1^1;
sbit s1=P1^2;
sbit s2=P1^3;
sbit s3=P1^4;
sbit s4=P1^5;
uchar t=0;
uchar m1=0;
uchar m2=0;
uchar tmp1,tmp2;
void motor(uchar index, char speed)
{
if(speed>=-100 && speed<=100)
{
if(index==1)
{
m1=abs(speed);
if(speed<0)
{
s1=0;
s2=1;
}
else
{
s1=1;
s2=0;
}
}
if(index==2)
{
m2=abs(speed);
if(speed<0)
{
s3=0;
s4=1;
}
else
{
s3=1;
s4=0;
}
}
}
}
void delay(uint j)
{
for(j;j>0;j--);
}
void main()
{
uchar i;
TMOD=0x02;
TH0=0x9B;
TL0=0x9B;
EA=1;
ET0=1;
TR0=1;
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() interrupt 1
{
if(t==0)
{
tmp1=m1;
tmp2=m2;
}
if(t if(t t++;
if(t>=100) t=0;
}
直流电机采用有刹减速直流电机
附代码:
利用2051的T0产生双路PWM信号,推动L293D或L298N为直流电机调速,程序已通过调试。
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit en1=P1^0;
sbit en2=P1^1;
sbit s1=P1^2;
sbit s2=P1^3;
sbit s3=P1^4;
sbit s4=P1^5;
uchar t=0;
uchar m1=0;
uchar m2=0;
uchar tmp1,tmp2;
void motor(uchar index, char speed)
{
if(speed>=-100 && speed<=100)
{
if(index==1)
{
m1=abs(speed);
if(speed<0)
{
s1=0;
s2=1;
}
else
{
s1=1;
s2=0;
}
}
if(index==2)
{
m2=abs(speed);
if(speed<0)
{
s3=0;
s4=1;
}
else
{
s3=1;
s4=0;
}
}
}
}
void delay(uint j)
{
for(j;j>0;j--);
}
void main()
{
uchar i;
TMOD=0x02;
TH0=0x9B;
TL0=0x9B;
EA=1;
ET0=1;
TR0=1;
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() interrupt 1
{
if(t==0)
{
tmp1=m1;
tmp2=m2;
}
if(t if(t t++;
if(t>=100) t=0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯