开源改变世界

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895

推推 grbl 3年前 (2023-01-30) 233次浏览
关闭
Protoneer 打开了这个问题 2021 年 5 月 12 日 · 8条评论
关闭

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误#895

Protoneer 打开了这个问题 2021 年 5 月 12 日 · 8条评论

注释

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895

您使用的是什么版本的固件?最新
问题是否可重复?是的

什么情况下会出现bug?

设置机器文件如下:

#define SPINDLE_TYPE            SpindleType::PWM
#define SPINDLE_OUTPUT_PIN      GPIO_NUM_2
#define SPINDLE_ENABLE_PIN      I2SO(28)
#define SPINDLE_DIR_PIN         I2SO(29)

Arduino错误

C:\Users\IT\AppData\Local\Temp\arduino_build_548812\sketch\src\Spindles\10vSpindle.cpp: In member function 'virtual void Spindles::_10v::deinit()':
C:\Users\IT\AppData\Local\Temp\arduino_build_548812\sketch\src\Spindles\10vSpindle.cpp:177:42: error: invalid conversion from 'int' to 'gpio_num_t' [-fpermissive]
         gpio_reset_pin(SPINDLE_ENABLE_PIN);
                                          ^
In file included from C:\Users\IT\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.5/tools/sdk/include/esp32/esp_sleep.h:19:0,
                 from C:\Users\IT\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.5/tools/sdk/include/esp32/esp_system.h:21,
                 from C:\Users\IT\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.5/tools/sdk/include/freertos/freertos/portable.h:128,
                 from C:\Users\IT\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.5/tools/sdk/include/freertos/freertos/FreeRTOS.h:105,
                 from C:\Users\IT\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.5\cores\esp32/Arduino.h:32,
                 from c:\users\it\appdata\local\temp\arduino_build_548812\sketch\src\grbl.h:28,
                 from C:\Users\IT\AppData\Local\Temp\arduino_build_548812\sketch\src\Spindles\Spindle.h:44,
                 from C:\Users\IT\AppData\Local\Temp\arduino_build_548812\sketch\src\Spindles\PWMSpindle.h:24,
                 from C:\Users\IT\AppData\Local\Temp\arduino_build_548812\sketch\src\Spindles\10vSpindle.h:29,
                 from C:\Users\IT\AppData\Local\Temp\arduino_build_548812\sketch\src\Spindles\10vSpindle.cpp:27:
C:\Users\IT\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.5/tools/sdk/include/driver/driver/gpio.h:261:11: note:   initializing argument 1 of 'esp_err_t gpio_reset_pin(gpio_num_t)'
 esp_err_t gpio_reset_pin(gpio_num_t gpio_num);

对于 SPINDLE_ENABLE_PIN 和以下函数 virtual void Spindles::PWM::deinit() 重复上述错误

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895 Protoneer 添加了 漏洞 有些东西不工作标签 2021 年 5 月 12 日
将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895
作者
质子 评论了 2021 年 5 月 13 日  

目前看来这些引脚只能设置为 ESP 引脚,而不能设置为 I2SO 引脚。

…10vSpindle.cpp:177:42: 错误:从“int”到“gpio_num_t”的无效转换
只是寻找使用 I2SO 的示例。或许能使它可用…

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895
合作者
米奇布拉德利 评论了 2021 年 5 月 13 日  

我怀疑在 ENABLE_PIN 和 DIR_PIN 情况下不需要调用 gpio_reset_pin。在它们之后的 pinMode(,,,, INPUT) 调用可能就足够了。

gpio_reset_pin() 可能是必要/有用的情况是用于 OUTPUT_PIN,因为它与 LEDC 控制器一起用于执行 PWM。在 deinit() 中,gpio_reset_pin() 会将其与 LEDC 控制器分离。

因此,我会尝试为除 *_OUTPUT_PIN 之外的所有内容删除对 gpio_reset_pin() 的调用。I2S0 无论如何都不能用于 OUTPUT_PIN,因为只有 GPIO 可以连接到 LEDC 控制器。

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895
作者
质子 评论了 2021 年 5 月 13 日  

我怀疑在 ENABLE_PIN 和 DIR_PIN 情况下不需要调用 gpio_reset_pin。在它们之后的 pinMode(,,,, INPUT) 调用可能就足够了。

gpio_reset_pin() 可能是必要/有用的情况是用于 OUTPUT_PIN,因为它与 LEDC 控制器一起用于执行 PWM。在 deinit() 中,gpio_reset_pin() 会将其与 LEDC 控制器分离。

因此,我会尝试为除 *_OUTPUT_PIN 之外的所有内容删除对 gpio_reset_pin() 的调用。I2S0 无论如何都不能用于 OUTPUT_PIN,因为只有 GPIO 可以连接到 LEDC 控制器。

谢谢…我们正在取得进展。

我能够从以下开始:

#define SPINDLE_TYPE            SpindleType::PWM
#define SPINDLE_OUTPUT_PIN      GPIO_NUM_2

我按照建议删除了 gpio_reset_pin() ……并且能够编译:

[MSG:PWM spindle Output:GPIO(2), Enbl:I2SO(28), Dir:I2SO(29), Freq:5000Hz, Res:1 3bits]

然而,spindle_enable_pin 做了一些奇怪的事情……当 GRBL 处于空闲状态时,当我运行 X1000 时它读取 0V,它在 2 和 3V 之间振荡。

对于我使用的冷却针:

#define COOLANT_MIST_PIN        I2SO(30)

这在空闲或运行模式下非常稳定。

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895
所有者

I2S0 引脚最初用于驱动步进电机。它们也可用于开/关信号(无 PWM)。

我们没有考虑将它们用于 PWM 主轴,但它们应该可以用于 Enable 和 Dir 用途。这gpio_reset_pin(...)会导致问题。它要么需要为那些引脚移除,要么需要抽象化以与所有引脚类型兼容。

我注释掉了那个函数并运行了这个设置。

#define SPINDLE_TYPE            SpindleType::PWM
#define SPINDLE_OUTPUT_PIN      GPIO_NUM_26
#define SPINDLE_ENABLE_PIN      I2SO(24)
#define SPINDLE_DIR_PIN         I2SO(25)

它运作良好。这是我的逻辑分析仪捕获的 M3S100 (10%)。使能信号在我的设置中是稳定的。

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895

I2SO(28) 上的 SPINDLE_ENABLE_PIN“振荡”表明移位寄存器芯片和测量点之间某处连接不良。销上有负载吗?如果坏接的猜测是正确的,那么增加负载将消除振荡,电压将始终为 0。

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895
作者

I2S0 引脚最初用于驱动步进电机。它们也可用于开/关信号(无 PWM)。
@bdring 我同意并且我只会将 I2SO 引脚用于开/关输出。

@MitchBradley我将再次检查连接。10K 下拉是否适合负载?

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895

10k 下拉足以检测开路负载。您也可以直接在移位寄存器引脚上进行探测。如果引脚和电路板之间的焊点不良,有时探测引脚会“解决”问题。探针将引脚向下推,使其更好地接触焊盘。不过,这样的修复不会持久。您需要回流焊料以正确恢复连接。

将 I2SO 与 SPINDLE_DIR_PIN 和 SPINDLE_ENABLE_PIN 一起使用会产生转换错误 #895
作者

I2SO(28) 上的 SPINDLE_ENABLE_PIN“振荡”表明移位寄存器芯片和测量点之间某处连接不良。销上有负载吗?如果坏接的猜测是正确的,那么增加负载将消除振荡,电压将始终为 0。

发现!!!我的螺丝连接器有点松。

一切正常!!!谢谢