当前位置: 首页 > news >正文

基于AX58100 EtherCAT从站开发

一、设备描述文件XML的规范

1、XML文件的结构规范

主要核心的讲解:

1、从站支持的数据类型定义区:Desoriptions --> Devices --> Profile --> Dictionary --> DataTypes

2、从站设备所有支持变量PDO的定义区(这里还没有映射关系):Desoriptions --> Devices --> Profile --> Dictionary --> Objects

3、Sm数据通道的定义修改(这个定义了主从采用SM同步通信方式时,每个SM通道,主从交换的数据大小与起始地址):Desoriptions --> Devices --> Sm

4、RxPdo数据区定义(这里定义了从站所有支持的PDO中,用来读取主站命令的PDO数据,相当于定义#1600~#1602的映射内容):Desoriptions --> Devices --> RxPdo --> Entry(这里定义具体的映射数据PDO)

5、TxPdo数据区定义(这里与RxPdo作用相反,相当于定义#1a00~#1a02的映射内容):Desoriptions --> Devices --> TxPdo  --> Entry

XML文件中的基本逻辑与数据映射关系:

2、添加新的PDO数据映射的方法与流程

技术细节分析:

1、在XML文件内修改部分:

第一步:在DataTypes内按照格式添加想要的数据类型,标准数据类型必须是EtherCAT支持的才可以

第二步:在Objects内按照格式添加想要的数据,当然必须符合EtherCAT行业规范的数据pdo

第三步:修改Sm对应数据传输通道的大小,如果你添加的是Output数据pdo,就扩大SM2;否则是SM3,单位是:字节

第四步:如果你添加的数据pdo是接收主站命令的,那么需要修改RxPdo将数据节点映射给1600~1602;如果是发送数据给主站的,则修改TxPdo,数据节点映射到1a00 ~ 1a02。

第五步:由于1600~1602或1a00~1a02映射了新的数据,那么需要回到Objects内,修改1600~1602或1a00~1a02对应的数据位长度与数据索引信息,添加索引。

第六步:既然1600~1602或1a00~1a02对应的数据大小改变了,那么对应的DataTypes内1600~1602或1a00~1a02的数据类型定义也要修改;就是扩大数据位大小,添加索引内容。

2、在源代码内添加对应的pdo内容索引:(修改文件e19800l.h、e19800l.c)

第一步:在e19800l.h文件内新增一个对数据pdo的描述对象,例如0x7012,数据类型为real(一个数据节点需要三个结构体对象来描述)

第二步:将数据节点对象添加到object应用对象当中

第三步:由于数据节点映射在1600~1602或1a00~1a02上的,意味着对应的1600~1602或1a00~1a02数据描述结构体要做修改;例如7012映射在1601上:

1601对应datatypes结构体修改:

1601对应的object上的修改:

第四步:我们知道,1600~1602和1a00~1a02最终需要同过sm数据通道来交互,所以对应的数据通道地址结构体也要修改;例如1601对应的output通道1c12:

第五步:在e19800l.c文件中,调整Rxpdo或Txpdo对应的数据通道内存大小;例如我在RxPdo的1601中添加了一个real的pdo数据映射:

3、新添加的PDO数据如何与硬件交互

从源代码的LED与SWITCH开始讲解:(数字量IO的关联)

1、文件el9800l.c中的物理关联:

2、LED_x与SWITCH_x在el9800l.h当中的定义,其实就是关联板子上寄存器地址宏操作:

3、PXin(n) 与 PXout(n) 宏定义操作的底层实现,在system.h文件中

4、GPIOXX_BASE在STM32内核中寄存器基础地址的定义:(stm32f4xx.h)

5、在程序文件 el9800hw.c中的函数对GPIO口的驱动配置(很重要!!)

注意:提共的历程中,GPIOB和GPIOE被用为特殊的接口,无法作为普通的IO口来使用??

范例源码中,模拟量输入与输出的硬件关联:

4、EtherCAT从站PDO映射与定义的技术细节(重要细节)

举个例子讲解技术细节:(BIT位形式的PDO)

第一步:在XML文件中,申明一个PDO对应的数据类型。

注意:每个PDO数据节点至少要占用16个bit,这与AX18600芯片数据寄存器有关,当PDO不足16位是,需要补齐。

第二步:使用申明好的数据类型,在XML的Object中,定义一个PDO节点。

第三步:根据笔记开头对PDO数据映射关系的描述,这个自定义的数据节点要挂载在输入或输出映射表上。

第四步:修改输出PDO地址寄存器PDO1601的数据类型定义

第五步:修改Object的1601PDO内容,添加输出数据PDO的地址

下面开始修改源程序代码与xml对应上

第六步:在源代码的el9800app.h中,添加数据节点结构体系列描述:(有四个东西需要创建或修改)

第七步:将新创建的PDO节点,加入应用PDO节点管理数据(在源代码的el9800app.h中)

第八步:在源代码的el9800app.h中,对应修改1601映射数据管理对象的四个东西

第九步:在源代码的el9800app.h中,修改1c12PDO对象,因为1600~1602是映射到1c12上,最终完成主从数据交换的

第十步:在el9800appl.c文件中,按照需求为数据节点PDO分配内存空间,用于交互数据

第十一步:在el9800appl.c文件中,将PDO数据缓存区内容赋值给具体的硬件接口,实现硬件操作

第十二步:硬件驱动初始化,否则数据也无法在硬件上体现出来

///

二、MCU硬件设计与软件驱动到接口的映射之间的关系

2、根据代码总体框架讲解IO驱动到PDO映射的过程(重点内容)

代码框架整体分为两个部分:硬件设计与驱动部分、通讯PDO与硬件数据交互部分

硬件设计与驱动部分:

AX58100协议芯片与STM32MCU关键的硬件链接只有:SPI通讯接口、协议通信IO中断信号线。而数字量IO由STM32提供(后期模拟量也应该由mcu提供)

应用层关键的硬件驱动代码:

1、SPI通信接口驱动

根据使用的STM32不同,使用的库函数与时钟频率不同,要求驱动SCK频率2.5ms左右!!!在SPI.c文件中,uint8_t WR_CMD (uint8_t cmd)函数修改为实际使用的SPI接口。

特别注意:AX58100需要两个片选信号控制,SPI CS FMC恒定高电平,SPI CS ESC在需要通信时,低电平唤醒,代码此处需要根据实际IO口修改:

///

2、外部IO中断驱动,MCU检测到AX58100中断信号,进行IO数据映射

这里需要开启三个IO中断,根据实际使用的MCU资源驱动中断函数。对应修改宏定义来对应中断函数:

//

3、根据使用的系统时钟,配置驱动一个TIM定时器作为总线通信看门狗

必要时,需要调整系统时钟以及定时器中断等级;配置根据实际STM32资源作修改。还需要修改相关宏定义来关联实际使用的定时器中断接口:

通信PDO与硬件数据交互的实现:

从站DC同步通讯模式下的实现原理

第一步:主站请求操作从站

通过循环检查从站邮箱,查看是否收到主站控制请求字,确认控制请求后,复位历史错误标志位等信息,恢复从站到初始状态;继续检查协议芯片当前状态,同步修改MCU运行状态,打开相应功能。涉及函数:ECAT_Main();这一步,从站跟据主站的请求,开启了DC同步中断函数。

第二步:TIM定时器中断开启,定时检查通讯状态

每间隔1ms(一定是1ms),关闭Ether主中断,然后检查周期同步报文丢失的情况;理论同步报文个数与实际作比较,丢失个数超过设定值,则作处理。涉及中断函数:void TimerIsr(void)。

第三步:有一个主中断函数,该函数在SM和DC模式下被启动执行数据的写出映射

如果主从同步模式为SM同步,则中断将执行IO数据双向映射;如果是DC模式,则只执行输出数据的映射,并检查同步数据帧丢帧的情况(输出:从-->主;输入:主-->从)。涉及的中断函数:void PDI_Isr(void)

第四步:DC同步模式一般使用SYN0模式,该模式下,DC同步数据主要是输入数据

在sync0的DC同步模式下,如果SM同步没有开启,则会执行IO双向映射,否则只执行一次输入数据的映射并递交到mcu硬件层。涉及函数:void Sync0_Isr(void)

///

相关文章:

  • 考研408数据结构线性表核心知识点与易错点详解(附真题示例与避坑指南)
  • llama-factory
  • 132. 分割回文串 II | 最少分割次数
  • Linux网络相关概念和重要知识(1)(网络协议、网络通信)
  • Hashmap
  • FPGA开发,使用Deepseek V3还是R1(8):FPGA的全流程(简略版)
  • Pytorch使用手册—Raspberry Pi 4 上的实时推理(30 FPS!)(专题三十六)
  • C++对象特性
  • Spring Boot分层架构的优势
  • 记忆化搜索(典型算法思想)—— OJ例题算法解析思路
  • SAP-ABAP:SAP的MM模块BAPI的详细介绍
  • 知识库ragflow和dify安装
  • Python Cookbook-2.22 计算目录间的相对路径
  • JS逆向-233网校sid参数和sign参数
  • EfficientViT模型详解及代码复现
  • upload
  • 线程状态与线程方法详解
  • 三支一扶入职体检不合格项目全解析
  • 算法day5 bfs搜索
  • 图像分类项目1:基于卷积神经网络的动物图像分类
  • 做网站绿色和什么颜色搭配/百度如何发布作品
  • 婚恋交友网站模板/百度百科词条入口
  • 北仑网站建设网站/建立免费个人网站
  • 什么浏览器好用可以看任何网站/购买seo关键词排名优化官网
  • 武汉高端企业网站建设/免费男女打扑克的软件
  • 品牌网站设计企业服务/百度浏览器主页网址