步进电机如何控制电机的正反转

步进电机如何控制电机的正反转,我用得是2916驱动,不懂怎么控制步进电机正反转,正反转是什么原理控制的!

只要控制在四相绕组上输入脉冲的顺序,就可以控制电机的正转/反转。(控制延时就能控制转速。)

步进电机有四相绕组A、B、C、D,当一绕组通电时在电动机内部形成N-S极,产生磁场,当通电的相发生变化,磁场发生旋转,在磁场的作用下,转子将转动,若步进电机按双四拍的方式来工作。

在A、B、C、D四相绕组上输入脉冲的顺序为AB→BC→CD→DA→AB,步进电机沿顺时针方向转动,即正转;若在A、B、C、D四相绕组上依次输入脉冲AB→DA→CD→BC→AB;步进电机将沿逆时针方向旋转,即反转。

扩展资料:

步进电机有步距角(涉及到相数)、静转矩、及电流三大要素组成。一旦三大要素确定,步进电机的型号便确定下来了。

1、步距角的选择

电机的步距角取决于负载精度的要求,将负载的最小分辨率(当量)换算到电机轴上,每个当量电机应走多少角度(包括减速)。电机的步距角应等于或小于此角度。市场上步进电机的步距角一般有0.36度/0.72度(五相电机)、0.9度/1.8度(二、四相电机)、1.5度/3度 (三相电机)等。

2、静力矩的选择

步进电机的动态力矩一下子很难确定,我们往往先确定电机的静力矩。静力矩选择的依据是电机工作的负载,而负载可分为惯性负载和摩擦负载二种。单一的惯性负载和单一的摩擦负载是不存在的。直接起动时(一般由低速)时二种负载均要考虑,加速起动时主要考虑惯性负载,恒速运行进只要考虑摩擦负载。一般情况下,静力矩应为摩擦负载的2-3倍内好,静力矩一旦选定,电机的机座及长度便能确定下来(几何尺寸)。

3、电流的选择

静力矩一样的电机,由于电流参数不同,其运行特性差别很大,可依据矩频特性曲线图,判断电机的电流。

参考资料来源:百度百科-步进电机

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-04-09
控制步进电机正反转的实际应用程序

/*这是一个控制步进电机正反转的实际应用程序*/
/*选用的是三相步进电机驱动器,p14口线用做步进电机的脉冲控制*/
/*p13口线用做步进电机的方向控制。p15,p16,p17是光耦开关量输入*/
/*信号端,p20,p21,p22,p23与X25045.html">X25045看门狗存储器相连*/
/*k7,k8键是设定步进电机转动速度参数的加减键*/
/*k9是启动运行键,按一下k9,步进电机开始运行,直到p17口线有信号输入才停止*/
/*k10是停止键,任何时候按下k10都将停止步进电机当前的运行*/
/*k11是步进运行键,按一下,步进电机动一下*/
/*k12键是反向运行键,按一下,步进电机开始反向运行,知道p15口线有信号才停止*/
/*如果p16口线有信号输入,则只有k12键才起作用,其它键都没反应。*/
START:do;
$INCLUDE(REG51.DCL)
DECLARE (addrl,n,I,j,ok,ds) byte; /*定义变量*/
declare l(5) byte;
declare (dat,data) byte at (30h);
declare delay word;
DECLARE ACO(11) BYTE CONSTANT (05h,9fh,23h,0bh,99h,49h,/*定义LED段码表*/
41h,1fh,01h,09h,00h);
declare si literally ''p21'',sck literally ''p20''; /*X25045囗线定义*/
declare so literally ''p22'',cs literally ''p23'';
dog:procedure; /* 初始化看门狗X25045.html">X25045 */
cs=1;
call time(1);
cs=0;
call time(1);
cs=1;
end dog;

run:procedure; /*步进电机运行脉冲输出程序*/
if ok=1 then
call dog;
do;
p14=0;
call time(1);
p14=1;
call time(1);
end;
end run;

