CNDY Shield GRBL CNC Arduino UNO 用户指南

V1.2

CNDY 护盾 GRBL CNC

Arduino Uno 上的 GRBL 引脚排列

模拟 0 = 中止按钮*
模拟 1 = 进给保持按钮*(SAFETY_DOOR 与进给保持共享。由配置定义启用)
模拟 2 = 循环启动/重启按钮*
模拟3 = 冷却液启用输出
模拟4 = (选修的) 雾冷却液输出 (或 ALARM_STATE 诊断灯**)
模拟 5 = 探头输入*
数字 13 = 主轴方向
数字 12 = Z 轴限位开关*
数字 11 = 主轴/激光启用 PWM
数字 10 = Y 轴限位开关*
数字 9 = X 轴限位开关*
数字 8 = 步进电机启用/禁用
数字 7 = 方向 Z 轴
数字 6 = Y 轴方向
数字 5 = X 轴方向
数字 4 = 步进脉冲 Z 轴
数字 3 = 步进脉冲 Y 轴
数字 2 = 步进脉冲 X 轴

可选双轴功能

Uno 模拟引脚 3 = A 轴 DUAL_DIRECTION(用于冷却液启用输出)
Uno 模拟引脚 4 = A 轴 DUAL_STEP(以前是可选的雾冷却液输出)
Uno Digital 13 = 冷却液(更换主轴方向。)

在 Arduino 中将 grbl 存储库安装为库后,取消注释 config.h 中的以下几行 file 在 grbl 库文件夹中。

#define ENABLE_DUAL_AXIS // 默认禁用。 取消注释以启用.

// 选择一个轴来镜像另一个电机。 目前仅支持 X 和 Y 轴。
#define DUAL_AXIS_SELECT Y_AXIS // 必须是 X_AXIS 或 Y_AXIS

注意:双轴限制与 (Z轴) 默认限制引脚。

双轴功能需要一个独立的步进脉冲引脚来操作。 独立的方向销不是绝对必要的,但可以通过 Grbl $$ 设置轻松进行方向反转。 这些销取代了主轴方向和可选的冷却液雾销。

这种可选的双轴功能主要用于归位循环,以独立定位双电机龙门架的两侧,即自平方。 这需要为克隆电机设置一个额外的限位开关。 为了自方,克隆轴上的两个限位开关必须在物理上定位以在龙门为方时触发。 强烈建议保持电机始终启用,以确保机架与 $1=255 设置保持一致。

对于 Arduino Uno 上的 Grbl,由于缺少可用引脚,克隆的轴限位开关必须与 z 轴限位引脚共享并连接。 归位循环必须在不同的循环中归位 z 轴和克隆轴,这已经是默认配置。

双轴功能的工作原理是将轴步进输出克隆到另一对步进和方向销上。 克隆电机的步进脉冲和方向可以独立于主轴电机设置。 然而,为了节省宝贵的闪存和内存,此双轴功能必须与母电机共享相同的设置(步/毫米、最大速度、加速度)。 这不是独立第四轴的功能。 只有一个电机克隆。

警告:确保测试双轴电机的方向! 在运行您的第一个归位循环或任何长运动之前,它们必须设置为向同一方向移动! 电机以相反方向运动会严重损坏您的机器! 使用此双轴功能需您自担风险。

注意:此功能需要大约 400 字节的闪存。 某些配置可能会耗尽闪存以适应 Arduino 328p/Uno。 仅支持 X 和 Y 轴。 支持可变主轴/激光模式,但仅适用于一种配置选项。 核心 XY、主轴方向销和 M7 雾状冷却剂被禁用/不支持。

为防止归位循环摇晃双轴,当一个限位因开关故障或噪音而先于另一个触发时,如果第二个电机的限位开关未在以下定义的三个距离参数内触发,归位循环将自动中止。 轴长度百分比将自动计算失败距离作为百分比tag另一个非双轴最大行程的 e,即如果双轴选择是 X_AXIS 为 5.0%,则故障距离将计算为 y 轴最大行程的 5.0%。 最大失效距离和最小失效距离是有效失效距离多远或少的限制。

