如图为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;
typedef unsigned char u8;
sbit PUL=P1^0;
sbit DIR=P1^2;
sbit ENA=P1^3;
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);
}
|