一、基本知识点---数据帧格式

从图 中可以看出,一个 EtherCAT 帧中包含若干个 EtherCAT 子报文。

每个子报文由子报文头、数据区和工作计数器 WKC 组成。

EtherCAT 进行网络寻址时:

首先是通过以太网帧头中的目的地址寻址到相应的网段,

然后在通过子报文头中的 32 位子报文地址来寻址到设备。

子报文的数据区最多可达 1486 个字节,由 WKC 结束。

WKC 工作计数器反映的是子报文被从站操作的次数,

其初值为 0,主站为每个子报文设置有预期的 WKC。

当从站对子报文进行读、写或者读写操作时,WKC 都将增加相应的数值。

主站通过比较最终返回的子报文中的 WKC 和预期的 WKC 的值来判断子报文是否被正确处理。

二、基于LAN9252的系统架构

软件总体流程为:

LAN9252 接收到主站发出的 EtherCAT 数据帧后,

通过 ESC 内核解析 EtherCAT 数据帧,

得到控制命令和数据存在 DPRAM 中,

再通过 PDI 接口把控制命令和数据传给 STM32,

STM32 通过对命令的识别来确定通信方式,

如果是邮箱通信,一般执行状态机切换;

如果是过程数据,则将过程数据通过对象字典映射到本地内存中去,再通过 Cia402 应用层函数将本地内存中的过程数据赋值给 FOC 的 API 函数,

最后 STM32通过 FOC 伺服驱动库函数驱动电机,并通过 GUI 接口监测电机实时状态。

三、需要在STM32中实现的功能函数

需要在 STM32 上编程的是

3.1-------PDI 接口程序、

3.2-------应用层函数和 Cia402 应用,

3.3-------应用层函数主要包括:状态机处理邮箱通信过程数据通信

如图 4-5。另外用户还需要根据自己的从站功能来编写 EDS 文件(XML文件格式)

(描述从站的版本信息、通信配置以及对象字典),

然后 PC 机通过 TwinCAT 主站将 EDS 文件下载到从站的EEPROM ,配合 STM32 完成从站初始化。

3.1、PDI接口程序设计

PDI(Process  Data  Interface)在复杂型 EtherCAT 从站中是 ESC 芯片与协处理器芯片

的数据交互接口。在本课题中,PDI 接口是 LAN9252 与 STM32 通信的 16 位数据/地址复

用的并行总线,该总线在 STM32 中被称为 FSMC(灵活的静态存储控制器)接口。

LAN9252 寻址方式和 ET1100 有很大不同,STM32 并不能通过 FSMC 总线接口直接

访问 LAN9252 内部的 EtherCAT 内核寄存器,而是需要通过 LAN9252 提供的系统控制和

状态寄存器进行间接寻址

上图中的系统控制和状态寄存器可以通过 FSMC 接口进行直接寻址,

根据 LAN9252对读写时序的要求,

首先要对 STM32 的 FSMC 接口进行配置,分为以下几个步骤

1、对 FSMC 接口的 GPIO 口进行配置,设置为 GPIO_AF_FSMC 模式。

2、在  STM32  地址空间中映射 ESC 的 DPRAM 内存,设置起始地址为 0x60000000。

3、定义 DPRAM 初始化和时序初始化结构体并对时序进行设置,如表 4-2 所示。

4、定义 FSMC 的通信格式:16 位数据/地址复用、读写时序一致、PSRAM 类型等。

经过上边 4 个步骤完成了地址空间映射和 FSMC 初始化,下面在 FSMC 初始化完成的

通过以上的寄存器配置和读写函数,

STM32 可以从 LAN9252 的系统和状态寄存器里读写数据了。

间接读写 EtherCAT 内核寄存器分为两种:

第一种:EtherCAT 内核寄存器 CSR 的读写

第二种:EtherCAT 过程数据 RAM 读写,

第一种为单次读写,第二种为连续读写,这两种读写的方式不一样。

/********************************** 第一种 单次读写       *****************************************/

如果要读取单个 EtherCAT 内核寄存器,必须通过以下方式发起读周期:

单次写入EtherCAT CSR 接口命令寄存器(ECAT_CSR_CMD),将  CSR 繁忙(CSR_BUSY)位置。

