开源改变世界

grbl 如何知道解释队列中的下一行 gcode? #597

推推 grbl 3年前 (2023-01-22) 94次浏览

打开
Axaxin 开启了这个issue 2019 年 2 月 4 日 · 17条评论
打开

grbl 如何知道解释队列中的下一行 gcode?#597

Axaxin 开启了这个issue 2019 年 2 月 4 日 · 17条评论

注释

grbl 如何知道解释队列中的下一行 gcode? #597
轴突蛋白 评论了 2019 年 2 月 4 日  

我对电子产品/grbl 处理步进电机的基本机制了解不多。我就想知道,grbl在执行一行gcode的时候,比如G0X100,grbl怎么知道X步进电机已经到了100mm,然后开始执行queue中的下一行?是因为步进驱动器给 grbl 反馈了吗?或者 grbl 只是通过计算自己发送了多少脉冲来知道它?
我正在考虑使用一组带有 grbl 的闭环步进电机来提高我的项目的速度性能,比如一些快速循环运动。知道 grbl 是为开环设计的,所以我的小想法可能不像仅仅代入闭环集那么容易。也许我可以实现一个上层控制台(GUI)来实现这一点,但首先需要弄清楚 grbl 在执行 gcode 时的行为方式。有什么建议吗?
非常感谢。

grbl 如何知道解释队列中的下一行 gcode? #597

GRBL 通过计算步数知道步进器的位置。

在机器的极限运行时,更改为闭环不会提供更多的性能,只会提供更多的安全余量。闭环电机(步进电机或伺服电机)确实运行得更多!

如果您想将闭环步进电机与 GRBL 一起使用,请选择带有内置驱动器的步进电机。它们可以像任何普通步进器一样仅通过 step/dir 信号进行控制。当闭环步进器跟不上步伐时,他会通过设置输出引脚向控制器发出信号。

grbl 如何知道解释队列中的下一行 gcode? #597
作者

@HuubBuis
正如您所说,使用带有内置驱动程序的步进器,让 GRBL 将其视为普通步进器,在这种情况下,如果在执行当前 gcode 期间发生步骤丢失/过度,GRBL 如何知道保留并为驱动程序/编码器提供修复空间在开始下一行之前?当捕获到来自编码器的警报信号时,使用 !/~(hold/resume) override 命令来保持 GRBL 怎么样?

grbl 如何知道解释队列中的下一行 gcode? #597

GRBL 不知道步进器是否丢步并会继续发送位置脉冲。如果发生这种情况,则损坏已经造成,您正在错误的位置进行车削/铣削。闭环可让您扩展机器的极限,您应该(误)仅在安全条件下(以最大速度定位)使用此优势。每个控制器都有这个问题,而不仅仅是 GRBL。

闭环驱动器通常有 2 个附加输出,一个用于发出电机已就位的信号,另一个用于发出信号的警报输出用于指示驱动器停止尝试跟上位置命令并停止移动。该报警输出可用于中止铣削/车削过程(紧急停止)。
除了噪音低之外,这种报警输出在我看来是闭环驱动器的唯一优势。我知道很多人不同意这个观点,但我总是尽量避免出现问题。

grbl 如何知道解释队列中的下一行 gcode? #597

Grbl 只是开环,无法从头寸损失中“恢复”。

闭环步进电机关闭驱动器和电机之间的环路。Grbl 没有参与其中。如果电机跟不上,驱动器可以在一定程度上进行补偿,但如果电机跟不上,驱动器就会出现故障。这是不可恢复的情况。

我熟悉的驱动只有故障输出。不是“就位”,因为实际上只有两个条件。这些基本上就是我所说的“错误”或“非错误”。它总是一个或另一个,驱动程序编程实用程序或驱动程序显示器上可能会显示其他信息,但我不知道有任何驱动器将此输出到控制器。所以实际上只需要一个“故障”输出。

