使用GRBL的Arduino Uno和CNC Shield指南

发表时间: 2022-10-20 15:56

CNC扩展板基本功能和步进驱动

  • CNC扩展板基本功能
    • A轴可以根据需求设定为独立工作模式或者同步XYZ中的一轴。

  • A4988驱动:注意en引脚对应CNC扩展版上的en引脚,否则会烧毁驱动

  • A4988驱动电流调节和计算。
    • Vref = Imax * 8 * 0.1
  • DRV8825驱动:注意en引脚对应CNC扩展版上的en引脚,否则会烧毁驱动

  • DRV8825驱动电流调节和计算
    • Vref = Imax /2

CNC扩展版和arduino供电问题

  • 扩展版需要单独供电:12V-36V
  • A4988电压范围:8V-35V,注意A4988驱动最大电压为35V,小于CNC扩展最大电压36V
  • DRV8825电压范围:8.2V-45V
  • Arduino需要额外供电,DC口(5.5x2.1mm)供电范围:7V-12V,可同时接USB线。

烧录GRBL固件并简单移动测试

  • GRBL固件:v0.9和v1.1的引脚定义区别,Z轴限位引脚和主轴控制引脚交换,使得主轴可以使用PWM控制。

  • 控制软件:UGS,CNCjs,LaserGRBL,GRBL-Plotter
  • 可以使用arduinoIDE打开grblUpload例程烧录固件,也可以使用LaserGRBL烧录。

步进脉冲数(step/mm)计算

  • 计算工具:https://swarfer.co.za/cnc/grblcalc.html

  • 步进电机步距角

步进电机的旋转是靠脉动信号来驱动的,当步进驱动器接收到一个脉冲信号,步进电机的轴就会转动一个固定的角度,这个转动的角度,就叫“步距角”。最常见的有三种步距角:0.9°,1.8°和7.5°。这三种步距角,也就对应了步进电机每旋转一周(360°),需要的脉冲信号个数为400个、200个以及48个。

  • 步进驱动细分设置

步进细分数取决于使用的电机驱动板主芯片,常见的细分有1/2,1/4,1/16,1/32等,如果是1/16细分表示的含义是原来一个脉冲可以控制电机转动一个步距角,现在需要16个脉冲电机才能转动一个步距角,如果电机的步距角是1.8°,那么电机旋转一周就需要200*16=3200个脉冲信号。

  • 同步轮

常用的有16齿和20齿,需要注意齿距,比如GT2的同步轮其齿距为2mm,对于20齿的同步轮,旋转一圈即行进的距离为2mm*20=40mm。那么对于1.8步距角,16细分步进驱动,则每1mm所需的脉冲数为3200/40=80个脉冲/毫米。

  • 丝杆

丝杆有几个重要参数,包括螺距,导程,头数。螺距表示相邻两个螺纹之间的距离(可将螺纹印到纸上测量),导程表示丝杆旋转一圈,对应T型螺母移动的距离。头数表示丝杆头部螺纹入口的数量。对于单头螺纹,螺距等于导程,而对于多头螺纹,导程=螺距*头数。对于1.8步距角,16细分步进驱动,导程2,螺距2的丝杆,则每1mm所需的脉冲数为3200/2=1600个脉冲。

  • 齿轮

挤出机通过齿轮推动耗材运动,因此耗材移动的长度基本等同于齿轮的周长。通常MK8挤出机上使用的齿轮直径是11mm,因此齿轮旋转一周的周长为3.14*11=34.54mm。那么对于1.8步距角,16细分步进驱动,则每1mm所需的脉冲数为3200/34.54=92.64个脉冲。

设置GRBL步进脉冲参数

  • $$:获取当前grbl设定值
  • 计算步进脉冲数:
    • XY:360度/1.8度每步=200步*8微步=1600微步/(2毫米*20)=40step/mm
    • Z:360度/1.8度每步=200步*4微步=800微步/2毫米=400step/mm
  • 设定步进脉冲参数0=40,1=40,2=400

  • 设定最大速率:0,1,2,GRBL最大速率30KHz,8位Grbl几乎无法达到30千赫的步进速率。。
    • 30000赫兹*60秒=1800000/40=45000
    • 0=45000,理论上,实际根据需要设定合适值
  • 设定加速度:0,1,2
    • 0=3200,可多次测试尝试获得恰当的值

