开源改变世界!!

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

推推 grbl 2年前 (2022-10-26) 470次浏览 0个评论
打开
mmcristi1981 打开了这个问题 on 7 Jan 2019 · 63 条评论
打开

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

mmcristi1981 打开了这个问题 on 7 Jan 2019 · 63 条评论

注释

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

mmcristi1981 评论 on 7 Jan 2019  

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

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

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

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

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

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

您可以通过抓取主轴数据并将其从 grbl 发送到您的主轴控制器来执行类似的操作,例如 serial1、2 或 3。请注意不要让处理器过于频繁地发送数据。

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

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

梅杰森 评论 on 8 Jan 2019  

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

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

mmcristi1981 评论 on 8 Jan 2019

谢谢,在我看来,两者都是有效的想法。如果没有其他方法,我倾向于倾向于嗅探方法。然而,有一个更简单的解决方案会很棒。我在想,通过配置选项和一些额外的 GRBL 代码,是否可以将引脚 11(PWM 主轴引脚)和 A4(未使用/保留)的功能更改为基本的 RX/TX?通信速度不必很高。哈克,我认为理论上它甚至可以只使用一根线(主轴 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 添加到价值。我曾研究过从引脚 11 传输一个频率,该频率的值可能是 0 到 5khz,但它很快就会变得非常复杂。您还将遇到一种情况,即您希望停止代码并且必须等待缓冲区中的命令在主轴停止之前清空 – 这确实不是安全操作。
您没有任何可用的 pwm 引脚,因此您需要对引脚进行位敲击(实际上比 PWM 更好)输出 2x pwm 输出并将输出求和可以为您提供 16 位,保持模拟不要打扰分隔符,您的第二个arduino 需要一个可以读取 16 位的 ADC,因为它自己的端口只能读取 10 位。

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

使用 arduino 16 位定时器来 bitbang pwm 可能是可能的,但我认为 sonny 已经将其充分利用了。

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

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

梅杰森 评论 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 个传输引脚的 1-wire 设备解决方案
https://www.hacktronics.com/tutorials/arduino-1-wire-tutorial.html
https://gitea.youb.fr /youen/OneWireArduinoSlave

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

mmcristi1981 评论 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

梅杰森 评论 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 (将速度增加到4000 rpm)
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?你提到了视觉工作室,那是用于 GUI 开发的,对吧?如果我想更改 GRBL,我知道我可以使用 Arduino IDE 来完成并直接从那里编译/上传。我错了吗?

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

梅杰森 评论 2019 年 1 月 9 日  

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

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

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

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

昨晚我正在测试我的可变驱动接口电路,因为它停止工作了。如果使用 VFD,您可能会发现的问题是高频噪声。Atmega328 IC (Arduino) 似乎很容易受到噪声的影响,以至于 IC 上的内存最终被擦除。我创建了一个 RS485 链接并使用一个 arduino 读取 grbl 消息并将它们在 rs485 链接上输出到另一个正在运行 VFD 远程功能的 arduino。(驱动器上没有 rs4485 端口)。
噪音仍然是一个问题——注意这个空间。

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

所以我看了一下代码。看起来它可以使用 A4 和 11。我看到的逻辑问题是如何定期发送这两个字节。当 GRBL 当前设置 PWM 时,很容易发送一次。我不是在函数中设置一个 PWM,而是首先将 A4 设置为 0,设置第一个字节 PWM,等待几毫秒让客户端 MCU 有机会选择 pwm 序列并将其转换回一个字节,将 A4 设置为 1 ,设置第二个字节PWM并完成。不幸的是,我们不会收到客户端正确接收字节的反馈。所以最好是在一个循环中重复这个,即使速度没有改变。我可以在报告电话中这样做,但作为一个概念,我认为这是 hacky。如果主轴速度在此特殊配置选项中,即使 GUI 不要求位置报告,我也希望定期执行此操作。
直接从先生那里得到一些投入会很棒。@chamnit如何最好地实现这种定期更新。我不知道是否已经有一个由定时器中断定期调用的例程,或者我们可以负担得起注入主轴更新代码的东西。问题是这段代码要么在调用主轴同步函数时等待字节发送之间的几毫秒,要么我没有延迟地编写它,但代码被调用的频率足够高,以至于我可以不断地循环发送的字节。Cycle 1(定时器中断 1),发送 MSB,Cycle 2(定时器 int 2)发送 LSB,Cycle3 发送 MSB,C4 发送 LSB,我想你明白了。问题是我不知道 GRBL 是否有这样一个我们可以使用的循环。

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

@mmcristi1981我对“较新”的 grbl 集线器提出了问题,但得到的答复很少或没有。我认为即使这是“较旧”的,它也获得了最多的流量。
不确定在哪里/如何在其中添加 pwm、延迟、pwm 配置。它在 protocol.c 中不断循环,但随着运动的运行,它也会添加到 st_buffer 中。您在其中添加的任何减慢速度的东西都会对运动驱动产生一些不良影响。
如果您尝试在串行上发送 2 个字节,这可能会导致 gui 行为异常,因为它会假定它是来自 grbl 的通信。从 grbl 读取 PWM 输出可能没有你想象的那么糟糕。它应该是一个相当稳定的值。
Timer0 和 timer1 作为步进驱动器占用。我不确定 timer2 是否有可用的硬件 pwm 引脚,但如果有,您可以将该定时器设置为在第一个循环上发送最多 sig 字节,然后在第二个循环上更改定时器的延迟,它会发送最少的 sig 字节。由于这是在硬件中处理的,因此它可能根本不会给处理带来太多负担。它会一遍又一遍地重复这两个字节。但这可能会多次发送 msb,然后多次发送 lsb。必须在字节结束时关闭定时器。我想只是大声思考……
我使用 2560 板,所以我不能 100% 确定 328 板上可能有哪些计时器。

@MeJasonT您可以从 MicroChip 获取 Atmel Studio 7.0 版。它是 Visual Studio,但包含了自己的关键字,专门用于为 atmel 芯片编写 asm/c/c++。当您开始一个项目时,配备一个方便的芯片选择器。从外观上看,我会说它基于 Visual Studio 2010 或 2013,但它很适合用于 atmel 芯片,最重要的是它完全免费。在visual studio中编写代码也很不错,编译它并使用调试器在windows上运行代码,一旦代码的核心工作,您可以使用硬件抽象在atmel中实现它。您甚至可以拥有一个包含多个项目的解决方案,并像 Visual Studio 那样引用它们。

我相信 109JB 的 gui 确实已经进行了固定循环转换。我认为还有另一个 UI 可以做到这一点。我已经在硬件上实现了这种类型的工作,所以看起来你发送了一个固定循环,但在幕后它只是将它分成多个动作,并且一次发送一个。我的“GUI”是一块带有按钮和开关的铝片。我似乎正在旋转我的轮子来完成。

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

梅杰森 评论 2019 年 1 月 10 日  

您好 shooter64738 感谢您的回复。
您是否有指向您的 GUI 的链接,我很想看看它。
附带说明 – 您是否知道任何显示如何将命令分解为基本 G 命令/操作的链接,我知道在 cambam(我的 CAM 应用程序)中,有人编写了一个脚本来生成将在 grbl 上运行的钻取函数替换 grbls 缺少的钻孔功能。
https://www.reddit.com/r/shapeoko/comments/5pvsy2/cambam_drill_macro_to_replace_g81_canned_drill/

不幸的是,cambam 没有飞机操作,我不知道是什么原因。有一种解决方法并不太麻烦,但是只需单击一个操作,然后单击一个面部就可以了。

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

@MeJasonT我不介意分享它。我打算让它是开源的。我在 GitHub 上有它,但我的 repo 发生了一些事情,它不再上传,所以我删除了它,并将再次上传它。

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

射手64738 评论 2019 年 1 月 10 日  

这是回购的链接:Talos-CNC
它是一个大型项目,由一个 PC 客户端和一个用于“UI”的树莓派客户端组成,我几乎没有取得任何进展,因为我真的不想使用 PC。我更喜欢带有按钮和开关的硬件面板。AVR 和 ARM atmel 芯片都有一个 atmel 解决方案。其中一个库支持 4×20 液晶显示器。我还没有将我的主轴控制器集成到解决方案中,但有时间我会处理它。现在它是一个独立的编译器。

固定循环和刀具半径补偿大部分都可以工作,但我的机器正在进行重建,我已经有一段时间无法在实际机器上运行固件了。我已经减少到在 Windows 中模拟运行固件并查看输出运动命令。如果您感兴趣,有关于如何编译固件以在 Windows 中运行的说明。

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

嗨,大家好。我只能偶尔进入这里,但我看到了有关 GUI 的最新帖子。我不想说太多,因为我们有点像线程劫持,但确实想回答关于我的 GUI 的两件事。

  1. 罐头循环。在我的旧 GUI 和我的新 GUI 中,我实现了一些固定循环。(G81、G82、G83、G85、G89)。我不记得旧的 GUI 是怎样的,但在新的 GUI 中,您可以在 MDI 模式下使用这些循环或将它们放入 g 代码程序中。它们完全支持 G98、G99、G90、G91。新的 gui 还允许您在一行输入上执行一个循环,然后在下一行输入 X,Y 以重复循环。所以,

G81 X1 Y2 Z-1 R0.1 F3
X4 Y5
X7 Y8

在 (1, 2) (4, 5) 和 (7, 8) 处产生 3 个 1 英寸深的钻孔。您可以使用 G80 或任何其他运动模式(g1、g2、g3、g38.x)来取消固定循环,就像在工业机器上一样。

  1. 刀具补偿 我尝试让刀具补偿工作,并有一个用于直线移动的测试仪。我遇到的问题是当您将曲线放入其中并解决偏移路径的新交点时。有时我可能会更多地使用它,但现在它只是在我的一个测试程序中作为实验。至于我如何使用我的机器,无论如何我并不经常需要它,当我需要它时,我只是在它周围工作。通常是在我铣削轴承座或类似的东西时,它会很有用,我通常只使用另一个工作偏移,以孔为中心,然后手动编辑代码以爬上我想要的配合。
准确的主轴转速数据代替 pwm #1490

遗憾的是,Git 没有在页面顶部放置论坛选项卡,因此我们可以将对话从问题帖子中移开。我发现使用 Git 作为文件存储库从第一天起就很痛苦,你需要一定程度的编程来设置该死的东西,当你更改文件时,它有自动保存当前文档状态的习惯,即使你不想这样做. 即只是在您的程序中试验一些您无意保留的代码。好的,您可以退出它,但为什么要首先保存它。

mmcristi1981 为劫持您的帖子而辩护,事情只是有了自己的生命,并且在一定程度上似乎相关。如果我们都满意,也许我们应该考虑转移到一个新的分支。
我们怎么做约翰,这可能只是打开一个称为 GUI 讨论的新分支的一个例子。

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

@MeJasonT通常,您会打开一个与您的主题相关的新问题。您可以在您的 github 存储库或我的存储库中打开一个问题。

@109JB我在刀具补偿上花了很长时间。弧确实使事情复杂化。这是我写的,如果你从中找到一些用处。CRC

@mmcristi1981我确实在 328P 上寻找了一个额外的计时器。我没有看到一个可用的。我认为您可以使用的那个已经被用于主轴 PWM。我能想到的唯一另一件事是从数字引脚上敲下来,而且时间安排可能很困难。祝你好运,我为线程千斤顶道歉。

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

mmcristi1981 评论 2019 年 1 月 11 日  

不用担心劫持。我也对 GUI 感兴趣。你见过https://github.com/cncgoko/Goko吗?它对我来说看起来很有希望,特别是因为我非常熟悉它所构建的平台,因此更改/修复对我来说是可行的。这不是广告,我与它没有任何关系,也不受我所见。
但是,对于其他用户来说,最好是在一个能引起对预期主题的关注的名称下进行讨论。寻找 GUI 信息的人很可能不会因为名称而研究此问题。

所以我一直在思考如何解决我的主轴问题,因为我没有时间做任何其他事情,只能考虑它。
由于重复字节发送的问题,我认为将现有的 PWM 信号 11 用作外部时钟载波,将占空比保持在 50%,同时作为内部中断源指定溢出中断。这样我就可以只在引脚 A4 上发送信息,由 pwm 计算和计时。接收器会根据 pwm 信号产生中断,并从 A4 读取当前值。我需要一点火车来表示包裹的开始。我可以将信息拆分为 8 位块,然后字节序列的指示符将是 1111 1111 1(9 位),其余字节都必须以 0 开头,然后是有用的 8 位,每个字节丢失一位. 在接收器端,我会忽略只是分隔符的第一位。这样我可以发送多个字节,可能包括校验和。通过这种方式,我还可以在更大的包中发送方向信息,因此仅使用引脚 11 和当前主轴方向引脚,更改其当前功能。A4 可以保持未使用状态。

我错过了一些关于 MCU 如何处理中断的小而重要的细节,因为我对它们的经验并不多。我将不胜感激得到一些关于这方面的意见。我不知道的是:

  1. 如果我在一个开始时没有禁用中断的 ISR 中并且另一个中断来自不同的源会发生什么?在处理第二个 int 后,它是否暂停并继续留在它离开的地方?这意味着必须有一个堆栈,它有多深?还有可以设置的优先选项吗?
  2. 如果我在一个在开始时禁用中断的 ISR 中会发生什么,而另一个中断来了,它是被推迟了,还是我完全失去了它?
  3. ISR 完成所需的时间是否会影响触发它的基于定时器的中断的时序?换句话说,在执行 ISR 时,计时器是否继续“滴答”?
准确的主轴转速数据代替 pwm #1490

听起来不错,
我脑海中的声音在尖叫着说,当求和代表主轴速度时,只需使用两个引脚来输出值,而忘记校验和、分隔符和 crc 检查等,只需发送速度并将其视为这样,操作就更简单、更容易了生产。这不是我的项目,所以我会告诉我脑海中的声音把袜子放进去。小心模拟引脚,在 328 上,不能重新分配 2 个引脚,它们只是输入(不记得是哪个)。我确定引脚 A4 和 A5 很好,否则在此类项目中使用时,这些引脚上将无法使用 I2C。不要在这个项目中使用 I2C 200ms 太慢了,当它以巨大的延迟延迟你的 GRBL 性能时会让你头疼。加上它的阻塞,我想。作为一个性格懒散的人,我会让生活变得简单,不会被错误检查和反馈确认等东西束缚住。你会发现你并不比使用 grbl 运行的任何其他机器更糟糕。尝试在引脚 11 上输出 pwm 并使用 A4 对高字节进行位敲击,您将获得稳定的值流来控制主轴速度。在花费了所有时间尝试与主轴控制器创建虚拟通信链接之后,您仍然需要编写代码并将响应嵌入到 grbl 中(记住它已经完全加载) – 您仍然可能有噪音破坏您的 grbl 之间的通信和主轴。这发生在我们最好的人身上,只是使用 pwm 输出。如果你身边有几个 Arduino,用 GRBL 加载一个它会像你的机器一样运行和工作(不要费心更改机器设置,因为它没有限位开关,并且无法使用硬件限制或归位等)。默认情况下,它将允许您运行剪切文件(作业)并将第二个文件视为您的主轴控制器。如果您可以使用引脚 11 和 A4 获得从第一个 arduino 到第二个的值,那么您会对响应速度及其有用性感到惊喜。如果您希望它比这更封闭,那么一旦您知道可以使基础工作正常,请更改代码。这可能会告诉你如何吸吮一个巨大的鸡蛋。但有时很高兴有人将你头脑中的想法分解成字节大小,我有时会陷入自己想法的复杂性中。不要打扰更改机器设置,因为它没有限位开关,并且无法使用硬件限制或归位等)。默认情况下,它将允许您运行剪切文件(作业)并将第二个文件视为您的主轴控制器。如果您可以使用引脚 11 和 A4 获得从第一个 arduino 到第二个的值,那么您会对响应速度及其有用性感到惊喜。如果您希望它比这更封闭,那么一旦您知道可以使基础工作正常,请更改代码。这可能会告诉你如何吸吮一个巨大的鸡蛋。但有时很高兴有人将你头脑中的想法分解成字节大小,我有时会陷入自己想法的复杂性中。不要打扰更改机器设置,因为它没有限位开关,并且无法使用硬件限制或归位等)。默认情况下,它将允许您运行剪切文件(作业)并将第二个文件视为您的主轴控制器。如果您可以使用引脚 11 和 A4 获得从第一个 arduino 到第二个的值,那么您会对响应速度及其有用性感到惊喜。如果您希望它比这更封闭,那么一旦您知道可以使基础工作正常,请更改代码。这可能会告诉你如何吸吮一个巨大的鸡蛋。但有时很高兴有人将你头脑中的想法分解成字节大小,我有时会陷入自己想法的复杂性中。默认情况下,它将允许您运行剪切文件(作业)并将第二个文件视为您的主轴控制器。如果您可以使用引脚 11 和 A4 获得从第一个 arduino 到第二个的值,那么您会对响应速度及其有用性感到惊喜。如果您希望它比这更封闭,那么一旦您知道可以使基础工作正常,请更改代码。这可能会告诉你如何吸吮一个巨大的鸡蛋。但有时很高兴有人将你头脑中的想法分解成字节大小,我有时会陷入自己想法的复杂性中。默认情况下,它将允许您运行剪切文件(作业)并将第二个文件视为您的主轴控制器。如果您可以使用引脚 11 和 A4 获得从第一个 arduino 到第二个的值,那么您会对响应速度及其有用性感到惊喜。如果您希望它比这更封闭,那么一旦您知道可以使基础工作正常,请更改代码。这可能会告诉你如何吸吮一个巨大的鸡蛋。但有时很高兴有人将你头脑中的想法分解成字节大小,我有时会陷入自己想法的复杂性中。A4 那么您会对响应速度及其有用性感到惊喜。如果您希望它比这更封闭,那么一旦您知道可以使基础工作正常,请更改代码。这可能会告诉你如何吸吮一个巨大的鸡蛋。但有时很高兴有人将你头脑中的想法分解成字节大小,我有时会陷入自己想法的复杂性中。A4 那么您会对响应速度及其有用性感到惊喜。如果您希望它比这更封闭,那么一旦您知道可以使基础工作正常,请更改代码。这可能会告诉你如何吸吮一个巨大的鸡蛋。但有时很高兴有人将你头脑中的想法分解成字节大小,我有时会陷入自己想法的复杂性中。

