[评测分享]
【RISC-V 先楫半导体HPM5E00 MCU开发板试用体验】5、EtherCat io示例实践
#板卡评测
536 人阅读
|
0 人回复
|
2025-07-10
TA的每日心情 | 开心 昨天 13:36 |
|---|
签到天数: 203 天 连续签到: 3 天 [LV.7]常住居民III
进士
- 积分
- 2735
|
本帖最后由 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点亮操作
- void APPL_Application(void)
- {
- InputCounter0x6000 = APPL_GetDipSw();
- APPL_SetLed((UINT32)OutputCounter0x7010);
- }
复制代码 LED点亮函数
- void APPL_SetLed(UINT32 value)
- {
- UINT8 led0 = ((value & 1) ? BOARD_ECAT_OUT_ON_LEVEL : !BOARD_ECAT_OUT_ON_LEVEL);
- UINT8 led1 = ((value & 2) ? BOARD_ECAT_OUT_ON_LEVEL : !BOARD_ECAT_OUT_ON_LEVEL);
- gpio_write_pin(BOARD_ECAT_OUT1_GPIO, BOARD_ECAT_OUT1_GPIO_PORT_INDEX, BOARD_ECAT_OUT1_GPIO_PIN_INDEX, led0);
- gpio_write_pin(BOARD_ECAT_OUT2_GPIO, BOARD_ECAT_OUT2_GPIO_PORT_INDEX, BOARD_ECAT_OUT2_GPIO_PIN_INDEX, led1);
- }
复制代码 gpio输入判断函数
- UINT32 APPL_GetDipSw(void)
- {
- UINT8 pin0_level = gpio_read_pin(BOARD_ECAT_IN1_GPIO, BOARD_ECAT_IN1_GPIO_PORT_INDEX, BOARD_ECAT_IN1_GPIO_PIN_INDEX);
- UINT8 pin1_level = gpio_read_pin(BOARD_ECAT_IN2_GPIO, BOARD_ECAT_IN2_GPIO_PORT_INDEX, BOARD_ECAT_IN2_GPIO_PIN_INDEX);
- UINT32 val = pin0_level << 0 | pin1_level << 1;
- return val;
- }
复制代码
四、运行
1、双绞线连接PC机
2、ECAT交互区
|
|
|
|
|
|
|
|
|