开源改变世界!!

归位周期 #66

推推 grbl 2年前 (2023-01-21) 124次浏览
关闭
aldenhart 打开了这个问题 2012 年 2 月 25 日 · 78条评论
关闭

归位周期#66

aldenhart 打开了这个问题 2012 年 2 月 25 日 · 78条评论

注释

归位周期 #66

我想启动一个线程来讨论归巢循环应该如何工作和调用。这实际上是一个复杂的话题,因为 Gcode 规范中没有任何指导,而且每个人的做法都不一样。请原谅这篇冗长的帖子,我将尽量简短地总结大量研究。切入正题,我认为使用 G28.1 来参考轴(执行归位循环)是一个不错的方法,但是人们正在使用其他方法。

— 调用归位 —

总结 Gcode 规范的两个普遍认可的参考资料:
(1) NIST RS274NGC v3 (Kramer)
(2) CNC Programming Handbook, Edition3 (Peter Smid)
…没有办法以编程方式让机器归位。两者都同意 G28 将您带到起始位置,但都没有说明如何实际按下开关和参考轴。

G28 在以下各项中返回机器零 – 但命名不同:

  • “返回家园”(NIST)
  • 《机器归零》(Smid)
  • “回家”(3马赫)

EMC2 定义了 G28“Go to Predefined Position”,这与上面其他 3 个参考文献的工作方式不同。它可以返回到机器零以外的某个坐标:http://linuxcnc.org/docs/html/gcode_main.html#sub:G28,-G30:
-Return

Mach3 将 G28.1 定义为“Reference Axes”并实际执行归位循环。

Reprap Teacup 变体使用 G161 和 G162 执行归位,Makerbot 机器也是如此。我的机械师朋友听到这个消息时会呕吐,因为您真的不应该到处添加新的整数 G 代码。点扩展名可以,但新 Gxx 不行。Gxxx 更糟。请参阅:
http ://reprap.org/wiki/Teacup_Firmware#Endstop_Handling

— 归位功能如何 —

EMC 实际上有一个关于归位周期应该如何工作的很好的规范:http:
//linuxcnc.org/docs/html/config_ini_homing.html
… 但是(除非我遗漏了什么)没有编程方式来调用它。

Mach3 在下面的第 10.7.11 节中提供了对归位操作的非常简洁的描述。这与 EMC 不同,并且似乎不那么灵活: http:
//www.machsupport.com/docs/Mach3Mill_1.84.pdf

实际归巢方式的要求因机器和应用程序而异,但这就是我一直在玩的东西。这主要是 EMC 行为。还有其他细节,但总而言之:

  • 使用 G28.1 Xnn Ynn Znn Ann Bnn Cnn 编程参考轴(grbl 将仅使用 XYZ)
    轴字是可选的,但至少必须存在一个。只有存在的轴才会归位。其他人将留在他们当前的坐标。
  • 每个指示的轴都按预设顺序归位(XYZABC,在代码中设置)。
  • 负限位开关在此期间变为归位开关,并且它们的行为发生变化(无中止)
  • 第一步是以横向速度在负方向上搜索限位开关
  • 当按下开关时,它会后退一个小的、可编程的距离
  • 开关的第二遍是以编程的低速度进行的闩锁移动
  • 一旦击中闩锁移动,零轴就会退后,退避用作该轴的机器零
    参考:http ://www.synthetos.com/wiki/index.php?title=Projects:TinyG-Homing

以上不涉及:

  • 想要使用正限位开关进行归位的轴
  • 具有中间位置归位开关的轴(在非常大的机器上很有用)
  • 在搜索过程中关闭开关的“智能”方式
  • 主轴归位(分度)
  • 零轴不同于偏移量
  • 可编程归位序列
  • 一些回原点实现在最后返回到坐标系零,或者通过像 G28 这样的中间点来执行此操作。这个实现两者都不做。

您对调用归位有何看法,它是如何工作的?

  • 奥尔登
归位周期 #66
成员

尼斯总结奥尔登。我不得不同意 G28/G30 不应明确用于调用归位循环,但我认为也没有必要创建新的 g 代码命令。我认为将归位周期与 g 代码完全分开是一个好主意,主要是因为 g 代码在不同的制造商/系统之间已经是一团糟。