1 线选项看起来不可行吗,我想它的草图本身就是一个程序,并且可能也会阻塞。我知道温度传感器能够进行 2 路通信。即,您向地址处的设备询问其温度,您可以告诉它以 F 的 C 响应并读取它的内存 – 它显然会响应所要求的值。有延迟,因为它一次只能做一个方向。它会受到来自主轴的高频噪声的影响,因此需要使用 cat5/双绞线进行接线。

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

mmcristi1981 评论 2019 年 1 月 11 日  

我不记得只使用一个信号的想法。不确定我理解正确。

无论如何,最初使用 A4 和 11 使用 A4 低/高来指示字节的问题存在重复发送的根本问题。我不知道如何轻松解决它。将 pwm 用作载波时钟信号并同时用作中断来实现 GRBL 板上的周期性发送似乎是一个明智的选择。当我意识到使用第二种方法我可以发送比我最初需要的更多的字节时,我只是想到了 CRC。

我已经有第二个 arduino 作为主轴箱的控制器。这将有很多事情需要处理,但它也可以监听来自 GRBL 板的信号。

这种交流的东西是在概念atm的水平上。我没有在身体上尝试过任何东西,只是在想它。

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

哦,想想,这很危险。哈哈。
你正处于我认为的确切阶段。

据我所知,您要克服的问题是从 grbl 中获得更好的主轴速度分辨率。在 0-10,000 的 rpm 范围内,255 步真的很漂亮。
如果这听起来像问题,并且纯粹在概念基础上工作,只是为了我们试图想出一个快速解决 GRBLs 限制的方法。然后我们(皇家我们)可以考虑将 pwm 保留在引脚 11 上,所以在代码中的某处(听起来你在编程方面比我更先进)我们得到主轴速度的值并将其划分为 16 位值将给出我们的值为 65k,假设我们的 rpm 1 位 = 1 rpm,例如,在 8000 rpm 时,机器寻线 +/- 5 rpm 将是微不足道的。

