一、步进电机原理与结构
步进电机步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
步进电机收到一个脉冲,步进电机走一个步距角。
在非超载的情况下,电机的转速、停止的位置只取决于控制脉冲信号的频率和脉冲数。
脉冲数越多,电机转动的角度越大。脉冲的频率越高,电机转速越快,但一旦超过最高频率,电机无法运行,并伴有啸叫声。输出力矩与电机转速成反比。由转子铁芯和定子线圈组成。
通常用作定位控制和定速控制。具有惯量低、定位精度高、无累计误差、控制简单等特点。
其精度为步距角的3-5%,只具有周期性,且不累计。
步进电机驱动器的细分技术:细分是步进电机每走一步的脉冲,是多个呈阶梯状的脉冲组成,有驱动器精准控制电机的相电流,有电机无关。实质上是一种电子阻尼技术,其主要目的是减弱或消除步进电机的低频震动,提高运转精度是细分技术到的一个附带功能。
例如:步进电机额步距角为1.8度,驱动器的细分设置为4,则电机运转的分辨率为1.8/4 = 0.45度/pruse,即控制器需要给驱动发4个脉冲,步进电机走1.8度(以脉冲+方向控制方式为例)。
步进电机驱动器常见的控制方式有四种
脉冲+方向控制
双脉冲
通讯控制
开关量控制
二、控制实例
以脉冲+方向控制为例:
控制器使用的是台达AS228T-APLC,根据步进电机驱动器的接线定义,有如下接线:
由于暂无步进电机驱动器与实物,故使用台达触摸屏软件及PLC编程软件进行程序仿真。
台达AS228T-APLC的数字量输出端子,可带6个轴,输出脉冲频率最高200KHz。
台达PLC的相对位置脉冲输出指令
和接线图一致,使用Y0.0控制脉冲输出,Y0.1控制方向。
编写PLC程序(ST语言实现)
假定模拟步进电机1mm对应PLC1000个脉冲,输出速度为10mm/s。
(* 当前位置设置为零位 *)
IF SetZero THEN
localStationInt :=0;
SR460 :=0;
SR461 :=0;
END_IF;
(* 位置控制*)
(* 正转*)
if Fwd then
Fwd1 := true;
else
Fwd1 := false;
end_if;
IF Fwd1 THEN
DDRVI(3000,10000,Y0.0,Y0.1);
M100 := true;
ELSIF M100 and SM461 THEN (* 当start为false时, *)
SM470 := true;
M100 := false;
Fwd1 := false;
END_IF;
(* 反转*)
if Rev then
Rev1 := true;
else
Rev1 := false;
end_if;
IF Rev1 THEN
(*DPLSY(1000,3000,Y0.0);*)
DDRVI(-3000,10000,Y0.0,Y0.1);
M101 := true;
ELSIF M101 and SM461 THEN (* 当start为false时, *)
SM470 := true;
M101 := false;
Rev1 := false;
END_IF;
(* 获取当前位置 localStationInt为32位元,直接读取SR460 和 SR461的内容*)
localStationInt := SR460;
(* 回零*)
if GoZero then
goZero1 := true;
else
gozero1 := false;
end_if;
if goZero1 then
local_fan := -1*localStationInt;
DDRVI(local_fan,10000,Y0.0,Y0.1);
M102 := true;
ELSIF M102 and SM461 THEN (* 当start为false时, *)
SM470 := true;
M102 := false;
goZero1 :=false;
end_if;
(* 点动---速度控制*)
(* 正转*)
if jog_fwd then
DJOG(10,10000,100,Y0.0,Y0.1);
M103 :=true;
elsIf (NOT jog_fwd) and M103 then
SM470 := true;
M103 := false;
end_if;
(* 反转*)
if jog_rev then
DJOG(10,-10000,100,Y0.0,Y0.1);
M104 :=true;
elsIf (NOT jog_rev) and M104 then
SM470 := true;
M104 := false;
end_if;
(* 点动---位置控制*)
(* 正转*)
if jog_fwd_p then
jog_fwd_p1 := true;
else
jog_fwd_p1 := false;
end_if;
IF jog_fwd_p1 THEN
(*DPLSY(1000,3000,Y0.0);*)
DDRVI(1000,10000,Y0.0,Y0.1);
M105 := true;
ELSIF M105 and SM461 THEN (* 当start为false时, *)
SM470 := true;
M105 := false;
jog_fwd_p := false;
END_IF;
(* 反转*)
if jog_rev_p then
jog_rev_p1 := true;
else
jog_rev_p1 := false;
end_if;
IF jog_rev_p1 THEN
(*DPLSY(1000,3000,Y0.0);*)
DDRVI(-1000,10000,Y0.0,Y0.1);
M106 := true;
ELSIF M106 and SM461 THEN (* 当start为false时, *)
SM470 := true;
M106 := false;
jog_rev_p1 := false;
END_IF;
(* 停止 *)
if m2 then
SM476 := true;
else
SM476 := false;
end_if;
(* 设置当前位置 *)
if setlocal then
setlocal1 := setlocalPostion/65536;
SR460 := setlocalPostion-65536*setlocal1[0];
SR461 := setlocal1[0];
localStationInt := setlocalPostion;
end_if;
(* 轴运动状态 *)
state := SM460;
注:点动–速度控制方式中,当操作停止后,输出脉冲仍未停止,所以加了一个点动位置控制,效果比较好。
但是在ST语言中,当启动输出轴时,无法暂停或停止轴的输出,所以在AS程序手册中提到,若需要中途暂停或停止输出,不建议使用ST语言。梯形图请自行验证。