T技术支持ech Support
EtherCAT总线型运动控制系统入门教程(2)

在上一篇《EtherCAT总线型运动控制系统入门教程(1)》(点击进行回顾中我们介绍了EtherCAT总线型运动控制系统的各类运动控制产品基本操作,接下来小编要带大家学习如何使用EtherCAT总线的扩展模块。

 

全文6056字,阅读时间约12分钟

 

 

为了便于客户组建EtherCAT总线型运动控制系统,雷赛控制公司还研发了多种功能的EtherCAT总线扩展模块。如:IO扩展模块用于IO信号的检测与控制;定位模块用于控制脉冲型电机;AD/DA扩展模块用于模拟信号的采集与控制;编码器扩展模块用于编码器信号检测。

 

一)IO扩展模块

EM32DX-E4模块可控制16路输入和16路输出信号。IO接口采用了光电隔离和滤波电路,抗干扰性能好。EM32DX-E4模块的外形如图6.1所示,其接口定义如表6.1所示,其接口电路与雷赛公司的IO控制卡相同,其参数如表6.2所示。

 

 

 

EM32DX-E4模块的使用方法如下。

1.给EM32DX-E4模块接上24V直流电源,并接好网线。

 

2.打开雷赛控制控制公司的调试软件DMC Motion。在“总线配置”界面,鼠标点击EtherCAT主站,右键执行“扫描设备”。扫描后,EM32DX-E4模块自动加入总线结构树中。参见图3.7、3.8。

 

3.点击“下载配置文件”,下载配置文件。

4.EM32DX-E4模块的输入信号In、输出信号Out的编号是接着DMC-E3032运动控制卡上的IO信号继续往后排列。即:输入信号为In8~IN23,输出信号为Out8~Out23。如图6.2所示。

 

5.在DMC Motion主页面上选“运动状态”,可进入IO测试。如图3.9所示。

 

6.控制IO信号的指令和普通运动控制卡的一样:

设置输出口的电平:     dmc_write_outbit(卡号,端口编号,输出值)

读取输出端口的电平:dmc_read_outbit(卡号,端口编号)

读取输入端口的电平:dmc_read_inbit(卡号,端口编号)

IO模块例程的主要代码如下。

 

privatevoid timer1_Tick(object sender, EventArgs e)  // 定时间隔50毫秒

{

ushort i;

for (i = 8; i < 24; i++)   // 扫描一遍输入口

{

if (LTDMC.dmc_read_inbit(cardID, i) == 0)  // 如果输入口i有信号

LTDMC.dmc_write_outbit(cardID, i, 0);  // 输出口i导通,指示灯亮

else

LTDMC.dmc_write_outbit(cardID, i, 1);

}

该段函数是用定时器定时检测IO模块输入口,如某端口有输入信号则其对应的输出口导通。

 

二)定位扩展模块

当EtherCAT总线控制系统中需要选用一些普通类型的电机时,可通过EM02DP-E1定位模块将其接入EtherCAT总线。

EM02DP-E1定位模块外形如图6.3所示,它相当于一个2轴运动控制器,可控制2个脉冲型电机,具有点位运动、直线插补、定速运动等功能;除电机专用IO口外,还有8路输入和8路输出信号。其参数详见表6.3。

 

注意:不建议让定位模块控制的电机和其他节点上的总线电机进行插补运动。

 

 

EM02DP-E1定位模块的8路通用输出信号可以通过拨码开关SW2设置初始电平。SW2的定义如表6.4所示。

 

 

 

EM02DP-E1定位模块的脉冲输出电路、IO口电路和雷赛公司一般的运动控制器相同,详见用户手册。

EM02DP-E1定位模块总线配置过程和IO模块略有不同。过程如下:

 

1.打开雷赛控制控制公司的调试软件DMC Motion。在“总线配置”界面,鼠标点击EtherCAT主站,右键执行“扫描设备”。扫描后,EM02DP-E1模块自动加入总线结构树中。

 

2.EM02DP-E1定位模块的2个轴自动完成映射,但其IO口要手动添加映射关系。从图6.4中可看出,其输入口的变量名称为GeneralInputIO,其输出口口的变量名称为GeneralOutputIO。

 