Grbl 知道电机/驱动器是否出现故障的唯一方法是将驱动器的故障线连接到 Grbl 的输入端。我已经使用安全门输入完成了此操作。发生的情况是,如果驱动器出现故障,故障信号将使安全门跳闸,从而使机器停止运行。然后,用户必须弄清楚驱动器出现故障的原因、重置驱动器、重新安置机器等。

grbl 如何知道解释队列中的下一行 gcode? #597

我不知道有没有 AtPosition 信号的闭环驱动器!

使用闭环驱动器时没有警报并不意味着电机就在正确的位置。这意味着位置误差小于驱动程序配置中设置的最大位置误差!

闭环电机通常有 3 种位置状态:

  • 就位:FaultSignal 被清除AtPosition 信号设置
    电机准确就位。
  • No Fault but not exactly at position:Fault 信号清除AtPosition 信号清除
    电机未准确到位,但误差小于驱动器配置中设置的最大误差。当驱动程序试图到达设定的确切位置时,这是“临界状态”。
  • Fault:Fault 信号置位,AtPosition 信号清零
    电机跟不上,位置误差大于驱动器配置中设置的最大位置误差。电机停止。

为了准确定位,您不能假设没有报警时,步进器就位。您必须检查并等待 AtPosition 信号(如果驱动程序支持)。

查看 leadshine HSS86 驱动器或仿制 2HSS86B 驱动器的文档。

grbl 如何知道解释队列中的下一行 gcode? #597
加尔特 评论了 2019 年 2 月 8 日 通过电子邮件
grbl 如何知道解释队列中的下一行 gcode? #597

它们都有一个定位输出。只是其中一些需要在其故障输出端使用 SN7404 六角反相器。

查看 leadshine easy servo DH 驱动器http://www.leadshine.com/UploadFile/Down/ES-DH1208d_V1.4.pdf至少没有记录如何访问位置。我有 3 个这样的克隆,还有另一种没有任何定位信号的克隆。

无论如何,关于 Grbl 或任何其他开环控制器,无论如何,您实际上无法对位置指示进行任何实际操作。如果驱动器在运动过程中未就位,除了进给保持以使其赶上之外,您无能为力。您唯一可以做的另一件事是执行移动,然后等待到位指示作为继续下一步移动的信号。这些中的任何一个都会破坏性能和任何前瞻性计划并大大降低速度。除此之外,您将不得不重新编码 Grbl。

此外,由于机器的轴通常多于一个,因此您需要监控每个到位销并确保所有销都发送到位信号,或者您是否只需要减慢一个或两个轴以让滞后的一个赶上。这不是微不足道的,在 grbl 中是无法做到的。

如果需要那种定位精度,那么我会说 Grbl 和闭环步进器是错误的工具。这种精度对于控制器闭合环路或双闭环系统来说是尖叫声。再一次,不是 grbl 的事情。

grbl 如何知道解释队列中的下一行 gcode? #597

为了准确定位,您不能假设没有报警时,步进器就位。您必须检查并等待 AtPosition 信号(如果驱动程序支持)。

我忘了。只要故障的允许误差在可接受的范围内,您完全可以认为没有报警就意味着定位准确。

grbl 如何知道解释队列中的下一行 gcode? #597
作者
轴突蛋白 评论了 2019 年 2 月 9 日  

@109JB @ghartc @HuubBuis感谢您提出的所有宝贵意见。

对于以上评论,我只能得出结论:

  1. 只需使用 grbl + 闭环步进器,仅在机器以最大速度限制运行时提供更多安全裕度。换句话说,它不能显着提高机器的速度限制,而是一项工作的总效率。
  2. 我认为闭环驱动程序确实知道在触发警报/故障时丢失的步数。并且,如果 grbl 设置为同时触发安全门,通过一些计算,grbl 能够重新定位电机的位置并继续。然而,这个过程只能在 grbl 之外完成,或者像@109JB说,不是grbl的事。(我可能错了)
  3. 如果一个作品丢步次数多,说明已经超过了机器/系统的极限。花更多的钱可能会有所帮助(悲伤)。