1、将  CSR 地址(CSR_ADDR)字段设置为所需寄存器地址、

将读/写(R_nW)位置 1  以及将  CSR 大小(CSR_SIZE)字段设置为所需大小。

当  CSR 繁忙(CSR_BUSY)位清零时,可读取有效数据,即可以从 EtherCAT CSR 接口数据寄存器(ECAT_CSR_DATA)读取数据。有效数据始终与  EtherCAT CSR 接口数据寄存器(ECAT_CSR_DATA)的最低位对齐。图 4-7 给出了读取 EtherCAT 内核  CSR 时所需过程。

如果要写入单个 EtherCAT 内核寄存器,必须首先向 EtherCAT  CSR 接口数据寄存器(ECAT_CSR_DATA)写入所需数据,有效数据始终与 ECAT_CSR_DATA 的最低位对齐。

通过以下方式发起写周期:

单次写入 EtherCAT CSR 接口命令寄存器(ECAT_CSR_CMD),将 CSR 繁忙(CSR_BUSY)位置 1、将 CSR 地址(CSR_ADDR)字段设置为所需寄存器地址、将读  /写(R_nW)位清零以及将 CSR 大小(CSR_SIZE)字段设置为所需大小。写周期的完成由  CSR 繁忙(CSR_BUSY)位清零来指示。

下图、给出了写访问流程图。

过程数据的传输方式与其他间接寻址的寄存器不同,

过程数据从 EtherCAT 内核经 16级深 32 位宽 FIFO 传输,FIFO 的基址为 00h,

但它也可在其他 7 个连续的存储单元访问。

主机可在这些别名端口存储单元中的任一个存储单元访问  FIFO,因为它们的功能相同且包含相同的数据。通过实现这种别名端口寻址,主机可对连续地址进行突发访问。

/********************************** 第二种 连续读写       *****************************************/

如果要连续读取 EtherCAT 过程数据 RAM,需要通过以下方式发起读周期:

首先,向EtherCAT 过程 RAM 读地址和长度寄存器(ECAT_PRAM_RD_ADDR_LEN)写入所需传输的起始字节地址和长度(单位为字节),

接着,写入 EtherCAT 过程 RAM 读命令寄存器(ECAT_PRAM_RD_CMD)以将 PRAM 读繁忙(PRAM_READ_BUSY)位置 1。

有效数据通过 EtherCAT 过程 RAM 读数据 FIFO(ECAT_PRAM_RD_DATA)从 FIFO读取。

PRAM 数据可读次数(PRAM_READ_AVAIL_CNT)字段指示在无需再次校验状态的条件下可执行的读操作次数。

最后一次读取  EtherCAT 过程数据 RAM  读数据  FIFO (ECAT_PRAM_RD_DATA)后,

PRAM 读繁忙(PRAM_READ_BUSY)将自清零。

当数据从  FIFO  传输到  EtherCAT 内核时,  PRAM  写长度(  PRAM_WRITE_LEN)  和  PRAM 写地址(PRAM_WRITE_ADDR)会进行更新以显示进程,流程图如图 4-8,*注 1。

如果要写入  EtherCAT  过程数据  RAM,需要通过以下方式发起写周期:

首先,向EtherCAT  过程  RAM写地址和长度寄存器(ECAT_PRAM_WR_ADDR_LEN)写入所需

传输的起始字节地址和长度(单位为字节);

接着,写入 EtherCAT 过程 RAM  写命令寄存器(ECAT_PRAM_WR_CMD)以使 PRAM 写繁忙(AM_WRITE_BUSY)位置 1  。

数据经 16 级深 32 位宽 FIFO 传输到 EtherCAT 内核中。当  EtherCAT 过程 RAM 写命令寄存器(ECAT_PRAM_WR_CMD)中的  PRAM  可写空间(PRAM_WRITE_AVAIL)位指示空间可用时,主机可通过 EtherCAT 过程 RAM 写数据 FIFO(ECAT_PRAM_WR_DATA)向FIFO 写入数据。PRAM 空间可写次数(PRAM_WRITE_AVAIL_CNT)字段指示在无需再次校验状态的条件下可执行的写操作次数。最后一次向 EtherCAT 内核写入数据后,  PRAM写繁忙(AM_WRITE_BUSY)将自清零。当数据从  FIFO  传输到  EtherCAT 内核时,  PRAM 写长度(PRAM_WRITE_LEN)和 PRAM 写地址PRAM_WRITE_ADDR)会进行更新以显示进程,流程图如图 4-9,*注 2。