方向销仍然没有受到干扰,因此我们仍然可以使用它来提供方向信息。所以需要一种方法来使用已经编码和工作的引脚 11 传输 2 个字节(原则上 – 实际上你没有得到真正的 0 到 255 pwm,我经常发现它有点不准确)所以让我们保留引脚 11低字节。现在来了个大问题,如何让 A4 上传输的高输出表示 8 位值。如果任何代码位爆炸引脚 11 使用拆分值(现在为 16 位)在引脚 4 上发送 Hi 并在引脚 11 上发送低电平,使用类似音调库的东西,您可以接收 2 个脉冲输入并将它们合并为您提供 16位代表值。或者使用我之前描述的硬件选项将两个 pwm 值相加,得到一个 5v 模拟值,该值来自 16 位。有点痛苦,但是 Arduinos 模拟 i/p 只有 10 位分辨率,因此在设备/arduino 2 上需要具有 16 位分辨率的外部 ADC。他们调用引脚 11 pwm 的输出,但实际上它不是真正的 pwm它的频率输出有点猛烈(几乎相同,但不完全一样)。对我们来说,好消息是它已经有点崩溃了,没有绑定在默认的和规范的处理器命令中。
因此,使用类似的命令告诉第二个引脚对同一代码位置中的高字节进行位敲击应该是相对简单的,并且只发生在代码中的正确位置,不会对其余代码操作造成干扰(微秒的小延迟取决于处理器处理指令所花费的时间)。

