可以,如wang17077869所述差不多。但对于你提的问题,可以作如下细化:
1.加减速问题。用PWM(直观点说就是一串连续的高低电平)可以做到,占空比越大,电压越高,速度越快。
2,独立问题。这个可以用一个定时器来做,其实,就是用这个定时器来产生两路独立的PWM,而这两路PWM信号分别给两个电机,这样两个电机就相互独立。
下面是我写的一个小程序,在protues中仿真过,相互独立。
下面是定时器的程序:
//两个电机的速度用参数G_pwm_num0,G_pwm_num1来控制,out1~out4分别接两个电机(具体对应关系你看一下就明了)。
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit out1=P2^0;
sbit out2=P2^1;
sbit out3=P2^2;
sbit out4=P2^3;
bit pwm0;bit pwm1;
bit o1,o2,o3,o4;
uchar G_pwm_num0=50;//(占空比为50%),这两个参数的最大值为100,因为下面count<=100,可以改,但不要太小也不要太大,这为什么,希望你自己想一下。)
uchar G_pwm_num1=50;
uchar count;
void time_init()
{
TMOD=0x21;
EA=1;
TH1=156;
TL1=156;
TR1=1;
ET1=1;
ET0=1;
TH0=0;
TL0=0;
}
void time1() interrupt 3
{
count++;
if(count pwm0=1; else pwm0=0; if(count pwm1=1; else pwm1=0; if(count==100) //这里的占空比是这样算的(G_pwm_num0/100,G_pwm_num1/100) { count=0; } else _nop_(); out1=o1&&pwm0;//left+ out2=o2&&pwm0; out3=o3&&pwm1;//right+ out4=o4&&pwm1; } void main() { G_pwm_num0=60;//占空比为60%,可自行定义大小 o1=1; G_pwm_num1=30; o3=1; o4=0; while(1); 说明:那程序怎么控制转向呢? 相信你也知道 ,电机的两个脚正接反接时转向是不一样的。 在上面的程序中,o1,o2是电机的转向控制参数。假如正转时o1=1,o2=0;那反转时就反过来,o1=0,o2=1;这样当你要转速时改变这两个参数的值就可以了。 希望对你有帮助,还有问题,我们可以相互探讨一下,呵呵。 下面是仿真图: 两张图的占空比不一样的,而且相互独立。
L298N可以驱动两个直流电机和一个步进电机。有两个使能端ENa和ENb分别控制电机output12和output34。而单片机通过控制4个输入IN口对其控制。比如IN1=1;IN2=0;使能端ENa=1;时,电机1就正传。IN1=0;IN2=1;ENa=1;就反转。关闭使能端ENa=0;或者IN1=IN2时就不转了。至于减速是调速的问题,可通过定时器产生PWM脉冲,调节低电平占空比达到。
那个最长的答案