必要时,可通过将 EtherCAT 过程 RAM  读命令寄存器(ECAT_PRAM_RD_CMD)中的  PRAM  读中止(PRAM_READ_ABORT)  位置  1  来中止读命令。同理,也可通过将EtherCAT 过程 RAM 写命令寄存器(ECAT_PRAM_WR_CMD)中的  PRAM  写中止(PRAM_WRITE_ABORT)位置  1  来中止写命令。

* WCMD:EtherCAT 过程 RAM 写命令寄存器(地址=314h)

W_ADR_LEN:EtherCAT 过程 RAM 写地址和长度寄存器(地址=310h)

RCMD:EtherCAT 过程 RAM 读命令寄存器(地址=30Ch)

R_ADR_LEN:EtherCAT 过程 RAM 读地址和长度寄存器(地址 308h)

3.2、CIA402是个什么东西

COE 为基于 CANopen 的 EtherCAT;

FoE 为基于文件存取协议的 EtherCAT;

EoE 为基于以太网协议的 EtherCAT;

SoE 为基于 Sercos 协议的 EtherCAT;

AoE 为基于 ADS信息路由通信的 EtherCAT。

这里的应用是基于 CANopen Cia402,所以选择 COE 作为邮箱通信方式

主站和从站支持三种运行模式

1--自由运行;

2--同步于数据输入或输出事件;

3--同步于分布时钟同步事件。

首先和邮箱一样,也需要为过程数据配置 SM 同步通道,

SM2 通道配置为过程数据输出(主到从),

--------------起始地址为 0x1800,缓存模式为 3buffer,映射到 PDI 中断;

SM3 通道配置为邮箱接收,

-------------起始地址为 0x1C00,缓存模式为 3buffer,映射到 PDI 中断;

与邮箱不同的是,还需要为过程数据分配 FMMU 通道,EDS 文件编写如下:

SM2 和 SM3 的配置过程和邮箱类似,而 FMMU 在启用之前,主站发送数据帧对其进行配置。

首先,主站根据各个节点从站的过程数据信息进行计算,得到每一个从站对应的逻辑地址起始位置,

然后,发送一个 FPWR 数据帧,将 FMMU 的起始位置与从站的过程数据内存地址对应上,比如逻辑地址 0x01000000 对应物理地址 0x1c00。

配置好了 FMMU 之后,主站就可以使用逻辑寻址命令(LRD、LWR 和 LRW)对从站进行过程数据读写操作。

LWR 逻辑寻址写操作如下图 4-17 所示,读操作与其类似。

当 EtherCAT 网络同步于分布式时钟时,需要两个中断信号:PDI_Isr 和 Sync0_Isr。

PDI事件中断都在 Sync0 同步中断之前发生,

在 PDI 中断事件到来的时候,从站处理器 PDI 中断触发,

将过程数据从 SM2 缓冲区读取到本地内存,然后等待同步中断 Sync0 的触发。

当Sync0 触发之后,从站处理器将把过程数据通过应用程序输出,实现控制任务,

接着获取输入信号并映射到本地对象,然后写入 SM3 缓冲区。

DC 分布时钟通信模式时间分布如图4-18 所示,

一般主站设置 PDI 事件周期和 Sync0 周期一致。

3.3、应用层函数设计

CANopen 伺服运动控制行规 Cia402 在代码实现上总共分为三个部分

Cia402 状态机、

Cia402 应用程序、

Cia402 的对象字典。

Cia402 定义功率驱动设备的控制状态机如图 4-20 所示。

图中的虚线状态为可选状态,

粗体字状态的检查和切换由主站执行,

其他状态可以由从站主动切换。

该状态机又可以根据电源电压级别分为三个区域:

区域 A 中,只有低电压供电,比如 24V 及其以下电压供电,

高电压比如 310V 直流侧电压,也有可能为了给低电压供电而使能;

