2021年2月28日【Jiawei_Z】Ethercat的整个实现过程(举例:Lan9252)
一、基本知识点---数据帧格式
从图 中可以看出,一个 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 ÐERCAT技术交流 -------------------------------
微信:zjwyaonuli
私人邮箱:ainidejiawei@foxmail.com
2021年2月28日【Jiawei_Z】Ethercat的整个实现过程(举例:Lan9252)相关推荐
- 2021年4月28日 深圳头条后台开发实习面试(hr面)
title: 2021年4月28日 深圳头条后台开发实习面试(hr面) tags: 面经 2021年4月28日 深圳头条后台开发实习面试(hr面) 自我介绍 为什么当时高考报考了机械行业呢? 你对机械 ...
- 关于2021年11月28日PMI认证考试的报名通知
尊敬的各位考生: 经PMI和中国国际人才交流基金会研究决定,中国大陆地区2021年全国第二期PMI认证考试于11月28日举办,相关事项通知如下. 一.时间安排和举办地区 (一)考试时间:2021年11 ...
- 关于推迟2021年11月28日PMI认证考试的通知
尊敬的考生: 经PMI和中国国际人才交流基金会研究决定,受近期全国多地疫情影响,2021年11月28日PMI认证考试将推迟举办,具体考试日期将视全国各地疫情防控情况及时公布. 如您无法参加延期后的考试 ...
- 凹凸世界服务器维护到几点,凹凸世界手游2021年7月28日版本更新不停服维护公告-凹凸世界手游2021年7月28日更新了什么-Appfound...
在凹凸世界手游中2021年7月28日版本更新了哪些有趣的内容呢?想了解2021年7月28日情况如何的话,下面就让我们一起来看一下吧! 亲爱的天使: 感谢您对<凹凸世界>手游的关注与支持.为 ...
- 凹凸世界服务器维护到几点,凹凸世界手游2021年7月28日版本更新不停服维护公告_凹凸世界手游2021年7月28日更新了什么_玩游戏网...
在凹凸世界手游中2021年7月28日版本更新了哪些有趣的内容呢?想了解2021年7月28日情况如何的话,下面就让我们一起来看一下吧! 亲爱的天使: 感谢您对<凹凸世界>手游的关注与支持.为 ...
- 【工作复盘】2021年二月份工作复盘——2021年2月28日
时间可真快呀,一转眼2021年都已过去两个月了,年假也放完了,又进入了紧张而忙碌的工作状态.得知下个月同部门内有两个一起来的小伙伴要离职,心里略有忐忑~忐忑自己的下一步骤的职业道路该何去何从,因为我还 ...
- 2021年5月28日《与世界说—王利—在路上有我们》
与世界说,第四期--王利<在路上有我们> Because I've experienced hard times.I've been helped by others.When you k ...
- 【错误记录】Android Studio 的 Flutter 代码界面没有 Logcat 面板 ( 2021年08月28日最新解决方案 )
文章目录 前言 一. 报错信息 二. 解决方案 前言 在之前的博客 [错误记录]Android Studio 的 Flutter 代码界面没有 Logcat 面板 中 , 处理了该问题 , 不过时去年 ...
- Mendix学习(2021年7月28日)
一.Mendix介绍 Mendix:Low Code Application Development Platform Mendix -- 低代码快速开发平台 它提供有构建和管理应用程序的工具和环境 ...
最新文章
- windows7 telnet linux,Windows下通过Telnet连接linux
- 阿里云物模型层功能分析
- springboot学习笔记(六)
- python读取rar文件_在 python 中,如何读取由 7z 压缩的文本文件_python_酷徒编程知识库...
- 【转载】解决telnet无法连接 Connection refused
- java 对象深度复制_Java深度复制– Java复制对象
- Pycharm 安装 tensorflow 的一些坑
- .NET IO 复习中的误区
- ARCHPR4.54破解版
- 人工智能入门——机器学习小案例(二)
- matlab 图片生成mif文件,使用MATLAB一鍵制作mif文件
- Apache 网页与安全优化
- skinsdog 狗网官网CSGO饰品皮肤开箱网站可直接取回
- 配置 Cobertura 过滤掉无需测试代码
- 53端口渗透之dns劫持与欺骗篇
- Adobe PS 图片反转
- 牛津5000词汇表(The Oxford 5000™)
- Python 两种csv文件的写入方式
- awk截取字符命令_bash中的字符截取命令cut和awk
- aris终端桌面_「最美应用」 Aris :这款神奇的桌面,助你化身神盾局特工