【EtherCAT分析】二、EtherCAT从站驱动程序分析

      EtherCAT从站采用ET1100+微控制器STM32,其中ET1100芯片负责完成EtherCAT数据帧的处理等链路层功能,是实现EtherCAT数据通讯的核心。而STM32是EtherCAT系统的应用层处理器,通过SPI总线与ET1100进行数据交换,并实现应用层控制协议。ET1100芯片功能已经固化在芯片内部,实际应用时只需设计相应的XML配置文件。因此在EtherCAT从站软件设计时,主要需要完成STM32处理器的程序编写。

    根据EtherCAT系统软件设计需求可知,在微控制器STM32中进行EtherCAT从站软件设计的架构图如图所示。由图可知,在STM32设计EtherCAT从站软件时可分为两层:数据链路层和应用层。数据链路层是STM32微处理器与ET1100的数据交换层,采用串行总线SPI实现底层驱动。应用层按照功能也可分为两个部分:EtherCAT基本协议和用户程序。EtherCAT基本协议包括状态机处理,邮箱数据的处理以及周期性过程数据的处理。用户程序位于程序架构最上层,用于实现用户特定程序控制,例如为实现伺服驱动控制,用户程序可设计为行规CiA402的CoE协议或SoE协议。

    

    EtherCAT过程数据通讯的程序流程图如下图所示。HW_Init()函数初始化STM32的寄存器和硬件配置。ECAT_Init()函数初始化EtherCAT协议的相关变量。在完成系统的初始化之后,程序进入到主循环函数。在这个循环函数里,STM32单片机通过SPI总线读取ET1100芯片的0x220应用层事件请求寄存器。每当有一个EtherCAT事件请求从主站发到从站的时候,应用事件请求寄存器里相应的位就会被置1,读取到这个寄存器的值之后,STM32单片机就清楚了主站的请求。之后,程序会检测一个全局变量来判断从站是否运行在自由模式下,如果从站运行在自由模式下,程序会执行Free_run()函数,这个函数的功能是处理周期性数据传输,STM32通过SPI总线读写ET1100的DPRAM内的数据,完成数据交换。

     如果从站没有运行于自由模式,而是运行于同步模式,Free_run()函数的功能会放在一个中断相应函数中执行,这个中断相应的中断源是EtherCAT协议的同步时钟单元,它在多个从站设备之间产生同步的中断信号,保证多个从站之间的同步特性。之后,程序运行到Al_event()函数,这个函数负责处理非周期事件,主要包括邮箱数据通讯和从站状态机转换。

  

    EtherCAT协议的状态机包括初始化(Init)、预运行(Pre-OP)、安全运行(Safe-OP)和运行状态(OP)四种。初始化状态时,主站通过EEPROM里的配置信息对从站的相关寄存器进行配置和初始化,无法进行数据交换;预运行状态时,EtherCAT协议可以进行邮箱数据的通讯,主站通过邮箱数据将一些初始化数据发送给从站,但是不能进行过程数据的传输;安全运行状态时,主站通过对从站的现场管理单元和SM通道的设置,可以发送过程数据给从站,但是从站无法发送过程数据给主站;运行状态下,主站和从站可以进行完整的数据通讯。在从站进行状态机转换时,从站首先检查状态机对应的SM通道是否配置正确,检查的内容有SM通道大小、SM通道设置是否重叠、SM通道起始地址是否为偶数以及SM通道是否被使能,如果SM通道配置没有问题,则通过应用层状态设置函数设置成为相应的状态。如果从站状态从低级向高级转换,则使能相应的功能,反之,则失能相应的功能。状态机转换的流程图如图所示。

发布了15 篇原创文章 · 获赞 9 · 访问量 5922

猜你喜欢

转载自blog.csdn.net/zhandouhu/article/details/102883091
今日推荐