ESP32 是一款功能强大的处理器,但它没有很多 I/O 引脚。它有足够的引脚来制造各种有用的 CNC 机器,但对于任何给定的机器,必须谨慎选择引脚的功能分配。一些引脚预先分配给特定功能,如串行端口和 SD 卡。一些引脚只能用于输入,还有一些引脚在启动期间具有特殊含义;它们通常可以在以后用于其他目的,但您必须考虑它们的特殊启动特性。误用特殊引脚可能会导致 ESP32 损坏或机器操作不安全。下一节详细介绍了特殊注意事项。
大多数 I/O 设置都是在机器定义文件中完成的。Machines/ 子目录中有许多这样的文件,用于您可以购买的屏蔽。Machine.h文件通过 #include 语句选择机器定义文件。您可以使用预定义的机器定义文件或自行创建。机器定义文件的主要目的是将 ESP32 I/O 引脚分配给步进控制、主轴控制、限位开关等功能,但它也可以选择配置许多其他功能,例如默认进给率。本页介绍如何制作您自己的机器定义文件,重点介绍引脚分配。
注意:所有 ESP32 I/O 引脚均为 3.3V,不能耐受 5V,并且电流能力相当低。它们不能直接驱动继电器、螺线管等。在某些情况下,它们可以直接驱动外部步进驱动器的光耦合器,但通常最好使用外部芯片或晶体管对其进行缓冲。它们可以直接驱动“Pololu 模块”步进驱动器上的控制引脚。您不得将任何 5V 信号输入 ESP32 输入 – 限位开关等必须使用 3.3V 信号。
可用的 I/O 引脚
- GPIO_NUM_2
- 一些开发板上有 LED。它作为输入效果不佳,因为 LED 会影响引脚上的电压。
- 为了进入串行引导加载程序,它必须保持未连接/浮动状态,或驱动为低电平。
- 我喜欢用它作为主轴引脚。LED 可以很好地指示主轴开启和 PWM 水平。
- GPIO_NUM_4
- GPIO_NUM_5-(由 SD 卡使用)
- GPIO_NUM_12
- GPIO_NUM_13
- GPIO_NUM_14(启动时的一些脉冲)
- GPIO_NUM_15
- GPIO_NUM_16
- GPIO_NUM_17
- GPIO_NUM_18-(由 SD 卡使用)
- GPIO_NUM_19-(由 SD 卡使用)
- GPIO_NUM_21
- GPIO_NUM_22
- GPIO_NUM_23-(由 SD 卡使用)
- GPIO_NUM_25
- GPIO_NUM_26
- GPIO_NUM_27
- GPIO_NUM_32
- GPIO_NUM_33
仅输入(无上拉/下拉)
如果您没有外部上拉或下拉电阻,请不要使用这些引脚!
- GPIO_NUM_34
- GPIO_NUM_35
- GPIO_NUM_36
- GPIO_NUM_37(通常不可用)
- GPIO_NUM_38(通常不可用)
- GPIO_NUM_39
不要使用(或不推荐)
- GPIO_NUM_0-用于引导加载程序
- GPIO_NUM_1-用于串行数据
- GPIO_NUM_3-用于串行数据
- GPIO_NUM_6-用于外部闪存
- GPIO_NUM_7-用于外部闪存
- GPIO_NUM_8-用于外部闪存
- GPIO_NUM_9-用于外部闪存
- GPIO_NUM_10-用于外部闪存
- GPIO_NUM_11-用于外部闪存
- GPIO_NUM_20 – ESP32s 上不提供此功能
- GPIO_NUM_24 – ESP32s 上不提供此功能
- GPIO_NUM_28 – ESP32s 上不提供此功能
- GPIO_NUM_29 – ESP32s 上不提供此功能
- GPIO_NUM_30 – ESP32s 上不提供此功能
- GPIO_NUM_31 – ESP32s 上不提供此功能
制作您的机器定义文件。
如果 Machines/ 子目录中的预定义机器定义文件均不适合您机器,您可以自行创建。您可以从头开始,但复制类似的现有文件并对其进行编辑以反映您的更改可能更容易。选择一个可识别您机器的新文件名。各种预定义文件可作为如何处理各种情况的示例,例如附加轴 (Machines/foo_6axis.h)、外部步进驱动器 (Machines/external_driver_4x.h)、Triaminic SPI 驱动器 (spi_daisy_4axis.h) 等。
创建一个新的机器定义文件后,您可以通过在 machine.h 中添加如下行来使用它:
#包括“机器/my_machine.h”
影响 I/O 引脚的可选功能
SD 卡
SD 卡使用 4 个 GPIO 引脚。目前仅支持上述引脚。您可以通过注释掉 config.h 中的 #define ENABLE_SD_CARD 来释放所有这些引脚(这是一个不受机器定义文件控制的配置选择示例)。
冷却液
洪水和雾控制是输出信号,可用于通过屏蔽上的合适外部驱动电路驱动继电器电路。要使用它们,请在机器定义文件中包括这样的行以选择分配的引脚。
#定义 COOLANT_MIST_PIN GPIO_NUM_21
#定义 COOLANT_FLOOD_PIN GPIO_NUM_25
您可以定义其中一个引脚,或两个引脚都定义,或两个引脚都不定义。如果其中一个引脚未定义,则尝试使用相应功能将导致无效 gcode 错误。
主轴
要控制主轴,请像这样分配引脚:
#定义主轴输出引脚GPIO_NUM_25
#定义主轴启用引脚 GPIO_NUM_22
#定义主轴方向引脚 GPIO 编号 18
最重要的是 SPINDLE_OUTPUT_PIN。如果未定义,Grbl_ESP32 仍会表现得像它有主轴,但不会输出主轴信号。这可以帮助不使用主轴的笔式绘图仪等机器。
大多数机器通常不使用主轴启用和方向,但可以通过为其分配引脚来启用。如果未定义 SPINDLE_DIR_PIN,则不支持 M4 命令(但当 Grbl 设置为激光模式时,M4 不表示主轴方向,而是运动相关的激光功率)。
所有主轴都是可变速的。如果您使用开/关主轴,只需将 $30 最大 RPM 设置设置为 1。这意味着任何 RPM 都将全速运行。
轴数
默认情况下,Grbl_ESP32 设置了 3 个轴,X、Y 和 Z。您可以配置更多轴,最多 6 个,如下所示:
#如果定义 N_AXIS
#undef N_AXIS
#结束
#定义 N_AXIS 5
如果您的机器轴数少于 3 个,请不要设置 N_AXIS,而是将其保留不变,默认为 3 个轴,并且不要为未使用的轴定义引脚(见下文)。 Grbl 将简单地忽略(不输出信号)没有引脚的轴上的运动。
步骤和方向引脚
步进电机的步进和方向引脚分配如下:
#定义 X_STEP_PIN GPIO_NUM_26
#定义 X_DIRECTION_PIN GPIO_NUM_16
#定义 Y_STEP_PIN GPIO_NUM_25
#定义 Y_DIRECTION_PIN GPIO_NUM_27
#定义 Z_STEP_PIN GPIO_NUM_17
#定义 Z_DIRECTION_PIN GPIO_NUM_14
您可以通过仅为机器实际使用的轴定义引脚来释放引脚以用于其他用途。对于未定义引脚的任何轴 X、Y 和 Z,Grbl 仍将接受引用这些轴的 GCode,但不会输出信号。例如,这可以用于业余伺服驱动轴。
联动轴和轴方位
许多 CNC 机床在一个或多个轴上使用双电机。例如,龙门机床通常在移动龙门架的两侧各有一个单独的电机,两个电机通常同步移动。在某些情况下,您可以在硬件中将它们组合在一起,因此单个步进/方向引脚对可以同时控制两个电机。在其他情况下,您可能需要分别控制电机以在归位期间调整轴。
平方使用电机和归位开关分别归位每个电机。为了减少所需的 I/O 引脚数量,有一个特殊的技巧。每个轴使用两个步进引脚,但只有一个归位开关引脚和一个方向引脚。每个电机都有自己的归位开关,但它们连接到同一个 I/O 引脚。归位序列将两个电机驱动到开关。一旦触摸一个开关,每个电机就会分别归位。只要开关是方形的,轴现在就应该是方形的。$1 设置(步进空闲延迟)应设置为 255,以防止电机关闭,从而保持电机保持的方形。如果电机关闭,机械系统中的残余应力可能会导致轴“松弛”而不成方形。
请参阅 Machines/mpcnc.h 作为联动设置的示例。