所以,我认为这真的导致了一个单独的问题:我们是否需要另一种方法来设置或执行不涉及 g 代码的 Grbl 特定命令/设置?这将包括诸如切换块删除、慢跑模式和设置、空运行以及执行归位循环之类的事情。我认为扩展“$”设置命令来执行此操作是个好主意。如何去做可能是另一个线程。

为了回应您关于归位在每个机器应用程序中有何不同的评论,将归位周期与所有其他运动例程完全分开的源设计使得它很容易被用户或开发人员修改以使其成为他们自己的。我不认为我们真的应该考虑所有情况,只需要一个一般的归巢周期就可以了,并保持简单。在大多数轧机上,这首先是 Z 正极限,然后定位 XY 负极限。这应该适用于 90% 以上的用户。

此外,归位应始终定位机器零位,并且任何不同的轴零位都应由工作坐标系处理。之前的边缘推送在 g 代码解析器中添加了中间归位点。这将移动到中间点,然后执行归位循环(但这实际上应该只移动到机器零)。

无论如何,Bruce 在推进 Simen 最初的归巢循环程序方面取得了一些不错的进步,我本周末一直在审查它。我将尝试稍微重新组织代码,以便用户可以轻松更改代码。

归位周期 #66

桑尼,感谢您的阅读和评论。我同意归巢应该是孤立的和可破解的。我认为我们仍然需要一种通用的方式来调用它,以便各种控制台程序和/或脚本可以保持兼容。这就是关于如何调用非 Gcode 命令的要点。

如您所知,我一直在使用(4 个字符)助记符和友好的名称来扩展 $ 结构。因此,一种方法是将“$home”作为助记符。为了与 $ 概念保持一致,您还可以提供单个值,例如 $home=2。

我也喜欢 Mach3 将 G28 扩展到 G28.1 的方式。这样您就可以指定参与归位操作的轴。但是有一个有效的论点说归巢不应该从 Gcode 调用。似乎有两种思想流派。

我们应该启动参数对话框。Bruce 还需要 2 个参数来归位,而这只是访问 Gcode 参数 #0000 – #5399 中内容的开始。

归位周期 #66

我有一个龙门式 CNC 割炬切割台的应用程序,长轴上有两个从属步进器。我希望修改家庭代码,使轴与两个独立的家庭开关成正方形。

我是 GitHub 的新手;我刚刚做了一个 fork 来工作,但我想知道我是否应该从其他人的工作中提取一些归巢代码。

归位周期 #66
成员

在 limits.c 中,已经有一个启动器归位循环程序,但还需要一些工作。通过根据您的目的修改代码,您可能可以相对轻松地使其工作。如果您碰巧提出了一种紧凑、通用且强大的方法,我们很乐意看到它并尝试将其集成到其中。

归位周期 #66

嗨,我已经修改了 limits.c 以启用 PORTB 上限制引脚的内部上拉(我使用的是切换到接地的常开开关)。似乎“幽灵”数据有时会出现在 PINB 上。然后,这会过早地触发反向归位周期。发生这种情况时,Arduino Uno 上的 Tx LED 也会闪烁一次。我怀疑某些中断导致 PINB 状态发生变化。我可能可以通过添加去抖动代码来弥补这一点,但我想了解为什么会这样。

归位周期 #66
成员

谢谢hansj66。从本周开始,我回到了 Grbl 开发“马”,并且正在完全重新处理 limits.c 和归巢周期。我将包括更多选项,供用户为他们的限位开关(即正常高或低、方向等)设置 grbl。这些都将是 config.h 中的编译时设置,直到事情固化,然后被推送到 master 分支。

“幽灵”数据可能是由弹跳开关引起的。不久前在这些“论坛”中讨论了如何对开关进行去抖动。最简单的做法是为开关添加一个低通滤波器(通过并联一个小电容器)以帮助消除高频噪声。至于添加代码,您可以尝试的一件事是在反向归位周期开始之前在 limits.c 中添加一个短暂的延迟。这应该是一个穷人的去抖(这可能是我会这样做的方式)。我还没有看到适合 Grbl 的优雅去抖动实现,我也没有想出一个。如果你有任何想法,我愿意接受。

归位周期 #66