3.点击“输入IO映射关系”选项卡,如图6.5所示。点击“添加”,然后“映射类型”选EtherCAT、“从站类型”选数字IO、“映射从站”选EM02DP-E1、“映射变量”选GeneralInputIO,然后点击“确定”。完成输入口映射,结果如图6.6所示,输入口编号为IN24~31。

 

 

 

 

4.点击“输出IO映射关系”选项卡,添加输出口映射关系,过程如图6.7所示;结果如图6.8所示,输出口编号为OUT24~31。

 

5.点击“下载配置文件”,下载配置文件。

 

6.系统完成复位后,在DMC Motion主页面上选“运动状态”,在“专用信号状态”栏中可以测试EM02DP-E1定位模块的IO信号。如图6.9所示。

 

7.在主页面上点击“功能测试”按钮,可以对定位模块的电机进行测试。注意:在电机运动之前要打开“使能”。

 


 

 

 

EM02DP-E1定位模块控制电机运动的指令、控制IO的指令和运动控制卡的基本一样。只有回零模式和一般的运动控制卡不一样,且完成回零后自动将位置计数器清零。

 

EM02DP-E1的轴回零模式有6种:

模式1:正向一次回零,   模式4:负向一次回零;

模式2:正向一次回零加反找,   模式5:负向一次回零加反找;

模式3:正向二次回零,   模式6:负向二次回零。

 

例程4:

EM02DP-E1定位模块的测试程序界面如图6.10所示,其程序代码见附录例程4。

 

 

三)AD/DA扩展模块

EM06AX-E1模块有4路AD输入和2路DA输出,分辨率高达16位。其电源电路加有隔离元件,可以有效隔离外部电路的干扰。EM06AX-E1模块的外形如图6.11所示,其接口参数如表6.5所示。

 

 

可通过拨码开关S1将输入、输出信号的范围设置为-10~10V或0~10V,详见表6.6。

 

 

模拟量输入接口、模拟量输出接口电路原理图如图6.12、6.13所示。

EM06AX-E1模块总线配置过程与IO扩展模块相同。

 

 

 

AD/DA的控制指令是通过总线读写模块的过程数据PDO(ProcessDataObject)完成的,读、写指令格式如下:

nmc_write_rxpdo_extra(卡号,端口号,RxPDO地址,数据长度,写入的数据);

nmc_read_txpdo_extra(卡号,端口号,TxPDO地址,数据长度,ref 读出的数据变量);


在MOTION软件的“总线配置”页面上可以看到AD/DA模块的PDO数据的地址和端口号,如图6.14所示。从图中可看出,数模转换接口DA0、DA1的RxPDO地址分别为0和2,AD/DA的控制字的地址为4;模数转换接口AD0、AD1、AD2和AD3的TxPDO地址分别为0、2、4和6。

 

 

 

即:

DA转换使能指令为:nmc_write_rxpdo_extra(0,2,4,2,1);

DA转换指令为:nmc_write_rxpdo_extra(0,2,RxPDO地址,2,写入的数据);

AD转换指令为:nmc_read_txpdo_extra(0,2,TxPDO地址,2,ref 读出的数据变量);

 

其中:卡号为0;端口号为2;数据长度=2,是定义数据长度为32位。

 

在程序中与-10~10V电压对应的数值为-100000~100000,即:电压的10000倍。详见程序代码。

 

AD/DA模块的例程的主要代码如下,其程序界面如图6.15所示。

 

ushort cardID = 0;            // 卡号

ushort portN = 2;             // 端口号

ushort dataL = 2;             // 数据长度

staticdouble Vout = 0;

privatevoid Form1_Load(object sender, EventArgs e)

{

short num;

num = LTDMC.dmc_board_init();  // 初始化运动控制卡

if (num <= 0 || num > 8)

MessageBox.Show("初始卡失败!", "出错");

LTDMC.nmc_write_rxpdo_extra(cardID, portN, 4, dataL, 1);   // AD接口使能打开

}

privatevoid button1_Click(object sender, EventArgs e)   // D/A转换

{

double DAvalue1 = double.Parse(textBox1.Text);

LTDMC.nmc_write_rxpdo_extra(cardID, 2, 2, 2, (int)(DAvalue1 * 10000));   // 1号通道输出

}

privatevoid timer1_Tick(object sender, EventArgs e)   // DA及AD转换