我应该声明我没有使用 grbl 来做 CNC 的事情,我的项目不需要非常高的定位精度但至少需要,它可以在机器的最大速度限制下就其成本预算完成计划的轨道。比方说,刨好的轨道就像走一个正方形,只要走到尽头一直沿着正方形走就行了,工作过程中有没有一些像棚子一样的轨道我不介意。

grbl 如何知道解释队列中的下一行 gcode? #597

至少,它可以在机器的最大速度限制下完成计划好的轨道

如果触发警报(故障) ,我所知道的闭环步进控制器将立即停止。它们必须重新通电以清除警报并重新启动步进。

如果工作失步发生很多……

你应该降低步进器的压力!

grbl 如何知道解释队列中的下一行 gcode? #597

如果使用闭环步进器,如@HuubBuis 说,故障将需要步进驱动器的电源循环来重置它。将故障信号发送回 Grbl 的作用是让 Grbl 停止其他轴以防止出现进一步的问题。

就在这种情况下从故障中恢复而言,程序是重置驱动器,如果安装了归位开关则重新归位机器,然后解决可能导致故障的原因。这可能是推动机器太用力或其他原因,但您有机会进行调整。

闭环或开环、伺服或步进,关键是要在安装的驱动系统的范围内操作机器。我有一个开环机和一个闭环机,开环机在正确操作时工作得很好。在我看来,闭环系统只提供了一点安全网。

grbl 如何知道解释队列中的下一行 gcode? #597
作者
轴突蛋白 评论了 2019 年 2 月 9 日  

如果工作失步发生很多……

你应该降低步进器的压力!

“工作”是指我的工作。毫无疑问,对于典型的 CNC 工作来说,压力小一点、时间消耗多一点是比较合理的。

故障将需要步进驱动器的电源循环才能将其重置。

@109JB有没有办法从驱动程序中提取丢失的步数?或者,根本不存在这样的数据/东西?

grbl 如何知道解释队列中的下一行 gcode? #597

@109JB有没有办法从驱动程序中提取丢失的步数?或者,根本不存在这样的数据/东西?

我真的不是 100% 确定,但我不相信一旦驱动器处于故障状态就可以访问以下错误。

grbl 如何知道解释队列中的下一行 gcode? #597
作者

最终我意识到我在闭环步进器中真正寻找的是,看看是否有任何方法可以让 grbl 重新捕获电机的位置而无需重新定位。

一旦驱动器处于故障状态,我不相信可以访问以下错误。

好吧,处理这些以下错误绝对是我所不知道的。

grbl 如何知道解释队列中的下一行 gcode? #597

您可以将第二个编码器(低分辨率)添加到主轴或步进器。这个位置可以在第二个专用的 Arduino 中读取。然后您可以在您的应用程序中使用此位置再次启动。
或者,如果您使用外部驱动器,您也可以从步进编码器读取信号。这是“简单地”添加两个与编码器输出串联的光耦合器输入。

另一种解决方案是使用 Mach3、步进器和编码器、普通(开环)步进驱动器和像 CSMIO/IP-M 这样的控制器作为闭环控制器,但这要贵得多。

想想避免丢失步骤,这将使生活变得轻松!

grbl 如何知道解释队列中的下一行 gcode? #597
作者
轴突蛋白 评论了 2019 年 2 月 9 日  

@HuubBuis是的,玩编码器是我项目的更好方向,而不是看闭环驱动程序。您有任何关于使用编码器的 arduino 的指南或教程吗?

grbl 如何知道解释队列中的下一行 gcode? #597

这里有一个编码器教程。本教程是关于一个小型“电位计”型编码器,但它们的工作原理相同,只是分辨率不同。包括一个小示例草图,您可以使用 Google 找到更多内容。

https://howtomechatronics.com/tutorials/arduino/rotary-encoder-works-use-arduino/

您可以定期将位置发送到串行端口或等待触发(GRBL 上的“?”)

喜欢 (0)