不要太在意时间和同步 2 个字节,它会发生的。您的另一个问题是您如何知道它何时传输速度,Grbl 在其激活时输出引脚 11 上的值,并在收到指令时使用 S****** G 代码命令更改速度,全部关闭它就死了,这行为不会改变,因此生成两个字节并在某种求和之后输出它们将产生一个我们可以使用的值。就我个人而言,我喜欢模拟电压或字符串命令、频率。如果您使用求和的硬件选项并将其馈入放大器(10v 电源),那么您将拥有工业公认的 0-10v 标准,用于直接馈入 VFD。

顺便说一句,什么信号驱动你的主轴,如果你说 RS422 或其他奇怪的东西,这一切都无关紧要。一切都取决于第二个 arduino 为您做什么。

我的想法可能是一堆裤子,我很想知道你是如何解决这个问题的。
每个人都有一个单一的想法,并认为他们的方式是最明显的,但很容易欺骗自己。我现在没有一秒钟的时间可以玩,但我很想建立一个测试台并玩一玩。

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

射手64738 评论 on 11 Jan 2019  

@mmcristi1981回答您关于中断的一些问题。
首先请记住,并非所有 mCU 都以这种方式工作,所以我只处理 328p/2560 (Arduino Uno/Mega)。其他 mCU 的工作细节可能会有所不同。
这些上的“堆栈”基本上是 1。
如果您的代码中有中断服务例程并且设置了该 isr 的位标志,则当满足这些条件时,中断会带有“触发”或“运行”。当需要中断时,在 mCU 中设置一个全局标志,指示需要运行中断,mCU 将保存它在主程序中的位置,因此它可以服务该中断,然后返回到它在主程序中的位置. 一旦中断开始,全局中断标志就会被清除(但可以再次设置)。

