开源改变世界

准确的主轴转速数据代替pwm #1490

推推 grbl 3年前 (2023-01-24) 131次浏览
打开
mmcristi1981 打开了这个问题 2019 年 1 月 7 日 · 63条评论
打开

准确的主轴转速数据代替pwm#1490

mmcristi1981 打开了这个问题 2019 年 1 月 7 日 · 63条评论

注释

准确的主轴转速数据代替pwm #1490
mm克里斯蒂1981 评论了 2019 年 1 月 7 日  

我有一个自定义的主轴控制器,带有一个独立的 arduino 板,与正在运行的 grbl 板分开。我想从 grbl 板上读取/获取当前的主轴速度。是否可以获取二进制格式的信息(例如模拟串行通信)?例如,一个两字节的数字是真正编程的 gcode 主轴速度而不是当前的 pwm 信号?我可以尝试自己在 grbl 中更改它,但也许已经有类似的东西可用或计划中。

尝试读取现有 pwm 并将其转换回数字的替代方案存在几个问题:

  • 精度损失(仅 8 位 PWM 信号 + 转换精度损失)
  • 需要知道 2nd 板上当前在 grbl 板上设置的最大主轴速度,可以更改

另一种选择是将两个 arduino 都连接到主机 PC 并更改 GUI 以不断将当前主轴速度从一个板发送到另一个板。
然而,我认为如果可能的话,让董事会以某种方式直接沟通会更加优雅和准确。

准确的主轴转速数据代替pwm #1490

如果您将 grbl 放在 mega 2560 板上,您将有多个可用的序列号。我使用这种方法将 Gcode 发送到运动控制器,并将一些 Mcode 和主轴数据发送到我的主轴控制器。协调 mCU 通过 USB 连接到 pc。gcode行在这个coordinator上处理,然后运动代码数据被发送到运动控制器,主轴数据被发送到主轴控制器。我在主轴控制上使用编码器来确定真实的主轴速度,并且 PID 回路试图保持在编程线中为主轴指定的 S 值速度。

您可以通过获取主轴数据并将其从 grbl(例如 serial1、2 或 3)发送到您的主轴控制器来做类似的事情。请注意不要太频繁地占用处理器发送数据。

与尝试让 2 个 USB 设备通过主机上的应用程序通信相比,这可能更干净。

准确的主轴转速数据代替pwm #1490
我杰森T 评论了 2019 年 1 月 8 日  

您可能对此感兴趣
https://github.com/gnea/grbl/issues/558
这是我的解决方案。
如果第二个 Arduino 从 Grbl 控制器嗅探串行数据,那么您将从 grbl 获得 OK 详细响应,它做了两件事,它确认 grbl 被告知设置主轴速度,并在传输时显示速度。即 4530 RPM 回显给主机,可以在第二个 Arduino 上作为串行通信嗅探器获取。

准确的主轴转速数据代替pwm #1490

谢谢,我认为这两个都是有效的想法。如果没有其他方法,我倾向于倾向于嗅探方法。然而,有一个更简单的解决方案会很棒。我在想,通过配置选项和一些额外的 GRBL 代码,是否可以更改引脚 11(PWM 主轴引脚)和 A4(未使用/保留)的功能以充当基本的 RX/TX?通信速度不必太快。Hack,我认为理论上它甚至可以只用一根电线(主轴 PWM)工作。它可以是单向的,GRBL 可以定期发送(比如每秒)。脉冲序列需要一个长脉冲或类似的东西作为数据位的定界符。每秒发送 16 位 + 分隔符信号应该不难。接收器可以注意过滤掉错误的位,如果包裹丢失没问题,等待下一个,我认为不需要确认。唯一的问题可能是 GRBL 板上可用的 MCU 资源(程序内存、可用处理能力等)。

准确的主轴转速数据代替pwm #1490

为什么不直接嗅探状态报告响应。当前主轴转速就在报告中:

<空闲|MPos:0.000,0.000,0.000|FS:0, 3500 >

准确的主轴转速数据代替pwm #1490