{

int Vin = 0;

Vout = Vout + 0.1;

if (Vout > 10.0)   //输出电压在-10~10V之间变化

Vout = -10.0;

LTDMC.nmc_write_rxpdo_extra(cardID, portN, 0, dataL, (int)(Vout * 10000));   // D/A转换,DA的0号通道输出电压信号

Thread.Sleep(5);  //延时5毫秒

LTDMC.nmc_read_txpdo_extra(cardID, portN, 2, dataL, ref Vin);   // A/D转换,读AD的1号通道

textBox2.Text = (Vin / 10000.0).ToString();

 }

 

 

注:D/A的0号通道输出电压已用导线接入A/D的1号通道。

即:图6.5中的AOUT和AGND分别用导线与图6.4中的IN+、IN-相连。

 

四)编码器扩展模块 

EM03De-E4模块具有3路5V差分编码器信号输入接口、4路高速输入接口、3路高速输出接口,可实现编码器计数、高速位置锁存和高速位置比较等功能。输入输出接口采用了光电隔离和滤波电路,抗干扰性能好。

 

如果不使用位置锁存和位置比较功能,输入和输出口可作通用IO口。

 

EM03De-E4模块的外形如图6.16所示,其接口定义如表6.7所示,其接口电路与雷赛公司的运动控制相同,其参数如表6.8所示。

 

 

 

 

EM03De-E4模块的使用方法如下。 

1.给EM03De-E4模块接上24V直流电源,并接好网线。

 

2.打开雷赛控制控制公司的调试软件DMC Motion。在“总线配置”界面,鼠标点击EtherCAT主站,右键执行“扫描设备”。扫描后,EM03De-E4模块自动加入总线结构树中。

 

3.根据需要,在主站的“扩展TxPDO”界面中添加相应的变量。然后下载配置文件。

4.在程序中通过对象字典设置编码器的相关参数。

 

5.在程序中通过过程数据(PDO)读编码器的相关检测数值。

EM03De-E4模块需要设置的主要参数如表6.9、6.10、6.11所示。主要过程数据变量如表6.12所示。

 

 

 

 

下面通过一个实验,详细介绍EM03De-E4模块的主要功能。

 

该实验的电路图如图6.17所示。模块的编码器1输入口接入闭环步进电机的编码器信号。模块的高速输出口OUT1接有一个LED指示灯,并将OUT1的信号接入高速输入口IN1。

 

 

用调试软件DMC Motion在主站的“扩展TxPDO”界面中添加2个变量Encoder1_Val和Ltc1_Encoder1Val,如图6.18所示。然后下载配置文件。

 

 

用调试软件DMC Motion在主站的“扩展TxPDO”界面中添加2个变量Encoder1_Val和Ltc1_Encoder1Val,如图6.18所示。然后下载配置文件。

 

 

该程序通过对象字典设置编码器1为AB相4倍频模式且方向为正;设置比较器1为线性比较模式、以低电平触发、选用编码器1的数据进行比较、触发信号持续0.3秒、第1个比较点位置、比较点数量、比较点间隔距离;设置锁存器1为单次触发模式、由信号的下降沿触发。并通过读过程数据变量Encoder1_Val和Ltc1_Encoder1Val,获取编码器1和锁存器1的数值。

 

从图6.17中可看出,位置锁存信号由位置比较信号提供。 

 

如图6.19所示,该实验将位置比较点设为5个,第1个比较点为1234,比较点间隔距离为4000个脉冲。

 

当程序启动后,首先按“位置清零”按钮,将电机和编码器模块的位置清零,然后按“启动电机”按钮,让电机运动。当电机运动了1234脉冲位置时,位置比较器触发输出口OUT1,低电平持续0.3秒,即LED指示灯亮0.3秒;同时,该触发信号通过输入口IN1触发锁存器1,将编码器1的当前位置1234锁存下来。

 

当电机继续运动4000个脉冲后,再次触发OUT1,LED亮0.3秒;电机每前进4000个脉冲,LED就亮一次,直到电机运动到终点24000处,LED共亮5次。

 

按“读锁存器”按钮,显示锁存位置为1234个脉冲。因为锁存器设置为单次触发模式,所以只记录比较器的第1个比较点位置。

 

电机反方向运动时,也可以做位置比较,但比较点间隔距离要设为负值。

 

