开源改变世界

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694

推推 grbl 3年前 (2023-01-30) 195次浏览
关闭
RootCNC 打开了这个问题 2020 年 12 月 5 日 · 11 条评论
关闭

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command#694

RootCNC 打开了这个问题 2020 年 12 月 5 日 · 11 条评论

注释

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694
贡献者

您使用的是什么版本的固件?
版本 1.3a

问题是否可重复?
是的,它是可重复的。让 VFD 保持运行并执行 ESP32 重置将允许在 Set_Speed_Command 函数不会执行之前对主轴速度进行一次更新,并且不会再次发送更新速度数据包。

什么情况下会出现bug?
该问题存在于仅启用 H2A 主轴的“Test_Drive”机器文件中。

几点:
这是使用自定义硬件,据我所知,一切似乎都运行良好。RS485 命令被正确发送,VFD 正在响应它们并以正确的值回复。这使我相信 RS485 发射端没有问题。

定义“VFD_DEBUG_MODE”显示正在发送什么消息,这些消息与总线嗅探器看到的数据相匹配。VFD 正确响应。但是,当在串行终端中查看接收数据包时,RX 数据包显示未收到任何数据……很奇怪,是的,我对我的引脚进行了双重、跳闸、四重检查,以确保它们连接到正确的引脚,它们是:

#define VFD_RS485_TXD_PIN		GPIO_NUM_17
#define VFD_RS485_RXD_PIN		GPIO_NUM_16
#define VFD_RS485_RTS_PIN		GPIO_NUM_4

请记住,这是定制硬件,因此一些引脚与 6 件装的不同。

它变得更加奇怪,因为我过去在串行终端中看到过数据并且没有进行任何硬件更改 – 因此,出于这个原因,我不想排除 RX 端后收发器端的任何问题。

发送 M3、M4 命令以 CC 和 CCW 方向的最小主轴速度启动主轴(我认为这是我的 VFD 的一个特性)——这里没有问题。
发送“M3 S####”和 M4“S####”(#### 是一些 RPM 值)启动主轴,但不会从 VFD 驱动器的最小 RPM 改变速度。
发送 M5 停止主轴。

如您所见,我的问题在于速度命令。

当我禁用“VFD_DEBUG_MODE”并通过终端发送主轴命令时,每次命令后我都会收到“OK”的响应,并且只有几次我会收到“VFD 没有响应”的消息。我认为只要主轴驱动器执行命令,我就不关心响应(无论如何,让 VFD 达到特定速度对我来说都是一个很大的飞跃!)。我必须承认,我对调试模式失去了一些信心,我们确定它按预期工作吗?

几个问题:

  1. 固件对 VDF 响应有什么作用吗?
    一种。如果该软件不对数据做任何事情,那么我就不会担心弄清楚为什么它没有接收到数据(我花了三天时间试图弄清楚这个问题并且没有想法)
  2. set_speed_command 何时运行?
    一种。这个数据包应该与每个“M3 S####”和 M4“S####”命令一起发送吗?(目前没有)。
    b. 我可以强制再次发送吗?
  3. 这个问题是否与软件没有看到响应并且没有尝试再次发送该类型的命令有关?

任何帮助深表感谢!

亲切的问候皮特

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694 RootCNC 添加了 漏洞 有些东西不工作标签 2020 年 12 月 5 日
RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694
所有者

你能提供一个可重复的、详细的、最小的例子来说明如何从通电到问题的产生吗?

谢谢

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694
贡献者作者
根CNC 评论了 2020 年 12 月 7 日  

当然,

我刚刚下载了 repo 的全新克隆并完成了这些更改

  1. 将 test_drive.h 文件中的主轴类型更改为:
#define SPINDLE_TYPE                    SpindleType::H2A  // only one spindle at a time
#define VFD_RS485_TXD_PIN		GPIO_NUM_17
#define VFD_RS485_RXD_PIN		GPIO_NUM_16
#define VFD_RS485_RTS_PIN		GPIO_NUM_4
  1. 上传代码
  2. 打开终端并开始发送 M 命令。

注意
这会产生警报代码 10 错误,但我不认为这会阻止 RS845 数据的发送并且无论如何都会发送数据?我相信由于软件没有看到响应,它实际上发送了三次命令。我们可以使用 USB 到串口转换来捕获输出数据,以消除任何外部因素(例如 VFD 驱动它自身)的任何不利影响。

在我之前提到的这个定制板上的硬件设置ESP32,第二个串行端口连接到 RS485 缓冲器。缓冲区连接到 RS485 到 USB 串行转换器,仅此而已。这意味着我们不会看到主轴的响应。但我认为这不会成为问题——我可能错了?