DISPLAY:PROCEDURE(L0,L10); /*显示子程序*/
DECLARE (L0,L10) BYTE; /*定义显示二位*/
n=L10;
n=aco(n); /*十位数BCD码译成段码*/
sbuf=n; /*十位数送164显示*/
do while ti=0; /*等待发送结束*/
call dog; /*看门狗定时器复位*/
end;
n=L0;
n=aco(n);
sbuf=n; /*个位数送164显示*/
do while ti=0;
call dog;
end;
end DISPLAY;
outbyt: procedure(da); /*向看门狗存储器写入一字节*/
declare (i,da) byte;
j=da; /*将要写入的字节赋给临时变量J */
do i=0 to 7; /*左移8位,送到口线si */
sck=0;
j=scl(j,1);
si=cy;
sck=1; /*每移一位数据,跟一个时钟信号*/
end;
end outbyt;

inbyt: procedure; /* 从看门狗存储器读出一字节 */
declare (i,di) byte;
j=0;
do i=0 to 7;
sck=1;
sck=0;
cy=so;
j=scl(j,1); /*从看门狗存储器读出一字节送入临时变量j*/
end;
dat=j;
end inbyt;

wrenable: procedure; /* 置看门狗写使能*/
sck=0;
cs=0;
; /* write enable command */
call outbyt(06h); /* X25045.html">X25045 写使能指令06h */
cs=1;
sck=0;
end wrenable;

wrdisable: procedure; /* 置看门狗写禁止 */
sck=0;
cs=0;
; /* write disable command */
call outbyt(04h);
sck=0;
cs=1;
end wrdisable;

wrregister: procedure; /* 写状态寄存器 */
sck=0;
cs=0;
dat=01h; /* write register command */
call outbyt(dat);
; /* 00h——1.4S, 20h——200MS, 10h——600MS, 30h——disable Wdog */
call outbyt(00h); /* 设定看门狗定时时间 */
;
sck=0;
cs=1;
call time(200); /* wait to complete writting cycle */
end wrregister;

rdregister:procedure; /* 读看门狗状态寄存器 */
sck=0;
cs=0;
; /* register read command */
call outbyt(05h);
call inbyt; /* status register read in */
sck=0;
cs=1;
end rdregister;

wbyte:procedure; /* 看门狗存储器字节写入子程序 */
declare comm byte;
sck=0;
cs=0;
comm=02h; /* 写指令 02h */
call outbyt(comm);
call outbyt(addrl);
call outbyt(dat); /* send one byte data to X25043 */
cs=1;
sck=0;
call time(150);
end wbyte;

rbyte:procedure; /*看门狗存储器字节读出子程序 */
declare comm byte;
sck=0;
cs=0;
comm=03h; /* read command */
call outbyt(comm);
call outbyt(addrl);
call inbyt; /* read one byte to */
sck=0;
cs=1;
end rbyte;

incdata: procedure; /* 参数修改——"加"键处理子程序 */
if p10=0 then /* 如果K7键按下*/
do;
do while p10=0; /* 等待键松开有效 */
call dog; /* 此处必需调用看门狗复位子程序("喂狗"),否则程序将被看门狗复位*/
end;
data=data 1; /* 设定值 1 */
if data>99 then data=1; /* 规定设定值的上限*/
L(1)=data MOD 10; /*将设定值的十位数拆出来送给十位数显示变量L(1) */
L(2)=data/10; /*将设定值的个位数拆出来送给个位数显示变量L(2) */
call DISPLAY(L(1),L(2)); /* 将改变后的设定值送164显示出来*/
call time(200); /* 延时 */
call dog;
call time(200);
call dog;
call wrenable; /* 置存储器写使能 */
addrl=00h; /* 置存储器地址 */
dat=l(1);
call wbyte; /* 将变量L(1)的值写入存储器00h位置 */
call wrenable;
addrl=01h;
dat=l(2);
call wbyte; /* 将变量L(2)的值写入存储器01h位置 */
end;
end incdata;
decdata: PROCEDURE; /* 参数修改——-"减"键处理子程序- */
IF p11=0 THEN /* k8 键处理子程序 */
do;
do while p11=0;
call dog;
end;
DATA=DATA-1; /* 设定值-1 */
if data=0 then data=99;
L(1)=data MOD 10;
L(2)=data/10;
call DISPLAY(l(1),l(2));
call dog;
call time(200);
call dog;
call time(200);
call dog;
call wrenable;
addrl=00h;
dat=l(1);
call wbyte;
call wrenable;
addrl=01h;
dat=l(2);
call wbyte;
end;
END decdata;