该程序代码见附录中的例程5。

 

 

DMC-E3032运动控制卡可以进行2~16轴的直线插补、2轴圆弧插补、3轴空间圆弧插补、3轴绽放螺旋线插补、收敛螺旋线插补、圆柱螺线插补。

 

一)曲线插补指令及其曲线方程

1.基于圆心的3轴螺旋线

其的运动指令如下:

dmc_arc_move_center_unit(卡号,坐标系号,插补轴数,轴号数组,终点坐标数组,圆心坐标数组,圆弧方向,圆弧圈数,坐标类型)

如果只有2轴参与插补,曲线为平面曲线;如果是3轴参与插补,则为空间螺旋线。

该指令允许参与插补的轴数为16。从第3轴开始,后续轴的运动规律一样,线性跟随轴1、轴2运动。

 

如图7.1(a)所示,已知螺旋线起点为P1、终点为P2,圆心O为(x0,y0)。

 

可计算出起点与X轴的夹角为a1、终点与X轴的夹角为a2。

 

 

螺旋线的参数方程如下,其螺旋角a由a1转至a2。

 

 

式中:

R = R1+(R2-R1)(a-a1)/(a2-a1)

R1 = (x12+y12)0.5

R2 = (x22+y22)0.5

a1 = atan((y1-y0)/(x1-x0))( -p<a1<p)

θ= atan((y2-y0)/(x2-x0))( -p<q<p)

a2 = q+2´p´n(当a1大于q时,a2 = q + 2´p´(n+1))

x0,y0为圆心坐标;

x1,y1,z1为起点P1的坐标;x1-x0和y1-y0不可同时为0。

x2,y2,z2为终点P2的坐标。

当R1<R2时,曲线为绽放螺旋线,如图7.1(a)所示;

当R1=R2时,曲线为圆柱螺旋线;

当R1>R2时,曲线为收敛螺旋线,如图7.1(b)所示。

 

式(7.1)中的变量a如果从小到大由a1变化至a2,则轨迹为逆时针方向运动,如图7.1所示。如果变量a如果从大到小由a1变化至-a2,则轨迹为顺逆时针方向运动。

DMCE332运动控制卡在进行螺旋线插补时,自动计算式(7.1)中的参数,无需人工干预。

 

2.基于半径的3轴圆柱螺旋线


如图7.2所示,已知圆弧的起点、终点、半径,那么就有4条轨迹可选。顺时针方向圆弧轨迹称为顺圆;逆时针方向的圆弧轨迹称为逆圆。只有确定圆弧方向、圆弧角是小于180度还是大于180度,才能确定唯一的圆弧。

 

 

 

基于半径的3轴圆柱螺旋线的轨迹方程和式(7.1)相同,只是圆弧半径R为常数。

基于半径的3轴圆柱螺旋线的运动指令如下:

dmc_arc_move__radius_unit(卡号,坐标系号,插补轴数,轴号数组,终点坐标数组,圆弧半径,圆弧方向,圆弧圈数,坐标类型)

 

该指令允许参与插补的轴数为16。从第4轴开始,后续轴的运动规律和Z轴相似,为线性跟随运动。

 

为提供圆弧角的信息,该指令参照G代码的习惯,当圆弧角小于180度时,半径为正;圆弧角大于180度时,半径为负。

 

图7.3为2轴插补轨迹,轨迹C1圆弧角小于180度,半径为40000;轨迹C2圆弧角大于180度,半径为-40000。C1、C2起点、终点相同。

 

 

图7.4为圆柱螺旋线插补轨迹。起点坐标为(0,0,0),终点坐标为(5000,0,4000),半径为2500,圆弧方向为顺圆,螺旋线为2圈。

 

 

 

3.基于中间点的空间圆弧插补

其运动指令如下:

dmc_arc_move__3points_unit(卡号,坐标系号,插补轴数,轴号数组,终点坐标数组,中间点坐标数组,圆弧方向,圆弧圈数,坐标类型)

 

所谓中间点为起点至终点间圆弧上的任意一个点。

该指令允许参与插补的轴数为16。

 

当圆弧圈数为负数时,表示为空间圆弧插补。其绝对值减1为空间圆弧的圈数。如:-1即0圈空间圆弧,-2即1圈空间圆弧;

