开源改变世界

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390

推推 grbl 2年前 (2023-01-30) 106次浏览
关闭
floggy22 打开了这个问题 2020 年 5 月 2 日 · 19条评论
关闭

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动#390

floggy22 打开了这个问题 2020 年 5 月 2 日 · 19条评论

注释

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390

如果我使用
SPINDLE_TYPE_DAC
SPINDLE_TYPE_PWM、
SPINDLE_TYPE_LASER,控制器会显示未定义的行为。

有时它会停下来但不会崩溃,有时它不会做出反应或只朝一个方向移动。在某些情况下,它显示 grbl 错误 ID23 或 ID33

如果我选择 SPINDLE_TYPE_NONE,它可以完美运行,没有任何问题。它只是一个测试机器,我用 nodemcu32 和 esp32devkit1 试了一下。两个控制器上的结果相同。

您使用的是什么版本的固件?
最新 master
ets 2016 年 6 月 8 日 00:22:57
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00 ,wp_drv:0x00
模式:DIO,时钟div:2
负载:0x3fff0018,len:4
负载:0x3fff001c,len:1044
负载:0x40078000,len:8896
负载:0x40080400,len:5828
条目0x400806ac

[MSG:Grbl_ESP32 Ver 1.2a Date 20200428]
[MSG:Compiled with ESP32 SDK:v3.2.3-14-gd3e562907]
[MSG:Using machine:CNC6]
[MSG:Axis count 3]
[MSG:RMT Steps]
[MSG:引脚上的 DAC 主轴:25]

Grbl 1.2a [‘$’寻求帮助]

问题是否可重复?
是的

我添加了我的 maschine 文件,但它也可以通过 test_drive.h 重复并设置一个 SPINDLE_TYPE 而不是 NONE。我使用 CNCjs 1.9,22 和 bCNC 0.9.14-dev 进行了测试。我在 eyecatch 块的 config.h 中禁用了所有选项(wifi、蓝牙、SD 卡……)。

gcode_config_maschine_file.zip

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390 floggy22 添加了 漏洞 有些东西不工作标签 2020 年 5 月 2 日
如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
所有者

我没有看到这些错误,但我注意到一些同步错误。这意味着主轴没有准确地打开/关闭。

我会解决这个问题并继续关注您的问题。

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
所有者

我看到你在同一个引脚上有 2 个功能。

#define Y_STEP_PIN                  GPIO_NUM_33
#define SPINDLE_ENABLE_PIN          GPIO_NUM_33

这需要解决。

您可以将响应发送到 $+ 命令吗?这将帮助我复制您的设置。

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
作者

好的,我修复了它,但仍然是一个错误。我尝试 ugs 2.0beta 并获得输出。我认为这与进给率有关。如果我在没有设置主轴类型的情况下使用相同的 gcode,它就可以工作。

您使用哪些工具发送 gcode?也许我需要更好的工具来调试,这是我的设置错误。

$+ 输出:
$+
$0=3
$1=250
$2=0
$3=0
$4=0
$5=1
$6=1
$10=3
$11=0.010
$12=0.002
$13=0
$20=0
$21=0
$22=0
$23= 3
$24=200.000
$25=2000.000
$26=250
$27=1.000
$30=25000.000
$31=0.000
$32=0
$33=5000.000
$34=0.000
$35=0.000
$36=100.000
$80=0
$81=0 $ 82
=0
$ 043 =0.000 $91=0.000 $92=0.000 $93=0.000 $94=0.000 $100=400.000 $101=400.000

$ 102 = 400.000
$ 110 = 5000.000 $ 111 =
5000.000 $ 112
= 1800.000 $ 120
= 400.000
$ 121 = 500.000
$ 122 = 600.000
$ 130.000 $ 130.000
$ 131 = 300.000
= 300.000 16 $161=16 $162=16 $170=16 $171=16 $172=16 还行

错误。
[错误] 发送“G01X1.4042Y33.3470”时检测到错误:大师冥想错误:核心 0 恐慌(StoreProhibited)。异常未处理。流式传输已暂停。
[错误] 处理响应时出错 <发送“G01X1.4042Y33.3470”时检测到错误:大师冥想错误:核心 0 恐慌(StoreProhibited)。异常未处理。Streaming has been paused.>
Core 0 register dump:
PC : 0x400d90bb PS : 0x00060d30 A0 : 0x800d6468 A1 : 0x3ffb3e80
A2 : 0x00000000 A3 : 0x3ffc1b1c A4 : 0x3ffc1b64 A5 : 0x3ffc1b6c
A6 : 0x00000002 A7 : 0x3ffc105c A8 : 0x3ffc1bb8 A9 : 0x3ffb3e70
A10 : 0x00000823 A11 : 0x40c04700 A12 : 0x0000000e A13 :
0x0000208e A14 : 0x7ff00000 A15 : 0x7ff04700 SAR : 0x00000002 EXCCAUSE: 0x0000001d
EXCVADDR: 0x00000020 LBEG : 0x40002390 LEND : 0x4000239f LCOUNT : 0x00000000
Backtrace: 0x400d90bb:0x3ffb3e80 0x400d6465:0x3ffb3ef0 0x400d649b:0x3ffb3f10 0x400d69c3:0x3ffb3f40 0x400d972b:0x3ffb3f60 0x400d5626:0x3ffb3f80 0x400d7c85:0x3ffb3fa0 0x400d7e1a:0x3ffb3fc0 0x4008a145:0x3ffb3fe0 正在
重启…

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
所有者

