【SOEM主站】EtherCAT主站时钟偏移补偿

         在进行EtherCAT主从通讯测试时,比较容易在DC配置出现错误,特别是使用到从站DC模式时,有时会报同步错误,有时即使没报错误伺服从站运行过程中也会出现电机轴的抖动。引起同步错误其中一个原因就是主站发送数据帧时间存在较大的抖动,导致数据帧在从站收到SYNC信号之后才到达从站。因此,需要对EtherCAT主站的时钟进行偏移补偿。

1、DC时钟的工作原理 

       DC时钟可以使所有EtherCAT设备使用相同的系统时间,从而控制各设备任务的同步执行。DC时钟机制使所有的从站都同步于一个参考时钟。一般将主站连接的第一个具有DC时钟功能的从站作为参考时钟,以参考时钟同步其他设备和主站的从时钟。具体原理可参考《工业以太网现场总线EtherCAT驱动程序设计及应用》书籍。

      从站间的同步一般通过ESC的DC单元来保证,也即SYNC0(输出同步)和SYNC1信号(输入同步),这些信号同步精度可以达到很高,一般远远低于1us的,实践中可以做到几个ns。SYNC0/1频率一般与EtherCAT通讯周期相同,例如EtherCAT通讯周期1ms,SYNC脉冲频率通常也设置为1kHz。 

2、主站时钟 

       EtherCAT主站也具有计时功能, 称为主站时钟。通常情况下,EtherCAT主站协议栈通过在其控制硬件中的硬件计时器来循环发送输出数据。例如对于STM32主站而言,一般采用定时器中断来控制。如果系统通讯周期为1ms,那么定时器中断周期应设置为1ms。由于STM32定时器来源于系统时钟,而系统时钟又是基于外部晶振PLL得到,会存在时间偏移。

       对于从站而言,接收到主站通讯帧后会产生SM中断信号,这个SM信号与主站的通讯周期直接相关,而从站的SYNC0/1信号是从站ESC产生的。由于主站定时器时钟与从站ESC的SYNC0/1存在偏差,因此SM信号和SYNC0/1信号会存在时间偏差,且这个偏差会随时间偏移。当从站先收到SYNC信号,数据帧才到达从站后,就会引起同步错误。

3、主站时钟偏移补偿

      为保证主站发送数据周期与系统DC周期保持一致,需要调整主站器的发送周期,实时进行时钟偏移补偿,从而减少系统抖动。当主站数据帧发送周期大于DC同步信号周期时,减少主站定时器的Period值;当主站数据帧发送周期小于DC同步信号周期时,增大主站定时器的Period值。具体方法可以:周期性计算EtherCAT主站时间和DC时钟主站时间之间的差异,基于PI控制算法计算主站定时器的补偿值,然后修改定时器的Period。

EtherCAT开发学习板:https://shop461235811.taobao.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/28413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop+Spark大数据技术(微课版)总复习

