L298n控制步进电机

时间:2022-01-17 18:51:49

步进电机的使用一定要选择一个比较好的机型,最起码能在网上搜到它的相关资料。这样会给电机的参数的确定提供相关信息。我最近学了一个EM--462步进电机。这家伙可是把我气炸了,一点信息也没有,上网查都查不到。盲目的试探之后,终于能驱动它了。

对EM--462的描述:有四根线,其他信息没了。

相数:可能是四相,也可能是两相;

 

我开始用的驱动电路是L297搭配L298n使用,但是没搞明白,于是直接用L298N驱动了。我用L298n是这样用的:信号输入端分别从5、 7 、10 、12 脚输入,对应单片机管脚P2^0---P2^3

298的6 、11脚连接单片机的P2^4 、P2^5脚。把他们都置高,就可以工作了。

对于其他脚的连线

4--12v电源、整流桥正极;(整流桥要用两个,现在接与2、3脚一组的那个)

2、3---分别接整流桥 交流 的两个脚(不分顺序)

9--5V电源

1、8、15接地

13、14----分别接另一个整流桥的 交流的两脚 (不分顺序)

整流桥的正负极都要分别接在12V的正负极上。

请务必上网查看L298的用法。(我不会上传,如果需要的话,给我说一声,我发邮件给你,这个我会传上文件的)

 

 

2、3、13、14接在步进电机的四个脚上。关于顺序就得自己摸索了。一般来说按顺序从左至右一些依次对应2、3、13、14脚。从右至左也行,就是转的反向不同而已。可以调节的。

 

来看看程序:

//单八拍运作模式

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit a=P^0;
sbit b=P2^1;
sbit c=P2^2;
sbit d=P2^3;
sbit m=P2^4;
sbit n=P2^5;


uint i=0;

//---------延时函数------------
void delay(uchar z)
{
uint i,j;
for (i=0;i<=z;i++)
     for(j=0;j<=100;j++);
}

//----------主函数---------------
void main()
{
    m=n=1;//使能端???好像吧置零就不转了
i=5;//调节速度
while(1)
{
     a=1;b=0;c=0;d=0;
   delay(i);
   a=1;b=0;c=0;d=0;
   delay(i);

   a=1;b=1;c=0;d=0;
   delay(i);
   a=0;b=1;c=0;d=0;
   delay(i);

   a=0;b=1;c=1;d=0;
   delay(i);
   a=0;b=0;c=1;d=0;
   delay(i);

   a=0;b=0;c=1;d=1;
   delay(i);
   a=0;b=0;c=0;d=1;
   delay(i);
   
   a=1;b=0;c=0;d=1;
   delay(i);

 

}  
}

调延时的时间就可以控制速度了。这里是i的值

再看看单四拍

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit a=P2^0;
sbit b=P2^1;
sbit c=P2^2;
sbit d=P2^3;
sbit m=P2^4;
sbit n=P2^5;


uint i=0;

//---------延时函数------------
void delay(uchar z)
{
uint i,j;
for (i=0;i<=z;i++)
     for(j=0;j<=50;j++);
}

//----------主函数---------------
void main()
{
    m=n=1;
i=5;
while(1)
{
     a=1;b=0;c=0;d=0;
   delay(i);
   a=0;b=1;c=0;d=0;
   delay(i);
   a=0;b=0;c=1;d=0;
   delay(i);
   a=0;b=0;c=0;d=1;
   delay(i);
}
}

双四拍

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit a=P2^0;
sbit b=P2^1;
sbit c=P2^2;
sbit d=P2^3;
sbit m=P2^4;
sbit n=P2^5;


uint i=0;

//---------延时函数------------
void delay(uchar z)
{
uint i,j;
for (i=0;i<=z;i++)
     for(j=0;j<=100;j++);
}

//----------主函数---------------
void main()
{
    m=n=1;
i=5;
while(1)
{
     a=1;b=0;c=0;d=0;
   delay(i);
   a=1;b=1;c=0;d=0;
   delay(i);
   a=0;b=1;c=1;d=0;
   delay(i);
   a=0;b=0;c=1;d=1;
   delay(i);
   a=1;b=0;c=0;d=1;
   delay(i);
}
}

 

还可以控制直流电机的速度。

改改连接方式:

4脚接6V,整流桥的正负极也对应接6V的正负极

2、3一组控制一个电机,13、14一组控制一个电机

看程序

 

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit a=P2^0;//电机一
sbit b=P2^1;//电机一
sbit c=P2^2;//电机二
sbit d=P2^3;//电机二
sbit m=P2^4;//电机一使能端
sbit n=P2^5;//电机二使能端


uint i=0;

//---------延时函数------------
void delay(uchar z)
{
uint i,j;
for (i=0;i<=z;i++)
     for(j=0;j<=100;j++);
}

//----------主函数---------------
void main()
{
    m=n=1;
i=500;
while(1)
{
    a=1;b=0;c=0;d=0;//电机一正转
   delay(i);
   a=0;b=1;c=0;d=0;//电机一反转
   delay(i);
   a=0;b=0;c=1;d=0;//电机二正转
   delay(i);
   a=0;b=0;c=0;d=1;//电机二反转
   delay(i);
   }
}

这个i要大点

这个不能控制速度。控制占空比来控制速度。

以电机一为例

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit a=P2^0;
sbit b=P2^1;


sbit m=P2^4;

//---------延时函数------------
void delay(uchar z)
{
uint i,j;
for (i=0;i<=z;i++)
     for(j=0;j<=100;j++);
}

//----------主函数---------------
void main()
{
    m=1;
    i=5;
while(1)
{         b=0;        //只控制正转

          a=1;        //占空比,我的理解就是转的时间和不转的时间的比值

          delay(5);//转一会时间(1)

          a=0;       //不转

         delay(10);//停一会(2)

   }//循环
}

由于单片机执行的时间很短,所以,电机转的结果是你看不出有停顿,但速度变化了。

调节(1)、(2)的值就能调速度了。

以后的事情自己总结经验。

 

 

难免错误,请斧正。

有兴趣加我QQ:867652398