在中断执行期间,其他中断被“禁用”。换句话说,在另一个中断中不能触发一个中断,但是如果您通过调用“sei()”启用它们,仍然可以设置全局中断标志。因此,当您在一个中断内时,可能会发生另一个中断,但它不会停止您当前的中断并跳转到下一个中​​断。它将完成当前的一个,然后移动到下一个。如果您在第一个中断中花费了太多时间,并且已经为另一个中断设置了标志,那么在您进入下一个中断之前它不会被清除。如果需要发生第三次中断,它将丢失。如果在当前 isr 中没有使用 ‘sei()’ 打开中断,中断可能会丢失。当 isr 完成时,会自动重新启用中断。

它不会比这更深地堆叠中断。如果设置了全局中断标志,则必须在需要下一个中断之前对其进行服务。如果标志已经设置并且您处于一个需要很长时间的中断中,那么任何进一步的中断都将消失。

因此,假设您正在查看 grbl,并且在 stepper.c isr ‘TIMER1_COMPA_vect’ 中,您会看到一些驱动步进器的代码。在该代码的顶部,中断被禁用,并且全局中断标志被清除,如果在此期间发生另一个中断,则全局标志将再次设置。(该中断将在我们完成此中断后触发)如果您进一步查看该代码,您会看到“sei()”正在重新启用中断。这通常会在中断完成时自行发生,但它会手动重新打开,以便步进重置计时器可以更快地触发。如果你看一下’sei()’下面的代码;它做一些缓冲和步进步进。现在你认为我可以在这里添加轴步骤。你可以,我有。但是让我们假设你增加了 15 个轴’ s 步进(疯狂数量的轴),现在这个 isr 需要比预期更长的时间。步进器重置将按预期触发,但由于使用 sei() 重新打开了中断,并且步进器重置触发全局中断标志的时间已经设置。我们在驱动程序 isr 中花费了很长时间,以至于也是时候移动另一步了,但现在我们将失去那一步,因为标志已经设置,并且它只能触发重置计时器。所以现在我们的步进时间变慢了,如果我们继续在那里堆积东西,它最终会停止,甚至回到他第一次启动这个东西时的主程序。但是由于使用 sei() 重新打开了中断,并且步进重置触发全局中断标志的时间已经设置。我们在驱动程序 isr 中花费了很长时间,以至于也是时候移动另一步了,但现在我们将失去那一步,因为标志已经设置,并且它只能触发重置计时器。所以现在我们的步进时间变慢了,如果我们继续在那里堆积东西,它最终会停止,甚至回到他第一次启动这个东西时的主程序。但是由于使用 sei() 重新打开了中断,并且步进重置触发全局中断标志的时间已经设置。我们在驱动程序 isr 中花费了很长时间,以至于也是时候移动另一步了,但现在我们将失去那一步,因为标志已经设置,并且它只能触发重置计时器。所以现在我们的步进时间变慢了,如果我们继续在那里堆积东西,它最终会停止,甚至回到他第一次启动这个东西时的主程序。

我已经阅读并编辑了几次,但可能仍然不清楚。但如果你不清楚,我会再试一次。:)

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

mmcristi1981 评论 2019 年 1 月 11 日  

哦,谢谢,我会尽力理解它。我也一直在对中断进行更多研究,然后我删除了认为那些尚未相关的问题,不应该担心它。但是您必须在编辑之前选择了该帖子。所以我把问题放回去以避免混淆。

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

嘿射手,这是两个桶。我认为这里的摩托车是龙要小心。

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

您只会丢失来自同一源的中断,完成后会运行其他中断

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

射手64738 评论 2019 年 1 月 12 日  

是的,你有它!
这对 uno 和 mega(328p 和 mega2560 处理器)有效。DUE 在 SAM3X 芯片上运行,我认为它的运行方式类似,但我不能 100% 确定。我仍在学习 SAM 硬件,这有很大不同。

Atmel 在他们的数据表中有一些非常好的文章。只需谷歌“atmel 328 数据表”、“atmel 2650 数据表”、“SAM3X8E 数据表”。关于它如何做某件事或另一件事的描述中的某些内容可能会在您的脑海中激发一个想法,以使您到达您需要的地方。它还将有助于解开一些 grbl 代码的奥秘。像定时器操作和步进脉冲。

是的,在再次阅读我的帖子之后..我确实有点糊涂了@langwadt.

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

因此,我使用两个 arduino 对时钟和数据线的想法进行了初步测试。一种是发送 16 位数字的服务器,其中 15 个有用 + 16 个 1,表示位序列开始。客户端使用中断来获取位。经过测试,效果很好。没有注意到丢失的数字,但我还没有尝试过更长的电线和更高的速度。如果您有兴趣,可以查看当前的工作原型:https
://github.com/mmcristi1981/arduino_uni16com 提到的服务器代码只是为了测试这个概念,这不是 GRBL 发送位的方式。
所以下一步是在 GRBL 中调整和集成服务器逻辑并使其可配置。我看到两个可行的选择:

  1. 每次执行 GRBL 主步骤 ISR 时,通过对两条线(时钟和数据)进行位碰撞来发送一位。我需要为此添加一个迷你状态机并使其尽可能快,以避免减慢步骤 ISR。在执行 ISR 的每一步,我都会推进位发送状态机。我很确定在启用 sei 后我在 ISR 中还有足够的时间。随着步进器减速,可用时间会增加。所以如果出现问题,只有在 GRBL 可以工作的最高速度下。如果发送太快,我还可以计算几个步骤中断,并且仅在每第 n 次执行时推进我的状态机。
  2. 另一种选择是追求使用可用 pwm 定时器添加另一个中断的想法,该中断在单独的 ISR 中推进位发送状态机。

