设置 I/O 引脚
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 – 这在 ESP32 上不可用
- GPIO_NUM_24 – 这在 ESP32 上不可用
- GPIO_NUM_28 – 这在 ESP32s 上不可用
- GPIO_NUM_29 – 这在 ESP32s 上不可用
- GPIO_NUM_30 – 这在 ESP32 上不可用
- GPIO_NUM_31 – 这在 ESP32 上不可用
制作您的机器定义文件。
如果 Machines/ 子目录中没有任何预定义的机器定义文件适合您的机器,您可以创建自己的机器定义文件。您可以从头开始,但复制一个相似的现有文件并对其进行编辑以反映您的更改可能更容易。选择一个新的文件名来标识您的机器。各种预定义文件可以作为如何处理各种情况的示例,例如附加轴 (Machines/foo_6axis.h)、外部步进驱动程序 (Machines/external_driver_4x.h)、Triaminic SPI 驱动程序 (spi_daisy_4axis.h) 等。
创建了一个新的机器定义文件后,您可以通过在 machine.h 中放置如下一行来使用它:
#include "Machines/my_machine.h"
影响 I/O 引脚的可选特性
SD卡
SD 卡使用 4 个 GPIO 引脚。它们目前仅在上面列出的引脚上受支持。您可以通过在 config.h 中注释掉#define ENABLE_SD_CARD 来释放所有这些引脚(这是不受机器定义文件控制的配置选择示例)。
冷却液
洪水和雾气控制是输出信号,可用于通过屏蔽上合适的外部驱动电路驱动继电器电路。要使用它们,请在您的机器定义文件中包含这样的行以选择分配的引脚。
#define COOLANT_MIST_PIN GPIO_NUM_21
#define COOLANT_FLOOD_PIN GPIO_NUM_25
您可以定义任一引脚,或同时定义两者,或两者都不定义。如果其中一个引脚未定义,尝试使用相应的功能将导致无效的 gcode 错误。
主轴
要控制主轴,请像这样分配引脚:
#define SPINDLE_OUTPUT_PIN GPIO_NUM_25
#define SPINDLE_ENABLE_PIN GPIO_NUM_22
#define SPINDLE_DIR_PIN GPIO_NUM_18
最重要的一个是 SPINDLE_OUTPUT_PIN。如果没有定义,Grbl_ESP32 仍然会表现得像它有一个主轴,但不会输出主轴信号。这可以帮助不使用主轴的笔式绘图仪等机器。
大多数机器通常不使用主轴启用和方向,但可以通过为它们分配一个引脚来启用。如果未定义 SPINDLE_DIR_PIN,则不支持 M4 命令(除了当 Grbl 设置为激光模式时,M4 并不表示主轴方向,而是与运动相关的激光功率)。
所有主轴都是变速的。如果您使用开/关主轴,只需将 30 美元的最大 RPM 设置设置为 1。这意味着任何 RPM 都将全开。
轴数
默认情况下,Grbl_ESP32 设置为 3 个轴,X、Y 和 Z。您可以配置更多轴,最多 6 个,如下所示:
#ifdef N_AXIS
#undef N_AXIS
#endif
#define N_AXIS 5
如果您的机器少于 3 个轴,请不要设置 N_AXIS,而是保留它,默认为 3 个轴,并且不要为未使用的轴定义引脚(见下文)。Grbl 将简单地忽略(不输出信号)在没有引脚的轴上的运动。
步进和方向引脚
步进电机的步进和方向引脚分配有如下行:
#define X_STEP_PIN GPIO_NUM_26
#define X_DIRECTION_PIN GPIO_NUM_16
#define Y_STEP_PIN GPIO_NUM_25
#define Y_DIRECTION_PIN GPIO_NUM_27
#define Z_STEP_PIN GPIO_NUM_17
#define Z_DIRECTION_PIN GPIO_NUM_14
您可以通过仅为您的机器实际使用的轴定义引脚来释放引脚用于其他用途。对于任何未定义引脚的 X、Y 和 Z 轴,Grbl 仍将接受引用这些轴的 GCode,但不会输出信号。例如,这可以用于爱好伺服驱动轴。
联动轴和轴平方
许多数控机床在一个或多个轴上使用双电机。例如,龙门机器通常在移动的龙门架的每一侧都有一个单独的电机,这两个电机通常同步移动。在某些情况下,您可以在硬件中组合这些,因此单个步进/方向引脚对同时控制两个电机。在其他情况下,您可能希望单独控制电机以在归位期间使轴成直角。
Squaring 使用电机和归位开关分别对每个电机进行归位。为了减少所需的 I/O 引脚数量,有一个特殊的技巧。每个轴使用两个步进引脚,但只有一个原点开关引脚和一个方向引脚。每个电机都有自己的主开关开关,但它们连接到相同的 I/O 引脚。归位序列驱动两个电机朝向开关。一触动一个开关,每台电机就会分别回家。只要开关是方形的,轴现在应该是方形的。$1 设置(步空闲延迟)应设置为 255 以防止电机关闭,从而保持电机保持的垂直度。如果电机关闭,机械系统中的残余应力可能会导致轴“松弛”不成正方形。
请参阅 Machines/mpcnc.h 作为联合设置的示例。