概述
Grbl_ESP32 中的主轴在 Grbl_ESP 中与 Grbl (Arduino) 中的编码有很大不同。为每种主轴类型定义了类别。这允许创建新主轴的简单方法和供 Grbl 使用的标准接口。主轴有很多#defines 和$$ 设置。您使用的主轴可能只使用其中的几个。例如,如果您使用继电器控制主轴,则忽略与 RPM 相关的设置。有关每种类型的详细信息,请参见下文
只要在您的机器定义中定义了所有必需的 I/O,您就可以在主轴类型之间动态切换。例如:您可以在机器上安装一个主轴和一个激光器,并且无需重新编译甚至重新启动即可在它们之间切换。
什么是主轴?
Grbl 中的主轴这个词可以表示很多东西。标准 gcode 不支持激光之类的东西,所以 Grbl_ESP32 使用M3(顺时针主轴)、M4(逆时针主轴)、M5(主轴关闭)和Snnnn(将 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
许多主轴速度控制电路使用 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
- $激光/全功率=nnnn。这设置了用于 PWM 的全功率数。$Laser/FullPower=100 表示你的功率范围是 0-100。
主轴类型::DAC
一些主轴速度控制器具有模拟输入。该模式使用 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主轴
主轴类型::_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 串行连接与 Huanyang VFD(一种非常流行的中国 VFD)对话。它可以控制主轴转动的速度和方向。ESP32 可以产生信号,但不能产生 RS485 所需的差分电压。需要使用 3.3V TTL 转 RS485。MAX485CSA 对此非常适用。Type **HUANYANG ** 是他们的原始协议,HY2是 Huanyang 的最新协议。
- 必需的
#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
主轴类型::HY2
主轴型号::YL620
主轴类型::BESC
这是一款RC型无刷直流调速器。它使用特殊的 PWM 信号来控制电机的速度。电机非常强大,成本低。但实际速度可能不是很准确。
示例机器定义
#define SPINDLE_TYPE SpindleType::BESC
#define SPINDLE_OUTPUT_PIN GPIO_NUM_26