图1 Hadoop开发环境 图2 HDFS 图3 MapReduce 图4 HBase 图5 Scala 图6 Spark 图7 Spark RDD 图8 (不考) 图9 Spark SQL 图10 Spark Streaming 图11 Spark GraphX 第一章 Hadoop大数据开发环境 hadoop是什么? (判断题&#…

二维数组与指针【C语言】

二维数组与指针 一维数组一维数组与指针二维数组二维数组与指针总结补充判断以下方式是否正确打印二维数组一维数组 int arr[] = {11, 22, 33, 44};arr:首地址(第一个元素的地址) 一维数组与指针 int arr[] = {11, 22, 33, 44};因为,arr表示的是首地址,等价于 int* p =…

基于springboot实现交通管理在线服务系统项目【项目源码+论文说明】

基于springboot实现交通管理在线服务系统演示 摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装交通管理在线服…

【Android面试八股文】判断对象是否被回收,有哪些GC算法,虚拟机使用最多?

判断对象是否被回收是垃圾回收(GC)机制的核心功能之一。主要有以下几种GC算法来完成这一任务,各种算法在不同的虚拟机中有不同的应用场景和优化策略: 1. 引用计数法(Reference Counting) 解释: 每个对象维护一个引用计数器,记录有多少引用指向该对象。当有新的引用指…

Linux常用操作大全(上)

Linux常用操作 文章目录 Linux常用操作一、各类小技巧**1.ctrl c 强制停止****2.ctrl d 退出或登出**3.历史命令搜索4.光标移动快捷键5.清屏6.复制Ctrlshiftc7.粘贴Ctrlshiftv 二、软件安装1.概念2.yum与apt 三、systemctl控制服务四、软链接ln五、日期时区1.date查看日期2.修…

Java中栈(Stack)和队列(Queue)有什么区别?如何实现栈和队列?

在计算机科学中,栈(Stack)和队列(Queue)是两种基础且广泛使用的数据结构,它们在算法设计和系统开发中扮演着重要角色。本文将深入探讨这两种数据结构的基本概念、操作方式以及在Java中的实现。 栈&#xf…

【算法】某赛车游戏中的组合计数问题及其扩展。推导思路:层层合并

文章目录 引言所有人都能完成可能有人未完成扩展问题参考资料 引言 在某款人称赛车界原神的赛车游戏中有组队竞速赛。共有n个人,n为偶数,分为人数相等的红队和蓝队进行比赛。结果按排名得分的数组为pts,单调递减且均为正整数。比如pts [10,…

深入理解XPath:从入门到精通

深入理解XPath:从入门到精通 引言 在Web自动化测试、网页数据抓取和XML文档处理等领域,XPath都是一种强大且常用的定位技术。通过XPath,我们可以精确定位和操作网页或XML文档中的元素。本文将详细介绍XPath的基本概念、语法、使用示例及高级用法,帮助你全面掌握XPath。 …

【LeetCode】LCR 124. 推理二叉树

题目链接: 题目描述:某二叉树的先序遍历结果记录于整数数组 preorder,它的中序遍历结果记录于整数数组 inorder。请根据 preorder 和 inorder 的提示构造出这棵二叉树并返回其根节点。 注意:preorder 和 inorder 中均不含重复数字…

Stable Diffusion3 开源!一文教你玩转 Stable Diffusion3

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

[C++]使用yolov10的onnx模型结合onnxruntime和bytetrack实现目标追踪

【官方框架地址】 yolov10yolov10框架:https://github.com/THU-MIG/yolov10 bytetrack框架:https://github.com/ifzhang/ByteTrack 【算法介绍】 Yolov10与ByTetrack:目标追踪的强大组合 Yolov10和ByTetrack是两种在目标追踪领域具有显…

OceanBase 金融项目优化案例

领导让我帮忙支持下其他项目的SQL优化工作,呦西,是收集案例的好机会。😍 下面SQL都是在不能远程的情况下,按照原SQL的逻辑等价改写完成发给现场同学验证。 案例一 慢SQL,4.32秒: SELECT MY_.*, RM FROM (SE…

C语言:链表

链表 介绍单向链表节点结构创建节点插入节点删除节点遍历链表尾部插入查找节点链表反转示例程序程序1程序2 介绍 链表是一种常见的数据结构,用于存储一系列线性数据。与数组不同,链表中的元素在内存中不必是连续存放的,而是通过指针将每个元…

【Python高级编程】Python中Excel表格处理数据

Python中Excel表格处理数据 在数据分析和处理领域,Excel文件是一种常见的数据存储格式。Python提供了强大的工具,如Pandas库,可以方便地读取和处理Excel文件。本文将介绍如何使用Pandas读取和处理Excel表格数据,并分享常见的文件…

Jackson的使用

一引入依赖 <!--Jackson是spring-boot-starter-json的一个依赖&#xff08;spring-boot-starter-web中包含spring-boot-starter-json&#xff09;。也就是说&#xff0c;当项目中引入spring-boot-starter-web后会自动引入spring-boot-starter-json --> <dependency&g…

linux中acl策略

文档归属的局限性 - 任何人只属于三种角色&#xff1a;属主 属组 其他人- 无法实现更精细的控制 acl访问策略 - 能够对个别用户个别组设置独立的权限- 大多数挂载ext3/4,xfs文件系统默认已支持 Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...setfacl [选项] u:用户名…

4款好用的文本扩展器!!提高工作效率!【送源码】

今天的文章中为大家带来几款好用的文本扩展器&#xff0c;帮助大家提供工作效率&#xff0c;减少重复劳动&#xff5e; Beeftext Beeftext 是一个文本扩展工具&#xff0c;可以帮助用户快速输入短语、段落或者常用的文本片段。它允许你创建自定义的缩写和对应的文本替换&…

使用tkinter创建带有图标的菜单栏

使用tkinter创建带有图标的菜单栏 效果代码代码解析创建主窗口加载图标创建菜单栏添加文件菜单添加带图标的菜单项 Tkinter 的默认菜单外观较为简单&#xff0c;可以通过自定义和添加图标&#xff0c;让菜单显示更好看。 效果 代码 import tkinter as tk from tkinter import …

课时154:项目发布_手工发布_手工发布

1.2.3 手工发布 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 为了合理的演示生产环境的项目代码发布&#xff0c;同时又兼顾实际实验环境的资源&#xff0c;我们这里将 B主机和C主机 用一台VM主机来实现&#xff0c;A主机单…

uniapp vue2 首页生命周期函数等待app.vue加载完毕后执行

代码 //main.js Vue.prototype.$onLaunched new Promise((resolve) > {Vue.prototype.$isResolve resolve })//app.vue // 模拟异步请求setTimeout(() > {this.$isResolve()}, 2000)// index.vue async onLoad() {await this.$onLaunchedconsole.log(onload执行)},注…