我只是把硬件放在一起,用于在 X 轴上带有双(硬件从属)步进驱动器的 3 轴工作台。我需要独立安置两个从属电机才能获得马车广场。我希望必须稍微自定义归位代码才能执行此操作,因此我将饶有兴趣地关注 limits.c 的开发。

我也在考虑将我的限位开关引入像 Microchip MCP23017 这样的 I2C I/O 扩展器上,如果有任何想法,我会发布。

归位周期 #66

根据机器的刚性,实际可用的 X’-X” 差异可能小于限位开关的重复精度:-),这意味着您可能无法使用此方法将其平方。
我正在使用的机器具有诸如设置(双 X 轴)和 X 轴上的单个限位开关。在过去的三个月里,我一直在使用马车,而马车没有歪斜。

至于去抖动,业界(在软件中)的做法是从“现在引脚是否高”切换为“过去n 个时间单位的引脚是否处于高电平”。

归位周期 #66
成员

同意软件可以工作,但
对于爱好者来说,简单的 RC(低通滤波器)电路也可以。

软件的主要问题是确保 debouncer 例程很小
并且不会干扰 grbl 实时运行所需的所有其他内容。
我希望在某个时候安装去抖动例程,因为我想
确定运行时控制(馈电保持器、周期开始)并且它们需要
去抖动。限制没有那么多,因为它们是一种特殊情况,可以
写成对弹跳开关不敏感。

不久前,我记得曾试过写一篇。我不记得我为什么
停下来,但我认为这要么是因为它变得过于
复杂,要么是计时器问题。Radu 如果您知道如何
有效地实现这一点,我会洗耳恭听。

2012 年 9 月 27 日凌晨 4:49,Radu – Eosif Mihailescu <
notifications@github.com > 写道:

根据机器的刚性,实际可用的 X’-X” 差异
可能小于限位开关的重复精度:-),这
意味着您可能无法使用此方法将其平方。
我正在使用的机器具有诸如设置(双 X 轴)和 X 轴上的单个
限位开关。在过去的三个月里,我一直在使用马车,
而马车没有歪斜。

至于去抖动,业界(在软件中)的做法是
从“现在引脚是否高”切换为“过去 n 个时间
单位
的引脚是否处于高电平”。


直接回复此电子邮件或在 GitHub 上查看它
https://github.com/ /issues/66 #issuecomment-8932475。

归位周期 #66

我看到了这篇论文http://www.eng.utah.edu/~cs5780/debouncing.pdf,它以一种非常好的和非学术的方式解释并提出了我要说的一切,我推荐你读一读。

此外,如果人们对通用的中端硬件去抖器感兴趣,我愿意提出一种可用于您需要的任何东西(限位开关、键盘、索引传感器等)的设计。

归位周期 #66
成员

有人对一次一个轴执行归位循环有任何问题吗?而不是像现在这样能够移动多个轴?

我问的原因是,与我刚刚在有独立步进器例程的地方推出的相比,我认为我可以简化整个归位循环例程。这个想法只是将线运动直接循环到规划器中,并且引脚更改中断将监控限位开关并停止步进器。这将使代码更小,并与现有的代码很好地集成。大家怎么看?值得这么麻烦吗?

归位周期 #66

我个人不喜欢归巢周期有多慢,如果你认为你可以
加快它,你应该。这是作为用户而不是程序员来的。当我
通常每次打印至少回家两次时,我厌倦了缓慢的归位。

2012 年 10 月 5 日星期五上午 10:34,Sonny Jeon notifications@github.com写道:

有人对一次一个轴执行归位循环有任何问题
吗?而不是像现在这样能够移动多个轴?

我问的原因是,与我刚刚在有独立
步进器例程的地方推送的相比,我认为我可以简化整个归位循环例程。这个想法只是将线运动直接循环到
规划器中,并且引脚更改中断将监控限位开关并停止
步进器。这将使代码更小,并
与现有的代码很好地集成。大家怎么看?值得这么麻烦吗?


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ /issues/66 #issuecomment-9177467。

归位周期 #66
成员

最近的推动将归位速度与寻道和进给率联系起来。您
必须自己编译它才能使用它。但是,您也可以
对当前版本执行相同的操作来调整速度,因为它已硬
编码在 limits.c 文件中。

EEPROM 设置应该很快就会出现,所以你不必
重新编译来调整速率。