在我看来,选项 1 更好,因为它不会添加在执行步进 ISR 时可能发生的另一个中断。我认为这更清洁。这也敲响了警钟,也许这个想法可以用来精确地同步步进运动和主轴旋转。只是一个想法,可能很愚蠢。我认为 GRBL 已经为激光做了类似的事情,但我对 GRBL 太菜鸟了,无法确定这一点。

今天我想起了现有 GRBL PWM 功能对我来说不够用的主要原因之一:因为我被迫在 GRBL 中指定最大速度。想象一下,我有一个主轴,我可以用一个在低位和高位之间的杠杆来改变速度。或者您可能具有更换皮带的能力。由于我要控制主轴转速,而这就是我要添加光学传感器的地方,因此每次更改齿轮比时都在 GRBL 中调整最大主轴转速非常不方便。我同意这不是嗅探器方法的问题。

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

我有没有听到有人提到我的嗅探器 – 你是在说我是罗马人(大鼻子)哈哈。

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

我想我可能会因为 uno 的极端内存限制而被迫使用巨型板。我在 grbl FAQ 中注意到 uno 完全不鼓励使用额外的功能。
在进行更多测试时,我发现了一些奇怪的东西。似乎在 328p 上移位 1 位非常慢,对于简单的 x<<=1 来说是 2 到 3us。一个时钟周期是 1/16 us,知道为什么需要这么多时钟周期吗?可能我的测量不是很好,但是我在其他论坛上看到过类似的报道。在兆上,我也许可以改用字节掩码。

而且我上传的测试不正确,我认为它只是因为我发送的数字在最低有效位上不以 1 结尾。自从我进行位级编码以来已经有一段时间了,并且在晚上这样做似乎效果不佳。

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

请忽略之前关于变速的帖子,我做了更多的测试,我完全错了,累了,变速似乎很快。

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

mmcristi1981 评论 2019 年 1 月 21 日  

稍微更新一下进度,以防有人仍然感兴趣。所以我想我会选择 SPI。由于硬件支持,它不应该干扰 GRBL 步进 ISR 的性能。唯一的问题是在 UNO 上使用了本机 SPI 的引脚。所以我最初的想法是使用 MEGA,因为它有所有可用的 SPI 引脚。但是我认为UNO的SPI也可以使用:

  • MOSI=11 当前用于 GRBL 可变主轴 PWM,因此可用于 SPI 发送主轴数据
  • MISO=12 目前用于 GRBL 限制 Z 轴,但是 MISO 对于单向 SPI 不是必需的,可以继续用于 Z 轴限制,当在 MOSI 上发送 SPI 位时,该位将基本移位 8 次进入 SPI 数据寄存器,我没问题,因为我不需要从奴隶的任何数据
  • SCK=13 当前用于主轴方向,可以在 SPI 包中与所需速度一起发送,因此方向引脚可以重新用于 SPI SCK
  • SS 从机选择可以是任何输出引脚,所以我可以使用 A4(当前未使用)

我已经对这里讨论的所有解决方案进行了很多思考,不知何故这似乎是迄今为止最好的。似乎是故意选择了 GRBL 引脚,以便在需要时可以使用 SPI。
我不会为 SPI 使用任何额外的库,我需要一些非常基本的东西。只是端口写入和一些字节准备。已经做了一个原型来看看它是如何进行的,因为在今天之前我对 SPI 的体验几乎为零。我很惊讶这是多么简单。我也很喜欢我可以使用 SS 线来表示字节序列开始和结束的事实,这使我可以在没有任何特殊分隔符的情况下发送两个字节。在两个字节中,我可以将方向作为第一位发送,将 15 位作为 rpm 发送。

无论如何,如果它在 UNO 上不起作用,我仍然很确定它在 MEGA 上会起作用。但是我有点害怕在 MEGA 上运行 GRBL,因为该端口没有得到官方支持,不知道现在是什么状态。我在那里看到了相对较新的提交。

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

我仍然很感兴趣,别让我的沉默欺骗了你。
我的系统刚刚撞上了另一堵墙,RS485 仍然受到 EMI 噪声的影响。
我现在将光纤视为 grbl 和 VFD 之间的通信链路。SPI 路由听起来很有趣,具体取决于 mips 的数量,它仍然需要生成一个值,建立通信链路,发送值然后重置 – 听起来这个过程都必须在中断内发生。对于我的专业知识而言,它现在对代码的影响太大了,但我对如何将这样的解决方案整合到我自己的项目中很感兴趣。请继续前进,让我们知道您进行了哪些测试以及获得的结果,它擅长排除什么不是好的方法及其原因。
万事如意J。

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

用于 mega 的 Grbl 1.1(和最新的 grbl 存储库)位于:https
://github.com/gnea/grbl-Mega 出于某种原因,它没有获得与原始存储库一样多的流量。

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

“由于某种原因,它并没有像原来的 repo 那样获得那么多的流量”
我们是顽固的老 git,Sonny 不能让我们搬家。哈哈。不是他的 Git 存储库是我们的。

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

最后,经过一天的工作,一个工作原型。我在这里上传了代码以防有人感兴趣:
https
://github.com/mmcristi1981/grbl-mega-spi 我添加了一个自述文件和它的工作截图。我希望我没有通过在那里上传 grbl-MEGA 的副本来破坏任何许可证。我没有时间想其他办法atm。
一些重要的注意事项:

  • 我被迫使用MEGA,UNO上没有办法,pin 10是问题。在 SPI 中,本机 SS 必须是主板上的输出,我发现这很难。例如,也无法轻松将此限制引脚移动到 A4,因为要求所有限制引脚都在同一个端口上
  • 我还没有尝试过更长的电线。我将 SPI 的频率降低到最低限度,并且 SPI 测试客户端(您可以在 repo 中找到其来源)当前等待两个具有相同值的连续包,然后才将其视为有效值。这是目前防止错误的一种非常粗略的方法。
  • 我保持更改干净且最小化,99% 的代码在主轴控制.c 中,可以通过在 config.h 中注释 #define VARIABLE_SPINDLE_EXT 来禁用
  • 由于我被迫使用 MEGA,如果以后遇到任何进一步的问题,我可能最终会放弃 SPI 并使用其中一个串行端口。但这迫使我在从 arduino 上添加一个外部 USB 接口,因为该接口本身只有一个 USB 接口,我希望它可以用于更新主轴控制器代码。外部 USB 接口将与主轴控制器通信,然后再次使用 SPI,但这次是短距离。只有当 SPI 无法处理 1m 的电缆时,这一切才会发生。有待观察…