自从上一条消息以来,我对硬件正在工作并且按预期工作更有信心。TX 和 RX 工作正常,虽然软件没有看到响应 – 这可能是一个错误或我没有在软件中发现的其他问题。

ESP32 GRBL 控制器 -> RS-485 缓冲器 -> 布线 -> RS-485 转 USB 串行适配器。

测试

  • 1、发送“M4”指令:
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8< polling the modbus
0106200000060208 <Write command from "direction_command" set CCW
0106200000060208 <Write command from "direction_command" set CCW
0106200000060208 <Write command from "direction_command" set CCW
0103300000018B0A< back to normal polling the modbus
0103300000018B0A
0103300000018B0A
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8
0103300000018B0A
etc

按预期工作。

  • 2、发送“M3”命令:
0103300000018B0A
0103300000018B0A
0103300000018B0A
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8< polling the modbus
01062000000143CA <Write command from "direction_command" set CW
01062000000143CA <Write command from "direction_command" set CW
01062000000143CA <Write command from "direction_command" set CW
0103300000018B0A< back to normal polling the modbus
0103300000018B0A
0103300000018B0A
0103700C00021EC8
etc

按预期工作。

  • 3. *Preform reset”发送“M4 S10000”命令:
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8< polling the modbus
01062000000203CB <Write command from "direction_command" set CCW
01062000000203CB <Write command from "direction_command" set CCW
01062000000203CB <Write command from "direction_command" set CCW
0106100027109736 <Write command from "set_speed_command"
0106100027109736 <Write command from "set_speed_command"
0106100027109736 <Write command from "set_speed_command"
0103300000018B0A< back to normal polling the modbus
0103300000018B0A
0103300000018B0A
0103700C00021EC8
0103700C00021EC8
etc

按预期工作。

  • 4. NO RESET – 发送“M4 S20000”命令:

在终端中没有观察到主轴速度的写入命令

  • 5. 执行复位 – 发送“M4 S10000”稍等,发送“M4 S20000”稍等,发送“M5”
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8< polling the modbus
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0103300000018B0A< back to normal polling the modbus
0103300000018B0A
0103300000018B0A
0103700C00021EC8
.
.
.
0103700C00021EC8
0103700C00021EC8
0103300000018B0A
0103300000018B0A
0103300000018B0A
01062000000203CB <Write command from "direction_command" set CCW
01062000000203CB <Write command from "direction_command" set CCW
01062000000203CB <Write command from "direction_command" set CCW
0106100027109736 <Write command from "set_speed_command"
0106100027109736 <Write command from "set_speed_command"
0106100027109736 <Write command from "set_speed_command"
0103700C00021EC8< back to normal polling the modbus
0103700C00021EC8
0103700C00021EC8
0103300000018B0A
.
.
.
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0103300000018B0A< back to normal polling the modbus
0103300000018B0A
0103300000018B0A
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8 

奇怪的行为 – 不是我所期待的 – 我确实多次重复这些步骤但没有给出正确的答案。

  • 6. 执行复位 – 发送“M3 S10000”稍等,发送“M3 S20000”稍等,发送“M5”
0103300000018B0A
0103300000018B0A
0103300000018B0A
01062000000143CA <Write command from "direction_command" set CW
01062000000143CA <Write command from "direction_command" set CW
01062000000143CA <Write command from "direction_command" set CW
0106100027109736 <Write command from "set_speed_command"
0106100027109736 <Write command from "set_speed_command"
0106100027109736 <Write command from "set_speed_command"
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8
.
.
.
0103300000018B0A
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0103300000018B0A
0103300000018B0A
0103300000018B0A
0103700C00021EC8

这突出显示来自串行终端的主轴命令实际上并未在 modbus 上发送更新的速度命令。

  • 7. 执行复位 – 发送“M3 S10000”稍等,发送“M4 S20000”稍等,发送“M5”
0103700C00021EC8
0103300000018B0A
0103300000018B0A
0103300000018B0A
01062000000143CA <Write command from "direction_command" set CW
01062000000143CA <Write command from "direction_command" set CW
01062000000143CA <Write command from "direction_command" set CW
0106100027109736 <Write command from "set_speed_command"
0106100027109736 <Write command from "set_speed_command"
0106100027109736 <Write command from "set_speed_command"
0103700C00021EC8
0103700C00021EC8
.
.
.
0103700C00021EC8
0103700C00021EC8
01062000000203CB <Write command from "direction_command" set CCW
01062000000203CB <Write command from "direction_command" set CCW
01062000000203CB <Write command from "direction_command" set CCW
0103300000018B0A
0103300000018B0A
0103300000018B0A
.
.
.
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0103300000018B0A
0103300000018B0A
0103300000018B0A