#define DUAL_AXIS_HOMING_FAIL_AXIS_LENGTH_PERCENT 5.0 // 浮点数(百分比)
#define DUAL_AXIS_HOMING_FAIL_DISTANCE_MAX 25.0 // 浮点数(毫米)
#define DUAL_AXIS_HOMING_FAIL_DISTANCE_MIN 2.5 // 浮点数(毫米)

I2C 端口注意事项

模拟 4 (A4) 和模拟 5 (A5) 用于 Arduino Uno 或 2p 上的 I328C 端口。 这意味着,只要您使用默认探头功能、雾冷却剂、双轴或自定义 ALARM_STATE LED 诊断灯,就无法使用 I2C。 必须通过 D0 和 D1 上的串行连接与另一个 Arduino 进行通信以增加功能。

入门(步进驱动器)

首先,要将步进电机连接到 Grbl,您需要一些步进电机驱动器来为步进器供电并将驱动器输入连接到 Arduino 控制器引脚。 有许多驱动程序可以做到这一点,可以完全预建、部分预建或完全 DIY。 步进驱动器需要共享 步进使能引脚 (D8) 到它们各自的使能引脚,而 方向和步进脉冲引脚 (D2-D7) 将需要连接到驱动程序上各自的引脚。 只要确保你所有的驱动程序和 Arduino 有共同点 (星形接地与您的电机驱动器电源)。 这就是您开始所需的全部内容。

归位和限位开关

之后,一旦您决定准备好或愿意 启用归位和/或硬限制,你需要连接一个 常开限位开关 到每个限位销 (D9、D10 和 D12). 归位和硬限制使用相同的开关。 这些限制引脚已经通过内部上拉电阻保持在高位,因此您只需将它们连接到地即可。 因此,当您关闭开关时,开关会将限位引脚拉至接地。 如果您想在轴行程的两端安装硬限位开关,只需将两个限位开关与轴限位销和接地平行连接即可。 确保在尝试执行归位循环之前已安装开关,并确保练习良好的接线方法,以尽量减少输入引脚上的外部电噪声。

良好的接线习惯可能包括使用屏蔽电缆或 clamp-在铁氧体电缆芯上,并使用一些 0.1uF 电容器与限位开关并联用于去抖动/噪声过滤。 使电机线远离限位开关线也可能是一个好主意。

如果您愿意,可以将 GRBL 配置为使用常闭限位开关。 有些人认为,在限位开关发生故障时,常闭限位开关可能有助于减少灾难性的碰撞。 许多用户根本不使用任何限位开关,而是选择了软件限制。

控制按钮

在 Grbl v0.8 及更高版本中,有循环启动、进给保持和重置运行时命令的引脚,因此您可以在机器上拥有物理控制按钮。 就像限制引脚一样,这些引脚通过内部上拉电阻保持高电平,因此您所要做的就是将一个常开开关连接到每个引脚并接地。 再次确保您练习良好的接线方法,以尽量减少输入引脚上的外部电噪声。

主轴和冷却销

如果您对纺锤有需求或需求 (D13) 或冷却液控制 (A3 & A4) , Grbl 将根据您发送给 Grbl 的 G 代码命令将这些输出引脚切换为高电平或低电平。 启用 v0.9+ 和可变主轴 PWM 后,D11 引脚将输出一系列 voltages 从 0V 到 5V 取决于主轴速度 G 代码命令。 在这种情况下,0V 表示主轴关闭。 由于这些引脚都取决于它们的使用方式,因此我们将由您决定如何控制和使用这些引脚以用于您的机器。 您还可以破解主轴和冷却液控制源 files 轻松改变它们的工作方式,然后通过 Arduino IDE 编译和上传修改后的 Grbl。