2012 年 10 月 5 日上午 8:41,afpiper420 notifications@github.com写道:

我个人不喜欢归巢周期有多慢,如果你认为你可以
加快它,你应该。这是作为用户而不是程序员来的。当我
通常每次打印至少回家两次时,我厌倦了缓慢的归位。

2012 年 10 月 5 日星期五上午 10:34,Sonny Jeon notifications@github.com写道:

有人对一次一个轴执行归位循环有任何问题
吗?而不是像现在这样能够移动多个轴?

我问的原因是,与我刚刚在有独立
步进器例程的地方推送的相比,我认为我可以简化整个归位循环例程。这个想法只是将线运动直接循环到
规划器中,并且引脚更改中断将监控限位开关并
停止
步进器。这将使代码更小,并
与现有的代码很好地集成。大家怎么看?值得这么
麻烦吗?


直接回复此电子邮件或在 GitHub<
https://github.com/grbl/grbl/issues/66#issuecomment-9177467&gt;上查看。


直接回复此电子邮件或在 GitHub 上查看它
https://github.com/ /issues/66 #issuecomment-9177690。

归位周期 #66

那么,按照今天的构建,系统是否期望一个引脚在达到限制时变高或在达到限制时变低?

归位周期 #66
成员

正常高,我相信。所以当它低时它应该停止步进器。我
建议在测试前降低默认搜索率。我正在努力推动这些限制设置,但 本周末
因 strtod() 问题而分心。
让我们知道它是如何工作的。

2012 年 10 月 8 日上午 9:02,komradebob notifications@github.com写道:

那么,按照今天的构建,系统是否期望一个引脚在达到限制时变高
或在达到限制时变低?


直接回复此电子邮件或在 GitHub 上查看它
https://github.com/ /issues/66 #issuecomment-9228613。

归位周期 #66

我还没有使用 grbl,但我正在使用的软件会在
各个轴上进行隔离归位。它想改为进行组合归巢,但到目前为止,它
只是评论中的待办事项。

也就是说,我认为孤立的轴工作正常。但是从这里看,你的草
似乎更绿了。

Phil
在 2012 年 10 月 5 日上午 10:34,“Sonny Jeon” notifications@github.com写道:

有人对一次一个轴执行归位循环有任何问题
吗?而不是像现在这样能够移动多个轴?

我问的原因是,与我刚刚在有独立
步进器例程的地方推送的相比,我认为我可以简化整个归位循环例程。这个想法只是将线运动直接循环到
规划器中,并且引脚更改中断将监控限位开关并停止
步进器。这将使代码更小,并
与现有的代码很好地集成。大家怎么看?值得这么麻烦吗?


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ /issues/66 #issuecomment-9177467。

归位周期 #66

chamnit,我会让你知道。是否启用了内部上拉电阻以便可以不使用开关,或者是否需要提供它们?

我已经设置好数控系统,只需要连接限位开关。今天应该可以考了。

归位周期 #66
成员

@komradebob: 我认为内部上拉被禁用了,还不确定如何在 C 中实现。在完成代码之前,我会确保对此进行调查。我一直在示波器上测试所有东西,并且不得不连接一个简单的上拉电阻才能让它们工作。现在,除了破解源代码本身之外没有多少可配置性,所以请谨慎行事。它将首先向上移动 z 轴(正向)直到检测到限位开关低,然后同时将 xy 向正方向移动,一旦其中一个限位变低则狗腿。在它们都达到极限后,它们都应该向负移动,直到开关分别回到高电平。

还有很多工作要做,所以如果您发现您希望了解它的工作原理,现在是安装它的时候了。就我的计划而言,我将为进近和离开归位进给率安装用户设置,完全启用/禁用归位,启用/禁用某些限位开关(可能),并在开关正常高/低时切换。

@phord: 感谢您的输入。听起来我毕竟会保持多轴归位。当我们在生产线上添加第 4 个轴时,这肯定会派上用场。

归位周期 #66

@chamnit,

这是有关如何设置上拉电阻的链接:

能源/能源#30

它是关于使用启动板的,但使用的示例是“这里是如何在 Arduino 上执行此操作”。:)

归位周期 #66

一旦找到起始位置,它就会将其设置为 0,0,0,对吗?

归位周期 #66
Member
喜欢 (0)