L298芯片通过51单片机控制两个直流电机,要求两个电机都可以 独立(互不相关) 加速,减速,转向 。

2020-04-25 科技 167阅读

可以,如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()

{

   time_init();

 G_pwm_num0=60;//占空比为60%,可自行定义大小

 o1=1;

   o2=0;//当两者都为0时,停止

 G_pwm_num1=30;

 o3=1;

 o4=0;

 while(1);

}

说明:那程序怎么控制转向呢?

       相信你也知道 ,电机的两个脚正接反接时转向是不一样的。

     在上面的程序中,o1,o2是电机的转向控制参数。假如正转时o1=1,o2=0;那反转时就反过来,o1=0,o2=1;这样当你要转速时改变这两个参数的值就可以了。

   希望对你有帮助,还有问题,我们可以相互探讨一下,呵呵。

下面是仿真图:

 

两张图的占空比不一样的,而且相互独立。

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com