Grbl运动控制

Grbl 是一款免费、开源、高性能的软件,用于控制机器的运动,这些机器可以移动、制造东西或让东西移动,并且将在直接的 Arduino 上运行。如果创客运动是一个行业,那么 Grbl 将是行业标准。

大多数开源 3D 打印机的心中都有 Grbl。它已适用于数百个项目,包括激光切割机、自动手写笔、钻孔机、涂鸦画家和古怪的绘图机。由于其性能、简单性和节俭的硬件要求,Grbl 已经发展成为一种开源现象。

2009 年,Simen Svale Skogsrud(http://bengler.no/grbl ) 通过编写并向所有人发布早期版本的 Grbl(受 Mike Ellery 的 Arduino GCode Interpreter 的启发)为开源社区增光添彩。自 2011 年以来,Grbl 在Sungeun “Sonny” Jeon 博士的务实领导下,作为一个社区驱动的开源项目向前推进。(@chamnit)。

点击下载grbl.1源代码

Grbl CNC 项目的官方支持者

谁应该使用 Grbl

进行铣削或激光切割的制造商需要一个漂亮、简单的控制器来控制他们的系统,该控制器将在无处不在的 Arduino Uno 上运行。那些不喜欢仅仅为了并行端口而用传统的 PC 塔来弄乱他们的空间的人。需要以整洁、模块化的 C 语言编写的控制器作为项目基础的修补匠。

不错的功能

Grbl 非常适合轻型生产。我们将它用于我们所有的铣削,使用为 Grbl 编写的一流 GUI 从我们的笔记本电脑或 Raspberry Pi 上运行它,以流式传输 G 代码作业。Grbl 是用高度优化的 C 语言编写的,利用 Arduino 的 Atmega328p 芯片的所有智能特性来实现精确的定时和异步操作。它能够保持超过30kHz的步进速率,并提供干净、无抖动的控制脉冲流。

Grbl 适用于三轴机器。(还)没有旋转轴——只有 X、Y 和 Z。

G 代码解释器实现了 LinuxCNC 标准的一个子集,并且得到大多数 CAM 工具的支持,没有任何问题。有关这些 G 代码的描述,请参阅 LinuxCNC 的 G 代码描述(G 代码快速参考)Shapeoko wiki,该文档试图列出 Grbl 支持的所有代码并附有适当的注释。请注意,与下面列出的书面 G 代码标准只有少数偏差。如果您发现任何其他差异,请告知使用!

不支持带有 P 字的 G2 和 G3 弧的多个整圆弧。

激光模式改变M3、M4的运行,主轴转速S字改变。有关详细信息,请参阅激光模式页面。

带有 M56 命令的 Grbl 特定停车运动覆盖控制,其中M56 P0暂时禁用停车运动和/M56大于零重新启用它们。M56 Pxx

v1.1中支持的 G 代码

G0、G1:直线运动

G2、G3:圆弧和螺旋运动

G4:停留

G10 L2、G10 L20:设置工作坐标偏移

G17、G18、G19:平面选择

G20、G21:单位

G28、G30:转到预定义位置[运动到预定义位置]

G28.1、G30.1:设置预定义位置

G38.2:探测

G38.3、G38.4、G38.5:探测

G40:刀具半径补偿模式关闭(仅限)

G43.1、G49:动态刀具长度偏移

G53:绝对坐标移动

G54、G55、G56、G57、G58、G59:工作坐标系

G61:路径控制模式

G80:运动模式取消

G90、G91:距离模式

G91.1:弧形 IJK 距离模式

G92:坐标偏移

G92.1:清除坐标系偏移

G93、G94:进给率模式

M0、M2、M30:程序暂停和结束

M3、M4、M5:主轴控制

M7*, M8, M9:冷却液控制

M56*:停车运动超控控制

(*) 表示默认情况下未在 config.h 中启用的命令。

加速管理

早期,基于 Arduino 的 CNC 控制器没有加速计划,如果没有某种缓动,就无法全速运行。Grbl 具有前瞻性规划器的持续加速管理解决了这个问题,并已在微控制器 CNC 世界的任何地方得到复制,从 Marlin 到 TinyG。Grbl 有意使用更简单的恒定加速度模型,这对于家用 CNC 而言绰绰有余。正因为如此,我们能够投入时间优化我们的规划算法,并确保动作稳固可靠。当我们认为关键的所有功能集的安装完成并且不再需要我们修改我们的规划器以适应它们时,我们打算研究和实施更先进的运动控制算法,通常只为进给率非常高的机器(即取放)或生产环境中的机器保留。最后,这里有一个链接描述了我们高速转弯算法的基础,因此运动可以轻松进入最快的进给率,并在急转弯之前制动,以实现快速但无抖动的操作。

设计限制

我们设计有限的 G 代码支持。这使 Grbl 源代码保持简单、轻量和灵活,因为我们将继续开发、改进和维护每个新功能的稳定性。Grbl 支持 CAM 工具输出中遇到的所有常见操作,但让一些人类 G 编码器感到沮丧。没有变量、没有刀具数据库、没有函数、没有固定循环、没有算术和没有控制结构。只是基本的机器操作和功能。任何更复杂的东西,我们认为接口可以很容易地处理它们并将它们转换为 Grbl。

v1.1 中的新功能!

另一个巨大的更新!这个版本包括了最后剩下的优先功能,这些功能长期以来一直在待办事项列表中。以下是新更改的摘要:

实时超驰:通过进给、快速、主轴速度、主轴停止和冷却液切换控制立即改变机器运行状态。这个很棒的新功能只在工业机器上很常见,通常用于在作业运行时优化速度和进给。大多数爱好 CNC 都试图模仿这种行为,但通常有大量的滞后。Grbl 在几十毫秒内实时执行覆盖。

慢跑模式:新的慢跑命令独立于 G 代码解析器,因此解析器状态不会被改变,如果没有正确恢复会导致潜在的崩溃。包含有关其工作原理以及如何通过操纵杆或旋转拨盘以低延迟、令人满意的响应来控制您的机器的文档。

激光模式:新的“激光”模式将使 Grbl 通过连续的 G1、G2 和 G3 命令随着主轴速度的变化而连续移动。当“激光”模式被禁用时,Grbl 将改为停止以确保主轴正常加速。主轴速度覆盖也适用于激光模式,因此您可以在工作期间根据需要调整激光功率。通过 $ 设置在“激光”模式和“正常”模式之间切换。

动态激光功率随速度缩放:如果您的机器加速度较低,此选项将根据 Grbl 的行进速度自动缩放激光功率,因此当您的 CNC 必须转弯时,您不会有烧焦的角落!M4启用激光模式时,由主轴 CCW 命令启用。

睡眠模式:Grbl 现在可以通过 $SLP 命令进入“睡眠”状态。这将禁用一切,包括步进驱动程序。当您将机器无人看管并想要自动关闭所有设备时,这很高兴。只有一个复位退出睡眠状态。

显着的界面改进:调整以提高整体性能,包括更多实时数据,并简化维护和编写 GUI。基于来自多个 GUI 开发人员的直接反馈和基准性能测试。注意:GUI 需要专门更新其代码以与 v1.1 及更高版本兼容。

新的状态报告:为了说明额外的覆盖数据,状态报告已经过调整以将更多数据塞入其中,同时仍然比以前更小。包括文档,概述了它是如何改变的。改进的错误/警报反馈:所有 Grbl 错误和警报消息都已更改为提供代码。每个代码都与一个特定的问题相关联,因此用户无需猜测即可确切知道问题所在。文档和易于解析的 CSV 包含在 repo 中。

扩展 ASCII 实时命令:所有覆盖和未来的实时命令都在扩展 ASCII 字符空间中定义。不幸的是,在键盘上不容易打字,但有助于防止来自具有这些字符的 G 代码文件的意外命令,并为将来的扩展提供大量空间。

消息前缀:来自 Grbl 的每种消息类型都有一个唯一的前缀,以帮助 GUI 立即确定消息是什么并相应地对其进行解析,而无需了解上下文。以前的界面有几个 GUI 实例必须弄清楚消息的含义,这使得一切变得比它需要的更复杂。新的 OEM 特定功能,例如安全门停车、单一配置文件构建选项、EEPROM 限制和恢复控制,以及存储产品数据信息。

新的安全门停车运动作为编译选项。Grbl 将缩回,禁用主轴/冷却液,并停在 Z max 附近。恢复后,它将以相反的顺序执行这些任务并继续程序。高度可配置,甚至可以添加多个停车动作。有关详细信息,请参阅 config.h。

最大和最小主轴转速的新“$”Grbl 设置。允许调整 PWM 输出以更接近真实的主轴转速。当最大 rpm 设置为零或小于最小 rpm 时,PWM 引脚 D11 将充当简单的启用开/关输出。

将G28 和 G30 行为从 NIST 更新为 LinuxCNC G 代码描述。简而言之,如果指定了中间运动,则只有指定的轴将移动到存储的坐标,而不是像以前那样所有轴。

大量的小错误修复和重构,使代码更加高效和灵活。

注意:Arduino Mega2560 支持已移至一个活跃的官方 Grbl-Mega 项目。所有新的发展都会在有意义的时候同步。

v0.9 中的新功能!

重要的:

默认串行波特率现在是 115200!(从 9600 起)

D11 上的 Z 轴限位输入已与主轴启用 D12 交换,以支持可变主轴 PWM 输出。

无队列状态:队列由于冗余而被删除。Holds 现在暂停 Grbl 并且只允许实时命令。循环启动恢复,复位退出。

的超平滑步进算法:对步进驱动器的处理进行全面检查,以简化和减少每个 ISR 滴答的任务时间。使用新的自适应多轴步进平滑 (AMASS) 算法进行更平滑的操作,正如其名称所暗示的那样(有关详细信息,请参阅 stepper.c 源代码)。用户应该会立即看到他们的机器移动方式和整体性能的显着改进!

稳定性和鲁棒性更新:此版本重点关注 Grbl 的整体稳定性。计划器和步骤执行接口已经完全重写,通过引入一个中间步骤段缓冲区来实时“检查”计划器缓冲区中的步骤,以实现稳健性和不可破坏性。这意味着我们现在可以无所畏惧地将 Grbl 推向最高极限。结合新的步进算法和规划器优化,这在我们的测试中转化为5 到 10 倍的整体性能提升!此外,据报道,稳定性和稳健性测试可以轻松完成 140 万(是的,百万)行 G 代码程序,就像冠军一样!

(x4)+ 更快的规划器:规划计算通过优化端到端操作改进了四倍或更多,其中包括简化计算和引入规划器指针来定位缓冲区中不可改进的部分,而不是浪费循环重新计算它们。

可变主轴速度输出:为“S”G 代码命令启用硬件 PWM 输出。注意:此功能需要与 Z-limit D11 引脚和主轴启用 D12 引脚进行引脚交换,以访问引脚 D12 上的硬件 PWM。现在在 D12 上的 Z 限位销应该像以前一样工作。

可通过 Arduino IDE 编译!:现在可以下载和更改 Grbl 的源代码,然后直接通过 Arduino IDE 编译和刷新,它应该适用于所有平台。有关如何执行此操作的详细信息,请参阅 Wiki。

G 代码解析器大修:从头开始完全重写,100% 符合 G 代码标准*。(* NIST 标准的部分内容有些过时且随意,因此我们更改了一些小东西以使其更有意义。源代码中概述了差异。)我们还采取了一些措施来分解 G 代码解析器分成不同的单独任务,这是未来一些开发理念和改进的关键。

独立的加速度和速度设置:每个轴都可以定义独特的加速度和速度参数,Grbl 将根据行进的方向自动计算通过路径的最大加速度和速度。

软限制:在执行之前检查任何运动命令是否超出工作空间限制,如果检测到则发出警报。

探测:现在支持 G38.2、G38.3、G38.4 和 G38.5 直探头 G 代码命令,并通过 A5 引脚连接。

刀具长度偏移:如果没有刀具长度偏移 (TLO),探测就没有意义,所以我们添加了它!现在支持 G43.1 动态 TLO(由 linuxcnc.org 描述)和 G49 TLO 取消命令。G43.1 动态 TLO 的工作方式与普通 G43 TLO(不支持)类似,但需要附加一个带有偏移值的附加轴字。我们这样做是为了让 Grbl 不必在其内存中跟踪和维护刀具偏移数据库。也许在未来,我们会支持一个工具数据库,但不支持这个版本。

改进的圆弧性能:圆弧半径越大,Grbl 跟踪它的速度就越快!我们现在根据弧弦公差定义弧,而不是固定的段长度。这会自动缩放弧段长度,以使该段与真实弧的最大径向误差永远不会超过超精确默认值 0.002 毫米的弦公差值。

新的 Grbl 模拟器!(由@jgeisler 和@ashelly 提供):Grbl 主要源代码的完全独立包装,可以在计算机上编译为可执行文件。不需要Arduino。就像在 Arduino 上一样简单地模拟 Grbl 的响应。

CPU 管脚映射:为了使 Grbl 与其他 AVR 架构(例如 1280 或 2560)兼容,创建了一个新的 cpu_map.h 管脚配置文件以允许为它们编译 Grbl。这是当前用户支持的,因此您的里程可能会有所不同。如果您遇到错误,请告诉我们或更好地向我们发送修复程序!提前致谢!

可配置的实时状态报告:用户现在可以自定义 Grbl 在发出“?”时报告的实时数据类型。状况报告。这包括以下数据:机器位置、工作位置、计划缓冲区使用情况、串行 RX 缓冲区使用情况。

更新的归位例程:无论限位开关位置如何,都在所有负空间中设置工作空间体积。在专业 CNC 上很常见。但是,行为可能会被编译时选项改变。现在直接连接到主规划器和步进模块,以减少闪存空间并在搜索期间实现最大速度。

CoreXY 支持:Grbl 现在在介绍级别上支持 CoreXY 运动学。大多数功能已经过验证可以工作,但这里或那里可能存在错误。请报告您发现的任何问题!

安全门支持:现在支持安全门开关。Grbl 将强制进给保持,关闭主轴和冷却液,并等待门开关关闭并且用户发出恢复。恢复后,主轴和冷却液将在可配置的延迟后重新通电并继续。对于需要此功能的 OEM 很有用。

完全限制和控制引脚可配置性:限制和控制引脚操作现在可以由 Grbl 解释,但您愿意,启用或禁用内部上拉电阻,或者读取高电平或低电平作为触发器。这应该涵盖所有接线和 NO 或 NC 开关情况。

可选限位引脚共享:可以组合限位开关以共享相同的引脚,以腾出宝贵的 I/O 引脚用于其他用途。组合时,用户必须调整 config.h 中的归位周期掩码,以不将轴同时归位到共享引脚上。不用担心; 硬限制和归位周期仍然像以前一样工作。

其他编译时功能选项:限制/控制引脚状态报告、行号跟踪、实时进给率报告等。

v0.8 中的新功能!

自 v0.7 以来发生了很多事情。我们正在努力为古老的 Arduino 创建一个简单但功能强大的 CNC 控制器。这是 v0.8 的新内容列表。

多任务运行时命令:带受控减速的进给保持,不会丢失位置,进给保持后恢复,重置和状态报告。

高级归位循环:为不同类型的机器提供许多配置选项,当它们从哪个轴移动到它们的搜索方向时。限位开关也可以用作硬限位。

永久坐标系数据:工作坐标系 (G54-G59) 和预定义位置 (G28,G30) 保存在 EEPROM 中,因此它们将始终按照您上次设置的方式设置。

检查 G 代码模式:设置 Grbl 以在不移动任何内容的情况下运行您的程序,因此您可以检查是否有任何 Grbl 可能不喜欢的错误。

改进的反馈:报告实时位置、Grbl 正在做什么、G 代码解析器状态和存储的坐标偏移值。

启动块:在启动或重置时自动神奇地运行用户 G 代码块。可用于设置默认值。

引脚输出:循环启动、进给保持和中止现在被引脚输出到 A0、A1 和 A2 引脚。只需将常开开关连接到引脚和接地即可。就是这样!

更强大的 G 代码解析器,带有错误检查反馈。

以及更多!

Grbl v0.8(及更早版本)在 MIT-License 下分发,由 Simen Svale Skogsrud、Sungeun K. Jeon 博士和 Jens Geisler 开发。

Grbl 在 GPLv3 许可下分发,由 Sungeun K. Jeon 博士开发。有关更多详细信息,请参阅许可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容