非实时系统对运动控制场合下伺服控制影响
非实时系统下,使开源EtherCAT库遇到问题
- 使用IGH库调试禾川一体伺服,定位到状态切换异常为数据域映射混乱造成。修改数据域初始化部分流程,原方案是申请一组数据域,初始化一个轴。运行时发现并不是每个轴都会很快进行响应,但是程序会顺序执行,导致6个轴全部配置完成后,个别轴都未能正确切换到运行态。修改初始化流程,现一次性循环申请6组数据域,完成后检查伺服状态预运行状态,然后配置pdo逻辑映射,最后依次写入到伺服从站,中间进行状态获取检查,解决状态不匹配情况下伺服个别操作无需导致pdo映射丢失问题。
- 测试禾川一体伺服同步模式,测试过程中发现问题,禾川伺服通过总线配置dc周期后,伺服并不是按照配置周期运行,尝试测试1,2,4,8ms,禾川的伺服反应只在2ms时运行是平滑的。先前和技术沟通好像是厂家调试软件里面能设置周期,且默认的也是2ms但是调试软件并没有对用户开放(某个配置项里隐藏的配置值,软件说明里并没给用户可操作提示),尝试配置60c2但是效果也不好。为了定位此问题,使用软件示波器进行了调试。发现电机的控制指令位置为方波,且波谷持续时间大约20-40us左右浮动。正常情况下波形应是一条直线。方波说明波谷的对应时间位置指令是没有采样到,这部分判断仍然是同步存在问题。
注:上述控制方式是主站同步模式,与赫优迅主站同步对应,主站根据自己的时钟周期发送同步报文,从站进行执行,主站同步的方式从现阶段测试经验看,严格要求时钟精确(禾川示波器能看出指令相位差),igh解决了soem通信链路保持问题,使得不需要用户去维持通信状态,且底层指令收发在内核中,实时性相对较好些,但是对于要求苛刻的伺服仍然会存在同步问题。 - IGH禾川控制方案中,主站同步会因定时浮动随着运行时间累加导致伺服超速报警,使用内核补丁也解决不了强实时设备控制要求。且在测试过程中发现通用的网口收发也存在通信延时,通过查找资料发现intel也有可用的实时性好的网卡e1000e, rtl819x等,在IGH项目说明也验证确实存在这个问题,实时网卡是内核直接可以进行数据收发操作,普通网卡可能兼容问题内核会去调用网卡自己驱动完成收发,大概意思实时网卡免驱,内核直接能操作省时间。
总结:使用主站同步方式进行伺服控制时,要求主站时钟很精确,虽然说电机看起来运行平稳,实际发送伺服的控制指令是方波,实际过程中CSP模式下运行几分钟电机就会自动超速报警(禾川一体),当然这只针对伺服实时要求很强的设备(测试用的新版一体机比较苛刻,桌面6轴那款一体机是旧版,那款之前测soem都能正常运行,igh应该也运行没问题)。在埃斯顿电机和禾川单个伺服上可能时钟偏差允许的范围更宽一点,没有遇到报警问题。
遇到的难题+分析:
- 没有RTOS实时系统环境上,主站同步方式已经到瓶颈,再调整更换内核也不能根本解决这个问题。尽管已经测试了premept,xenomai,但是从内核调优角度来说,难度大,预期效果也不理想。强实时兼容问题也没法根本解决。下一部方案调整其实也很明朗,ethercat同步方式无非就两种,主站同步(通过主站发送同步指令,从站根据主站时钟修改自己本地时钟)。从站同步(从站以自身时钟作为同步时钟,主站根据从站调整自己时钟进行控制指令同步)。前者相对简单容易些,后者较为复杂。从站同步难点就算如何根据从站时钟算出主站时钟的偏差,动态修改循环指令周期(此时主站程序不是固定10ms周期,具体循环周期为主从时钟±偏差+10ms的累加,主站快了就让它下个周期多等会,慢了就提前发送控制指令)。当然系统也最好有实时内核。此方式对pc实时性要求会低一些,但也并非无下限。若是定时器偏差太大也无济于事。
- 非商业控制方案不可能适配所有电机,测试任务更倾向于出一套自己的主站控制方案,选几套合适的伺服厂家。在高标准强实时的控制领域,涉及各方面技术难点太多。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mr.chen Blog!
评论