使用 A4 和引脚 11 可以发送 0 到 511 之间的值,其中 pwm = 0 到 255
引脚 11 打开允许在引脚 11 上使用 0 到 255,A4 为高电平或低电平,将 0 或 255 添加到价值。我曾研究过从 Pin 11 传输一个频率,它的值是 0 到 5khz,但很快就会变得非常复杂。您还会遇到这样一种情况,您希望暂停代码并且必须等待缓冲区中的命令清空,然后主轴才会停止——这真的不是安全操作。
你没有任何空闲的 pwm 引脚,所以你需要敲击一个引脚(实际上比 PWM 更好)输出 2x pwm 输出并对输出求和可以给你 16 位,保持模拟不要打扰定界符,你的第二个arduino 需要一个可以读取 16 位的 ADC,因为它自己的端口只能读取 10 位。

https://www.youtube.com/watch?v=yjgZ3dQ-PFw

使用 arduino 16 位定时器到 bitbang pwm 可能是可能的,但我认为桑尼已经将它最大限度地利用了。

109JB 是 grbl 的权威并且与 Sonny 密切合作(他也写了一个很棒的 GUI),他的建议真的值得采纳。
更改 grbl 中的代码不是一项简单的任务,因为内存已经被充分利用并且非常注重时间,他们到底是如何在循环中运行如此多的高速操作让我感到困惑。我目前正在从事一个 EDM 项目,我正在阅读类似物,在 LCD 上显示驱动步进电机并输出 pwm 信号。在代码中激活的 LCD 会杀死步进器,代码中没有编写任何阻塞功能(米尔斯计数器,没有延迟)——虽然 LCD 在 I2C 背包上。

准确的主轴转速数据代替pwm #1490
我杰森T 评论了 2019 年 1 月 8 日  

试试这个 – 你会发现它是多么容易

准确的主轴转速数据代替pwm #1490

在 Arduino IDE 中打开串行监视器并将波特率设置为 115200 您将看到 109JB 消息中显示的数据流 – <Idle|MPos:0.000,0.000,0.000|FS:0,3500>

我的第一篇文章中已经为您提供了第二个 arduino 的代码。

模拟输出的想法可以在使用电路时得到改进,以至于可能不需要第二个arduino。

先进的 16 位 pwm 输出

准确的主轴转速数据代替pwm #1490

https://hackaday.com/2013/01/17/making-better-noises-with-dual-pwm/

您还可以查看只需要 1 个传输引脚的单线设备解决方案
https://www.hacktronics.com/tutorials/arduino-1-wire-tutorial.html
https://gitea.youb.fr /youen/OneWireArduinoSlave

准确的主轴转速数据代替pwm #1490
作者
mm克里斯蒂1981 评论了 2019 年 1 月 8 日  

感谢您的所有反馈,这可能对将来研究此问题的其他人有用。
我也很惊讶 GRBL 能用这么少的资源做这么多。根据我的阅读,grbl 使用中断来实现恒定的步进脉冲序列,“同时”仍然能够执行主机通信等其他任务。基于时间的中断启用类似多线程的行为。非常聪明的一段代码。我什至不敢看 GRBL 代码,看看我如何通过更改它来实现我需要的。我希望也许这可以被投票为 GRBL 的新功能,拥有一个每个人都可以使用的解决方案是有意义的。这里已经有一些想法需要消化。

我想我喜欢提出的想法@MeJasonT. 我会更进一步说我们可以用 pwm 引脚和额外的 A4 发送 16 位,但我认为你描述的非常相似。

据我了解,我们可以这样做:如果 A4 为低电平,则 PWM 信号是一个 8 位值,可以在控制器 MCU 上将其解释为两个字节最终值的第一个字节 (MSB)。当 A4 为高电平时,PWM 信号也由 GRBL 改变以指示 16 位速度值(LSB)的第二个字节。这将导致 16 位输出而不是 512 个可能的值,从而导致最大主轴速度输出为 65536 rpm。我认为这不会在 GRBL 上消耗太多资源,改变 PWM 占空比和一个额外的引脚加上一些位移逻辑应该不会太慢。你怎么看,这有意义吗?

问题是我已经有了第二个 MCU,因为它控制无刷电机驱动器并且还将接收来自光学传感器的反馈。电机已经为其控制器提供了来自霍尔传感器的速度和反馈回路,但我计划直接在主轴上添加一个额外的光学传感器以考虑传动比。MCU 还将负责在 LCD 上显示当前速度和一些其他逻辑内容,例如手动速度或方向覆盖、警报触发等。

