开源改变世界!!

继电器以开启模式启动 #770

推推 grbl 2年前 (2023-01-23) 105次浏览

关闭
regpye 打开了这个问题 2019 年 12 月 4 日 · 19条评论
关闭

继电器以开启模式启动#770

regpye 打开了这个问题 2019 年 12 月 4 日 · 19条评论

注释

继电器以开启模式启动 #770

我正在使用 GRBL 1.1f
我有一个继电器模块连接到 Arduino nano 上的 D13,我希望用它来打开我的等离子手电筒。我让它在软件中运行正常,我使用 M3 将其打开并使用 M4 将其关闭。我遇到的问题是,当我启动或连接 GRBL 时,继电器会打开并保持打开状态,直到我发送 M4 将其关闭。这是非常危险的,因为等离子在它应该打开之前就打开了。
有没有办法阻止这种情况发生?

继电器以开启模式启动 #770

我想到了两种可能性;首先,您可以使用启动块功能来关闭继电器,此 wiki 页面对此进行了描述:

https://github.com/gnea/grbl/wiki/Grbl-v1.1-Commands#n—view-startup-blocks

您可以做的另一件事是连接“武装”开关(可能使用另一种继电器设置,以便在断电时自动关闭)。然后,如果武装开关/继电器没有被激活,主继电器将不会连接到等离子切割机。

继电器以开启模式启动 #770
作者

感谢您提供该信息。我觉得第一个选项不会很有用,因为继电器甚至在启动之前就被触发了。此外,启动块在归位序列之后才会被激活,因此唯一的选择是使用开关,直到一切都稳定下来。
我希望有另一种方法,因为当它应该是一个简单的系统时,有一个辅助开关来激活是非常混乱的。
我使用的继电器 BTW 是一个继电器模块

继电器以开启模式启动 #770
作者

可能还有另一种选择。问题似乎是继电器模块是低电平触发的,所以这意味着它在第一次上电时会正常激活。我已经订购了一些高/低电平继电器来试用。
https://www.ebay.com.au/itm/Hot-5V-1-Channel-Optocoupler-Relay-Module-for-Arduino-HL-Level-Triger-/232395396642

继电器以开启模式启动 #770
危机 评论了 2019 年 12 月 5 日 通过电子邮件
继电器以开启模式启动 #770
作者

您可能应该在输出引脚上添加上拉或下拉电阻。regpye notifications@github.com schrieb am Mi., 4. Dez. 2019, 22:55:

你知道怎么做吗,因为我不熟悉这个过程..

继电器以开启模式启动 #770

它只是一个相当高值的电阻器(50k 到 100k 欧姆),它连接在 arduino 的输出引脚和地(用于下拉)或 5v 电源引脚(用于上拉)之间。

这个想法是电阻器总是试图将输出引脚拉到另一端连接的(接地或 5v),并且在启动时 Arduino 根本不会驱动引脚,所以电阻器是唯一的为引脚提供任何电平的东西。然而,一旦引脚确实被 Arduino 驱动;它会压倒电阻(这就是为什么它在 50k 到 100k 范围内的原因 – 足以提供一些拉力,但电阻不会小到短路)。

然而; 从关闭到主轴方向销被 Arduino 驱动之间的时间长度非常短。默认方向是向前;这在不到一秒钟的时间内就完成了。

你能修改和更新你板上的固件吗?如果是这样,那么您可以查看spindle_control.c并添加以下行:

SPINDLE_DIRECTION_PORT &= ~(1<<SPINDLE_DIRECTION_BIT);

它应该放在spindle_stop()函数的末尾;在第 115 行和第 116 行之间。

这样做会在主轴停止时关闭主轴方向销(无论 Grbl 的其余部分认为它应该转动的方向如何 – 但因为这是等离子切割机,这实际上是你想要的 – 没有电机驱动 &实际的旋转位会因此而感到困惑或颠簸)。

继电器以开启模式启动 #770
作者

感谢您提供非常详细的解释。我从中学到了很多。
我将不得不学习更多关于修改固件的知识,然后试一试。
我使用的 GRBL 1.1h 是一个十六进制文件,所以我根本没有学到太多关于编译或进行任何更改的知识。我已经下载了源文件,所以我将在本周晚些时候尝试一下。

继电器以开启模式启动 #770
作者

黑眉

我按照我的想法按照您的说明进行了操作,但是在闪烁我的 nano 时出现此错误消息。

Arduino:1.8.10 (Windows 8.1),开发板:“Arduino Nano,ATmega328P”

