注释
您没有遵循整个源代码。在 system_control_get_state() 内部有检查输入引脚电平的代码。确实,ISR 在上次端口访问后的每次极性变化时都会被调用,但上述函数会检查输入引脚的电平,而不是转换,并且代码编写正确,您错过了检查 system_control_get_state 的机会。如果您有反转级别,则必须相应地设置 INVERT_CONTROL_PIN_MASK。问候 Chris 2018-06-20 10:04 GMT+02:00,zsoden <notifications@github.com>:
|
嗨,克里斯, 是的,我看到并理解了 system_control_get_state() 的操作,但正如您所说,只有在检测到引脚状态发生变化时才会执行检查。因此,如果重置输入与急停按钮一起使用,则 grbl 只会在初始按下时做出反应。在重置急停按钮之前,机器应保持禁用状态:
目前系统运行如下:
因此,为什么我觉得在 ISR 之外定期执行输入引脚状态检查是明智的。 问候, 扎克 |
AVR 仅检测引脚变化。它不会告诉您触发更改的端口上的哪个引脚或哪个方向。如果没有需要备用计时器的软件去抖例程,则无法可靠地轮询引脚。与其试图解决可能引入错误的软件问题,我强烈建议您要么重新布置安全门开关以切断电源。你总是可以从 A0 切断安全门开关的痕迹,因为它无论如何都是错误的。 |
我了解更改功能中断的工作原理,但我很感谢您解释为什么决定这样操作。 我的急停按钮可以同时执行这两项操作——它会切断驱动器的电源并触发复位引脚。我只是希望能够使用复位引脚通过警报状态向操作员指示紧急停止已被触发。没问题,这只是一个建议,正如我所说,我想为遇到与我相同问题的其他人记录这种行为(无论是否正确)。 |
我希望您使用外部上拉或下拉来启用和步进驱动器输入,以便在复位期间启用驱动器并且不会因为浮动步进引脚而生成步进。如果步进引脚使用光耦合器,则步进引脚不需要上拉或下拉。由于急停需要关闭电源,因此您描述的上述顺序是不可能的。在更快的机器上,急停需要停止输入并且在超时后(例如 ne555)应该切断电源(使用两个单独的继电器,而不是单个继电器)并且如果控制器没有外部复位则应该应用复位主管集成电路。对于您所描述的问题,最简单的解决方案是将 GRBL 的启用引脚通过急停开关路由到停止输入。这样可以确保您请求的行为。这仅对业余机器有效,或者如果在第二个触点切断电源的情况下使用两个触点急停。进一步的急停通常意味着监管要求根据当地法规和 grbl 的使用有很大不同,这个话题通常留给实施者,实施者通常必须出示一些证明风险等级的文件….我知道爱好机器有放宽了要求,但安全对于更大的机器来说不是可有可无的。2018-06-21 0:29 GMT+02:00,zsoden <notifications@github.com>:我知道业余爱好机器有宽松的要求,但安全对于更大的机器来说不是可有可无的。2018-06-21 0:29 GMT+02:00,zsoden <notifications@github.com>:我知道业余爱好机器有宽松的要求,但安全对于更大的机器来说不是可有可无的。2018-06-21 0:29 GMT+02:00,zsoden <notifications@github.com>:
|
谢谢你的提示,克里斯。是的,我将光耦合器用于步进驱动器的启用、步进和方向引脚。 你是对的,这主要取决于紧急停止立法。这只是在商业车间使用的小型机器,在评估要求后,我决定只让急停停止步进驱动器和主轴驱动器,而不是控制电子设备。急停按钮有两个触点:一个切断驱动电源,一个向控制器发送信号。 |
我没有在 grbl 1.1 上检查它,在 grbl 0.9 上,它使用 NO 开关结合外部上拉或下拉,将启用引脚路由到停止(重置)输入。这确保了引脚状态发生变化,并且始终处理急停输入。以前当我谈论复位时,我打算使用硬件复位引脚,而不是停止(grbl 软件复位输入)引脚。这适用于小型机器。对于较大的或安全性较大的音乐会,开关必须为 NC,并且必须运行方波结合电荷泵电路,称为 cnc 看门狗电路。这样可以确保如果急停接线断开,机器会自动检测到并停止执行。2018-06-21 1:55 GMT+02:00,zsoden <notifications@github.com>:
|
谢谢克里斯,这是有道理的。 事实上,大型系统的安全性变得非常复杂。我记得几年前,一位同事在一家大型工厂工作,不得不处理光幕、安全继电器和其他类似系统。使用这样的设备有很多“陷阱”! 对于这台机器,我已经为 GRBL 添加了一项功能,因此为重置输入添加状态检查可能比重新配置机器接线更容易。我为 GRBL 添加了一个功能,告诉 g 代码发送者如果机器空闲,循环启动按钮已被按下。因此,g 代码发送器将基于按下按钮开始发送程序,而不是在 g 代码发送器软件中选择“运行”。这在机器重复相同操作的生产环境中会更好。 |
在调试我的新机器时,我不小心将急停接线错误(它连接到 A0 复位输入),因此它给出了相反的信号。其结果是,只有在按下进给保持或循环启动硬件按钮时,机器才会像紧急停止一样运行。
查看代码我发现,虽然检测这些按钮的 ISR 仅在其中一个输入的状态发生变化时触发,但 ISR 函数随后会读取所有状态:
(我删除了#defines 以提高可读性)
这意味着控制器将只检测复位输入的状态变化。一旦控制器复位,即使复位引脚仍然有效,机器仍将继续运行。
我认为这是设计使然,但我宁愿看到机器在开始任何动作之前总是检查复位引脚状态。这将使基于引脚状态而不是基于转换。我还想记录这种行为,以防其他人遇到与我遇到的问题相同的问题。