台达plc控制步进电机程序实例

一、步进电机原理与结构 步进电机步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。 步进电机收到一个脉冲,步进电机走一个步距角。 在非超载的情况下,电机的转速、停止的位置只取决于控制脉冲信号的频率和脉冲数。 脉冲数越多,电机转动的角度越大。脉冲的频率越高,电机转速越快,但一旦超过最高频率,

一、步进电机原理与结构
步进电机步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。

步进电机收到一个脉冲,步进电机走一个步距角。

在非超载的情况下,电机的转速、停止的位置只取决于控制脉冲信号的频率和脉冲数。

脉冲数越多,电机转动的角度越大。脉冲的频率越高,电机转速越快,但一旦超过最高频率,电机无法运行,并伴有啸叫声。输出力矩与电机转速成反比。由转子铁芯和定子线圈组成。

通常用作定位控制和定速控制。具有惯量低、定位精度高、无累计误差、控制简单等特点。

其精度为步距角的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语言。梯形图请自行验证。

知秋君
上一篇 2024-08-05 15:48
下一篇 2024-08-05 15:12

相关推荐