在 C:\Users\Reg\Documents\Arduino\libraries\grbl/grbl.h:43:0 包含的文件中,

             from C:\Users\Reg\Documents\Arduino\libraries\grbl\examples\grblUpload\grblUpload.ino:27:

C:\Users\Reg\Documents\Arduino\libraries\grbl/nuts_bolts.h:56:0: 警告:“最大”重新定义

#define max(a,b) (((a) > (b)) ? (a) : (b))

在 sketch\grblUpload.ino.cpp:1:0 包含的文件中:

C:\Users\Reg\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.2\cores\arduino/Arduino.h:93:0:注意:这是前面定义的位置

#define max(a,b) ((a)>(b)?(a):(b))

在 C:\Users\Reg\Documents\Arduino\libraries\grbl/grbl.h:43:0 包含的文件中,

             from C:\Users\Reg\Documents\Arduino\libraries\grbl\examples\grblUpload\grblUpload.ino:27:

C:\Users\Reg\Documents\Arduino\libraries\grbl/nuts_bolts.h:57:0: 警告:“min”重新定义

#define min(a,b) (((a) < (b)) ? (a) : (b))

在 sketch\grblUpload.ino.cpp:1:0 包含的文件中:

C:\Users\Reg\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.2\cores\arduino/Arduino.h:92:0:注意:这是前面定义的位置

#define min(a,b) ((a)<(b)?(a):(b))

在 C:\Users\Reg\Documents\Arduino\libraries\grbl/grbl.h:43:0 包含的文件中,

             from C:\Users\Reg\Documents\Arduino\libraries\grbl\examples\grblUpload\grblUpload.ino:27:

C:\Users\Reg\Documents\Arduino\libraries\grbl/nuts_bolts.h:61:0: 警告:“位”重新定义

#定义位(n)(1 << n)

在 sketch\grblUpload.ino.cpp:1:0 包含的文件中:

C:\Users\Reg\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.2\cores\arduino/Arduino.h:124:0:注意:这是前面定义的位置

#define 位(b) (1UL << (b))

Sketch 使用 29020 字节(94%)的程序存储空间。最大值为 30720 字节。
全局变量使用 1543 字节 (75%) 的动态内存,为局部变量留下 505 字节。最大为 2048 字节。
可用内存不足,可能会出现稳定性问题。
上传草图时发生错误
avrdude:stk500_getsync() 尝试 1 次,共 10 次:不同步:resp=0x0d
avrdude:stk500_getsync() 尝试 2 次,共 10 次:不同步:resp=0x0a
avrdude:stk500_getsync() 尝试 3 次,共 10 次:不同步:resp=0x47
avrdude:stk500_getsync() 尝试 4 次,共 10 次:不同步:resp=0x72
avrdude:stk500_getsync() 尝试 5 次,共 10 次:不同步:resp=0x62 avrdude
:stk500_getsync() 尝试 6 次10:不同步:resp=0x6c
avrdude:stk500_getsync() 尝试 10 次中的 7 次:不同步:resp=0x20
avrdude:stk500_getsync() 尝试 10 次中的 8 次:不同步:resp=0x31
avrdude:stk500_getsync() 尝试 10 次中的 9 次:不同步:resp= 0x2e
avrdude: stk500_getsync() 尝试 10 of 10: 不同步: resp=0x31

如果在文件 -> 首选项中启用了
“在编译期间显示详细输出”选项,该报告将包含更多信息。

继电器以开启模式启动 #770

好的,关于重新定义 min() 和 max() 的警告可以忽略,这是一种糟糕的风格,但不是真正的问题。

低内存错误是正常的 – 实际上,在 ‘328 处理器中,Grbl 的运行确实非常接近其 RAM 的极限。

然而,这个错误是一个问题。这意味着 Arduino IDE 没有与开发板通信(在 IDE 中选择了错误的端口?驱动程序问题?或者只是一个临时故障会随着重启而消失?)或者开发板没有响应(它没有重置正确吗?缺少引导加载程序?电缆损坏?)。
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x0d

取决于您如何上传之前的 Grbl .hex 文件;您可能已经覆盖了引导加载程序。如果是这样,您将需要第二个设备(另一个 Arduino 可以工作,或者像 USBASP 或 Atmel-ICE 编程器之类的东西)将引导加载程序闪回到您的板上。

如果你还没有看到,这是当前编译这个版本的 Grbl 的官方文档:
https ://github.com/gnea/grbl/wiki/Compiling-Grbl

继电器以开启模式启动 #770
作者