方向命令似乎已正确发送 – 但速度命令不会在第一个速度命令之后跟随。

  • 8. 执行复位 – 发送“M3 S10000”稍等,发送“M5”稍等,发送“M3 S20000”稍等,发送“M5”
0103700C00021EC8
0103700C00021EC8
01062000000143CA <Write command from "direction_command" set CW
01062000000143CA <Write command from "direction_command" set CW
01062000000143CA <Write command from "direction_command" set CW
0106100027109736 <Write command from "set_speed_command"
0106100027109736 <Write command from "set_speed_command"
0106100027109736 <Write command from "set_speed_command"
0103300000018B0A
0103300000018B0A
.
.
.

0103300000018B0A
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0103300000018B0A
0103300000018B0A
0103300000018B0A
.
.
.
0103300000018B0A
0103700C00021EC8
0103700C00021EC8
0103700C00021EC8
01062000000143CA <Write command from "direction_command" set CW
01062000000143CA <Write command from "direction_command" set CW
01062000000143CA <Write command from "direction_command" set CW
0103300000018B0A
0103300000018B0A
.
.
.
0103300000018B0A
0103300000018B0A
0103300000018B0A
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0106200000060208 <Write command from "direction_command" set OFF
0103700C00021EC8
0103700C00021EC8

结论
从测试 4、6、7、8 看来,在串行终端中发送具有第二个更新速度的主轴命令,实际上不会将更新的速度设定点发送到主轴控制器。只有复位后才能设置主轴转速。我会期望主轴“M3/4 S####”将速度设定点发送到 VFD 控制器,而不管之前的状态如何?

我也玩过 HUANYANG 主轴,结果显示出相同的效果,所以也许还有其他东西在起作用?

这可能是软件没有看到主轴响应的属性吗?ESP32 是否必须看到响应?

我希望这有助于传达问题,如果没有 – 请告诉我。

我已经精通代码,但这超出了我的技能范围!我不介意弄脏我的手,但我不知道要开始了!

再次感谢巴特。

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694
贡献者作者

PS 抱歉发了这么长的帖子!

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694
所有者

当我有时间时,我会阅读它。如果您按如下方式重写它,我也许可以更快地完成它。

gcode 发送 — 预期行为 — 实际行为(简短)

注:我只有一个环阳纺锤。

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694
贡献者作者

我明天会测试 Huanyang 主轴类型 – 我相信这会出现同样的问题

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694
贡献者作者

按照之前的设置测试环阳主轴类型:

  • 1. 执行 GRBL 重置并发送“M3”。
    代码发送:
    M3
    预期:
    01 03 01 01 + CRC
    得到:
    010301013188
    按预期工作

  • 2. NO复位到GRBL发送“M5”。
    代码发送:
    M5
    预期:
    01 03 01 08 + CRC
    得到:
    01030108F18E
    按预期工作

  • 3. NO复位到GRBL发送“M4”。
    代码发送:
    M4
    预期:
    01 03 01 11 + CRC
    得到:
    010301113044
    按预期工作

  • 4. 没有重置到 GRBL 发送“M3 S2000”。
    代码发送:
    M3 S2000
    预期:

01 05 02 ## ## + CRC 
01 03 01 01 + CRC

值取决于 Gcode 的 S### 部分 – 我们对值不感兴趣,只是发送了这一行
得到:

01050206823B0D
010301013188

按预期工作 – 这是第一次发送带有速度参数的主轴命令。这已被注意到在第一次运行时工作正常,但不适用于带有主轴速度参数的后续命令。

  • 5. 不重置 GRBL 发送“M3 S4000”。
    代码发送:
    M3 S2000
    预期:
01 05 02 ## ## + CRC

值取决于 Gcode 的 S### 部分 – 我们对该值不感兴趣,只是发送了这一行
得到:
错误 – 在 RS485 串行数据中观察到主轴速度没有变化。

这确定了 GRBL 启动后仅发送单个主轴速度命令的问题。我预计主轴速度将更新为新的主轴速度设定点 4000RPM。

  • 6. 不重置 GRBL 发送“M5”,然后发送“M3 S6000”(新的主轴设定值)。
    代码发送:
M5
M3 S6000

预期的:

01 03 01 08 + CRC
01 05 02 ## ## + CRC 
01 03 01 01 + CRC

得到了:

01030108F18E
010301013188

错误 – 再次没有通过 Modbus 发送主轴设定值,我可能会感到困惑,但我希望在带有 S 参数的主轴命令更新 VFD 时发送主轴速度命令?

