如图为M415步进电机驱动器
Signal端
PUL为脉冲输入信号。
DIR方向输入信号,用于改变电机运转方向;不接该口会朝一个默认方向转动
ENA为使能信号,用于使能或禁止驱动器输出;
OPTO为脉冲、方向、使能信号电源正端,接5v。
High Voltage端
A+和A-接步进电机A相绕组的正负端;B+和B-接步进电机B相绕组的正负端。
步进电机一般有两组共四条线引出,取两条线相连,若用手转电机不能转动,则为一组。将一组线接入A+,A-(正负无所谓),另一组B+,B-。
51单片机没有足够电压驱动步进电机,只能发射脉冲信号。供电电源接到驱动器上,接上电源后,驱动器侧面指示灯会发亮(我的是蓝色灯光)。
Setting端
左上,Micro step是细分数,一个细分数下电机转动1.8°。Pulse/rev是脉冲圈数,即在该细分数下转一圈360°需要多少个脉冲信号。(1 *1.8° *200 =360°)
细分数和脉冲圈数由s1,s2,s3,共同控制,将驱动器侧面s1,s2,s3拨到指定位置即可调节。
左下,Current(A)为平常电流大小,PK current为峰值电流大小,使用时注意不要超过和低于这两值。
两个电流由s4,s5,s6控制,同样在驱动器侧面可以调节
单片机(普中单核A2)左上角又步进电机模块的输出串口(下面的J47)
定义3个段端口PUL,DIR,ENA为P10至P14都可以。
举例:控制步进电机转一圈。
s3为off,其余为on的情况下,细分数1(1个脉冲1.8°),也就是说转一圈需要提供200个脉冲
延时函数不能太小,不然电机来不及转动脉冲信号就变了。k是全局变量,赋值为0.
void stepmotor()
{
while(k<=200)
{
PUL=0;
delay(500);
PUL=1;
delay(500);
k++;
}
}
下面的代码是传入半径和要走的距离,步进电机就会转动该距离然后停止。
#include<reg52.h>
typedef unsigned int u16; //s3为off,其余为on的情况下适用
typedef unsigned char u8;
sbit PUL=P1^0; //输出脉冲口,接单片机左上角01
sbit DIR=P1^2; // 控制方向,接03
sbit ENA=P1^3; //使能,接04
//OPTO接5v
void delay(u16 i)
{
while(i--);
}
u16 k=0;
void stepmotor(float r ,float s) //传入半径和要走的距离
{
float circle_length;
int quanshu;
circle_length=3.1415 * r * r;
quanshu=s/circle_length;
while(k<=200*quanshu)
{
PUL=0;
delay(500);
PUL=1;
delay(500);
k++;
}
}
void main()
{
ENA=0;
stepmotor(1.23,2.3);
while(1);//while(1)使执行停止,不再重复执行
}