bdurbrow
好的,谢谢。我不太了解它,所以我会保留它。我
用 UGCS 检查了 nano,它似乎和以前一样,标题显示它是 1.1f 版本,新版本应该显示 1.1h,所以也许它什么也没做,除了所有 $ 设置现在不同了,也许是默认值??
我刚刚闪过第二个 nano 并得到了相同的结果。

继电器以开启模式启动 #770
作者

我在 grbl.h 中找到了这个

#define GRBL_VERSION “1.1h”
#define GRBL_VERSION_BUILD “20190825”

但是当我编译并闪存到 nano 时,它显示的是 1.1f。
之前 nano 上加载了 Estlcam 固件,我用 GRBL 覆盖了它。
在那之前是 GRBL 1.1f,所以我不确定这里发生了什么。

继电器以开启模式启动 #770
贡献者

在您的 Arduino 库路径中删除旧版本的 Grbl。将 Grbl 重新导入为库。同时在 Arduino 首选项中禁用主动缓存。

继电器以开启模式启动 #770
作者
雷比 评论了 2019 年 12 月 7 日  

camnit
好的,我已经删除了所有版本的 GRBL,我在文档文件夹中找到了一个,这就是正在使用的版本。现在已成功上传 1.1h。没有出现与以前相同的错误,只有低空间警告,我认为这对于 nano 来说是正常的。

继电器以开启模式启动 #770
作者

闪烁 GRBL 1.1h 后,我仍然遇到继电器模块在启动时打开的原始问题。
我正在使用 UGCS 将 gcode 发送到 GRBL,并使用 M3 打开继电器模块,使用 M4 将其关闭。
在启动或重置 GRBL 时,继电器打开,我必须等到 UGCS 完全加载后才能按下发送 M4 的按钮以关闭继电器模块。实际上,这意味着等离子手电筒会点火几秒钟,或者直到我能够按下那个按钮。

我的下一步行动是尝试添加一个上拉电阻,如果我理解正确的话,这需要在继电器模块的信号引脚和 nano 上的 5v 引脚之间放置一个电阻。说错了请指正,我不想无缘无故的吹nano。

我已经按照 bdurbrow 的建议添加了这一行
“你能修改和更新你板上的固件吗?如果是这样,那么你可以查看 spindle_control.c,并添加这一行:

SPINDLE_DIRECTION_PORT &= ~(1<<SPINDLE_DIRECTION_BIT);

它应该在 spindle_stop() 函数的末尾;在第 115 行和 116 行之间。”

我没有看到我遇到的问题有太大区别或变化。

继电器以开启模式启动 #770
作者

如果我使用定时器继电器模块将引脚 D13 激活到继电器模块信号引脚,我可以解决这个问题,但前提是我可以在启动时发送 M4(也许)
可以使用启动块发送 M4 $N0=M4
我试过了,当 GRBL 启动时,我只看到继电器打开的短暂闪光,然后它进入了想要的关闭模式。如果我添加一个有几秒延迟的继电器计时器,我可以将它放在 D13 引脚和继电器模块信号引脚之间,这应该可以解决我认为的问题。
我已经测试了起跑器并且它可以工作,接下来我将连接一个延迟继电器并进行测试。
似乎一个简单的动作就过头了,但似乎没有人知道解决这个问题的有效方法。

继电器以开启模式启动 #770

我没有看到我遇到的问题有太大区别或变化。

呸!我之前错过了这个:

问题似乎是继电器模块是低电平触发的,所以这意味着它在第一次上电时会正常激活。

我建议添加到 spindle_stop() 的那一行将输出引脚设置为低电平,而不是高电平。试试这个:

SPINDLE_DIRECTION_PORT |= (1<<SPINDLE_DIRECTION_BIT);

这会将输出设置为高。

继电器以开启模式启动 #770
作者

黑眉

我已将行更改为 SPINDLE_DIRECTION_PORT |= (1<<SPINDLE_DIRECTION_BIT); 这对问题没有任何影响。
我在 GRBL 中添加了启动块以在启动时发送 M4,并测试了使用延迟继电器连接 D13 和继电器模块之间的线路,它正在以这种方式工作。由于现在有三块板,所以有点乱,其中两块只是打开一个开关。但它有效。

继电器以开启模式启动 #770
作者

今天高/低电平继电器模块来了,所以我把它们设置在高电平并重新接线。问题出在使用低级继电器模块。
现在一切正常。我还能够让 M5 工作以关闭等离子割炬模块,并让 M4 将其打开。冷却液也在 M8 打开和 M9 关闭的情况下工作。
我要感谢所有试图帮助我的成员,非常感谢。

继电器以开启模式启动 #770
作者

感谢大家的帮助和建议。

喜欢 (0)