当圆弧圈数为正数时,表示为圆柱螺旋线插补及圈数。

 

如图7.5所示,C1为XZ平面上的一段圆弧(蓝色曲线,由折线连接圆弧上的15个点所得)。其起点坐标为(100000,20000,0),终点坐标为(20000,20000,0),圆心坐标为(60000,20000,30000),半径为50000。取中间点为(60000,20000,80000)。

 

将XZ平面绕Z轴旋转15度,得新坐标系X’Y’Z’及曲线C2(绿色曲线);

再将X’Z’平面绕X’轴旋转15度,得新坐标系X”Y”Z”及曲线C3(绿色曲线)。

 

 

 

在XYZ坐标系中的一个点(x,y,z)绕Z轴旋转q角,得新的坐标(x’,y’,z’)。坐标旋转变换的公式如下:

 

 

在X’Y’Z’坐标系中的一个点(x’,y’,z’)绕Z’轴旋转b角,得新的坐标(x”,y”,z”)。坐标旋转变换的公式如下:

 

将圆弧C1的起点、终点和中间点的坐标分别带入公式(7.2)和(7.3),且q=b=15度;得圆弧C3在XYZ坐标系中的起点坐标为(91416.202,43660.253,11698.729);终点坐标为(14142.132,23660.251,6339.751);中间点坐标为(52779.173,12954.732,86293.304),

如图7.5中的C3上的红点所示。

 

圆弧曲线C3既不和XZ平面平行、也不与XY或YZ平面平行,是一个典型的空间圆弧。将C3的起点、终点和中间点的坐标带入指令dmc_arc_move__3points_unit,运行后,得图7.5中的红色轨迹。该轨迹与C3的理论轨迹完全重合。

 

二)配置文件保存与下载

例程6:

如图7.6所示,本例程硬件有7个节点,分别是#1001步进电机驱动器DM3E-556、#1002闭环步进电机驱动器CL3-EC507、#1003编码器扩展模块EM03DE-E4、#1004AD/DA扩展模块EM06AX-E1、#1005定位扩展模块EM02DP-E1、#1006IO扩展模块EM32DX-E4-V30、#1007松下伺服电机驱动器MADLNO5BE。


各节点设置完成后,轴的映射关系、输入输出映射关系、PDO映射关系如图7.6所示。

 

 

 

注意:闭环步进电机驱动器需要手动添加轴;定位模块的IO需要手动添加映射关系;编码器模块的变量需要手动添加至PDO中;松下伺服电机驱动器、闭环步进电机驱动器的PhysicalOutputs和Bit Mask需要手动添加至从站的过程数据中。操作过程详见前述。

完成所有节点配置后,点击图7.6界面右上角的“下载配置文件”,即将配置文件下载至运动控制卡DMC E3032上的flash芯片中保存。如果硬件不变动,就不需要再用Motion软件做配置工作。


配置文件经Motion软件测试无误,点击图7.6左上角的“导出配置文件”,可将配置参数保存至硬盘指定位置,如图7.7所示。配置文件有2个,一个是ini文件一个是eni文件。

 

 

在进行设备批量生产时,不需要用Motion软件对每台设备进行参数配置。在应用程序中,使用函数dmc_download_memfile(……)可将配置文件下载至运动控制卡DMC E3032上。代码详见附录例程6中的函数downloadButton_Click(…)。

 

三)曲线插补及各模块的应用

在闭环步进电机驱动器输出口O3上接有一个LED灯(参见图5.2);在伺服电机驱动器SO1上接有一个LED灯(参见图3.2)。

AD/DA扩展模块上的D/A的0号通道输出电压已用导线接入A/D的1号通道;编码器扩展模块1号接口与闭环步进电机编码器相连(参见图6.17)。

 

例程6的程序界面如图7.8所示,程序代码见附录中的例程6。

 

该程序可实现的主要功能及编程要点如下:

1.平面圆弧插补

使用LTDMC.dmc_set_vector_profile_unit(…)指令设置插补运动的矢量速度,使用基于圆心的圆弧插补指令LTDMC.dmc_arc_move_center_unit(…)进行圆弧插补。24段圆弧组成一个完整的圆。如图7.8所示。

 

  


在进行平面圆弧插补时,闭环步进电机驱动器输出口O3上的LED灯亮;平面圆弧插补结束后,该LED灯灭。

