开源改变世界!!

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

推推 grbl 2年前 (2022-10-19) 231次浏览 0个评论

关闭
RootCNC 打开了这个问题 on 5 Dec 2020 · 11 条评论
关闭

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

RootCNC 打开了这个问题 on 5 Dec 2020 · 11 条评论

注释

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

根数控 评论 on 5 Dec 2020

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

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

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

几点:
这是使用自定义硬件,据我所知,一切似乎都运行良好。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 命令将主轴启动到 CCW 和 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####”命令一起发送?(目前没有)。
    湾。我可以强制再次发送吗?
  3. 这个问题是否与软件没有看到响应并且没有尝试再次发送该类型的命令有关?

任何帮助深表感谢!

亲切的问候皮特

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

婚戒 评论 2020 年 12 月 5 日

您能否提供一个可重复的、详细的和最小的示例,说明如何从通电到问题产生问题?

谢谢

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

根数控 评论 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 控制器,而不管之前的状态如何?

我也玩过环阳纺锤,效果是一样的,也许还有其他的作用?

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

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

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

再次感谢巴特。

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

根数控 评论 2020 年 12 月 7 日

PS对不起,很长的帖子!

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

婚戒 评论 2020 年 12 月 7 日

有时间我会读的。如果您将其重写如下,我可能会更快地得到它。

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

注:我只有环阳锭。

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

根数控 评论 2020 年 12 月 7 日

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

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

根数控 评论 2020 年 12 月 8 日

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

  • 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

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

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

斯科特贝兹1 评论 2020 年 12 月 9 日

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 消息,因此更容易根据预期协议检查数据,以防提供任何可能发生的额外线索。我无法在我的(环阳)机器上重现这一点,即使我偶尔会在不同时间断开 RS485 收发器上的 RO 引脚,因此您可以提供的任何其他线索或数据都会有所帮助。

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

婚戒 评论 2020 年 12 月 9 日

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

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

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

这是我的设置…
VFD PD011 为 120 // min RPM

引导消息
[MSG:Initializing RS485 VFD 主轴]
[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]

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

M4 ; 进入 M4 模式 无速度
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
贡献者作者

根数控 评论 2020 年 12 月 10 日

@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 感到满意?

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

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

婚戒 评论 2020 年 12 月 10 日

我将研究调试模式。

RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command
 
添加标题文本添加粗体文本,<Ctrl+b>添加斜体文本,<Ctrl+i>
添加引号,<Ctrl+Shift+.>添加代码,<Ctrl+e>添加链接,<Ctrl+k>
添加项目符号列表,<Ctrl+Shift+8>添加编号列表,<Ctrl+Shift+7>添加任务列表,<Ctrl+Shift+l>
直接提及用户或团队引用问题、拉取请求或讨论

添加已保存的回复

请记住,对此存储库的贡献应遵循我们的 GitHub 社区指南
通过赞助他们 来表达 您对 bdring的支持。

 赞助

标签
漏洞有些东西不工作
项目

还没有

发展

没有分支或拉取请求

4名参与者
RS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_commandRS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_commandRS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_commandRS485 VFD 未在“M3 S1000”或“M4 S1000”上运行 set_speed_command

喜欢 (0)

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