注释
如果您将 grbl 放在 mega 2560 板上,您将有多个可用的序列号。我使用这种方法将 Gcode 发送到运动控制器,并将一些 Mcode 和主轴数据发送到我的主轴控制器。协调 mCU 通过 USB 连接到 pc。gcode行在这个coordinator上处理,然后运动代码数据被发送到运动控制器,主轴数据被发送到主轴控制器。我在主轴控制上使用编码器来确定真实的主轴速度,并且 PID 回路试图保持在编程线中为主轴指定的 S 值速度。 您可以通过获取主轴数据并将其从 grbl(例如 serial1、2 或 3)发送到您的主轴控制器来做类似的事情。请注意不要太频繁地占用处理器发送数据。 与尝试让 2 个 USB 设备通过主机上的应用程序通信相比,这可能更干净。 |
您可能对此感兴趣 |
谢谢,我认为这两个都是有效的想法。如果没有其他方法,我倾向于倾向于嗅探方法。然而,有一个更简单的解决方案会很棒。我在想,通过配置选项和一些额外的 GRBL 代码,是否可以更改引脚 11(PWM 主轴引脚)和 A4(未使用/保留)的功能以充当基本的 RX/TX?通信速度不必太快。Hack,我认为理论上它甚至可以只用一根电线(主轴 PWM)工作。它可以是单向的,GRBL 可以定期发送(比如每秒)。脉冲序列需要一个长脉冲或类似的东西作为数据位的定界符。每秒发送 16 位 + 分隔符信号应该不难。接收器可以注意过滤掉错误的位,如果包裹丢失没问题,等待下一个,我认为不需要确认。唯一的问题可能是 GRBL 板上可用的 MCU 资源(程序内存、可用处理能力等)。 |
为什么不直接嗅探状态报告响应。当前主轴转速就在报告中: <空闲|MPos:0.000,0.000,0.000|FS:0, 3500 > |
使用 A4 和引脚 11 可以发送 0 到 511 之间的值,其中 pwm = 0 到 255 https://www.youtube.com/watch?v=yjgZ3dQ-PFw 使用 arduino 16 位定时器到 bitbang pwm 可能是可能的,但我认为桑尼已经将它最大限度地利用了。 109JB 是 grbl 的权威并且与 Sonny 密切合作(他也写了一个很棒的 GUI),他的建议真的值得采纳。 |
感谢您的所有反馈,这可能对将来研究此问题的其他人有用。 我想我喜欢提出的想法@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 上实际执行启用和加速主轴的命令后发送反馈之前到底经过了多少时间。 好主意,谢谢大家。 |
mmcristi1981 感谢您的反馈。 嗅探器方法实际上非常快,几乎实时在 200 毫秒内(比人轻按开关快)或您设置回复消息的任何刷新率,也许您过于担心闭环系统,在结束时当电机甚至不旋转时,您的第二个 MCU 可能会告诉您谎言 – 霍尔效应传感器不太可能,但如果您认为绝大多数用户正在使用 Dremmel 并发送 PWM 信号来驱动它而没有反馈给 GRBL那么你必须考虑你的腰带和牙套方法的成本。 主轴速度的变化往往发生在代码块之间,因此 rpm 的上升/下降不是什么大问题 – 如果您以高速运行,则在更改主轴速度时在后处理中添加延迟/等待。主轴速度在整个操作过程中保持恒定,只有转角和摆线铣削等的进给率降低 开始让筹码变得更有趣。我正在慢慢开始释放野兽,我被推荐用于铣削铝等的速度吓坏了,但终于长出了一对。还没有源源不断的切屑从工具中飞出,但几乎不幸的是,我在转换为 CNC 的旧 Elliot 铣床上只有 7500 RPM 可以玩。 |
不,大声笑,我不打算去那么高。我只是想说 16 位涵盖了几乎所有你能想到的场景,除了用 grbl 控制一个小型燃气涡轮发动机。有没有人考虑过将它用作高速主轴 |
如果你嗅探状态报告,你在命令速度上滞后的最长时间是状态报告之间的时间。我通常将其设置为状态请求之间的 0.1 秒(?)。在我看来,这比主轴实际上可以改变速度更快。如果在继续执行下一个命令之前需要更多保证主轴处于高速状态,则可以在 grbl 接收的 g 代码中编写一个小暂停。就像是: (主轴已经在 3000 rpm) 或者不是为此修改您的 g 代码,您可以修改或编写一个 GUI 以在每个 M3 或 M4 之后自动发送 G4 Px 命令。 或者,如果您想要更好,您可以编写或修改 GUI 以拦截任何 M3 或 M4 命令并等待主轴控制器的反馈,然后再发送更多命令。 |
@MeJasonT– 谢谢你的插头。我实际上并没有太多地研究 Grbl 代码本身。我只能提出改进建议和错误报告,因为我只是一个使用 Visual Studio 的业余程序员,并且不具备实际在 Grbl 固件上工作的编码技能。我以前是一名机械师,当时经营着一些最先进的加工中心,所以我知道工业机器应该如何工作。至少我们是如何运行它们的。 我很高兴有人能够使用我的 GUI。我最初的 GUI 是为 V0.9 编写的,我一直在为 V1.1 重新设计,它添加了许多探测功能,但仍然具有工具更换、工具表和我喜欢的其他功能。我正在简化代码,以便进行多项操作并进行测试。它越来越接近,一旦我完成它并做一些更多的测试,我会把它放在那里供所有人查看/尝试/使用。只需要在其他事情之间找时间专注于它。 |
@mmcristi1981仅供参考,如果您将主轴控制 RX 线连接到运动控制 TX 线以防止通信中断,您可能无法尝试将固件更改上传到任何一块板。当您需要更新时,只需拔下主轴控制板的 RX 线即可。如果您打算使用 bit banging 或其他方法,请忽略它。 |
shooter64738 感谢您介绍我忘记提及的有关固件上传的内容。 |
我刚刚意识到,我们可能在使用旧的 grbl 问题跟踪器。注意到还有另一个问题:https |
你是对的,改变 GRBL 固件是在 Arduino IDE 上完成的, 虽然我们引起了 109JB 的注意,但我想我会询问 GUI(前端软件) 无论如何都不是完整的列表,而是一个合理的选择 由于 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). |
我有一个自定义的主轴控制器,带有一个独立的 arduino 板,与正在运行的 grbl 板分开。我想从 grbl 板上读取/获取当前的主轴速度。是否可以获取二进制格式的信息(例如模拟串行通信)?例如,一个两字节的数字是真正编程的 gcode 主轴速度而不是当前的 pwm 信号?我可以尝试自己在 grbl 中更改它,但也许已经有类似的东西可用或计划中。
尝试读取现有 pwm 并将其转换回数字的替代方案存在几个问题:
另一种选择是将两个 arduino 都连接到主机 PC 并更改 GUI 以不断将当前主轴速度从一个板发送到另一个板。
然而,我认为如果可能的话,让董事会以某种方式直接沟通会更加优雅和准确。