限位开关的使用

  • 常开和常闭限位开关
    • :是否启用硬限位,默认=0未启用
    • :默认为常开限位,如果使用常闭限位(低电平)则=1
  • 归零操作:启用归零()后,首先会在设定方向()上以速度()寻找限位开关,在找到限位开关后会再以速度()移动确定限位开关(),然后在轴向上移出(pull-off)指定距离()。
    • :是否启用归零
    • :归零方向
    • :找到限位开关后再次移动的速度
    • :寻找限位开关的速度
    • :归零限位开关消抖延时
    • :归零后轴向移出(pull-off)的距离

设置GRBL工作区域参数

  • 设定步进脉冲参数0,1,2,具体可以手动控制各轴移动用以确定最大位置。
  • 当设置好各轴(XY)最大移动距离后,可设定归零后操作
    • $N0=G53XmaxYmax,快速移动到指定位置
    • $N1=G92X0Y0,将当前位置指定位原点(0,0)
  • 最大位置可以用于软限位:,

配置激光参数和测试(可使用LED测试)

  • V1.1新增参数:,,
  • 注意V1.1版本的主轴对应引脚变化,即spindle enable和Limit Z-axis引脚交换,以便主轴能实现pwm控制。
  • 当使用启用激光模式后,需要处于运动模式(G1F500)才能使用M3开启和M5关闭激光。
  • M3 S1000:开启,S指定功率,可使用指定最大功率。
  • M5:关闭,在关闭前最好使用S0指定功率为0,否则下次使用M3时将直接使用之前指定的功率开启激光。
  • 暂停时将关闭激光

COREXY结构GRBL参数调整

  • 配置config.h文件中参数

GRBL命令参考

版本

GRBLv0.9/GRBLv1.1

V1.1和V0.9相比较,改变了的状态报告和增加了新的/ 的主轴转速设置和的激光模式设置。

指令

定义

描述

$$

显示设定值

显示当前存储在arduino EEPROM中的GRBL设定值

$0=10=10

步进脉冲长度(微秒)

设定发送给步进电机的步进脉冲长度(高电平时间),即步进电机可识别的最短步进脉冲长度,可查看步进电机数据手册确认,默认值为10微秒。

=25

步进电机使能闲置时间

在GRBL完成一个运动指令后,以毫秒为单位设置步进电机使能状态的闲置时间,如果设置为255则始终保持步进电机为使能状态用以保持当前位置。通常设置25-50毫米的使能延时时间以确保轴完全移动到了目标位置。

=0

步进脉冲配置

定义发送给步进电机驱动的步进信号。默认情况,步进信号以low开始向high变化表示一个脉冲信号。在经过定义发送给步进电机驱动的步进信号。默认情况,步进信号以low开始向high变化表示一个脉冲信号。在经过$0设置的步进脉冲高电平时间后,恢复为低电平。通常无需设置此参数。设置的步进脉冲高电平时间后,恢复为低电平。通常无需设置此参数。

设定值

掩码00000ZYX

X反向

Y反向

Z反向

0

00000000

NO

NO

NO

1

00000001

YES

NO

NO

2

00000010

NO

YES

NO

3

00000011

YES

YES

NO

4

00000100

NO

NO

YES

5

00000101

YES

NO

YES

6

00000110

NO

YES

YES

7

00000111

YES

YES

YES

例如:如果要反向X轴和Z轴的脉冲信号,则设置=5。

=6

轴运动方向

在不改变接线的情况下改变对应轴步进电机的运动方向,默认情况下,GRBL设定当方向引脚为低电平时沿轴正向移动,高电平时沿轴反向移动。具体数值和步进脉冲设置项表相同。

=0

设置步进驱动使能引脚

控制步进驱动使能引脚的电平信号,默认情况下,步进使能引脚为高电平时禁用电机驱动,低电平时使能电机驱动。当=1表示将使能引脚的电平定义为高电平HIGH,即高电平使能,低电平禁用。

=0

设置限位引脚

默认限位开关使用arduino内部上拉电阻将该引脚设置为高电平HIGH,当触发限位开关时引脚变为低电平LOW。如果设置=1则表示当接收到高电平HIGH时表示限位开关被触发,当设置=1时,必须外接下拉电阻。GRBLv0.9不支持NC常闭限位。可以在config.h文件中禁用限位引脚内部上拉电阻。

=0

设置探针引脚

默认使用arduino内部上拉电阻将该引脚设置为高电平HIGH,当触发时引脚变为低电平LOW。如果设置=1则表示当接收到高电平HIGH时表示探针被触发,当设置=1时,必须外接下拉电阻。