区域 B 中,高电压供电使能,但是电机没有电流输出,

此时的控制指令应该被忽略,相当于电机处于未使能状态;

区域 C 中,伺服系统已经准备好运行,电机有电流输出,

设定的控制指令应该被执行,电机处于正常运行状态。

图中的状态详细解释如下:

1、急停状态(Quick stop active):该状态是可选的,从站可以主动执行。

2、未准备好接通电源状态(Not ready to switch on):为 Cia402 的初始状态,由伺服设备自检并执行相关初始化动作后达到该状态,从站上电复位后自动转化。

3、电源不可接通状态(Switch on disabled):由从站启动通信功能后到达该状态。

4、准备好接通电源状态(Ready to switch on):如果无错误状态产生,由上一个状态自动到达该状态,并等待主站发送命令接通高电压电源。

5、已接通高压电源状态(Switch on):在该状态下,高压电源已接通,等待主站下发命令使能伺服功能。

6、正常运行状态(Operation enabled):在该状态下,伺服已使能,可以正常工作。

7、错误反应状态(Fault reaction active):在该状态下执行相应配置的错误反应功能。

8、错误状态(Fault):停止伺服驱动功能,切断高电压电源。

Cia402 的应用程序支持多种运行模式:

周期性同步位置模式 CSP、

周期性同步速度模式 CSV、

周期性同步扭矩模式 CST 、

周期性同步位置/速度可切换模式 CSP/CSV,

举个例子----采用周期性同步速度模式 CSV,如图 4-21。

在 CSV 模式下:

主站运行伺服位置环,将计算好的速度发给从站的伺服速度环,

这样相比于 CSP 的好处是将位置环计算放在了主站上,

充分利用了主站的计算优势,还减轻了从站处理器负担,节约从站执行时间。

CSV 模式下从站驱动程序内部结构如图 4-22 所示。

在周期性同步速度模式 CSV 中:

写入-----共有四个对象需要添加到对象字典里(其他对象没必要传回主站),

分别为控制字状态字目标速度真实位置

对应的十六进制索引分别为 0x6040、0x6041、0x60FF 和 0x6064。

其中控制字用来发控制命令给 Cia402 状态机。

读取-----状态字反馈当前状态机状态,目标速度命令真实位置反馈则是跑伺服位置环必须的。

3.4、EtherCAT 从站设备描述文件的编写   XML文件

在 CANopen 协议中,设备描述文件被称为 EDS(Electronic Data Sheet:电子数据文件)

1-------EtherCAT 从站设备基本信息

2-------基本数据类型

3-------对象字典描述

---------------------------上面的三部分组成整个从站设备描述文件;

从站的 PDI 接口激活前,需要读取存在 EEPROM 中的配置信息,根据该信息配置 PDI接口通讯方式。

配置信息如下: <ConfigData>890E80CC88130000000000800000</ConfigData>

配置信息的第一字节为 PDI 接口选择,在 LAN9252 中,0x89 为 HBI 复用单阶段 16

位总线,详细配置信息见表 4-4,具体取值依据请参考 LAN9252 数据手册

今天就写到这里,时间有限。推荐一个还不错的文档---------------《 从Beckhoff ET1100到Microchip LAN9252的移植  》

---------------------------  STM32 && FPGA &ETHERCAT技术交流  -------------------------------

微信:zjwyaonuli

私人邮箱:ainidejiawei@foxmail.com

