开源改变世界

如何反转选择控制引脚 #84

推推 grbl 2年前 (2023-01-29) 286次浏览
关闭
109JB 开了这个issue 2019 年 2 月 2 日 · 5 条评论
关闭

如何反转选择控制引脚#84

109JB 开了这个issue 2019 年 2 月 2 日 · 5 条评论

注释

如何反转选择控制引脚 #84

所以我准备将我的 AVR Grbl 换成 ESP32 Grbl,并将其用于我拥有的 CNC 改装铣床。我有一件事我想做,但由于我缺乏 C 编程知识,我不知道该怎么做。我想要做的是反转安全门输入引脚而不是其他控制引脚。在 AVR Grbl 中,Config.h 文件具有以下允许这样做的内容:

//根据掩码反转控制命令引脚的引脚逻辑。这实质上意味着您可以
在指定的引脚上使用 // 常闭开关,而不是默认的常开开关。
// 注意:顶部选项将屏蔽和反转所有控制引脚。底部选项是
// 仅反转两个控制引脚、安全门和复位的示例。有关其他位定义,请参见 cpu_map.h。
// #define INVERT_CONTROL_PIN_MASK CONTROL_MASK // 默认禁用。取消注释以禁用。
// #define INVERT_CONTROL_PIN_MASK ((1<<CONTROL_SAFETY_DOOR_BIT)|(1<<CONTROL_RESET_BIT)) // 默认禁用。

我看到在 ESP32 Grbl 中,这已经改变了,我在 cpu_map.h 中看到了以下注释

与 AVR 版本不同,某些引脚不会强制进入同一端口。
因此,位掩码的使用方式不同,通常不应
更改。它们现在被保存下来,以便于
与 AVR grbl保持同步

那么,目前有没有一种方法可以只反转选择的控制引脚而不反转其他的?

如何反转选择控制引脚 #84
所有者

控制引脚输入可以是任何 IO 引脚。当它们被读取时,它们组合成一个状态字节。system.h 定义位…

#define CONTROL_PIN_INDEX_SAFETY_DOOR   bit(0)
#define CONTROL_PIN_INDEX_RESET         bit(1)
#define CONTROL_PIN_INDEX_FEED_HOLD     bit(2)
#define CONTROL_PIN_INDEX_CYCLE_START   bit(3)

system.cpp 在读取引脚的函数中有这个

#ifdef INVERT_CONTROL_PIN_MASK
    control_state ^= INVERT_CONTROL_PIN_MASK;
#endif  

在 config.h 中你可以像这样定义掩码……

#define INVERT_CONTROL_PIN_MASK  (1<<CONTROL_PIN_INDEX_SAFETY_DOOR) 

.. 或者用“|”将更多的别针组合在一起

我还没有听到这样做的人的反馈,所以希望一切正常。

顺便说一句:当我最近配置机器时,我在 cpu_map.h 中放置了很多定义。这样可以更轻松地在一处保留尽可能多的更改。

如何反转选择控制引脚 #84
作者

谢谢。我会试一试,让你知道进展如何。我尝试对其进行测试,但我认为我遇到了某种 IDE 问题,因为在更改 config.h 上的一行后,它告诉我该程序超出了 esp32 的内存容量。一旦我完成排序,我就可以测试控制引脚掩码。

如何反转选择控制引脚 #84
作者

为此更新:

我尝试将 config.h 中的反转控制引脚掩码更改为

 #define INVERT_CONTROL_PIN_MASK  (1<<CONTROL_PIN_INDEX_SAFETY_DOOR)

但这没有用。据我所知,它几乎没有做任何事情。所以我做了一些搜索,并在底部的 cpu_map.h 中找到了这一行:

 #define INVERT_CONTROL_PIN_MASK   B1110		// don't change 

即使它说“不要改变”,我还是把它改成了

 #define INVERT_CONTROL_PIN_MASK   B1111		// don't change 

它适用于反转安全门销。在我看来,您修改了它,也许忘记了它。经过一些试验,我发现这个面具的顺序是:

 Cycle Start | Feed Hold | Reset | Safety Door

这是你的项目,由你决定,但我建议将任何这样的设置移动到 config.h,比其他任何东西都更能保持与 AVR Grbl 设置方式的一致性。对于控制引脚掩码,我会在 config.h 中放置类似这样的内容:

 // Inverts pin logic of the control command pins based on a mask. This essentially means you can use
 // normally-closed switches on the specified pins, rather than the default normally-open switches.
 // The mask order is Cycle Start | Feed Hold | Reset | Safety Door
 // For example B1101 will invert the function of the Reset pin.
  #define INVERT_CONTROL_PIN_MASK  B1111

我在 WebUI 分支中为上述内容(我的第一个)创建了一个拉取请求,您可以考虑加入。由于这是我的第一个拉取请求,如果您能告诉我我是否做对了,我将不胜感激。

如果您不接受拉取请求,至少我会将 cpu_map.h 中的“不要更改”注释替换为掩码如何像上面那样工作的描述。

我还在 cpu_map.h 中看到了探针引脚掩码,但我认为这很好,因为可以在 EEPROM 设置中反转探针引脚。

如何反转选择控制引脚 #84
作者

好吧,我想我对拉取请求做错了什么,因为修改的第二个文件没有通过。我还从 cpu_map.h 中删除了掩码,它没有出现在拉取请求中。我原以为拉取请求会将我分支中的所有文件与您的进行比较,并包括对拉取请求的所有更改。你知道我做错了什么吗?

如何反转选择控制引脚 #84
所有者

感谢您为此所做的所有工作。

我想我本来是不支持INVERT_CONTROL_PIN_MASK的,后来没清理笔记。

我会负责进行更改。我不知道你出了什么问题。