诊断 LED 灯

商用 CNC 机器通常至少有一个诊断 LED 灯,以防机器崩溃或报警代码。 对于那些刚接触 GRBL 和 DIY CNC 机床的人来说,此功能对于了解何时发生 ALARM_STATE 非常有用(例如在启用归位和限位开关的情况下无法归位机器)。

默认情况下,GRBL 没有诊断 LED 灯。 这是因为带有 328p 芯片的 Arduio UNO 的编程空间有限,并且目前几乎所有空间都在使用中(尽管不是全部!)。 并非所有理想的功能都可以在如此低的存储设备上实现,因此有时必须做出牺牲。

此外,所有可用的 I/O 端口目前都在使用,并且这种灯需要至少一个 I/O 引脚。 幸运的是,可以通过破解 GRBL C 代码轻松添加此功能,并且 3p 芯片上仍有大约 328% 的可用内存!

许多机器目前没有在 Analog 4 上使用可选的 MIST COOLANT 功能,因此我们可以轻松地重新定义此引脚以供我们使用。 另一种方法可能是在外部 Arduino 上对此类 LED 灯进行编码,然后该外部 Arduino 将拥有所有可用的 I/O 端口,可以根据需要连接尽可能多的 LED 灯/蜂鸣器,并可以通过串行或 I2C 进行通信。

要破解 GRBL 源代码以使用 CNDY Shield 上的 ALARM LED,请执行以下操作:

步骤 1: 在 Linux 或 Macintosh 上打开文本编辑器(在 Windows 上使用 Notepad++)并编辑 cpu_map.h file:

改变这个:

//定义洪水和雾冷却剂启用输出引脚。
#define COOLANT_FLOOD_DDR DDRC
#define COOLANT_FLOOD_PORT PORTC
#define COOLANT_FLOOD_BIT 3 // Uno 模拟引脚 3
#define COOLANT_MIST_DDR DDRC
#define COOLANT_MIST_PORT PORTC
#define COOLANT_MIST_BIT 4 // Uno 模拟引脚 4

对此:

//定义洪水和雾冷却剂启用输出引脚。
#define COOLANT_FLOOD_DDR DDRC
#define COOLANT_FLOOD_PORT PORTC
#define COOLANT_FLOOD_BIT 3 // Uno 模拟引脚 3
//#定义COOLANT_MIST_DDR DDRC
//#定义COOLANT_MIST_PORT PORTC
//#define COOLANT_MIST_BIT 4 // Uno 模拟引脚 4

///////////////////

// 定义 ALARM LED 输出
#define SIGNAL_LIGHT_DDR DDRC
#定义SIGNAL_LIGHT_PORT PORTC
#define SIGNAL_LIGHT_BIT 4 // Uno 模拟引脚 4

// #define signal_light(on) (SIGNAL_LIGHT_DDR |= (1<

// #define signal_light_init() signal_light(关闭)

#定义signal_light_init signal_light_off

#define signal_light_on (SIGNAL_LIGHT_DDR |= SIGNAL_LIGHT_PORT |= (1<

#define signal_light_off (SIGNAL_LIGHT_DDR |= SIGNAL_LIGHT_PORT &= ~(1<

///////////////////

步骤 2: 在 Linux 或 Macintosh 上打开文本编辑器(在 Windows 上使用 Notepad++)并编辑 协议.c file:

改变这个:

// 在需要时执行运行时命令。 该函数主要作为 Grbl 的状态运行
// 机器和控制 Grbl 必须提供的各种实时功能。
// 注意:除非您确切地知道自己在做什么,否则不要更改它! 无效协议执行程序rt系统()
{

uint8_t rt_exec; // 临时变量以避免多次调用 volatile。
rt_exec = sys_rt_exec_alarm; // 复制 volatile sys_rt_exec_alarm。
if (rt_exec) { // 仅当任何位标志为真时才输入

// 系统报警。 一切都因严重错误而关闭。 报告
// 错误的来源给用户。 如果关键,Grbl 会通过输入一个无穷大来禁用
// 循环直到系统重置/中止。

系统状态=状态警报; // 设置系统报警状态

报告警报消息(rt_exec);

对此:

// 在需要时执行运行时命令。 该函数主要作为 Grbl 的状态运行
// 机器和控制 Grbl 必须提供的各种实时功能。
// 注意:除非您确切地知道自己在做什么,否则不要更改它!
无效协议执行程序rt系统()
{

uint8_t rt_exec; // 临时变量以避免多次调用 volatile。
rt_exec = sys_rt_exec_alarm; // 复制 volatile sys_rt_exec_alarm。

///////////////////////

// 定义 ALARM LED 输出
信号灯初始化; //初始化LED处于关闭状态
如果 (sys.state==STATE_ALARM) {signal_light_on;}
else if (sys.state!=STATE_ALARM) {signal_light_off;}
// 否则 {signal_light_off;}

///////////////////////

if (rt_exec) { // 仅当任何位标志为真时才输入
// 系统报警。 一切都因严重错误而关闭。 报告
// 错误的来源给用户。 如果关键,Grbl 会通过输入一个无穷大来禁用
// 循环直到系统重置/中止。
系统状态=状态警报; // 设置系统报警状态
报告警报消息(rt_exec);

我们刚刚所做的是将 Analog 4 (A4) 的定义功能从可选的雾冷却剂更改为我们的 LED 灯。 然后我们用 C 编写代码,以便能够根据是否被告知打开或关闭来将 (PC4) 端口 C 4 (Analog4) 写入高电平或低电平。 然后我们编写了一个简单的 if-else 语句来检查 GRBL 状态机并告诉我们是否处于活动的 ALARM_STATE,以及何时打开 LED。

如果一切顺利,我们就可以在 Arduino IDE 中编译,上传代码,我们现在将拥有一个正常工作的 ALARM_STATE LED 诊断灯! 我们可以选择连接一个外部 LED 信标灯,以放置在机器上方的高处,整个房间都可以看到。

可能出现的问题

理想情况下,这些更改将使用最新的可用 grbl 源代码完成,并在将 grbl“库”添加到 Arduino IDE 之前进行。 如果您的 Arduino 库文件夹中已经有 grbl,则需要手动浏览并删除 grbl 文件夹或编辑 files 在 arduino 库中。 在我的 linux 机器上,“库”位于:/home/andrew/Arduino/libraries/grbl。 最新的 grbl 版本可以在 https://github.com/gnea/grbl/releases. 可以下载可用的 zip file 里面有一个名为 grbl-1.1h.20190825 的文件夹。 在此文件夹中,一个名为 grbl 的文件夹将是您想要添加到 Arduino IDE 的文件夹,作为“库”“zip” file”。 请务必对 cpu_map.h 和 protocol.c 进行更改 file在将其添加到 Arduino IDE 之前。 否则,您将需要编辑 files 在您的 libraries/grbl 文件夹中。 grbl-1.1h zip 中的双轴功能存在一个已知错误 file,如果您改为下载主 grbl 分支,则它是固定的。 https://github.com/gnea/grbl

CNDY Shield 更新和错误

*V1.1:在Spindle PWM和Spindle Direction被交换的地方有一个小的丝印错误。 这已在 V1.2 中得到纠正。

V1.2在5v线上不再有可选的降噪电容,其他输入按键线上有新的。 V1.2 有一个与主轴 PWM 并联的可选 LED。 这对于安全的激光设置可能很有用。

28 年 2021 月 XNUMX 日更新

附加信息可在以下位置找到 兔山研究网.

文件/资源

CNDY 盾 GRBL CNC Arduino UNO [pdf] 用户指南
GRBL CNC,Arduino UNO

参考

发表评论

您的电子邮件地址不会被公开。 必填字段已标记 *