=3

状态报告

定义发送给用户的实时状态数据。

对于v0.9,当发送“?”指定给GRBL,其会返回运行状态,机器位置和工作位置,且不能关闭。如果需要返回多个状态数据,则将所需类型的值相加发送给GRBL即可。

状态报告类型

机器坐标位置(Machine Position)

1

工作坐标位置(Work Position)

2

Planner缓充区(Planner Buffer)

4

RX 缓冲区(RX Buffer)

8

限位引脚(Limit Pins)

16

例如,要取货工作坐标位置(2)和限位引脚(16)的状态报告信息,则需要设置=18。

对于v1.1,当发送“?”指令获取状态报告。该数据报告包括当前运行状态、实时位置、实时输入速率、引脚状态、当前覆盖值、缓冲区状态和当前执行的g-code行号(如果通过编译时选项启用)。

为了保持简单和一致,Grbl v1.1只有两个报告选项。这些主要是为用户和开发人员设置的。

  • 可以指定位置类型来显示机器位置(MPos:)或工作位置(WPos:),但不再同时显示两者。在通过串行终端直接与Grbl交互的某些场景中,启用工作位置是有用的,但默认情况下应该使用机器位置报告。
  • Grbl的计划器和串行RX缓冲区的使用数据可能是启用的。这显示了各自缓冲区中可用的块或字节的数量。这通常用于在测试流接口时帮助确定Grbl的执行情况。这在默认情况下应该是禁用的。

使用下表启用和禁用报告选项。只需添加想要启用的列表值,然后通过发送Grbl设置值来保存。例如,带有机器位置和无缓冲区数据报告设置的默认报告为=1。如果需要工作位置和缓冲区数据,则设置为=2。

报告类型

描述

位置类型

0

启用 Wpos:,禁用 MPos:。

位置类型

1

启用 Mpos:,禁用 WPos:。

缓冲数据

2

启用Buf:显示规划器和串行RX可用缓冲区。

=0.020

节点偏差(Junction Deviation,毫米)

可认为是转弯速度。较高的值表示允许在拐弯处快速运动,但可能丢步从而降低准确性。反之则转弯速度低,但能避免丢步从而提高准确性。

=0.002

弧度公差(毫米)

GRBL将曲线视为很多小直线的集合,该设置用于定义曲线的平滑度,默认为0.002毫米,通常不需要修改该值,因为大多数的机器设备都小于此精度值。

=0

反馈单位

设置位置反馈单位,=1表示英寸,=0表示毫米

=0

是否启用软限位

需要启用“Homing”,如果启用则将检查GCode指令是否有超出机器最大行程限制。=1表示启用,=0表示禁用。

=0

是否启用硬限位

需要安装限位开关,当限位开关触发时,则进入“Alarm”模式,该模式下,机器运动,主轴和冷却系统都被关闭。

=0

是否启用归零

需要安装限位开关,当启用归零后将锁定所有GCode指令直到归零完成。

=1

归零方向

允许设定归零方向,默认先Z轴正向移动归零,然后XY正向移动归零。如果限位开关在负方向,则需要设置归零方向,具体和步进脉冲设置项表相同。

=50.000

归零进给速率(mm/min)

归零操作首先会以较高的速率寻转限位开关,在确定限位开关后,在以此设定的较低速率确定原点精确位置。在此使用的进给速率越低归零位置越准确。

=635.000

归零搜寻速率(mm/min)

在归零时寻找限位开关的速度。将此值设置为不撞坏限位开关的最大值。在归零操作中,先以seek定义的速度寻找限位开关,再以feed定义的速度精确定位原点。

=250

归零限位开关消抖时间Homing Debounce(msec)

用于限位开关软件消抖的延时时间(毫秒),通常值为5-25毫秒。

=1.000

归零后离开限位开关的距离Homing Pull-off(mm)

定义在定位原点后,远离限位开关的距离以便不触发硬限位。

0=314.961

X轴步进速度(steps/mm)

定义给定距离所需的步进数。Steps/mm = (Steps per Revolution)*(Microsteps) / (mm per Revolution)

1.Steps per Revolution = 200,表示步进电机旋转一圈所需的步数,对于1.8度步进电机,旋转一周所需步数为360/1.8=200步。

2.Microsteps - 1,2,4,8,16,32,由步进驱动器细分数确定,细分数越高精度越高,但力矩越小。对于DRV8825如果使用3个跳线帽,则细分数为32,即旋转一圈需要200*32=6400个脉冲。对于A4988如果使用3个跳线帽,则细分数为16,即旋转一圈需要200*16=3200个脉冲