准确的主轴转速数据代替 pwm #1490

射手64738 评论 2019 年 1 月 26 日  

看起来还不错。我没有为 spi 使用 1m 电缆,但我使用了一根很长的电缆(24 英寸)来发送 lcd 更新。那里可能只需要一根好的屏蔽电缆。

即使使用串行,您也可能最终受到干扰。我有点担心我可能在 grbl 和我的主轴控制之间也有这个问题。

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

梅杰森 评论 2019 年 2 月 17 日  

以防万一您的计划失败并且作为对他人的良好参考,我忘记了另一个选择。除了硬件串行嗅探方法之外,您还可以在您的 PC 上安装一个应用程序来拆分串行端口的控制 – 它称为虚拟串行端口仿真器 VSPE https://freevirtualserialports.com/ http://www.eterlogic。 com/Products.VSPE.html
通过引导 GRBL 连接到的端口并将其链接到虚拟端口,然后您可以将第二个 arduino 连接到虚拟端口和您的控制软件。这使我们能够将发送的命令用于多种不同的和附加的控件。只需编写解析代码以满足您对第二个 arduino 的需求。

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

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

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

多么酷啊

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

@mmcristi1981你的工作对我帮助很大。我已经修改了你的SPISlave,以支持通过RS-845控制廉价的Hyunyang逆变器的速度……如果有人有兴趣,我可以发送文件-

我不时收到一些错误的速度发送 – 不确定这是否是 SPI 传输错误?

总之感谢。

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

@lolsifer很高兴听你这样说。
我假设你有一个从 SPI 到 RS-485 的转换器板(我假设 RS-845 是一个错字)。这意味着这也是以某种方式可编程的。您能否提供有关设置的更多详细信息?如果可以的话,想帮助你。噪音很可能是错误速度的原因。

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

洛西弗 评论 2019 年 2 月 22 日  

是的,笔误。。谢谢

使用此 RS-485 模块从 UNO 控制 VFD,运行 2.2Kw 水冷主轴。:
http ://www.yourduino.com/sunshop/index.php?l=product_detail&p=323

我有一个 Mega2560 -> Uno。Mega 不使用 CNC 防护罩,因为我有另一个项目遗留下来的 4*MA860H 步进驱动器,所以 Mega 直接连接到驱动器。

目前在桌面上使用 bCNC,稍后可能会更改为 pi..

目前 – 我正在检查它是否在申请之前两次收到相同的速度。

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

这就是我的理解:Mega2560 -> UNO -> MAX485 -> VFD。
在这种情况下,有 3 条通信线路可能会出现错误。您是否已经知道数据在传输过程中丢失的 3 个可能位置中的哪个位置?

对每条连接线的一些建议:

  1. 可以像您提到的那样通过多次检查相同的值来纠正通过 SPI 到 UNO 的 Mega2560。您也可以尝试减少板之间的物理距离。SPI喜欢短距离。
  2. UNO 到 MAX485:这也是串行通信吧?我有一个想法,可能很愚蠢,但是如果您删除 UNO 会怎样,从而减少潜在的故障点。Mega 有可以直接链接到 MAX 板的免费序列号。据我了解 MAX 板,只需要一个额外的启用引脚。还没有找到关于这些的像样的教程。这意味着更多的 GRBL 更改,并且取决于您的 UNO 中的逻辑实际上有多复杂。你能把那个贴出来吗?看看它会很有趣。
  3. MAX485 转 VFD:我从未使用过 RS485,但您可以尝试通过在另一端放置另一个 MAX485 并在接收端放置另一个 arduino 板来调试此链接。看起来您使用的电线类型很重要,并且您有适当的端接电阻器。

对不起,如果可能看起来不对,我更多的是软件人,只是想提供帮助。如果我们设法以可靠的方式使用 VFD 进行这项工作,那么其他人也可能会感兴趣。

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

