EtherCat 从站控制芯片

EtherCat 从站控制芯片简称ESC,是实现EtherCat数据链路层协议的专用芯片,用作处理EtherCat数据帧,并为从站控制装置提供数据接口,简单说就是一般我们的MCU不支持EtherCat(当然也有支持的,支持的就不需要ESC),ESC就是个转换器,一般和MCU选择串行(SPI)的方式来通信。

主要要记住以下ESC主要功能:

  1. 双端口存储器DPRAM(最大64K字节,其中包括4K字节寄存器空间和1~60K字节的用户数据),DPRAM可以有外部微处理器使用并行或穿行数据总线访问,访问接口称为物理设备接口PDI;
  2. 具有FMMU逻辑地址映射功能,提高数据帧利用率;
  3. 由存储同步管理器SynManager(SM)管理DPRAM,保证数据一致性和安全性;
  4. 具有EEPROM访问功能,存储ESC和应用配置参数,定义从站信息接口(SII,Slave Information Interface)

ESC存储空间:

前面讲到ESC具有64K字节的DPRAM,前4K(0x0000–0x0FFF)字节的寄存器空间。(0x1000–0xFFFF)的地址空间为过程数据空间,不同芯片类型所包含的过程数据空间不同。

物理接口:

一般ESC都支持两种物理接口MII和EBUS,其中MII接口是需要外接以太网物理层PHY芯片的,需要注意的是PHY芯片和ESC需要共用一个时钟源。EBUS传输介质使用低压差分信号LVDS(Low Voltage Differential Signaling),最远传输距离为10M不需要其他的物理层元器件,缩短从站之间的传输延迟(很少用)。

PDI接口:

ESC芯片的应用过程数据接口称为过程数据接口(Process Data Interface)或物理设备接口(Physical Device Interface)简称PDI,ESC提供两种PDI接口,通过前面讲到的前4K字节寄存器来配置。

· 直接IO信号接口:无需应用层微处理器,最多32位引脚;
· DPRAM数据接口:使用外部微处理器访问,支持穿行和并行两种方式。

ESC数据帧处理

每个ESC可以最多支持4个数据收发端口,如下图,每个端口都可以收发数据。如果端口闭合内部会绕开这个端口,转发到下一个端口知道数据帧到达一个打开的端口。
image.png
ESC和EtherCat从站没有MAC地址和IP地址,所以只能支持直连模式或者使用管理型的交换机实现开放模式,由交换机的端口地址来识别不同的EtherCat网段。ESC修改了标准以太网的数据链路DL(Data Link),数据帧由ESC直接转发处理,从而获得最小的转发延迟和最短的周期时间。为了降低延迟,ESC省略了发送FIFO,但是为了隔离接受时钟的处理时钟,ESC使用了接收FIFO(RX FIFO)。ESC转发延迟由RX FIFO大小和ESC数据帧处理单元延迟决定,其中RX FIFO大小取决于数据接收方和数据发送方的时钟精度和最大的数据帧字节数。整个EtherCat从站的延迟还与物理器件有关。

ESC的通信端口的控制有两种方式,一个是强制回路控制(就是一个开关,强制关闭或者打开)。一个是自动回路控制,自动回路控制可以根据每个端口的状态自动的打开或关闭端口,建立通信就打开,死区连接就关闭。

ESC应用层控制

这里有个重点就是从站AL控制位,主站要改变从站状态就需要写AL控制位。从站读取到新状态请求后,先检测自身状态,如果可以转化就讲新的状态写入状态机实际状态位,如果不能就设置错误指示位并将错误码写入对应寄存器。主站读取到错误码就写AL错误状态应答来清除AL错误指示。

使用PDI接口时(一般都用的这玩意),AL控制寄存器由握手机制操作,主站写AL寄存器PDI必须执行一次,不然就会挂起,数据不更新,并且只有复位后才能继续操作AL寄存器。我在这玩意上面踩了很久的坑,主站改变AL状态因为我的PDI通信优先级比电流环控制中断优先级低,电机使能后电流环中断控制代码全部跑了起来,这时改变从站状态或者连接从站就会偶发数据不更新,并且只能重启才行。

ESC支持两种中断:AL事件请求中断和ECAT帧中断,分布时钟的同步信号也可以作为微处理器的中断信号。

PDI中断:

所有发生AL事件请求都映射到寄存器,又事件屏蔽寄存器决定哪些事件触发微处理器中断,微处理器响应中断后,在中断服务函数中读取AL事件请求寄存器并做相应处理。

ECAT帧中断:

ECAT帧中断用来通知主站,从站发生的AL事件。使用EtherCat子报文头中的状态位传输ECAT中断请求寄存器,ECAT帧通过中断屏蔽寄存器来决定哪些事件会被写入状态位并发给主站。

SYNC中断:

同步信号可以映射到IRQ信号以触发中断,此时同步引脚可以用作Latch输入引脚,IRQ信号约有40ns抖动,同步信号自由约12ns抖动。所以也可以将SYNC信号直接接入到微处理器的中断引脚,使微处理器快速响应同步信号中断。

这三个中断比较重要的是PDI中断和SYNC中断,后面配置单片机程序主要也是配置PDI中断和SYNC0、SYNC1这三个中断,PDI中断处理处理状态位外,其实也处理通信数据,我不知道为什么书上就说了AL事件。在EtherCat概述那个文章中有提到SM-synchron模式和DC模式,我们在单片机配置时这三个中断都有一个引脚连接到单片机引脚上,单片机通过配置外部中断的方式来处理对应中断,DC模式数据通过SYNC0、SYNC1来响应同步信号,SM-synchron没有这两个中断,通过PDI中断来传输数据。

存储同步管理

ESC内部过程数据存储区可以用于EtherCat主站与从站应用程序数据的交换,ESC使用存储同步管理通道SM(SyncManager)来保证主站与本地应用数据交换一致性和安全性,并在数据状态改变是产生中断来通知双方。

EtherCat定义了两种SM运行模式:

  1. 缓存类型(常用于过程数据通信)
    · 使用3个缓冲区保证可以随时接受和交付最新的数据
    · 经常有一个可写入的空闲缓存区
    · 在第一次写入之后,经常有一个连接可读的数据缓存区

    如果写缓存区速度比读缓存区速度快,旧的数据将被覆盖

  2. 邮箱类型
    · 使用一个缓存区,支持握手机制
    · 数据溢出保护
    · 只有写入新数据后才能成功的读操作
    · 只有成功的读操作才允许再次写入

分布式时钟信号

分布时钟控制单元产生两个同步信号SYCN0和SYNC1,用于给应用层提供中断或直接触发的输出数据更新。

同步信号产生需要以下初始化过程:

  1. 设备上电,自动从EEPROM装载默认值;
    · PDI控制寄存器0x140.10=1,使能DC同步输入单元;
    · 同步/锁存PDI配置寄存器0x0151,使SYNC0/1使用适当的输出驱动模式;
    · 脉冲宽度寄存器0x0982:0x0983。
  2. 设置寄存器0x0980,分配同步单元给ECAT帧或PDI控制,决定后续操作设置参数操作由ECAT帧或PDI执行,默认值为ECAT帧执行;
  3. 设置SYCN0和SYNC1信号周期时间;
  4. 设置周期性运动启动时间,启动时间必须是在周期性运动激活时刻之后,否则必须等计数器溢出后才开始周期性运行;
  5. 设置寄存器0x0981.0=1激活周期性运行,并使能SYNC0/1信号输出(设0x981[2:1]=0x03),同步单元在周期性运动启动时间到达后开始产生SYNC0脉冲。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