3.mm per Revolution,对于GT2同步轮,即旋转一圈行进20个齿,齿间距为2mm,即一圈行进40mm。因此每1mm需要6400/40=160个脉冲每毫米。对于GT2单线螺纹丝杆,螺距等于导程,螺距2,导程2,即旋转一圈行进2mm,因此每1mm需要6400/2=3200个脉冲

1=314.961

Y轴步进速度(steps/mm)

同x轴

2=314.961

Z轴步进速度(steps/mm)

同x轴

0=635.000

X轴最大速率(mm/min)

定义给定轴的最大速度。可以通过试验逐步增加速度测试最大速度,发送测试Gcode指令使轴移动足够距离以便达到其最大速度值,当步进电机出现异常时即为最大速度值,将0设置为最大速度的80%-90%。

1=635.000

Y轴最大速率(mm/min)

同X轴

2=635.000

Z轴最大速率(mm/min)

同X轴

0=50.000

X轴最大加速度(mm/sec^2)

定义给定轴的最大加速度。同样可以通过试验获得最大加速度,设定为最大加速度的80%-90%即可。

1=50.000

Y轴最大加速度(mm/sec^2)

同X轴

2=50.000

Z轴最大加速度(mm/sec^2)

同X轴

0=225.000

X轴最大行程(mm)

当使用软限位时用于定义轴的最大行程,同样用于归零操作。

1=225.000

Y轴最大行程(mm)

同X轴

2=225.000

Z轴最大行程(mm)

同X轴

GRBL命令



$#

显示Gcode参数

列出工作坐标偏移(G54-G59),预定义位置(G28 & G30),坐标

偏移量(G92),工具长度偏移量(TLO)和探测周期(PRB)。

$G

显示解析器状态

显示GRBL解析器中的活动gCode模式。

示例- [G0 G54 G17 G21 G90 G94 M0 M5 M9 T0 S0.0 F500.0]

$!

显示构建信息

显示GRBL版本和源码构建日期

$N

显示启动块

显示每次GRBL上电或复位时运行的启动块。

$N0=line

$N1=line

设置启动块

设置启动块。将有效的gCode命令替换为“line”部分,这些命令将在每次GRBL上电或重置时执行。

$x=value

设置GRBL配置参数

设置GRBL参数。将“X”替换为上面列表中的数字,将“value”替换为相应的设置。

$C

Gcode检查模式

处理所有传入的gCode命令,但不移动轴、主轴或冷却系统,用于检查gCode程序。

$X

解除锁定警告

解除警告锁定以允许轴移动

$H

执行归零(Homing)操作

执行归零(Homing)操作

GRBL实时命令



~

循环启动

启动缓冲的gCode命令。用于在“进给保持”后恢复切割。

!

进给保持

通过控制减速停止主动循环,防止失步造成的位置丢失。

?

当前状态

返回GRBL当前状态,当前机器坐标位置和工作坐标位置

Ctrl+x

重置GRBL

软重启命令,保持机器坐标位置且不关闭arduino

其他参数

V1.1新增参数


spindle主轴最高转速RPM

设置在5V电压时PWM引脚输出的最大主轴速度。例如=10000表示5V电压最大转速为10000rpm,如果试图设置更高的主轴速度,因为GRBL最大输出5V,因此不能够更快。默认情况下,GRBL以255等分最大和最小RMP转速,对应于电压5V到0.02V的PWM输出。当PWM引脚为0V时表示禁用主轴,5V时为最大转速所设置的10000RPM。Config.h中可调整其他配置参数。

spindle主轴最低转速RPM

设置在最小0.02V时PWM引脚输出的主轴速度(0V表示禁用)。可以设置较低的RMP值,但PWM输出不会低于0.02V,如果为0V则表示禁用主轴。

激光模式

启用后,当用主轴速度(激光功率)编程时,Grbl将通过连续的G1,G2或G3运动命令连续移动S。主轴PWM引脚将在每次运动时立即更新,而不会停止。使用此模式之前,请阅读GRBL激光文档和激光设备文档。激光非常危险,会永久损坏视力并可能引起火灾。Grbl对固件可能引起的任何问题(由其GPL许可定义)不承担任何责任。

禁用后,Grbl会像往常一样运行,对于每个S主轴速度命令停止运动。这是铣床的默认操作,允许暂停以使主轴改变速度。