我看到任何中间 MCU(嗅探器、中间人等)的问题是您不知道 GRBL 何时到达变速命令。它有一个用于平滑运动和规划的内部命令缓冲区。它可能很小,但从概念的角度来看,它仍然存在一些问题。从朝这个方向发展的解决方案来看,我认为听取对主机的速度反馈的解决方案最有意义。但即使这样也有局限性,因为您不知道在 GRBL MCU 上实际执行启用和加速主轴的命令后发送反馈之前到底经过了多少时间。

好主意,谢谢大家。

准确的主轴转速数据代替pwm #1490
我杰森T 评论了 2019 年 1 月 8 日  

mmcristi1981 感谢您的反馈。
我没有想到用A4来表示高/低字节,不知道为什么,也许我刚刚喝了第一杯咖啡。
65536 RPM 可能是一个令人难以置信的速度,只有适当的高端工业 VMC 才能达到,你真的打算达到那种速度吗?可怕的。方向已经在另一个引脚上输出,因此您已经有 +/- rpm 信号可用。我倾向于让第二个 MCU 负责主轴,并使用它的额外警报线返回到 GRBL 控制器,该控制器连接为安全门开关,或者如果已经用于告诉 GRBL 主轴自身损坏,则除了门开关之外.

嗅探器方法实际上非常快,几乎实时在 200 毫秒内(比人轻按开关快)或您设置回复消息的任何刷新率,也许您过于担心闭环系统,在结束时当电机甚至不旋转时,您的第二个 MCU 可能会告诉您谎言 – 霍尔效应传感器不太可能,但如果您认为绝大多数用户正在使用 Dremmel 并发送 PWM 信号来驱动它而没有反馈给 GRBL那么你必须考虑你的腰带和牙套方法的成本。

主轴速度的变化往往发生在代码块之间,因此 rpm 的上升/下降不是什么大问题 – 如果您以高速运行,则在更改主轴速度时在后处理中添加延迟/等待。主轴速度在整个操作过程中保持恒定,只有转角和摆线铣削等的进给率降低

开始让筹码变得更有趣。我正在慢慢开始释放野兽,我被推荐用于铣削铝等的速度吓坏了,但终于长出了一对。还没有源源不断的切屑从工具中飞出,但几乎不幸的是,我在转换为 CNC 的旧 Elliot 铣床上只有 7500 RPM 可以玩。

准确的主轴转速数据代替pwm #1490

不,大声笑,我不打算去那么高。我只是想说 16 位涵盖了几乎所有你能想到的场景,除了用 grbl 控制一个小型燃气涡轮发动机。有没有人考虑过将它用作高速主轴 ;)
同意,制造芯片很有趣,但是当主轴由于仅由 pwm 控制的负载而变慢时,乐趣很快就会变成挫败感。
我打算查看 grbl 代码,看看我是否理解任何内容。我们将从那里开始。

准确的主轴转速数据代替pwm #1490

如果你嗅探状态报告,你在命令速度上滞后的最长时间是状态报告之间的时间。我通常将其设置为状态请求之间的 0.1 秒(?)。在我看来,这比主轴实际上可以改变速度更快。如果在继续执行下一个命令之前需要更多保证主轴处于高速状态,则可以在 grbl 接收的 g 代码中编写一个小暂停。就像是:

(主轴已经在 3000 rpm)
M3 S4000(将速度提高到 4000rpm)
G4 P0.2(0.2 秒延迟以允许主轴达到新速度)
(此处为其他命令)

或者不是为此修改您的 g 代码,您可以修改或编写一个 GUI 以在每个 M3 或 M4 之后自动发送 G4 Px 命令。

或者,如果您想要更好,您可以编写或修改 GUI 以拦截任何 M3 或 M4 命令并等待主轴控制器的反馈,然后再发送更多命令。

准确的主轴转速数据代替pwm #1490
109JB 评论了 2019 年 1 月 9 日  

@MeJasonT– 谢谢你的插头。我实际上并没有太多地研究 Grbl 代码本身。我只能提出改进建议和错误报告,因为我只是一个使用 Visual Studio 的业余程序员,并且不具备实际在 Grbl 固件上工作的编码技能。我以前是一名机械师,当时经营着一些最先进的加工中心,所以我知道工业机器应该如何工作。至少我们是如何运行它们的。