谢谢,我可以使用您的机器定义和设置运行您的文件。我没有收到错误,但我看到了导致错误值进入 gcode 的解析错误。

它类似于ESP32 的这个问题。我会找出问题所在以及为什么问题再次发生在我身上。

对不起的问题。

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
所有者

我仍在尝试处理您的文件。你能告诉我你用来创建 gcode 的程序吗?你有艺术品的源文件吗,所以我可以在我的 cam 程序中试试。

(StoreProhibited) 错误通常表示 ESP32 正在尝试将某些内容存储在内存中不允许的位置。越界数组或空对象可能会发生这种情况。

您可以通过使用 Arduino IDE 编译和上传固件并将回溯信息插入异常解码器来提供帮助。异常解码器将给出导致问题的确切行以及调用函数的位置。

您需要安装异常解码器。这里有说明我不能从头开始做,因为它必须使用你编译的确切文件。此外,虽然我的行为很奇怪,但我没有遇到任何崩溃。

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
作者

对于这个文件,我使用https://www.estlcam.de/。我有其他使用 Fusion 360 创建的文件和同样的问题。可以在https://svgsilh.com/image/2023449.html找到源文件。
设置 spindle_type_none 时没有发生错误。如果我使用带有版本的机器

#define GRBL_VERSION “1.1f”
#define GRBL_VERSION_BUILD “20200115”

一切都使用同一个文件顺利运行。其他版本我没试过。需要一些时间来设置 Arduino IDE。

顺便说一句,我喜欢你在做什么。这是一个很棒的软件!!

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
作者

如果有截屏视频并将日志文件放在最后。也许这有帮助。

screencast.zip
日志.txt

堆栈跟踪的结果:

解码堆栈结果
0x400d9157: st_prep_buffer() at C:\Users\flogg\AppData\Local\Temp\arduino_build_341637\sketch\stepper.cpp line 1321
0x400d6501: protocol_exec_rt_system() at C:\Users\flogg\AppData\Local\Temp\ arduino_build_341637\sketch\protocol.cpp 行 513
0x400d6537:protocol_execute_realtime() 在 C:\Users\flogg\AppData\Local\Temp\arduino_build_341637\sketch\protocol.cpp 行 248
0x400d6a5f:protocol_buffer_synchronize() 在 C:\Users\flogg\ AppData\Local\Temp\arduino_build_341637\sketch\protocol.cpp line 217
0x400d981b: sys_io_control(unsigned char, bool) 在 C:\Users\flogg\AppData\Local\Temp\arduino_build_341637\sketch\system.cpp line 551
0x400d56c2: mc_reset () 在 C:\Users\flogg\AppData\Local\Temp\arduino_build_341637\sketch\motion_control.cpp 第 430 行
0x400d7d21: execute_realtime_command(unsigned char, unsigned char) 在 C:\Users\flogg\AppData\Local\Temp\arduino_build_341637\sketch\serial.cpp 第 205 行
0x400d7eb6: serialCheckTask(void*) 在 C:\Users\flogg\AppData\ Local\Temp\arduino_build_341637\sketch\serial.cpp 第 134 行
0x4008a145:vPortTaskWrapper 在 /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/port。 143号线

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390

堆栈跟踪非常有用。我已经看到一个可能的问题。

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390

这里有一些尝试:
在 stepper.c 中,将第 1321 行从:

pl_block->millimeters = mm_remaining;

if (pl_block) pl_block->millimeters = mm_remaining;
如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
作者

它改变了行为。控制器不再崩溃,但会非常慢。似乎有什么东西阻碍了交流。

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390

好的,这是一个很好的线索。代码中存在竞争条件。我将不得不映射该部分代码的整个行为,以了解正确的修复方法。

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390

您好,我有类似的问题,所以我也使用了 floggy22 的 gcode 文件。
当我使用 SPINDLE_TYPE_PWM 或 SPINDLE_TYPE_LASER 进行编译时,过程在中间停止或轴行进到限位开关。然后连接离开。
如果我使用 SPINDLE_TYPE_NONE 进行编译,那么 gcode 文件会一直运行到最后。测试了五次。
制造商于尔根

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
所有者

主分支已恢复为工作版本。我们正在努力修复主轴类版本。

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
所有者

我想我们发现了问题,ESP32 对带中断的浮点数据类型非常敏感。Grbl 对主轴速度使用浮动值。通常人们不使用带小数点的主轴速度。我们已将类型切换为整数,但可能会移动到固定点值,例如未来的毫转 (100.005 RPM)。最终分辨率仍然取决于 PWM 信号,在 5,000Hz 时约为 13 位。

我不确定为什么主轴类会引发此问题,因为它始终是浮点数。可能存在等待弹出的稳定性问题。

代码在 SpindleClass2 分支中。我仍在进行广泛的测试、评论和重构。我希望在几天内将它合并回来。

感谢您对此问题的耐心等待。

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
作者

我做了第一次测试,它有效。明天我会尝试测试更多。做得好!!

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
所有者

我只对 None、PWM、Laser 和 BESC 进行了全面测试。

VFD 看起来也不错,但我可以提高通信速度。

需要测试 Relay 和 DAC。

如果选择 SPINDLE_TYPE_DAC,则停止工作和未定义的运动 #390
作者

我对 DAC 做了更多测试。我发现,最大输出约为“m3 s160”。我的主轴最大值是25000。控制值只能在0到160之间。