Ethercat 主站调试

记录 Ethercat 驱动电机所用到的函数。

参考链接

  1. Igh1.5.2 etherCAT接口分析
  2. Ethercat解析(十二)之命令行工具的使用
  3. Ethercat系列—-IGH DC模式测试电机程序(Preempt-RT)

1 前言

在做机器人控制的时候,为了能够方便地对机器人进行力矩控制,自己搭建了一套控制器。笔者从机器人Ethercat主站的工作开始做起。
实时内核补丁、操作系统在搭建的时候有如下探索结果:

  • xenomai3.1/xenomai3.0.5 + Ubuntu16.04,编译时 rtdm 模块有问题,编译 Igh Ethercat 时,使能rtai 模块,总是编译无法通过,xenomai的自带例程涉及到 rtdm 的无法使用,自己写程序的时候需要有xenomai.cmake模块才能编译,不知道该如何处理rtai的问题。
  • xenomai2.6.5 + ubuntu12/14,可以使用,但是系统版本太老了…
  • preempt_rt + Ubuntu16.04,当前使用结果,preempt_rt 的实时内核能到 us 级,而 xenomai 能到 ns 级,考虑到机器人实时控制频率在 1k~4k Hz,preempt_rt 足够使用了。

preempt_rt 的安装及实时性测试参考https://colainlibrary.com/archives/d44fcc81.html

xenomai 的安装及测试可以参考https://rtt-lwr.readthedocs.io/en/latest/rtpc/xenomai.html

2 Ethercat 使用

Ethercat 的安装只需下载源码进行编译即可,这里梳理一下 Ethercat 和驱动器通过程序连起来的流程。

一个示例是Ethercat系列—-IGH DC模式测试电机程序(Preempt-RT),使用的时候注意将相应的 PDO 信息设置正确,以及 SM 块个数填对。

  1. 获取驱动器的pdo信息。
    • 依据已有的xml文件
    • 通过 ethercat xml 指令获取
  2. ecrt_open_master()
  3. ecrt_request_master()
  4. ecrt_master_create_domain()
  5. load xml
  6. create_slave_config()
    • ecrt_master_slave_config();
    • ecrt_slave_config_pdos(joint.sc, EC_END, slave_0_syncs)
    • ecrt_slave_config_reg_pdo_entry(joint.sc, 0x6040, 0, domain, NULL);
    • config sdos
  7. ecrt_master_activate();
  8. ecrt_domain_data();
  9. 线程函数
    • clock_gettime
    • timespec_add()
    • clock_nonosleep();
    • ecrt_master_application_time();
    • ecrt_master_receive();
    • ecrt_domain_process();
    • EC_READ_U16();
    • RC_WRITE_S16();
    • ecrt_domain_queue();
    • ecrt_master_send();
------ 本文结束感谢您的阅读------
Donate a cup of cola?