运动控制功能是codesys及EtherCAT通讯的重要功能,接下来对测试EtherCAT的运动控制部分,由于对这一部分功能不熟悉,所以测试程序采用ST语言,采用 case语句,方便测试各个函数的运行功能和状态。
工具准备:
- 树莓派4B,已经按照前述方法设置好。
- ECR60 步进驱动器一个
- 57A2步进电机一个
- CAT6网线一条
- 电源:DC24V
Step1 树莓派准备
树莓派通电,有显示器的化,可以看到wifi是否连接成功,记录下此时的ip地址,由于后续Codesys连接。
Step2 电机及驱动器接线
- 将24V电源连接至驱动器的V+、V-端子
- 将步进电机的A+、A-、B+、B-连接至驱动器电机接线端子,锐特的57A2电机绕组颜色定义为:红、蓝、绿、黑
- 网线连接:CAT6网线一端连接树莓派的网口,另外一端连接ECR60的ECAT IN端口。
- 完成上述步骤后,可以开通24V电源
此时可见ECR60的PWR的绿色指示灯亮起,表示驱动器供电正常;ECAT IN网口的黄色LED灯亮起,表示网线连接正常。
Step3 Codesys项目设置
打开Codesys开发环境,新建一个标准项目,并选择目标板为“Codesys Control for Raspberry PI MC SL”
扫描并选择树莓
添加EhterCAT master主站
设定EtherCAT master 的网口属性,如下图,选择“eth0”
接下来添加ECR60步进驱动器,我手上的是最新的V202版本,直接添加即可。
接下来添加一个运动控制轴,关联到ECR60驱动器,如下图:
右键“Properties”,将轴的名字改为Axis1,如下图:
接下来设定轴的参数。首先设定电机运行的当量,ECR60默认使用10000脉冲/转,对应轴的设置如下图:
Step4 程序编写
至此,整个系统的设置已经完成,接下来编写程序实现步进电机的控制。默认在新建项目时,设定了一个程序“PLC_PRG”的编写方式为ST语言。首先设定运动相关的变量:
PROGRAM PLC_PRG
VAR
mcp: MC_Power; //使能函数
mcmv: MC_Jog; //点动函数
mcmabs: MC_MoveAbsolute; // 绝对值定位运动
mcminc: MC_MoveRelative; // 增量式运动
MVStop: MC_Stop; // 电机停止
Axis1Home: MC_Home; // 电机回零
Axis1Reset: MC_Reset; // 电机故障复位
Motionstate: INT; // 测试用,控制测试功能
Cnt:INT; // 仅仅用于测试
Jog_Pos: BOOL ; // 点动正 使能
Jog_Neg: BOOL; // 点动负 使能
MovEnable: BOOL; // 定位运行、回零及停止时的函数模块使能
MovIncDistance: LREAL; // 增量运动距离设定
MV_Speed: LREAL; // 运行速度设定
MV_Acc: LREAL; // 运行加速度设定
MV_Dec: LREAL; // 运行减速度设定
MV_Jerk: LREAL; // 运行加加速度设定
MovAbsDistance: LREAL; // 绝对定位时的目标位置
END_VAR
设计一个程序,通过状态跳转,实现对各个函数的测试,相关程序如下:
CASE Motionstate OF
0:
Cnt := Cnt+1;
MV_Speed:= 10000;
MV_Acc:= 1000000;
MV_Dec:= 1000000;
MV_Jerk:= 100000000;
Jog_Pos:= TRUE;
1: //Enable motor,Power on
mcp(
Axis:= Axis1 ,
Enable:= TRUE ,
bRegulatorOn:= TRUE,
bDriveStart:= TRUE,
Status=> ,
Busy=> ,
Error=> ,
ErrorID=> );
2:// Disable motor,Power off
mcp(
Axis:=Axis1 ,
Enable:= TRUE ,
bRegulatorOn:= FALSE,
bDriveStart:= TRUE,
Status=> ,
Busy=> ,
Error=> ,
ErrorID=> );
3: // JOG+ and JOG-
mcmv(
Axis:=Axis1 ,
JogForward:=Jog_Pos ,
JogBackward:=Jog_Neg ,
Velocity:= MV_Speed,
Acceleration:= MV_Acc,
Deceleration:= MV_Dec,
Jerk:= MV_Jerk,
Busy=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );
4: // Move relative POS and Neg
mcminc(
Axis:=Axis1 ,
Execute:= MovEnable,
Distance:= MovIncDistance,
Velocity:= MV_Speed,
Acceleration:= MV_Acc,
Deceleration:= MV_Dec,
Jerk:= MV_Jerk,
Done=> ,
Busy=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );
5: // Move Abs
mcmabs(
Axis:=Axis1 ,
Execute:= MovEnable,
Position:= MovAbsDistance,
Velocity:= MV_Speed,
Acceleration:= MV_Acc,
Deceleration:= MV_Dec,
Jerk:= MV_Jerk,
Done=> ,
Busy=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );
6: // Stop motor
MVStop(
Axis:=Axis1 ,
Execute:= MovEnable,
Jerk:= MV_Jerk,
Done=> ,
Busy=> ,
Error=> ,
ErrorID=> );
7: // Home
Axis1Home(
Axis:=Axis1 ,
Execute:= MovEnable,
Done=> ,
Busy=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );
8:
Axis1Reset(
Axis:=Axis1 ,
Execute:= TRUE,
);
END_CASE;
将“PLC_PRG”添加到EtherCAT_Task任务中
至此,程序编写完成,任务设置完成,可以进行下载程序测试。
Step5 运行及测试
在Codesys环境中,“Online” —> “Login”,下载程序进入到树莓派,然后点击“Debug” —> “Start”。如果之前都是顺利的化,此时步进驱动器的EtherCAT的RUN绿色指示灯常亮,ECAT IN的绿色数据灯一直闪烁,轴Axis1的图标为橙色双箭头,说明轴已经准备就绪,橙色是因为树莓派没有正式的授权运行codesys,处于demo状态。codesys的项目界面如下图:
测试程序状态变量“MotionState”为0,Cnt一直增加,程序初始化设置运行的速度、加速度等变量。。需要注意的是ECR60默认电流为3000mA,如果你的电机额定电流远小于该值,需要首先修改电流值。57A2额定电流为4000mA,所以可以直接测试。此时步进电机不锁轴,接下来我们首先使能电机,将“MotionState”值改为1,
接下来我们进行点动测试,按照上述方法,将“MotionState”设置为3,“Ctrl + F7”写入值,此时电机将以1转/秒的速度逆时针运转。接下来将Jog_Pos设置为FALSE,Jog_Neg设置为TRUE,“Ctrl + F7”写入值,此时电机立刻改为顺时针运行。
将Jog_Pos和Jog_Neg一起都设置为FALSE,此时电机停止运行。接下来我们测试相对运动。设置“MovIncDistance”变量为10000,我们每次让电机运行1转的距离,并将“MotionState”设置为4,“Ctrl + F7”写入值,此时电机并没有运行。需要将“MovEnable”设置为“TRUE”,并写入时,电机将运行以1转/秒的速度逆时针运行1转,然后停止。
如果要再次运行该模块,则需要先将“MovEnable”设置为FALSE,然后再设置为“TRUE”,电机才会继续运行1转。那么如果要让电机反转1转,则只需要将“MovIncDistance”设置为“-10000”,重复上述动作即可。
经过刚刚的各种测试,此时电机的位置已经到了一个随机的位置,如下图查看:
接下来我们进行绝对值定位,让电机回到“0”的位置。将“MotionState”设置为5,“MovEnable”设置为“TRUE”,写入,此时电机朝着0的位置运行,经过一段时间后,电机回到0位置并停止。
至此,电机已经能够完成各种动作,接着测试电机的回零功能。将“MotionState”设置为7,“MovEnable”设置为“TRUE”,写入即可触发电机回零。默认ECR60采用CIA40的回零模式17。电机此时以默认的回零速度寻找负限位,将COM+连接24V正极,IN4端子连接24V负极,此时电机停止然后反向低速反转,此时去除IN4的连接,则电机回零完成。本次测试的项目如下:
2 thoughts on “Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试”
吏逍
使能函数和电动函数在哪里?
Jack Lai in reply to 吏逍
MC_Power 和MC_Jog这两个函数,例程在状态1、3的时候进行了测试