starton: PROCEDURE; /* start */
declare sd byte;
if p12=0 THEN /* K9键处理子程序 */
do;
do while p12=0;
call dog;
end;
if p17=0 then ok=0; /* 如果p17 口线上有信号输入,则运行标志置0 (停止运行)*/
p13=1; /* 置步进电机正向运转 */
call time(200);
call dog;
do while ok=1; /* 当运行标志为1时,执行速度延时操作 */
do sd= 0 to data; /* 根据设定值 data的数值延时来确定步进电机运行时的脉冲给定速度*/
call dog;
end;
end;
END starton;

step: PROCEDURE; /* step */
declare sd byte;
p13=1; /* 置步进电机正向运转 */
call time(200);
call dog;
IF p33=0 THEN /* k11键处理子程序 */
do;
if p17=0 then ok=0; /* 如果p17上有信号输入,则停止运行*/
do while p33=0;
do sd= 0 to data; /* 调用延时,调整步进电机的运行速度 */
call dog;
call time(2);
end;
call run;
call dog;
end;
end;
ok=0;
END step;

BACK: PROCEDURE; /* 反向运行处理子程序 */
declare sd byte;
IF p34=0 THEN
do;
do while p34=0;
call dog;
end;
if p15=0 then ok=0; /* 反向运行时,如果遇到p15上有信号输入,则停止步进电机运行 */
p13=0; /* 置步进电机反向运行 */
call time(200);
call dog;
do while ok=1;
do sd=0 to data; /*根据设定值调节步进电机的运行速度 */
call dog;
call time(2);
end;
call run;
if (p15=0 or p32=0 ) then ok=0; /* p15 或 p32 口线任意一个有信号输入,停止运行 */
end;

end;
END BACK;

MAIN$PROGRAM: /* 初始化主程序 */
ea=0; /* 关中断 */
SCON=00h; /*置串口方式0 ,串行数据输出模式*/
PCON=00h;
tmod=11h;
et0=1;
enable; /* 开中断 (ea=1) */
SCK=0;cs=1; /* 定义存储器口线初始状态 */
call wrenable;
call wrregister; /* 看门狗存储器 初始化 */
call wrenable;
call dog;
p2=0ffh; /* 初始化各个口线的状态 */
p1=0ffh;ok=0;
p14=1;p32=1;p33=1;p34=1;
p13=1;
ADDRL=00h; /* 上电复位后从存储器中读出设定的速度值 */
CALL rbyte;
l(1)=dat;
addrl=01h;
call rbyte;
l(2)=dat;
DATA=L(1) L(2)*10; /*将读出的值合并成十进制,存入变量data中 */
/* 以下是主循环程序 */
LOOP:
IF p10=0 THEN CALL incdata; /* 检测各个按键是否有按下 */
IF p11=0 THEN CALL decdata;
if p12=0 then
do;
ok=1;
call starton;
end;
if p34=0 then
do;
ok=1;
call BACK;
end;
if p33=0 then
do;
ok=1;
call step;
end;
call dog;
CALL DISPLAY(L(1),L(2)); /* 将设定值送164显示 */
call dog;
CALL TIME(100);
call dog;
GOTO LOOP;
END START;
第2个回答  2015-04-09
改变控制脉冲的顺序即可实现步进电机的正反转
第3个回答  推荐于2018-02-24
你要是用脉冲加方向的控制方式,就需要给驱动器方向端输出高低电平来改变步进的旋转方向本回答被提问者和网友采纳
第4个回答  2020-12-25