除非我遗漏了什么,否则这表明两种主轴类型之间存在共同问题。
亲切的问候皮特

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694

我想你和他有同样的问题:#689

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694
赞助贡献者

您可以分享启用时发出S####命令时调试行所说的内容吗?VFD_DEBUG_MODE

它看起来像[MSG:Setting spindle speed to 10000 rpm (8000, 24000)]

查看代码,我发现速度命令不会被发送的最明显原因是(有界)RPM 是否与最近设置的(有界)RPM 相同——换句话说,即使您命令 2 个不同的通过 g 代码的速度,如果这些速度都在 grbl 设置中配置的定义的最小/最大 RPM 的范围之外,那么边界检查将强制它们为相同的值,并且预计第二个速度命令不会完全发送。在进一步挖掘之前排除这种可能性会很有帮助。

如果这不是这里发生的事情,我认为如果您可以包括来自失败测试用例之一的实际完整 RX/TX 数据(即不删除特定速度值或 CRC 值)以及其余部分,这可能会有所帮助VFD_DEBUG_MODE 消息,因此可以更轻松地根据预期协议检查数据,以防提供有关可能发生的情况的任何其他线索。我无法在我的 (Huanyang) 机器上重现这一点,即使我偶尔会在不同时间断开 RS485 收发器上的 RO 引脚,因此您提供的任何其他线索或数据都会有所帮助。

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694
所有者

我终于有机会测试这个了。这很痛苦,因为我需要把它搬到我的办公室,而且我没有合适的电压。

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694

VFD RS485 类是一个基本实现,但我认为它从性能的角度执行您的测试。

这是我的设置…
VFD PD011 是 120 // 最小 RPM

引导消息
[MSG:Initializing RS485 VFD spindle]
[MSG:VFD RS485 Tx:GPIO(14) Rx:GPIO(15) RTS:GPIO(13)]

相关的 Grbl 设置是…
$Spindle/Enable/OffWithSpeed=On
$GCode/MaxS=24000.000
$Spindle/Delay/SpinDown=8.000
$Spindle/Delay/SpinUp=8.000
$Spindle/Type=HUANYANG

这是一系列命令

M3 ; 进入 M3 没有速度
ok
$G ; 显示 gcode 模式
[GC:G0 G54 G17 G21 G90 G94 M3 M9 T0 F0 S0]
ok

M5 ; 进入 M5 模式
ok
$G
[GC:G0 G54 G17 G21 G90 G94 M5 M9 T0 F0 S0]

M4 ; 进入 M4 模式 no speed
ok
$G
[GC:G0 G54 G17 G21 G90 G94 M4 M9 T0 F0 S0]
ok

M3S2000 ; M3 主轴旋转方向正确
$
G
[GC:G0 G54 G17 G21 G90 G94 M3 M9 T0 F0 S2000]

我们欢迎任何改进和拉取请求,但设置和测试需要几天时间。一些开发人员没有能力进行测试。仅仅为了测试而保留这些设备是非常昂贵的。

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command #694
贡献者作者

@bdring @scottbez1

好吧……我觉得自己很笨。金子弹是$GCode/MaxS=24000.000设置主轴最大点的命令。一旦你说出来,听起来就很明显了!谢谢您的帮助!终于让主轴控制在这个 CNC 控制器上工作,我真高兴!我是认真的-太高兴了。

我想我已经深入研究了这个新硬件的调试,错过了一些简单的东西,因为我是 GRBL 的新手等等(我是从 Marlin 那里看到的,所以一些配置方法是不同的 – 我还在学习)

解决方案:
我认为我们可以关闭此问题,任何阅读此线程的人都应确保已为控制任何 VFD 设置了以下设置:

$Spindle/Enable/OffWithSpeed=On
$GCode/MaxS=24000.000
$Spindle/Delay/SpinDown=8.000
$Spindle/Delay/SpinUp=8.000

边注 –@bdring我可以看到 RX 消息没有显示在您的终端上?我在我的终端机上也没有看到任何响应#define VFD_DEBUG_MODE。我所看到的只是一条空的 RX 消息。现在,因为我已经让主轴控制正常工作,我很乐意将它留在那里,但我猜我应该在终端窗口中看到返回的 RS485 消息?我确实探测了 EPS32 的衬垫,RX 消息肯定到达那里……所以我不是更聪明的 atm。GRBL 固件是否使用 VFD 的状态?还是只是让 VFD 上的看门狗开心?

再次感谢您的帮助和这个伟大的项目——我迫不及待地想用它做更多的事情。