代码详见附录例程6中的函数startButton_Click(…)。

 

2.空间圆弧插补

使用基于中间点的圆弧插补指令LTDMC.dmc_arc_move_3points_unit(…)进行空间圆弧插补,中间点的坐标为(40000,20000,70000)。如图7.8所示,24条空间圆弧都经过该点。

 

在等待空间圆弧插补结束时,要查询3个轴的电机状态,只有3个电机都停止运动,插补运动才结束。

 

在进行空间圆弧插补时,伺服电机驱动器输出口SO1上的LED灯亮;空间圆弧插补结束后,该LED灯灭。

代码详见附录例程6中的函数startButton_Click(…)。

 

3.定位扩展模块的直线插补

采用多线程方式控制定位扩展模块的运动以提高程序的运行效率。

 

首先,将2条正弦曲线分为60段,将坐标保存在数组中。

然后,执行第一条线段的直线插补。该段插补速度由低速到高速,但停止速度和最大速度相同:

dmc_set_vector_profile_unit(cardID, 1, startVelY1, maxVelY1, TaccY1, TdecY1, maxVelY1);

之后各线段的插补速度:开始速度、最大速度、停止速度都与最大速度相同:

dmc_set_vector_profile_unit(cardID, 1, maxVelY1, maxVelY1, TaccY1, TdecY1, maxVelY1);

 

结束插补运动是使用带减速的急停指令。这样可以提高插补运动的连续性。代码详见附录例程6中的函数start2Button_Click(…)、DrawX1Y1coordinate()和stop2Button_Click(…)。

 

4.插补速度的计算与显示

DMCE3032运动控制卡由插补运动矢量速度的设置指令,但没有读取矢量速度的指令。因此要得到插补运动的矢量速度,需要进行计算。

将参与插补运动的各轴当前速度读出,然后矢量速度计算如下:

V = Math.Sqrt(speedX * speedX + speedY * speedY + speedZ * speedZ);

代码详见附录例程6中的函数timer4_Tick(…)。定时器timer4的定时周期为15毫秒。

 

5.轴测图的实现

图7.7中的空间圆弧插补曲线显示在轴测图中,接近于人的视觉习惯,富有立体感。

将空间上的一个点P(x,y,z)投影到图7.7中所示的轴测图上的公式如下:

 

式中:X,Y是屏幕的坐标。a是轴测图中x轴与y轴的夹角。

代码详见附录例程6中的函数timer2_Tick(…)。

 

6.IO扩展模块输出口跑马灯

使用C语言中的位运算,很容易实现跑马灯功能。其中用到了左移和非运算。

跑马灯程序也使用了多线程。代码详见附录例程6中的函数LEDrunButton_Click(…)、LED()和LEDstopButton_Click(…)。

 

7.DA和AD转换

DA转换输出的数据与定位模块中的X轴坐标成正比;AD转换读取的是DA口输出的电压信号。

代码详见附录例程6中的函数timer2_Tick(…)。定时器timer2的定时周期为30毫秒。


8.配置文件下载及总线复位

 

 

例程6是一个无限循环的程序。运行该程序几十小时,未发生一次总线异常现象。说明DMCE3032运动控制卡工作稳定可靠。

 

最令人担心的总线电机多轴插补功能表现良好,与脉冲式运动控制卡的性能相当。证明EtherCAT总线通讯速度确实快!

定位扩展模块用直线插补实现曲线轨迹运动的方法可行。但速度较大时,在线段衔接处有时会有明显的抖动,如图7.7矢量速度曲线所示。具有连续插补功能的总线型运动控制卡正在研发之中,期待其早日面市。


从表8.1的EtherCAT总线型运动控制卡、控制器与脉冲型运动控制卡的性能参数对比中可看出,采用EtherCAT总线控制系统方案,不仅是系统接线简单、方便,其运动控制性能比脉冲型运动控制卡也有很大的提升,电机数量、扩展模块的数量明显占优。只是各节点元件的总线参数配置相对麻烦一些。

 

 

想要获取完整文章内容及“附录例程代码”可点击文末“阅读原文

 

上一条:EtherCAT总线型运动控制系统入门教程(1)
下一条:EtherCAT总线型运动控制系统入门教程(3)