回答

收藏

[评测分享] 【RISC-V 先楫半导体HPM5E00 MCU开发板试用体验】5、EtherCat io示例实践

#板卡评测 #板卡评测 536 人阅读 | 0 人回复 | 2025-07-10

本帖最后由 eefocus_3941691 于 2025-7-10 14:57 编辑

对于一个陌生的技术,按照示例按部就班地实现无疑是一个很多好的学习方法。
在完成本次实验前,笔者没有接触过EtherCat,所有行文中有错误和不当之处在所难免。

本文记录EtherCat io示例运行环境搭建及演示。
例程位于sdk_env_v1.10.0\hpm_sdk\samples\ethercat\ecat_io

一、环境准备

1、SSC ToolV5.13
因为SDK中的配置采用的是V51.3,所以一定不要用其他版本。
因为Beckhoff官网只给企业用户提供下载用户,因此花了一些时间找到一个下载地址:
https://gitcode.com/open-source-toolkit/a3990/?utm_source=tools_gitcode&index=top&type=href&

SSC Tool主要的作用时生成EtherCAT从站协议栈代码。

2、TwinCAT 3
可以从倍福(中国)官方下载,需要注册
地址:https://www.beckhoff.com.cn/zh-cn/support/download-finder/search-result/?c-1=26782567

下载中心中查找:TwinCAT 3 download | eXtended Automation Engineering (XAE) 1.4G

下载后文件为TC31-FULL-Setup.3.1.4024.67.exe,注意安装时要以管理员身份运行。


TwinCAT在本例中主要起到EEPROM更新,控制EtherCAT从站的作用。

3、patch
示例中SSC协议栈代码修改用到了patch工具,所以需要安装patch,然后将patch路径加到系统路径中
patch下载地址:https://gnuwin32.sourceforge.net/packages/patch.htm

二、示例构建

1、用start_gui工具生成工程


2、SSC tool生成EtherCAT从站协议栈代码
new->import->HPM_ECAT_IO_Config.xml

import后,SSC tool可以支持HPM代码的生成

tool->import->Application->digital_io.xlsx

Project->Create new Slave Files生成从站协议栈代码


3、SSC协议栈代码修改
sdk_env_v1.10.0\hpm_sdk\samples\ethercat\ecat_io下
运行patch -d Src < ssc_pdi_mask.patch

4、用SEGGER Embedded Studio 8.24打开工程,编译下载到开发板

4、TwinCAT工程设置

下面只列出一些主要工作,详见gitee的官方SDK说明:https://gitee.com/hpmicro/hpm_sdk/tree/main/samples/ethercat/ecat_io

1)将ESI文件( sdk_env_v1.10.0\hpm_sdk\samples\ethercat\ecat_io\SSC\ESIECAT-IO.xml )复制到TwinCAT的安装目录下(如: C:/TwinCAT/3.1/Config/Io/EtherCAT )。

2)运行TwinCAT XAE Shell,打开TwinCAT软件,选择 File->New->roject,新建工程

3)首次使用更新网卡驱动

4)时钟设置
管理员身份运行C:\TwinCAT\3.1\System\win8settick.bat

5)扫描设备
扫描设备前,开发板应和PC机通过双绞线连接

6)更新EEPROM

7) IO操作

三、软件方面



APPL_Application函数被EtherCat中断调用,执行gpio输入判断和LED点亮操作

  1. void APPL_Application(void)
  2. {
  3.     InputCounter0x6000 = APPL_GetDipSw();
  4.     APPL_SetLed((UINT32)OutputCounter0x7010);
  5. }
复制代码
LED点亮函数
  1. void APPL_SetLed(UINT32 value)
  2. {
  3.     UINT8 led0 = ((value & 1) ?  BOARD_ECAT_OUT_ON_LEVEL : !BOARD_ECAT_OUT_ON_LEVEL);
  4.     UINT8 led1 = ((value & 2) ?  BOARD_ECAT_OUT_ON_LEVEL : !BOARD_ECAT_OUT_ON_LEVEL);

  5.     gpio_write_pin(BOARD_ECAT_OUT1_GPIO, BOARD_ECAT_OUT1_GPIO_PORT_INDEX, BOARD_ECAT_OUT1_GPIO_PIN_INDEX, led0);
  6.     gpio_write_pin(BOARD_ECAT_OUT2_GPIO, BOARD_ECAT_OUT2_GPIO_PORT_INDEX, BOARD_ECAT_OUT2_GPIO_PIN_INDEX, led1);
  7. }
复制代码
gpio输入判断函数
  1. UINT32 APPL_GetDipSw(void)
  2. {
  3.     UINT8 pin0_level = gpio_read_pin(BOARD_ECAT_IN1_GPIO, BOARD_ECAT_IN1_GPIO_PORT_INDEX, BOARD_ECAT_IN1_GPIO_PIN_INDEX);
  4.     UINT8 pin1_level = gpio_read_pin(BOARD_ECAT_IN2_GPIO, BOARD_ECAT_IN2_GPIO_PORT_INDEX, BOARD_ECAT_IN2_GPIO_PIN_INDEX);

  5.     UINT32 val = pin0_level << 0 | pin1_level << 1;

  6.     return val;
  7. }
复制代码


四、运行


1、双绞线连接PC机

2、ECAT交互区











分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

2735 积分
4 主题
+ 关注
热门推荐
关闭

站长推荐上一条 /3 下一条