我很高兴有人能够使用我的 GUI。我最初的 GUI 是为 V0.9 编写的,我一直在为 V1.1 重新设计,它添加了许多探测功能,但仍然具有工具更换、工具表和我喜欢的其他功能。我正在简化代码,以便进行多项操作并进行测试。它越来越接近,一旦我完成它并做一些更多的测试,我会把它放在那里供所有人查看/尝试/使用。只需要在其他事情之间找时间专注于它。

准确的主轴转速数据代替pwm #1490

@mmcristi1981仅供参考,如果您将主轴控制 RX 线连接到运动控制 TX 线以防止通信中断,您可能无法尝试将固件更改上传到任何一块板。当您需要更新时,只需拔下主轴控制板的 RX 线即可。如果您打算使用 bit banging 或其他方法,请忽略它。

准确的主轴转速数据代替pwm #1490

shooter64738 感谢您介绍我忘记提及的有关固件上传的内容。
109JB,加油哥们,期待新版本。你的 GUI 是否基于任何特定的机器控制器,即 Fanuc,我喜欢使用 Gerrits grbl-panel,它是我所见过的最接近真实世界控制器的,但与你的控制器相比,它的功能有限。
我正在努力掌握 visual studio,尤其是注册组件和对 .net 的引用等。这个处理器类型选项是什么。看起来 Gerrit 有一个超级新的 Windows 10 pc,mu 旧的 32 位蒸汽处理器。我仍然对他们摆脱了 visual basic 和 activeX 感到痛心,我曾经能够在一天内编写一个前端应用程序。

准确的主轴转速数据代替pwm #1490

我刚刚意识到,我们可能在使用旧的 grbl 问题跟踪器。注意到还有另一个问题:https
://github.com/gnea/grbl/issues 知道我们应该在哪里打开问题吗?我认为另一个更新更活跃?我很惊讶这个人仍然如此活跃。
您在讨论哪个 GUI?您提到 visual studio,那是用于 GUI 开发的,对吗?如果我想更改 GRBL,我知道我可以使用 Arduino IDE 并直接从那里编译/上传。我错了吗?

准确的主轴转速数据代替pwm #1490
我杰森T 评论了 2019 年 1 月 9 日  

你是对的,改变 GRBL 固件是在 Arduino IDE 上完成的,
尽管有一个名为 visualmicro 的工具可以将 IDE 添加到 Visual Studio 中。

虽然我们引起了 109JB 的注意,但我想我会询问 GUI(前端软件)
有一些可用但每个都有其局限性
Candle,具有足够的功能并且看起来不错但在缺少更多工作坐标选项(仅G54) 并且没有冷却液选项。从对问题的回应来看,它似乎不再得到维护/支持
GrblGru Brilliant,但图形并不像我喜欢的那样甜美。
通用 G 代码发送器,嗯,从机械师的角度来看,这对操作员来说并不友好 – 很痛苦,但要在 Windows 上安装,仍在等待点击安装包。
Grbl 面板,外观和感觉就像一个机器面板,很多人喜欢使用它,但不幸的是,它不再受支持,并且仍然缺少一些功能。
和 109JB 的用户界面——你只知道他是一名机械师——看起来和感觉都很真实,工具库触感很好,探测是业余爱好者难以置信的工具,在现实世界中要花费数千美元才能获得 CMM。

无论如何都不是完整的列表,而是一个合理的选择

由于 GRBL 对其可以处理的命令数量有限制,因此很高兴看到其中一个控制应用程序是用会话程序代码编写的,用于涵盖钻孔和孔矩阵等操作,它的 GUI 无论如何都应该处理这些功能。

I was testing my Variable Drive interface circuitry last night as it had stopped working. The problem you may find if using VFD’s is the high frequency noise. The Atmega328 IC (Arduino) seems to be quite susceptible to noise to the extent the memory on the IC ends up wiped. I created an RS485 link and used an arduino to read the grbl messages and output them on the rs485 link to another arduino which is operating the VFD remote functions. (drive does not have a rs4485 port on it).
Noise is still an issue – watch this space.

准确的主轴转速数据代替pwm #1490
Author
喜欢 (0)