Grbl_ESP32 中的主轴编码与 Grbl (Arduino) 中的主轴编码有很大不同。每种主轴类型都有定义的类。这允许使用简单的方法来创建新的主轴,并为 Grbl 提供一个标准接口。主轴有很多 #define 和 $$ 设置。您使用的主轴可能只使用其中的几个。例如,如果您使用继电器来控制主轴,则 RPM 相关设置将被忽略。有关每种类型的详细信息,请参阅下文
只要在机器定义中定义了所有必需的 I/O,您就可以动态地在主轴类型之间切换。例如:您可以在机器上安装主轴和激光器,并在两者之间切换,而无需重新编译甚至重新启动。
Grbl 中的主轴一词可以表示多种含义。标准 gcode 不支持激光之类的东西,因此 Grbl_ESP32 使用M3(顺时针开启主轴)、M4(逆时针开启主轴)、M5(关闭主轴)和Snnnnn(将 rpm 设置为 nnnnn)来控制许多工具。这些可以是基于开/关继电器的主轴、PWM 速度控制主轴、RC 型无刷速度控制器、RS485 VFD、激光等。我们可以轻松添加其他东西,例如热线和其他东西。
注意:目前,当您在任何地方看到 RPM 时,它指的是 gcode Snnnnn 值。当用于激光器等时,它可能意味着不同的东西。只需将其视为您正在使用的工具的适当单位即可。
主轴在您的机器定义文件中定义。您需要定义的 I/O 引脚取决于您选择的主轴类型。主轴类型由$Spindle/Type选择,您可以使用#define SPINDLE_TYPE SpindleType::XXXXX ` 语句在机器定义文件中设置默认值。如果您未定义任何内容,它将默认为 None 主轴。以下是当前可用的类型。
#define SPINDLE_TYPE SpindleType::NONE
#define SPINDLE_TYPE SpindleType::PWM
#define SPINDLE_TYPE SpindleType::RELAY
#define SPINDLE_TYPE SpindleType::LASER
#define SPINDLE_TYPE SpindleType::DAC
#define SPINDLE_TYPE SpindleType::HUANYANG // RS485
#define SPINDLE_TYPE SpindleType::BESC
#define SPINDLE_TYPE SpindleType::_10V
#define SPINDLE_TYPE SpindleType::H2A // RS485
当 Grbl_ESP32 启动时,它会向 USB/串行端口发送一些消息。它会告诉您哪种主轴类型处于活动状态。如果您的机器定义文件中缺少任何引脚定义,它也会发送有关该内容的错误消息。
以下是每种主轴类型的详细信息。
主轴有许多设置。请参阅下文,了解每种主轴类型使用的设置。您的主轴类型未使用的设置将显示并可更改,但会被忽略。必须关闭主轴 (M5) 才能更改任何主轴设置。更改设置后,它将重新初始化您的主轴。
如果您的机器不需要主轴,例如笔式绘图仪,请选择此类型。#define SPINDLE_TYPE SpindleType::NONE
它不会使用任何 I/O。如果未定义 I/O,它将默认为此类型。
许多主轴速度控制电路使用 PWM 信号来设置速度。以下是您在机器定义文件中需要的内容。
- 必需的
#define SPINDLE_TYPE SpindleType::PWM
- 必填
#define SPINDLE_OUTPUT_PIN GPIO_NUM_nn
,其中 nn 是引脚编号。这是连接到速度控制器上的 PWM 输入的引脚。 #define SPINDLE _ENABLE_PIN GPIO_NUM_nn
如果您想要主轴使能信号,则是可选的。#define SPINDLE_DIRECTION_PIN GPIO_NUM_nn
如果您需要方向信号,则可选。- $GCode/MaxS最大主轴速度。此值用于将 PWM 占空比与所需的 RPM 相匹配。如果您将其设置为 1000 并发送 S500,它会将占空比设置为 50%。如果您发送 S1500,它会将您的值更改为 1000。
- $GCode/MinS这是最低 RPM。如果您的主轴在 200 RPM 以下无法正常工作,请设置 $31=200。如果您发送低于 200 的 S 值,它会将速度设置为 200。
- $Spindle/PWM/Frequency主轴 PWM 频率。此项设置 PWM 信号的频率。
- $Spindle/PWM/Off主轴 PWM 关闭值。通常设置为 0。PWM 值以占空比的百分比设置。
- $Spindle/PWM/Min主轴 PWM 最小值通常设置为 0。
- $Spindle/PWM/Max主轴 PWM 最大值。通常设置为 100。
如果您使用继电器来打开主轴,则只需要一个开/关信号。意外的 PWM 信号可能会损坏继电器。ESP32 没有足够的电流来直接驱动继电器。您应该为此使用驱动电路。以下是您在机器定义文件中需要的设置。
- 必需的
#define SPINDLE_TYPE SpindleType::RELAY
- 必填
#define SPINDLE_OUTPUT_PIN GPIO_NUM_nn
,其中 nn 是引脚编号。这是连接到继电器电路的引脚。 #define SPINDLE _ENABLE_PIN GPIO_NUM_nn
如果您想要一个启用信号,则是可选的。#define SPINDLE_DIRECTION_PIN GPIO_NUM_nn
如果您需要方向信号,则可选。
因为它是一个开/关信号,所以大多数 $$ 主轴设置将被忽略。
激光基本上是一个带有一些额外功能的 PWM 主轴。当机器快速移动或暂停时,您希望它关闭。它还可以执行速度补偿功能。如果您正在雕刻,您希望激光在加速或减速时按比例降低功率。使用 M4 命令(通常用于逆时针旋转)来启用此功能。
- 选修的
#define SPINDLE_TYPE SpindleType::LASER
- 必填项
#define LASER_OUTPUT_PIN GPIO_NUM_nn
,其中 nn 是引脚编号。 #define LASER_ENABLE_PIN GPIO_NUM_nn
如果您想要一个启用信号,则是可选的。- 大多数 PWM 设置也适用
- $GCode/LaserMode设置 $GCode/LaserMode=1 为激光模式
- $Laser/FullPower=nnnn。这将设置用于 PWM 的满功率数。$Laser/FullPower=100 表示您的功率范围是 0-100。
一些主轴速度控制器具有模拟输入。此模式使用 ESP32 上的 DAC(数字到模拟)输出模拟信号。您可能需要通过运算放大器运行输出,以将 ESP32 的 0-3.3V 范围放大到速度控制器所需的 0-5V 或 0-10V 范围。
- 必需的
#define SPINDLE_TYPE SpindleType::DAC
- 必填
#define SPINDLE_OUTPUT_PIN GPIO_NUM_nn
,其中 nn 是引脚编号。这是连接到继电器电路的引脚。 #define SPINDLE _ENABLE_PIN GPIO_NUM_nn
如果您想要一个启用信号,则是可选的。#define SPINDLE_DIRECTION_PIN GPIO_NUM_nn
如果您需要方向信号,则可选。- $GCode/MaxS , $GCode/MinS请参阅 PWM 模式
- $Spindle/PWM/Frequency、$Spindle/PWM/Off和$Spindle/PWM/Min、Spindle/PWM/Max不适用。
这是一个典型的运算放大器电路,可以将 3.3v 升压到更高的电压。此电路的增益为 3.2。互联网上有很多运算放大器资源,包括计算器。
注意:DAC 的分辨率只有 8 位。如果您需要更高的分辨率,可以考虑使用_10V主轴
0-10V 是一种常见的工业控制信号,通常由 VFD 和速度控制器使用。它使用 3.3V PWM 信号,因此您需要使用与上述电路类似的电路来提高电压。为了实现完全控制,VFD 通常需要 0-10V 信号以及单独的正向和反向信号。此类型支持这一点。
- 必需的
#define SPINDLE_TYPE SpindleType::_10V
- 必填
#define SPINDLE_OUTPUT_PIN GPIO_NUM_nn
,其中 nn 是引脚编号。这是连接到速度控制器上的 PWM 输入的引脚。 #define SPINDLE _ENABLE_PIN GPIO_NUM_nn
如果您想要主轴使能信号,则是可选的。#define SPINDLE_FORWARD_PIN GPIO_NUM_nn
如果您想要前向信号,则可选。#define SPINDLE_REVERSE_PIN GPIO_NUM_nn
如果您需要反向方向信号,则可选。
此主轴模式使用 RS485 串行连接与华阳 VFD(一种非常流行的中国 VFD)通信。它可以控制主轴的速度和转动方向。ESP32 可以创建信号,但不能创建 RS485 所需的差分电压。需要使用 3.3V TTL 到 RS485。MAX485CSA 非常适合此用途。类型 **HUANYANG ** 是其原始协议,HY2是华阳的最新协议。
- 必需的
#define SPINDLE_TYPE SpindleType::HUANYANG
- 必需,
#define HUANYANG_TXD_PIN GPIO_NUM_nn
这是传输数据引脚。 - 可选
#define SPINDLE_RXD_PIN GPIO_NUM_nn
这是接收数据引脚。 - 可选
#define HUANYANG_RTS_PIN GPIO_NUM_nn
此引脚控制数据是否正在发送或接收。
您还需要确保 VFD 设置正确。按如下方式设置寄存器。
PD004 400 Base frequency as rated on my spindle (default was 50)
PD005 400 Maximum frequency Hz (Typical for spindles)
PD011 120 Min Speed (Recommend Aircooled=120 Water=100)
PD014 10 Acceleration time (Test to optimize)
PD015 10 Deceleration time (Test to optimize)
PD023 1 Reverse run enabled
PD141 220 Spindle max rated voltage
PD142 3.7 Max current Amps (0.8kw=3.7 1.5kw=7.0, 2.2kw=??)
PD143 2 Poles most are 2 (I think this is only used for RPM calc from Hz)
PD144 3000 Max rated motor revolution at 50 Hz => 24000@400Hz = 3000@50HZ
PD001 2 RS485 Control of run commands
PD002 2 RS485 Control of operating frequency
PD163 1 RS485 Address: 1 (Typical. OK to change...see below)
PD164 1 RS485 Baud rate: 9600 (Typical. OK to change...see below)
PD165 3 RS485 Mode: RTU, 8N1
这是 RC 型无刷直流速度控制器。它使用特殊的 PWM 信号来控制电机的速度。电机非常强劲,而且成本低廉。但实际速度可能不太准确。
机器定义示例
#define SPINDLE_TYPE SpindleType::BESC
#define SPINDLE_OUTPUT_PIN GPIO_NUM_26