Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试

运动控制功能是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电源
Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第1张图片

此时可见ECR60的PWR的绿色指示灯亮起,表示驱动器供电正常;ECAT IN网口的黄色LED灯亮起,表示网线连接正常。

Step3 Codesys项目设置

打开Codesys开发环境,新建一个标准项目,并选择目标板为“Codesys Control for Raspberry PI MC SL”

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第2张图片 选择 MCSL

扫描并选择树莓

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第3张图片 扫描树莓派

添加EhterCAT master主站

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第4张图片 添加EtherCAT Master

设定EtherCAT master 的网口属性,如下图,选择“eth0”

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第5张图片

接下来添加ECR60步进驱动器,我手上的是最新的V202版本,直接添加即可。

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第6张图片 添加ECR60

接下来添加一个运动控制轴,关联到ECR60驱动器,如下图:

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第7张图片

右键“Properties”,将轴的名字改为Axis1,如下图:

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第8张图片

接下来设定轴的参数。首先设定电机运行的当量,ECR60默认使用10000脉冲/转,对应轴的设置如下图:

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第9张图片

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任务中

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第10张图片

至此,程序编写完成,任务设置完成,可以进行下载程序测试。

Step5 运行及测试

在Codesys环境中,“Online” —> “Login”,下载程序进入到树莓派,然后点击“Debug” —> “Start”。如果之前都是顺利的化,此时步进驱动器的EtherCAT的RUN绿色指示灯常亮,ECAT IN的绿色数据灯一直闪烁,轴Axis1的图标为橙色双箭头,说明轴已经准备就绪,橙色是因为树莓派没有正式的授权运行codesys,处于demo状态。codesys的项目界面如下图:

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第11张图片

测试程序状态变量“MotionState”为0,Cnt一直增加,程序初始化设置运行的速度、加速度等变量。。需要注意的是ECR60默认电流为3000mA,如果你的电机额定电流远小于该值,需要首先修改电流值。57A2额定电流为4000mA,所以可以直接测试。此时步进电机不锁轴,接下来我们首先使能电机,将“MotionState”值改为1,

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第12张图片

接下来我们进行点动测试,按照上述方法,将“MotionState”设置为3,“Ctrl + F7”写入值,此时电机将以1转/秒的速度逆时针运转。接下来将Jog_Pos设置为FALSE,Jog_Neg设置为TRUE,“Ctrl + F7”写入值,此时电机立刻改为顺时针运行。

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第13张图片

将Jog_Pos和Jog_Neg一起都设置为FALSE,此时电机停止运行。接下来我们测试相对运动。设置“MovIncDistance”变量为10000,我们每次让电机运行1转的距离,并将“MotionState”设置为4,“Ctrl + F7”写入值,此时电机并没有运行。需要将“MovEnable”设置为“TRUE”,并写入时,电机将运行以1转/秒的速度逆时针运行1转,然后停止。

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第14张图片

如果要再次运行该模块,则需要先将“MovEnable”设置为FALSE,然后再设置为“TRUE”,电机才会继续运行1转。那么如果要让电机反转1转,则只需要将“MovIncDistance”设置为“-10000”,重复上述动作即可。

经过刚刚的各种测试,此时电机的位置已经到了一个随机的位置,如下图查看:

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第15张图片

接下来我们进行绝对值定位,让电机回到“0”的位置。将“MotionState”设置为5,“MovEnable”设置为“TRUE”,写入,此时电机朝着0的位置运行,经过一段时间后,电机回到0位置并停止。

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试_第16张图片

至此,电机已经能够完成各种动作,接着测试电机的回零功能。将“MotionState”设置为7,“MovEnable”设置为“TRUE”,写入即可触发电机回零。默认ECR60采用CIA40的回零模式17。电机此时以默认的回零速度寻找负限位,将COM+连接24V正极,IN4端子连接24V负极,此时电机停止然后反向低速反转,此时去除IN4的连接,则电机回零完成。本次测试的项目如下:

ECR60MotionTest 下载

				

你可能感兴趣的:(c语言)