一、尺寸与接线
一种是红、橙、黄、粉、蓝的,电机实物如下:
注意电机的接头可能是XH2.54-5P的(上左图),也可能是ZH1.5-5P的(上右图)。
还有一种是红、黑、黄、棕、蓝的
这两种线色都是红色为公共线,然后挨着的4根线分别为A、B、C、D。
二、电机结构与参数
这种5线4相电机的内部结构图如下:
给公共极通正电,然后依次把A、B、C、D拉低,就可以形成一个旋转的磁场,拖动转子转动了。
电机自带减速器,减速比为1:64,步进角为5.625/64度,如果需要转动1圈,那么需要360/5.625*64=4096个脉冲信号。
电机还包含以下主要参数(仅供参考,不同厂家生产的有区别)
三、驱动电路
一般使用达林顿管驱动,如ULN2003A。
四、驱动程序
一般对力矩要求高使用2相励磁,对精度要求高使用1-2相励磁。
1、1相励磁的51单片机例程(使用ULN2003)
sbit D1=P1^4; //定义步进电机连接端口
sbit C1=P1^5; //定义步进电机连接端口
sbit B1=P1^6; //定义步进电机连接端口
sbit A1=P1^7; //定义步进电机连接端口
#define Coil_A {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
main()
{
Speed=50; //调整转动速度,速度不可以调节的过快,不然就没有力矩转动了
while(1)
{
Coil_A //遇到Coil_A 用{A1=1;B1=0;C1=0;D1=0;}代替
DelayMs(Speed); //改变这个参数可以调整电机转速 ,
//数字越小,转速越大,力矩越小
Coil_B //遇到Coil_B 用{A1=0;B1=1;C1=0;D1=0;}代替
DelayMs(Speed);
Coil_C //遇到Coil_C 用{A1=0;B1=0;C1=1;D1=0;}代替
DelayMs(Speed);
Coil_D //遇到Coil_D 用{A1=0;B1=0;C1=0;D1=1;}代替
DelayMs(Speed);
}
}
2、2相励磁的51单片机例程(使用ULN2003)
sbit D1=P1^4; //定义步进电机连接端口
sbit C1=P1^5; //定义步进电机连接端口
sbit B1=P1^6; //定义步进电机连接端口
sbit A1=P1^7; //定义步进电机连接端口
#define Coil_AB {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
#define Coil_BC {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
#define Coil_CD {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
#define Coil_DA {A1=1;B1=0;C1=0;D1=1;}//DA相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
main()
{
Speed=50; //调整转动速度,速度不可以调节的过快,不然就没有力矩转动了
while(1)
{
Coil_AB //遇到Coil_AB 用{A1=1;B1=1;C1=0;D1=0;}代替
DelayMs(Speed); //改变这个参数可以调整电机转速 ,
//数字越小,转速越大,力矩越小
Coil_BC //遇到Coil_BC 用{A1=0;B1=1;C1=1;D1=0;}代替
DelayMs(Speed);
Coil_CD //遇到Coil_CD 用{A1=0;B1=0;C1=1;D1=1;}代替
DelayMs(Speed);
Coil_DA //遇到Coil_DA 用{A1=1;B1=0;C1=0;D1=1;}代替
DelayMs(Speed);
}
}
3、1-2相励磁的51单片机例程(使用ULN2003)
sbit D1=P1^4; //定义步进电机连接端口
sbit C1=P1^5; //定义步进电机连接端口
sbit B1=P1^6; //定义步进电机连接端口
sbit A1=P1^7; //定义步进电机连接端口
#define Coil_AB {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
#define Coil_BC {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
#define Coil_CD {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
#define Coil_DA {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_A {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
main()
{
Speed=100; //调整转动速度,速度不可以调节的过快,不然就没有力矩转动了
while(1)
{
Coil_A
DelayMs(Speed);
Coil_AB //遇到Coil_AB 用{A1=1;B1=1;C1=0;D1=0;}代替
DelayMs(Speed); //改变这个参数可以调整电机转速 ,
//数字越小,转速越大,力矩越小
Coil_B
DelayMs(Speed);
Coil_BC
DelayMs(Speed);
Coil_C
DelayMs(Speed);
Coil_CD
DelayMs(Speed);
Coil_D
DelayMs(Speed);
Coil_DA
DelayMs(Speed);
}
}