步进电机如何控制电机的正反转
只要控制在四相绕组上输入脉冲的顺序,就可以控制电机的正转\/反转。(控制延时就能控制转速。)步进电机有四相绕组A、B、C、D,当一绕组通电时在电动机内部形成N-S极,产生磁场,当通电的相发生变化,磁场发生旋转,在磁场的作用下,转子将转动,若步进电机按双四拍的方式来工作。在A、B、C、D四相...

步进电机如何控制电机的正反转
步进电机的正反转控制基于其四相绕组的脉冲输入顺序。通过调整A、B、C、D四个绕组的通电顺序,可以精确地控制电机的旋转方向。当输入脉冲按照AB→BC→CD→DA→AB的顺序,电机将沿顺时针方向旋转,即为正转。反之,若顺序变为AB→DA→CD→BC→AB,则电机会逆时针旋转,即反转。步进电机的控制不仅限于...

步进电机不用驱动器怎么控制正反转?怎么让它转起来?
对于四相步进电机,它有四个绕组,设为:ABCD,\\x0d\\x0a只要对四个绕组按:AB-BC-CD-DA-AB的次序通电就可正转,\\x0d\\x0a按:AB-AD-DC-BC-AB的次序通电就可反转,\\x0d\\x0a要实现这些功能,如果不用驱动器,可用专用集成电路,或用通用集成电路搭配一驱动电路。

如何使步进电机正反转?
该步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图1是该四相反应式步进电机工作原理示意图。向左转|向右转 开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相 绕组...

步进电机能正转反转吗?
正反转换反过来,不会出问题,但要是A+和B+接反,A-、B-接的还是对的话,电机会发烫,弄不好驱动器会烧掉。如果步进电机的线圈是可以双向导电的,那么这个步进电机就是双极性的,相反,如果步进电机的线圈是只允许单向导电的,那么这个步进电机就是单极性的。

步进电机正反转怎么调
步进电机需求驱动器来直接驱动,驱动器的上位是控制器,步进电机的正反转需要驱动器和控制器一起来实现。正反转通过控制器的编程来控制步进电机具体怎么样走,包括正反转和转速、行走距离等,控制器控制步进电机正反转一般是给驱动器方向信号,但也有通过正负脉冲来控制。有些驱动器自带频率发生器,这种驱动...

PLC怎么控制步进电机正反转?
利用步进电机驱动器可以通过PLC的高速输出信号控制步进电机的运动方向、运行速度、运行步数等状态。其中步进电机的方向控制,只需要通过控制U\/D端的On和Off就能决定电机的正转或反转;将光耦隔离的脉冲信号输入到CP端就能决定步进电机的速度和步数;控制FREE信号就能使电机处于自由状态。因此PLC的控制程序相当...

plc如何控制步进电机正、反转?
来控制脉冲输出方向。FX1S的plc,因为能发送高速脉冲的输出点只有y0和y1两个点,所以,我们一般用除这两个以外的y点来控制方向。我采用y12来控制方向。下面这段是我写送料机的正反转程序截图。供参考。m3、x4为正向控制,m4、x5为反向控制;x13为正向限位,x15为反向限位。

不用单片机怎样控制三相混合式步进电机正反转
1、CW、CCW方式,正反转完全由输入的脉冲路数来决定 2、脉冲+方向方式,正反转完全由方向信号的高低电平来控制 所以正反转控制完全可以用一个开关就可以控制

信捷plc控制步进电机:如何控制电机正转一圈反转一圈,再反转一圈正转一...
步进电机一般是4线 用代号 A、B、C、D代替 a到b通电 电机即转向ab线圈的位置 ,b到c通电即可转向bc的线圈相角、、、以此类推 a-b,b-c,c-d,d-a 就刚好是一圈 每转一个相角,你就给一个相同的延时,然后用一个总延时控制分段延时 改变延时既可以改变速度,反转就是 把上面的反过...

相似回答