2021年2月28日【Jiawei_Z】Ethercat的整个实现过程(举例:Lan9252)相关推荐

  1. 2021年4月28日 深圳头条后台开发实习面试(hr面)

    title: 2021年4月28日 深圳头条后台开发实习面试(hr面) tags: 面经 2021年4月28日 深圳头条后台开发实习面试(hr面) 自我介绍 为什么当时高考报考了机械行业呢? 你对机械 ...

  2. 关于2021年11月28日PMI认证考试的报名通知

    尊敬的各位考生: 经PMI和中国国际人才交流基金会研究决定,中国大陆地区2021年全国第二期PMI认证考试于11月28日举办,相关事项通知如下. 一.时间安排和举办地区 (一)考试时间:2021年11 ...

  3. 关于推迟2021年11月28日PMI认证考试的通知

    尊敬的考生: 经PMI和中国国际人才交流基金会研究决定,受近期全国多地疫情影响,2021年11月28日PMI认证考试将推迟举办,具体考试日期将视全国各地疫情防控情况及时公布. 如您无法参加延期后的考试 ...

  4. 凹凸世界服务器维护到几点,凹凸世界手游2021年7月28日版本更新不停服维护公告-凹凸世界手游2021年7月28日更新了什么-Appfound...

    在凹凸世界手游中2021年7月28日版本更新了哪些有趣的内容呢?想了解2021年7月28日情况如何的话,下面就让我们一起来看一下吧! 亲爱的天使: 感谢您对<凹凸世界>手游的关注与支持.为 ...

  5. 凹凸世界服务器维护到几点,凹凸世界手游2021年7月28日版本更新不停服维护公告_凹凸世界手游2021年7月28日更新了什么_玩游戏网...

    在凹凸世界手游中2021年7月28日版本更新了哪些有趣的内容呢?想了解2021年7月28日情况如何的话,下面就让我们一起来看一下吧! 亲爱的天使: 感谢您对<凹凸世界>手游的关注与支持.为 ...

  6. 【工作复盘】2021年二月份工作复盘——2021年2月28日

    时间可真快呀,一转眼2021年都已过去两个月了,年假也放完了,又进入了紧张而忙碌的工作状态.得知下个月同部门内有两个一起来的小伙伴要离职,心里略有忐忑~忐忑自己的下一步骤的职业道路该何去何从,因为我还 ...

  7. 2021年5月28日《与世界说—王利—在路上有我们》

    与世界说,第四期--王利<在路上有我们> Because I've experienced hard times.I've been helped by others.When you k ...

  8. 【错误记录】Android Studio 的 Flutter 代码界面没有 Logcat 面板 ( 2021年08月28日最新解决方案 )

    文章目录 前言 一. 报错信息 二. 解决方案 前言 在之前的博客 [错误记录]Android Studio 的 Flutter 代码界面没有 Logcat 面板 中 , 处理了该问题 , 不过时去年 ...

  9. Mendix学习(2021年7月28日)

    一.Mendix介绍 Mendix:Low Code Application Development Platform Mendix -- 低代码快速开发平台 它提供有构建和管理应用程序的工具和环境 ...

最新文章

  1. windows7 telnet linux,Windows下通过Telnet连接linux
  2. 阿里云物模型层功能分析
  3. springboot学习笔记(六)
  4. python读取rar文件_在 python 中,如何读取由 7z 压缩的文本文件_python_酷徒编程知识库...
  5. 【转载】解决telnet无法连接 Connection refused
  6. java 对象深度复制_Java深度复制– Java复制对象
  7. Pycharm 安装 tensorflow 的一些坑
  8. .NET IO 复习中的误区
  9. ARCHPR4.54破解版
  10. 人工智能入门——机器学习小案例(二)
  11. matlab 图片生成mif文件,使用MATLAB一鍵制作mif文件
  12. Apache 网页与安全优化
  13. skinsdog 狗网官网CSGO饰品皮肤开箱网站可直接取回
  14. 配置 Cobertura 过滤掉无需测试代码
  15. 53端口渗透之dns劫持与欺骗篇
  16. Adobe PS 图片反转
  17. 牛津5000词汇表(The Oxford 5000™)
  18. Python 两种csv文件的写入方式
  19. awk截取字符命令_bash中的字符截取命令cut和awk
  20. aris终端桌面_「最美应用」 Aris :这款神奇的桌面,助你化身神盾局特工

热门文章

  1. java clh_AQS基础——多图详解CLH锁的原理与实现
  2. 微信防撤回python_python实现微信防撤回神器
  3. 门面担当——外观模式
  4. 红孩儿编输器的模块设计14
  5. 文献阅读 | 利用体细胞的mtDNA的突变追踪细胞的分化命运
  6. python点云可视化工具_点云生成鸟瞰图(Python)
  7. 企业经营性icp许可证与非经营性icp的区别
  8. 如何将pdf转换成ppt?
  9. win8 linux分区工具,Win8分区工具
  10. Amcharts属性的含义