您可以在此处找到有关 RS485的信息https://www.gammon.com.au/forum/?id=11428
RS485 实际上是一个电流回路,它的连接是使用双绞线(例如 CAT5 网线)进行的。对于我们的应用,我建议屏蔽电缆,因为 RF 和 EMI 噪声是一个很大的问题。在工业自动化领域工作,我在使用 RS485 时从来没有遇到过任何问题,但是在我自己的项目中,我遇到了很多问题,我猜自建方法缺乏专业设备中使用的过滤和信号调理。正如我之前提到的,VFD 因噪音而臭名昭著,您的电路板问题可能只是在其与 VFD 连接点的通信链路中引起的。
让mega通过RS485传输以及运行grbl将涉及更多的鳕鱼,看看你如何实现这个想法会很有趣。
考虑过分接地和过滤,将您的机器和所有金属表面独立接地到一个锤击到外面地面的接地棒,使用屏蔽电缆并将铁氧体连接到电机/控制电缆和糟糕的 USB 引线(如果你没有金触点USB 引线,即电缆中内置铁氧体的高品质,那么您真的应该考虑它。控制器电源的电源滤波器/抑制器,并将控制板放在金属盒内。这应该消除由于无线电干扰而出现故障的任何机会。您的VFD 还将具有更改其内部工作频率的功能,这可能有助于减少这些东西发出的可怕尖叫声,这也是设备发出的高频噪声的来源。

lolsifer – 我认为你的 VFD 有一个 RS485 连接,用于远程操作设备。

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

Mega -> Uno 之间的数据错误,故障率低。我几乎认为通过多次检查数据来解决它。电路板只是通过短面包板线连接。

在我测试这个配置时,我实际上并没有连接 VFD,所以噪音不会导致这个(目前?)..我刚刚完成这个,然后再把它们重新组合在一起..

@MeJasonT是的,我不确定将其直接添加到 Mega 中对 GRBL 的影响。因此,现在是单独的板。有一个外部主轴控制可能会很方便,它也可以从 GRBL 板上接收命令。如果它成为问题,将研究一些进一步的屏蔽,谢谢你的建议。

这些链接应该完成图片:

手册第 50 页
http://www.etech.net.au/Huanyang/HY%20Series%20Inverter%2020100627.pdf
参考
http://fightpc.blogspot.com/2014/10/vfd-control-with-arduino -using-rs485.html
参考代码
https://pastebin.com/QpmDDHsD

Ebay 上的主轴/VFD
https://www.ebay.com.au/i/302660581322?chn=ps

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

我同意第二块板增加了更多的灵活性,您还可以在其中覆盖 VFD 的控件,甚至拥有自己的自定义控制面板。
发现这个关于 SPI 的噪声过滤,可能有用:https
://www.latticesemi.com/-/media/LatticeSemi/Documents/WhitePapers/HM/ImprovingNoiseImmunityforSerialInterface.ashx?document_id=50728 如果你有一个示波器会很好解决此类问题。
我有点惊讶,因为我在设置中没有看到错误,也只使用了跳线。也许我没有等待足够长的时间(只有几分钟)。似乎您知道自己在做什么,所以我问您是否直接在两块板之间有良好的接地连接似乎很荒谬。

我最终可能会添加更多代码以尝试使连接更具容错性。我试图让 GRBL 板上的开销尽可能低。还在想一个好的解决方案。

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

后续,出于好奇,我做了更多测试。创建了一个小的 gcode 文件,将主轴速度更改为各种值,然后等待。在大约 15 分钟的测试中,我看不到任何错误。然而,一旦我断开两块板之间的直接接地连接,只留下通过 USB 端口的不正确接地,我经常得到错误值。

将两块板连接到同一台 PC 进行测试,它们之间有 4 根跳线:SS、MOSI、SCK 和 GND。我完全忽略了味噌。在当前的实现中,它是不需要的。

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

梅杰森 评论 2019 年 2 月 27 日  

保存gcode文件,
它被称为主轴预热程序,被专业制造商用作维护功能。如果一台机器已经放置了任何时间,他们会在速度范围内运行主轴,以确保主轴运行正常,没有轴承问题、噪音、振动或故障。
https://www.haascnc.com/service/troubleshooting-and-how-to/reference-documents/mill—spindle—programs–run-in–warm-up–break-in-。 html

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

好信息,谢谢,我认为这对准确性也很有意义,当预热时温度也会升高,东西会稍微改变形状,最好在开始切割之前拥有它。尽管出于我们的主要爱好目的,这并没有太大的区别。
顺便说一句,我的测试还没有在连接实际主轴的情况下完成。硬件还没有准备好。只有两块板连接到笔记本电脑。

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

听起来进展不错。
我的主轴速度现在通过光纤控制工作,我什至让我的前老板用我的速度查看一个 Excel 电子表格,以校准主轴。最终得到一个三阶多项式以获得最佳拟合。我在整个范围内的转速为 12 RPM,因此需要进行一些调整,但不会失败,不会使控制板跳闸,也不会出现射频问题,只是对我的主轴进行了可靠的控制。
我现在遇到了一个新问题,我的 nema 22 电机在铣削时不足以支撑 z 轴 – 我发生了碰撞,工具掉落了。现在需要存钱购买带变速箱的 nema 34 步进电机。

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

您好,
我没有任何编程知识
,谁能帮助我如何在 GRBL 库中将步进电机设置为主轴?
我在 x,y 轴使用 2 个步进电机,z 轴使用螺线管,步进电机作为主轴
我真的很急于解决这个
问题

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

mmcristi1981 评论 2020 年 8 月 29 日  

你的细节有点粗略,似乎是一个奇怪的用例。步进电机通常用于与位置精度相关的低 RPM 设置。随着速度的提高,扭矩会急剧下降。步进电机作为主轴电机似乎是一个不幸的选择。

无论如何,我会尝试给出一些建议:

  1. 如果可能,使用直流电机作为带有直流驱动器的主轴?
  2. 如果 (1) 无法切换电机类型,请尝试将主轴的步进电机驱动器连接到 GRBL 板的“z”轴输出。然后你通过g代码控制主轴的位置,而不是它的速度。
  3. 您需要第二个 arduino 来解码来自 Grbl 板的引脚 D11 的 PWM 信号。然后它将其转换为频率受控的脉冲序列,发送到主轴电机驱动板的步进引脚。这绝对不是微不足道的,需要编程。我最初的问题与这个主题有关,如何以二进制形式将速度信息从 GRBL 板发送到辅助 arduino 板。我终于能够使用在 arduino MEGA 上运行的自定义 GRBL 代码,使用 SPI 接口来做到这一点。但是您可能不需要那种级别的准确性和复杂性。因此,如果您可以像这里所做的那样从 grbl 板上解码 D11 pwm 信号:链接到 arduino.cc 教程但没有编程技能,这不会走得太远,抱歉……
准确的主轴转速数据代替 pwm #1490
准确的主轴转速数据代替 pwm #1490

嗨,
对不起我迟到的回复。当然,可以通过几种不同的方式更改 GRBL 代码。我想帮忙,不幸的是我没有时间实施它,而且看来你的时间很紧。

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

现在似乎有一个非常优雅的解决方案,将环阳 RS485 通信直接集成到 GRBL,如果您能帮助测试,我会很高兴:
terjeio/grblHAL#68

准确的主轴转速数据代替 pwm #1490
 
添加标题文本添加粗体文本,<Ctrl+b>添加斜体文本,<Ctrl+i>
喜欢 (0)

您必须 登录 才能发表评论!