步进电机的使用一定要选择一个比较好的机型,最起码能在网上搜到它的相关资料。这样会给电机的参数的确定提供相关信息。我最近学了一个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