开源硬件
Arduino
客制化键盘
Arduino_寄存器
二进制运算
寄存器+二进制运算
LCD-逐字显示
密码依次录入
等待输入
WiFi Duck(无线击键注入攻击平台)
WiFi Duc-New
WiFi Duc-Old
蓝牙无线烧录
ESP8266
ESP-NOW
ESP8266看门狗
ESP8266-休眠模式
ESP01/01S使用说明
WIFI_SD
ESP8266-Web服务器
ESP8266-WIFI自动认证
ESP32
ESP32 ADC2
ESP32_PWM
ESP32_CAM
ESP32 小坦克
ESP32_限电保护
Arduino IDE 添加 ESP32
ESP32-iPhone BLE攻击
STM32
STM32F103-虚拟键盘
STC
STC8G1K08(A)
树莓派-触摸屏
Arduino IDE
Arduino_自制库
Arduino库收集
常见排序算法
冒泡排序
选择排序
插入排序
希尔排序
归并排序
快速排序
计数排序
预处理
millis(运行时长)
Arduino IDE 2.X-修改数据位置
Mixly
Mixly安装教程
Mixly 模块介绍
Mixly-添加ESP32CAM支持
Mixly-库定制工具
模块
4G模块连接物联网
GPS模块
语音模块(JQ8900)
安信可VB语音识别
28BYJ-48(5V步进)
FreeRTOS
FreeRTOS-多任务基础
FreeRTOS-任务共享全局变量
FreeRTOS-多核多任务
FreeRTOS-MUTEX
FreeRTOS-常规程序改多任务
FreeRTOS-定时器
LaserGRBL(激光雕刻)
LaserGRBL-GRBL
GRBL-CNC Shield v4
MicroPython
Scratch
Wokwi(在线仿真)
html转无符号数组
待做开源项目
本文档使用 MrDoc 发布
-
+
首页
LaserGRBL-GRBL
**相关链接:** --- LaserGRBL(上位机):[官网](https://lasergrbl.com/)、[GitHub](https://github.com/arkypita/LaserGRBL) GRBL_Wiki:https://github.com/gnea/grbl/wiki GRBL_GitHub:https://github.com/gnea/grbl ,[GitHub_旧](https://github.com/grbl/grbl) GRBL-Mega_GitHub:https://github.com/gnea/grbl-Mega ## [软件配置](https://github.com/gnea/grbl/wiki/Grbl-v1.1-Configuration#grbl-settings) 这部分是在固件编译后都可随时修改的参数,修改后会储存在EEPROM中 `$RST=*` 恢复默认配置,`$x=val` 保存设置到 EEPROM ### GRBL 配置参数 | 参数 | 说明 | |--------------|-----------------------------------------------| | $0=10 | (steppulse, usec) 步进脉冲时间,建议10us | | $1=255 | (step idle delay, msec) 步进电机释放延迟时间,255则一直锁定 | | $2=0 | (stepport invert mask:00000000) 步进电机驱动端口有效位掩码 | | $3=0 | (dirport invert mask:00000000) 步进电机驱动方向位掩码 | | $4=0 | (stepenable invert, bool) 步进电机使能取反有效位设置 | | $5=0 | (limit pins invert, bool) 限位IO口全部取反有效位设置(低触发=0/高触发=1) | | $6=0 | (probe pin invert, bool) 探针IO口取反有效位设置(低触发=0/高触发=1) | | $10=3 | (status report mask:00000011) 状态报告掩码 | | $11=0.020 | (junction deviation, mm) 节点偏差 | | $12=0.002 | (arc tolerance, mm) 圆弧公差 | | $13=0 | (report inches, bool) 位置坐标的单位设置(是否以英寸) | | $20=0 | (soft limits, bool) 软限位开关(软件限位) | | $21=0 | (hard limits, bool) 硬限位开关(硬件限位) | | $22=0 | (homing cycle, bool) 归位使能 | | $23=1 | (homing dir invert mask:00000001) 归位方向位掩码(Max=0/Min=1) | | $24=50.000 | (homing feed, mm/min) 归位进给速率 | | $25=500.000 | (homing seek, mm/min) 归位快速速率 | | $26=250 | (homing debounce, msec) 归位边界反弹时间(ms) | | $27=1.000 | (homing pull-off, mm) 归位点坐标驶离限位器的距离 | | $30=1000 | (spindle rpm max, rpm)最高主轴转速(影响M3/M4 S最大值) | | $31=0 | (spindle rpm min, rpm)最小主轴转速(影响M3/M4 S最小值) | | $32=0 | (laser mode, bool)激光模式(开启后M3/M4只有在发送移动指令后才会生效) | | $100=80 | (x, step/mm) x轴 步/毫米(X步数) | | $101=80 | (y, step/mm) y轴 步/毫米(Y步数) | | $102=80 | (z, step/mm) z轴 步/毫米(Z步数) | | $110=500.000 | (x max rate, mm/min) x轴最大速率 毫米/分钟 | | $111=500.000 | (y max rate, mm/min) y轴最大速率 毫米/分钟 | | $112=500.000 | (z max rate, mm/min) z轴最大速率 毫米/分钟 | | $120=50.000 | (x accel, mm/sec2) x轴加速度 毫米/(s2) | | $121=50.000 | (y accel, mm/sec2) y轴加速度 毫米/(s2) | | $122=50.000 | (z accel, mm/sec2) z轴加速度 毫米/(s2) | | $130=200.000 | (x max travel, mm) x轴最大行程(X行程范围) | | $131=200.000 | (y max travel, mm) y轴最大行程(Y行程范围) | | $132=200.000 | (z max travel, mm) z轴最大行程(Z行程范围) | **二进制转十进制** 用于 `步进电机驱动端口有效位掩码,步进电机驱动端口方向掩码,归位方向位掩码` 等 | 设定值 | 掩码 | X | Y | Z | |-----|----------|-----|-----|-----| | 0 | 00000000 | ✖ | ✖ | ✖ | | 1 | 00000001 | ✔ | ✖ | ✖ | | 2 | 00000010 | ✖ | ✔ | ✖ | | 3 | 00000011 | ✔ | ✔ | ✖ | | 4 | 00000100 | ✖ | ✖ | ✔ | | 5 | 00000101 | ✔ | ✖ | ✔ | | 6 | 00000110 | ✖ | ✔ | ✔ | | 7 | 00000111 | ✔ | ✔ | ✔ | ### GRBL 相关命令 | 命令 | 描述 | 作用 | |---|---|---| | $$ | 显示或配置 GRBL 参数 | 显示当前的 GRBL 配置参数或用于配置这些参数 | | # | 立即停止(急停) | 立即停止运动 | | $G | 程序暂停/恢复(Feed Hold/Resume) | 暂停正在运行的 G-code 程序,并在准备好时继续执行 | | $I | 重置系统 | 重置 GRBL 到初始状态 | | $N | 紧急停止锁定(Hard Reset Lock) | 用于锁定紧急停止按钮以防止误操作 | | $x=val | 设置或查询参数 | 可以用来配置或查询特定的 GRBL 参数 | | $RST=* | 恢复默认 | 恢复固件默认配置 | | $Nx=line | 向 GRBL 发送自定义 G-code 命令 | 发送自定义 G-code 命令给 GRBL | | $J=line | 向 GRBL 发送自定义 G-code 命令并等待完成 | 发送自定义 G-code 命令给 GRBL 并等待它完成 | | $SLP | 进入睡眠模式 | 将 GRBL 进入睡眠模式以节省能量 | | $C | 取消运行 | 取消当前正在运行的 G-code 程序 | | $X | 安全解锁 | 用于安全解锁 GRBL,使其准备好接受命令 | | $H | 归位所有轴 | 启动所有轴的归位程序 | | ~ | 暂停/恢复切换 | 在运行时切换暂停和恢复状态 | | ! | 紧急停止切换 | 切换紧急停止状态 | | ? | 显示帮助信息 | 显示 GRBL 的帮助信息 | | ctrl-x | 中断命令 | 用于中断当前运行的命令 | ## 固件配置 ### defaults.h **默认设置配置文件**,就是 `GRBL 配置参数` 相关内容,写成默认配置,即便恢复出厂也不会丢失相关配置 ```C // defaults.h - 默认设置配置文件 // defaults.h 文件用作不同机器类型的中央默认设置选择器,从 DIY CNC 到现成机器的 CNC 转换。这里列出的设置文件由用户提供,因此您的结果可能会有所不同。但是,这应该为您提供一个良好的起点,因为您了解您的机器并为您的恶意需求进行设置调整。 // 注意:确保在 config.h 中只定义一个 DEFAULTS_XXX 值 #ifndef defaults_h #ifdef DEFAULTS_GENERIC // Grbl 通用默认设置,我们配置这个就可以了 // 步进电机每毫米的步数设置 #define DEFAULT_X_STEPS_PER_MM 250.0 //$100 #define DEFAULT_Y_STEPS_PER_MM 250.0 //$101 #define DEFAULT_Z_STEPS_PER_MM 250.0 //$102 // XYZ 轴的最大运动速度 #define DEFAULT_X_MAX_RATE 500.0 // mm/min //$110 #define DEFAULT_Y_MAX_RATE 500.0 // mm/min //$111 #define DEFAULT_Z_MAX_RATE 500.0 // mm/min //$112 // XYZ 轴的加速度设置(每分钟平方毫米) #define DEFAULT_X_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 //$120 #define DEFAULT_Y_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 //$121 #define DEFAULT_Z_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2 //$122 // XYZ 轴的最大运动范围 #define DEFAULT_X_MAX_TRAVEL 200.0 // mm,必须是正值 //$130 #define DEFAULT_Y_MAX_TRAVEL 200.0 // mm,必须是正值 //$131 #define DEFAULT_Z_MAX_TRAVEL 200.0 // mm,必须是正值 //$132 // 主轴最大和最小转速设置(影响 M3 S<PWM范围>,M4 S<PWM范围>) #define DEFAULT_SPINDLE_RPM_MAX 255.0 // rpm //$30 #define DEFAULT_SPINDLE_RPM_MIN 0.0 // rpm //$31 // 步进脉冲持续时间(微秒) #define DEFAULT_STEP_PULSE_MICROSECONDS 10 //$0 // 步进电机和方向信号反转设置(zyx二进制掩码转十进制填写) #define DEFAULT_STEPPING_INVERT_MASK 0 //$2 #define DEFAULT_DIRECTION_INVERT_MASK 0 //$3 // 步进电机空闲锁定时间(毫秒,0~254,255 保持步进电机启用) #define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 //$1 // 状态报告屏蔽掩码(MPos 启用) #define DEFAULT_STATUS_REPORT_MASK 1 //$10 // 轨迹连接偏差和圆弧容差设置 #define DEFAULT_JUNCTION_DEVIATION 0.01 // mm //$11 #define DEFAULT_ARC_TOLERANCE 0.002 // mm //$12 // 是否以英寸为单位报告运动位置 #define DEFAULT_REPORT_INCHES 0 // false //$13 // 步进电机使能信号反转设置(zyx二进制掩码转十进制填写) #define DEFAULT_INVERT_ST_ENABLE 0 // false //$4 // 限位开关信号反转(全部)设置(低触发=0/高触发=1) #define DEFAULT_INVERT_LIMIT_PINS 0 // false //$5 // 是否启用软件或硬件限位(不选或二选一) #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false //$20 #define DEFAULT_HARD_LIMIT_ENABLE 0 // false //$21 // 探针信号反转设置 #define DEFAULT_INVERT_PROBE_PIN 0 // false //$6 // 激光模式设置(开启后M3/M4只有在发送移动指令后才会生效) #define DEFAULT_LASER_MODE 0 // false //$32 // 是否启用归位循环(一般先禁用确认步进方向后再启用) #define DEFAULT_HOMING_ENABLE 0 // false //$22 // 归位运动方向设置(Max=0/Min=1)(zyx二进制掩码转十进制填写) #define DEFAULT_HOMING_DIR_MASK 0 //$23 // 归位过程的移动速率(重复触发)和快速速率(首次触发)设置 #define DEFAULT_HOMING_FEED_RATE 25.0 // mm/min //$24 #define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min /$25 // 归位过程中的抖动延迟设置 #define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // 毫秒(0-65k) //$26 // 归位完成后的驶离的距离(释放限位)(测试不可设为0) #define DEFAULT_HOMING_PULLOFF 1.0 // mm //$27 #endif // 其他 DEFAULTS_XX 配置无需更改 #endif ``` ### cpu_map.h **CPU 和引脚映射配置文件** 注意:除了电机的引脚定义可以更改外,其他的一律不要动,实测改了会无效(虽然看似端口不对但是有用,改后正确了反而用不了) ```C // cpu_map.h - CPU 和引脚映射配置文件 // cpu_map.h 文件作为不同处理器类型或备用引脚布局的中心引脚映射选择文件。此版本的 Grbl 正式仅支持 Arduino Mega328p #ifndef cpu_map_h #define cpu_map_h #ifdef CPU_MAP_ATMEGA328P //(Arduino Uno)Grbl 正式支持。 // 定义串口引脚和中断向量。 #define SERIAL_RX USART_RX_vect #define SERIAL_UDRE USART_UDRE_vect // 定义步进脉冲输出引脚。注意:所有步进位引脚必须在同一端口上 #define STEP_DDR DDRD #define STEP_PORT PORTD #define X_STEP_BIT 2 // Uno 数字引脚 2,Nano 5(STEP和DIR与Uno是相反引脚) #define Y_STEP_BIT 3 // Uno 数字引脚 3,Nano 6 #define Z_STEP_BIT 4 // Uno 数字引脚 4,Nano 7 #define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // 所有步进位 // 定义步进方向输出引脚。注意:所有方向引脚必须在同一端口上 #define DIRECTION_DDR DDRD #define DIRECTION_PORT PORTD #define X_DIRECTION_BIT 5 // Uno 数字引脚 5,Nano 2(STEP和DIR与Uno是相反引脚) #define Y_DIRECTION_BIT 6 // Uno 数字引脚 6,Nano 3 #define Z_DIRECTION_BIT 7 // Uno 数字引脚 7,Nano 4 #define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // 所有方向位 // 定义步进电机启用/禁用输出引脚 #define STEPPERS_DISABLE_DDR DDRB #define STEPPERS_DISABLE_PORT PORTB #define STEPPERS_DISABLE_BIT 0 // Uno 数字引脚 8 #define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT) // 定义归位/硬限位开关输入引脚和限位中断向量 // 注意:所有限位位引脚必须在同一端口上,但不能位于具有其他输入引脚(CONTROL)的端口上 #define LIMIT_DDR DDRB #define LIMIT_PIN PINB #define LIMIT_PORT PORTB #define X_LIMIT_BIT 1 // Uno 数字引脚 9 #define Y_LIMIT_BIT 2 // Uno 数字引脚 10 // 启用主轴更换Z限位到12引脚,释放11给PWM控制使用 #ifdef VARIABLE_SPINDLE #define Z_LIMIT_BIT 4 // Uno 数字引脚 12 #else #define Z_LIMIT_BIT 3 // Uno 数字引脚 11 #endif #if !defined(ENABLE_DUAL_AXIS) #define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // 所有限位位 #endif #define LIMIT_INT PCIE0 // 引脚更改中断使能引脚 #define LIMIT_INT_vect PCINT0_vect #define LIMIT_PCMSK PCMSK0 // 引脚更改中断寄存器 // 定义用户控制输入引脚(循环启动、复位、进给保持) // 注意:所有 CONTROL 引脚必须位于同一端口上,不能位于具有其他输入引脚(限位)的端口上 #define CONTROL_DDR DDRC #define CONTROL_PIN PINC #define CONTROL_PORT PORTC #define CONTROL_RESET_BIT 0 // Uno A0(复位) #define CONTROL_FEED_HOLD_BIT 1 // Uno A1(进给保持) #define CONTROL_CYCLE_START_BIT 2 // Uno A2(循环) #define CONTROL_SAFETY_DOOR_BIT 1 // Uno A1(安全门,与进给保持共用,通过配置定义启用) #define CONTROL_INT PCIE1 // 引脚更改中断使能引脚 #define CONTROL_INT_vect PCINT1_vect #define CONTROL_PCMSK PCMSK1 // 引脚更改中断寄存器 #define CONTROL_MASK ((1<<CONTROL_RESET_BIT)|(1<<CONTROL_FEED_HOLD_BIT)|(1<<CONTROL_CYCLE_START_BIT)|(1<<CONTROL_SAFETY_DOOR_BIT)) #define CONTROL_INVERT_MASK CONTROL_MASK // 可以重新定义为仅倒转特定控制引脚。 // 定义探针开关输入引脚 #define PROBE_DDR DDRC #define PROBE_PIN PINC #define PROBE_PORT PORTC #define PROBE_BIT 5 // Uno A5(探头钻头) #define PROBE_MASK (1<<PROBE_BIT) #if !defined(ENABLE_DUAL_AXIS) // 定义洪水冷却和雾化冷却使能输出引脚 #define COOLANT_FLOOD_DDR DDRC #define COOLANT_FLOOD_PORT PORTC #define COOLANT_FLOOD_BIT 3 // Uno A3(冷却液) #define COOLANT_MIST_DDR DDRC #define COOLANT_MIST_PORT PORTC #define COOLANT_MIST_BIT 4 // Uno A4(冷却液雾钻头) // 定义主轴使能和主轴方向输出引脚 #define SPINDLE_ENABLE_DDR DDRB #define SPINDLE_ENABLE_PORT PORTB // Z限位和主轴 PWM/使能引脚交换,释放11给PWM控制使用 #ifdef VARIABLE_SPINDLE #ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN // 如果启用,主轴方向引脚现在用作主轴使能,而PWM仍在11上 #define SPINDLE_ENABLE_BIT 5 // Uno 数字引脚 13(注意:由于 LED,D13 不能为高电平输入) #else #define SPINDLE_ENABLE_BIT 3 // Uno 数字引脚 11(主轴使能钻头,和PWM共用) #endif #else #define SPINDLE_ENABLE_BIT 4 // Uno 数字引脚 12(主轴使能钻头) #endif #ifndef USE_SPINDLE_DIR_AS_ENABLE_PIN #define SPINDLE_DIRECTION_DDR DDRB #define SPINDLE_DIRECTION_PORT PORTB #define SPINDLE_DIRECTION_BIT 13 // Uno 数字引脚 13(主轴方向钻头)(注意:由于 LED,D13 不能为高电平输入) #endif // 可变主轴配置如下。除非您知道自己在做什么,否则不要更改。 // 注意:仅在启用可变主轴时使用。 #define SPINDLE_PWM_MAX_VALUE 255 // 不要更改,328P的PWM就为255 #ifndef SPINDLE_PWM_MIN_VALUE #define SPINDLE_PWM_MIN_VALUE 1 //必须大于零(只是小而非关闭,有些主轴可能需要达到特定功率才能启动) #endif #define SPINDLE_PWM_OFF_VALUE 0 //主轴PWM关闭值 #define SPINDLE_PWM_RANGE (SPINDLE_PWM_MAX_VALUE-SPINDLE_PWM_MIN_VALUE) #define SPINDLE_TCCRA_REGISTER TCCR2A #define SPINDLE_TCCRB_REGISTER TCCR2B #define SPINDLE_OCR_REGISTER OCR2A #define SPINDLE_COMB_BIT COM2A1 // 预分频,8 位快速 PWM 模式 #define SPINDLE_TCCRA_INIT_MASK ((1<<WGM20) | (1<<WGM21)) // 配置快速 PWM 模式。 // #define SPINDLE_TCCRB_INIT_MASK (1<<CS20) // 禁用分频器 -> 62.5kHz // #define SPINDLE_TCCRB_INIT_MASK (1<<CS21) // 1/8 分频器 -> 7.8kHz(用于 v0.9) // #define SPINDLE_TCCRB_INIT_MASK ((1<<CS21) | (1<<CS20)) // 1/32 分频器 -> 1.96kHz #define SPINDLE_TCCRB_INIT_MASK (1<<CS22) // 1/64 分频器 -> 0.98kHz(J-tech 激光) // 注意:在328p上,这些设置必须与 SPINDLE_ENABLE 设置相同 #define SPINDLE_PWM_DDR DDRB #define SPINDLE_PWM_PORT PORTB #define SPINDLE_PWM_BIT 3 // Uno 数字引脚 11(主轴PWM钻头,和使能共用) #else // 双轴功能需要独立的步进脉冲引脚才能工作。独立的方向引脚不是必需的,但方便使用 Grbl 的 $$ 设置进行方向倒置。这些引脚取代了主轴方向和可选冷却雾化引脚 // 下面和上面类似,不做详解 #ifdef DUAL_AXIS_CONFIG_PROTONEER_V3_51 // 注意:步进脉冲和方向引脚可以位于任何端口和输出引脚上。 #define STEP_DDR_DUAL DDRC #define STEP_PORT_DUAL PORTC #define DUAL_STEP_BIT 4 // Uno A4 #define STEP_MASK_DUAL ((1<<DUAL_STEP_BIT)) #define DIRECTION_DDR_DUAL DDRC #define DIRECTION_PORT_DUAL PORTC #define DUAL_DIRECTION_BIT 3 // Uno A3 #define DIRECTION_MASK_DUAL ((1<<DUAL_DIRECTION_BIT)) // 注意:默认情况下,双轴限位与 z 轴限位引脚共享。使用的引脚必须位于与其他限位引脚相同的端口上。 #define DUAL_LIMIT_BIT Z_LIMIT_BIT #define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)|(1<<DUAL_LIMIT_BIT)) // 定义冷却使能输出引脚。 // 注意:冷却洪水从 A3 移动到 A4。在 Arduino Uno 上不支持冷却雾化。 #define COOLANT_FLOOD_DDR DDRB #define COOLANT_FLOOD_PORT PORTB #define COOLANT_FLOOD_BIT 13 // Uno 数字引脚 13 // 定义主轴使能输出引脚。 // 注意:主轴使能从 D12 移动到 A3(旧冷却洪水使能引脚)。删除主轴方向引脚。 #define SPINDLE_ENABLE_DDR DDRB #define SPINDLE_ENABLE_PORT PORTB #ifdef VARIABLE_SPINDLE // 注意:双轴功能不支持 USE_SPINDLE_DIR_AS_ENABLE_PIN。 #define SPINDLE_ENABLE_BIT 11 // Uno 数字引脚 11 #else #define SPINDLE_ENABLE_BIT 12 // Uno 数字引脚 12 #endif // 可变主轴配置如下。除非您知道自己在做什么,否则不要更改。 // 注意:仅在启用可变主轴时使用。 #define SPINDLE_PWM_MAX_VALUE 255 // 不要更改。328p 快速 PWM 模式将顶部值固定为 255。 #ifndef SPINDLE_PWM_MIN_VALUE #define SPINDLE_PWM_MIN_VALUE 1 // 必须大于零。 #endif #define SPINDLE_PWM_OFF_VALUE 0 #define SPINDLE_PWM_RANGE (SPINDLE_PWM_MAX_VALUE-SPINDLE_PWM_MIN_VALUE) #define SPINDLE_TCCRA_REGISTER TCCR2A #define SPINDLE_TCCRB_REGISTER TCCR2B #define SPINDLE_OCR_REGISTER OCR2A #define SPINDLE_COMB_BIT COM2A1 // 预分频,8 位快速 PWM 模式。 #define SPINDLE_TCCRA_INIT_MASK ((1<<WGM20) | (1<<WGM21)) // 配置快速 PWM 模式。 // #define SPINDLE_TCCRB_INIT_MASK (1<<CS20) // 禁用分频器 -> 62.5kHz // #define SPINDLE_TCCRB_INIT_MASK (1<<CS21) // 1/8 分频器 -> 7.8kHz(用于 v0.9) // #define SPINDLE_TCCRB_INIT_MASK ((1<<CS21) | (1<<CS20)) // 1/32 分频器 -> 1.96kHz #define SPINDLE_TCCRB_INIT_MASK (1<<CS22) // 1/64 分频器 -> 0.98kHz(J-tech 激光) // 注意:在 328p 上,这些设置必须与 SPINDLE_ENABLE 设置相同。 #define SPINDLE_PWM_DDR DDRB #define SPINDLE_PWM_PORT PORTB #define SPINDLE_PWM_BIT 11 // Uno 数字引脚 11 #endif // 注意:不支持可变主轴功能的这个 shield。 #ifdef DUAL_AXIS_CONFIG_CNC_SHIELD_CLONE // 注意:步进脉冲和方向引脚可以位于任何端口和输出引脚上。 #define STEP_DDR_DUAL DDRB #define STEP_PORT_DUAL PORTB #define DUAL_STEP_BIT 12 // Uno 数字引脚 12 #define STEP_MASK_DUAL ((1<<DUAL_STEP_BIT)) #define DIRECTION_DDR_DUAL DDRB #define DIRECTION_PORT_DUAL PORTB #define DUAL_DIRECTION_BIT 13 // Uno 数字引脚 13 #define DIRECTION_MASK_DUAL ((1<<DUAL_DIRECTION_BIT)) // 注意:默认情况下,双轴限位与 z 轴限位引脚共享。 #define DUAL_LIMIT_BIT Z_LIMIT_BIT #define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)|(1<<DUAL_LIMIT_BIT)) // 定义冷却使能输出引脚。 // 注意:冷却洪水从 A3 移动到 A4。在 Arduino Uno 上不支持冷却雾化。 #define COOLANT_FLOOD_DDR DDRC #define COOLANT_FLOOD_PORT PORTC #define COOLANT_FLOOD_BIT 4 // Uno 模拟引脚 4 // 定义主轴使能输出引脚。 // 注意:主轴使能从 D12 移动到 A3(旧冷却洪水使能引脚)。删除主轴方向引脚。 #define SPINDLE_ENABLE_DDR DDRC #define SPINDLE_ENABLE_PORT PORTC #define SPINDLE_ENABLE_BIT 3 // Uno 模拟引脚 3 #endif #endif #endif /* #ifdef CPU_MAP_CUSTOM_PROC // 对于自定义引脚映射或不同的处理器,复制并编辑其中一个可用的 CPU 映射文件,并根据需要进行修改。 // 确保在 config.h 文件中也更改定义的名称。 #endif */ #endif ``` ### config.h **内部系统的编译时配置(一般不需要更改)** ```C // config.h - 编译时配置 // 本文件包含 Grbl 内部系统的编译时配置。对于大多数情况,用户不需要直接修改这些配置,但它们可用于特定需求,例如性能调优或适应非典型机器。 // 重要提示:对此处的任何更改都需要完全重新编译源代码以进行传播。 #ifndef config_h #define config_h #include "grbl.h" // 为了与 Arduino IDE 兼容。 // 定义 CPU 引脚映射和默认设置。 // 注意:原始设备制造商(OEM)可以通过将特定的默认值和引脚映射放置在本文件底部,避免需要维护/更新 defaults.h 和 cpu_map.h 文件,只使用一个配置文件。如果这样做,只需注释掉以下两个定义,然后查看下面的说明。 #define DEFAULTS_GENERIC // 设置配置文件 #define CPU_MAP_ATMEGA328P // CPU 和引脚映射配置文件 // 串行波特率 // #define BAUD_RATE 230400 #define BAUD_RATE 115200 // 定义实时命令特殊字符。这些字符直接从串行读取的数据流中“捕获”,不会传递给 grbl 行执行解析器。选择在流式 G 代码程序中不存在且不能存在的字符。如果用户设置允许,可以使用 ASCII 控制字符。此外,还可以选择界面程序中永远不会出现的扩展 ASCII 代码(> 127)。 // 注意:如果更改了这些特殊字符,请在 report.c 中手动更新帮助消息。 #define CMD_RESET 0x18 // ctrl-x。 #define CMD_STATUS_REPORT '?' #define CMD_CYCLE_START '~' #define CMD_FEED_HOLD '!' // 注意:所有覆盖实时命令都必须在扩展的 ASCII 字符集中,从字符值 128 (0x80) 开始,直到 255 (0xFF)。如果将诸如状态报告、进给保持、复位和循环启动等正常的实时命令移动到扩展的命令集空间,需要修改 serial.c 的 RX 中断服务程序以适应更改。 // #define CMD_RESET 0x80 // #define CMD_STATUS_REPORT 0x81 // #define CMD_CYCLE_START 0x82 // #define CMD_FEED_HOLD 0x83 #define CMD_SAFETY_DOOR 0x84 #define CMD_JOG_CANCEL 0x85 #define CMD_DEBUG_REPORT 0x86 // 仅在启用 DEBUG 时发送带有 '{}' 大括号的调试报告。 #define CMD_FEED_OVR_RESET 0x90 // 将进给覆盖值恢复为 100%。 #define CMD_FEED_OVR_COARSE_PLUS 0x91 #define CMD_FEED_OVR_COARSE_MINUS 0x92 #define CMD_FEED_OVR_FINE_PLUS 0x93 #define CMD_FEED_OVR_FINE_MINUS 0x94 #define CMD_RAPID_OVR_RESET 0x95 // 将快速移动覆盖值恢复为 100%。 #define CMD_RAPID_OVR_MEDIUM 0x96 #define CMD_RAPID_OVR_LOW 0x97 // #define CMD_RAPID_OVR_EXTRA_LOW 0x98 // *不受支持* #define CMD_SPINDLE_OVR_RESET 0x99 // 将主轴覆盖值恢复为 100%。 #define CMD_SPINDLE_OVR_COARSE_PLUS 0x9A #define CMD_SPINDLE_OVR_COARSE_MINUS 0x9B #define CMD_SPINDLE_OVR_FINE_PLUS 0x9C #define CMD_SPINDLE_OVR_FINE_MINUS 0x9D #define CMD_SPINDLE_OVR_STOP 0x9E #define CMD_COOLANT_FLOOD_OVR_TOGGLE 0xA0 #define CMD_COOLANT_MIST_OVR_TOGGLE 0xA1 // 如果启用了回零,回零初始化锁将在上电时将 Grbl 设置为报警状态。这迫使用户在进行其他操作之前执行回零循环(或覆盖锁定)。这主要是一个安全功能,提醒用户进行回零,因为 Grbl 不知道位置。 #define HOMING_INIT_LOCK // 注释以禁用 // 使用位掩码定义回零循环模式。回零循环首先执行搜索模式,以快速触发限位开关,然后执行较慢的定位模式,最后完成短暂的拉开运动以取消限位开关。以下 HOMING_CYCLE_x 定义从后缀 0 开始执行,仅完成指定轴的回零例程。如果省略轴,则不会进行回零,系统也不会更新其位置。这允许非标准笛卡尔机器的用户(例如 X 然后 Z,没有 Y 的车床)将回零循环行为配置为适应其需求。 // 注意:回零循环旨在允许限位引脚共享,如果轴不在同一个循环中,但这需要在 cpu_map.h 文件中进行一些引脚设置更改。例如,默认回零循环可以与 X 或 Y 限位引脚共享 Z 限位引脚,因为它们在不同的循环中。通过共享引脚,可以为其他用途释放一个宝贵的 IO 引脚。从理论上讲,如果所有轴都使用单独的循环进行回零,或者反之,所有三个轴在单独的引脚上进行回零,但在一个循环中完成回零,那么所有轴的限位引脚可以减少到一个引脚,或者反之,所有三个轴在一个引脚上,但在一个循环中完成回零。另外,应注意,硬限位的功能不会受到引脚共享的影响。 // 注意:默认设置适用于传统的三轴 CNC 机器。首先是 Z 轴,然后是 X 和 Y 轴。 #define HOMING_CYCLE_0 (1<<Z_AXIS) // 必须:首先移动 Z 轴以清除工作区。 #define HOMING_CYCLE_1 ((1<<X_AXIS)|(1<<Y_AXIS)) // 可选:然后同时移动 X 和 Y 轴。 // #define HOMING_CYCLE_2 // 可选:取消注释并添加轴掩码以启用 // 注意:以下是为 2 轴机器设置回零的两个示例。 // #define HOMING_CYCLE_0 ((1<<X_AXIS)|(1<<Y_AXIS)) // 与 CoreXY 不兼容:同时回零 X 和 Y 轴。 // #define HOMING_CYCLE_0 (1<<X_AXIS) // 与 CoreXY 兼容:首先回零 X 轴 // #define HOMING_CYCLE_1 (1<<Y_AXIS) // 与 CoreXY 兼容:然后回零 Y 轴 // 在机器初始移动到限位开关后执行的回零循环次数。这有助于防止过冲并提高重复性。此值应为 1 或更大 // 移动到限位处触发后,重复触发的次数(总触发次数为:1+N) #define N_HOMING_LOCATE_CYCLE 1 // 整数 (1-128) // 启用单轴回零命令。$HX、$HY 和 $HZ 分别用于 X、Y 和 Z 轴回零。完整的回零循环仍然可以通过 $H 命令调用。默认情况下不启用。此选项仅用于处理需要在二轴和三轴机器之间切换的用户。这实际上非常罕见。如果您有二轴机器,请勿使用此选项。相反,只需更改两轴的回零循环。 // #define HOMING_SINGLE_AXIS_COMMANDS // 默认情况下不启用。取消注释以启用。 // 在回零后,Grbl 默认会将整个机器空间设置为负空间,这在专业 CNC 机器中是典型的,而不考虑限位开关的位置。取消注释此定义以强制 Grbl 始终在回零位置设置机器原点,而不考虑开关方向。 // #define HOMING_FORCE_SET_ORIGIN // 取消注释以启用。 // 启动后 Grbl 执行的块数。这些块存储在 EEPROM 中,大小和地址在 settings.h 中定义。根据当前的设置,最多可以存储并按顺序执行 2 个启动块。这些启动块通常用于根据用户偏好设置 G 代码解析器状态。 #define N_STARTUP_LINE 2 // 整数 (1-2) // 由于物理上不可能达到比 0.001 毫米或 0.0001 英寸更高的精度,因此 Grbl 打印某些值类型的浮点数小数点后的位数。这些设置是根据 CNC 机器的实际和常见值确定的。例如,位置值不能小于 0.001mm 或 0.0001in,因为机器的物理精度无法达到这个水平。因此,通常情况下不需要更改这些值,但如果需要,可以在这里进行更改。 // 注意:必须是 0 到 ~4 的整数值。大于 4 可能会产生舍入误差。 #define N_DECIMAL_COORDVALUE_INCH 4 // 坐标或位置值(英寸) #define N_DECIMAL_COORDVALUE_MM 3 // 坐标或位置值(毫米) #define N_DECIMAL_RATEVALUE_INCH 1 // 速度值(每分钟的英寸) #define N_DECIMAL_RATEVALUE_MM 0 // 速度值(每分钟的毫米) #define N_DECIMAL_SETTINGVALUE 3 // 浮点数设置值的小数位数 #define N_DECIMAL_RPMVALUE 0 // 转速值(每分钟的转数) // 如果机器的两个限位开关并联连接到一个轴上,则需要启用此功能。由于两个开关共享一个引脚,Grbl 无法告诉哪个开关启用。此选项仅影响回零,如果触发限位,则 Grbl 会报警并强制用户手动解除限位开关。否则,如果每个轴都有一个限位开关,请勿启用此选项。通过保持其禁用,您可以在限位开关上执行回零循环,而不必将机器移动到开关上。 // #define LIMITS_TWO_SWITCHES_ON_AXES // 允许 GRBL 跟踪和报告 G 代码行号。启用此选项意味着规划缓冲区将从 16 减少到 15,以为计划块数据中的附加行号数据腾出空间,这在 plan_block_t 结构中定义。 // #define USE_LINE_NUMBERS // 默认情况下禁用。取消注释以启用。 // 在成功的探针循环后,此选项通过自动生成的消息立即提供探针坐标的反馈。如果禁用,用户仍可以通过 Grbl 的 '$#' 打印参数访问最后的探针坐标。 #define MESSAGE_PROBE_COORDINATES // 默认情况下启用。取消注释以禁用。 // 启用第二个冷却控制引脚,通过 Arduino Uno 的模拟引脚 4 控制雾化冷却 G 代码命令 M7。仅在需要第二个冷却控制引脚时使用此选项。 // 注意:模拟引脚 3 上的 M8 洪水冷却控制引脚仍然可以正常使用。 // #define ENABLE_M7 // 默认情况下禁用。取消注释以启用。 // 此选项将使进给保持输入作为安全门开关。触发安全门时,立即强制进给保持,然后安全地断开机器电源。在重新启用安全门之前,无法恢复。在这种情况下,重新启用安全门后,Grbl 将重新通电并继续上一工具路径,就好像什么也没发生过。 // #define ENABLE_SAFETY_DOOR_INPUT_PIN // 默认情况下禁用。取消注释以启用。 // 在安全门开关切换并恢复后,此设置在恢复主轴和冷却的电源之间以及恢复循环之间设置上电延迟。 #define SAFETY_DOOR_SPINDLE_DELAY 4.0 // 浮点数 (秒) #define SAFETY_DOOR_COOLANT_DELAY 1.0 // 浮点数 (秒) // 启用 CoreXY 运动学。仅适用于 CoreXY 机器 // 重要提示:如果启用回零,请重新配置上面的回零循环 #define HOMING_CYCLE_0 (1<<X_AXIS) 和 #define HOMING_CYCLE_1 (1<<Y_AXIS) // 注意:此配置选项会改变 X 轴和 Y 轴的运动方式,操作原则在(http://corexy.com/theory.html)中定义。假设 A 和 B 轴的步进数相同。 // #define COREXY // 默认情况下禁用。取消注释以启用。 // 根据掩码反转控制命令引脚的逻辑。这实际上意味着您可以在指定的引脚上使用常闭开关,而不是默认的常开开关。 // 注意:顶部选项将屏蔽并反转所有控制引脚。底部选项是反转两个控制引脚的示例,即安全门和复位。请参阅 cpu_map.h 获取其他位定义。 // #define INVERT_CONTROL_PIN_MASK CONTROL_MASK // 默认情况下禁用。取消注释以禁用。 // #define INVERT_CONTROL_PIN_MASK ((1<<CONTROL_SAFETY_DOOR_BIT)|(1<<CONTROL_RESET_BIT)) // 默认情况下禁用。 // 基于以下掩码反转选定限位引脚状态。这会影响所有限位引脚功能,如硬限位和回零。但这与总体反转限位设置不同。 // 此构建选项将仅反转此处定义的限位引脚,然后将反转限位设置应用于所有这些引脚。当用户的机器上安装有常闭(NC)和常开(NO)开关的混合限位引脚时,这非常有用。 // 注意:除非您遇到需要此功能的情况,请不要使用此选项。 // #define INVERT_LIMIT_PIN_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)) // 默认情况下禁用。取消注释以启用。 // 将主轴使能引脚从低禁用/高使能翻转为低使能/高禁用。适用于一些预装电子板。 // 注意:如果启用了 VARIABLE_SPINDLE(默认情况下启用),此选项不起作用,因为PWM输出和主轴使能组合为一个引脚。如果您需要同时使用此选项和主轴速度PWM,请取消下面的配置选项 USE_SPINDLE_DIR_AS_ENABLE_PIN 的注释。 // #define INVERT_SPINDLE_ENABLE_PIN // 默认禁用。取消注释以启用。 // 将选择的冷却引脚从低禁用/高使能翻转为低使能/高禁用。适用于一些预装电子板。 // #define INVERT_COOLANT_FLOOD_PIN // 默认禁用。取消注释以启用。 // #define INVERT_COOLANT_MIST_PIN // 默认禁用。注意:在 config.h 中启用 M7 雾化冷却。 // 当 Grbl 上电或硬复位时,Grbl 默认情况下不会处于警报状态。这是为了使新用户尽可能简单地开始使用 Grbl。当启用回零并且用户安装了限位开关时,Grbl 将在警报状态下启动,以指示 Grbl 不知道其位置,并强制用户在继续之前进行回零。此选项始终强制 Grbl 在初始化时始终处于警报状态,而不考虑是否回零。此选项更适用于 OEM 和 LinuxCNC 用户,他们希望实现此上电行为。 // #define FORCE_INITIALIZATION_ALARM // 默认禁用。取消注释以启用。 // 在上电或复位时,Grbl 将检查限位开关状态,以确保在初始化之前不活动。如果检测到问题并且启用了硬限位设置,Grbl 将仅向用户发送消息以检查限位,并进入警报状态,而不是空闲状态。Grbl 不会抛出警报消息。 #define CHECK_LIMITS_AT_INIT // --------------------------------------------------------------------------------------- // 高级配置选项: // 用于调试目的的代码。不适用于一般使用,而且始终在不断变化。 // #define DEBUG // 取消注释以启用。默认禁用。 // 配置快速、进给和主轴速度覆盖设置。这些值定义了最大和最小允许的覆盖值,以及每个接收到的命令的粗略和精细增量。请注意描述中的允许值。 #define DEFAULT_FEED_OVERRIDE 100 // 100%。不要更改此值。 #define MAX_FEED_RATE_OVERRIDE 200 // 程序进给率的百分比(100-255)。通常为 120% 或 200% #define MIN_FEED_RATE_OVERRIDE 10 // 程序进给率的百分比(1-100)。通常为 50% 或 1% #define FEED_OVERRIDE_COARSE_INCREMENT 10 // (1-99)。通常为 10%。 #define FEED_OVERRIDE_FINE_INCREMENT 1 // (1-99)。通常为 1%。 #define DEFAULT_RAPID_OVERRIDE 100 // 100%。不要更改此值。 #define RAPID_OVERRIDE_MEDIUM 50 // 快速移动的百分比(1-99)。通常为 50%。 #define RAPID_OVERRIDE_LOW 25 // 快速移动的百分比(1-99)。通常为 25%。 // #define RAPID_OVERRIDE_EXTRA_LOW 5 // *不受支持* 快速移动的百分比(1-99)。通常为 5%。 #define DEFAULT_SPINDLE_SPEED_OVERRIDE 100 // 100%。不要更改此值。 #define MAX_SPINDLE_SPEED_OVERRIDE 200 // 程序主轴速度的百分比(100-255)。通常为 200%。 #define MIN_SPINDLE_SPEED_OVERRIDE 10 // 程序主轴速度的百分比(1-100)。通常为 10%。 #define SPINDLE_OVERRIDE_COARSE_INCREMENT 10 // (1-99)。通常为 10%。 #define SPINDLE_OVERRIDE_FINE_INCREMENT 1 // (1-99)。通常为 1%。 // 当执行 M2 或 M30 程序结束命令时,大多数 G 代码状态将恢复为默认状态。此编译时选项包括将进给、快速和主轴速度覆盖值恢复为程序结束时的默认值。 #define RESTORE_OVERRIDES_AFTER_PROGRAM_END // 默认启用。取消注释以禁用。 // Grbl v1.1及以后的状态报告更改还删除了禁用/启用大多数数据字段的功能。这对 GUI 开发人员造成了问题,他们必须管理几种情况和配置。新报告样式的提高效率使得所有数据字段都可以发送,而不会出现潜在的性能问题。 // 注意:下面的选项只在特定情况下需要禁用某些数据字段,但请注意GUI可能依赖于此数据。如果禁用,可能不兼容。 #define REPORT_FIELD_BUFFER_STATE // 默认启用。取消注释以禁用。 #define REPORT_FIELD_PIN_STATE // 默认启用。取消注释以禁用。 #define REPORT_FIELD_CURRENT_FEED_SPEED // 默认启用。取消注释以禁用。 #define REPORT_FIELD_WORK_COORD_OFFSET // 默认启用。取消注释以禁用。 #define REPORT_FIELD_OVERRIDES // 默认启用。取消注释以禁用。 #define REPORT_FIELD_LINE_NUMBERS // 默认启用。取消注释以禁用。 // 某些状态报告数据在实时情况下不是必要的,只有间歇性地需要,因为这些值不经常更改。以下宏配置了在调用状态报告多少次之前刷新相关数据并包含在状态报告中。但是,如果其中一个值发生更改,Grbl 将自动在下一次状态报告中包含此数据,而不考虑此时计数是多少。这有助于减少与高频率报告和激进流式传输相关的通信开销。还有一个繁忙和空闲的刷新计数,这将使 Grbl 在不做任何重要工作时更频繁地发送刷新。使用良好的 GUI,这些数据不需要经常刷新,大约几秒钟一次。 // 注意:WCO 刷新必须大于或等于 2。OVR 刷新必须大于或等于 1。 #define REPORT_OVR_REFRESH_BUSY_COUNT 20 // (1-255) #define REPORT_OVR_REFRESH_IDLE_COUNT 10 // (1-255),必须小于或等于繁忙计数 #define REPORT_WCO_REFRESH_BUSY_COUNT 30 // (2-255) #define REPORT_WCO_REFRESH_IDLE_COUNT 10 // (2-255),必须小于或等于繁忙计数 // 加速管理子系统的时间分辨率。较高的数字会产生更平滑的加速,特别是在步频低于10kHz的情况下,多轴运动的轴之间的混叠会引起听得到的噪音,并使机器发生震动。在更低的步频下,AMASS会自适应并提供更好的步骤平滑性。有关 AMASS 系统工作方式的更多详细信息,请参见 stepper.c。 #define ACCELERATION_TICKS_PER_SECOND 100 // 自适应多轴步骤平滑(AMASS)是一个高级功能,可以做到它的名字所示,平滑多轴运动的步进。此功能特别在步频低于10kHz的情况下,多轴运动的轴之间的混叠会引起听得到的噪音和机器的晃动。在更低的步频下,AMASS会自适应并提供更好的步骤平滑性。有关 AMASS 系统的工作方式的详细信息,请参见 stepper.c。 #define ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING // 默认启用。取消注释以禁用。 // 设置允许写入 Grbl 设置的最大步骤频率。此选项在设置模块中启用错误检查,以防止超出此限制的设置值。最大步骤频率严格限制于 CPU 速度,如果使用除 16MHz 的 AVR 之外的其他内容,则会更改。 // 注意:暂时禁用,如果闪存空间允许,将启用。 // #define MAX_STEP_RATE_HZ 30000 // Hz // 默认情况下,Grbl 将所有输入引脚设置为正常高操作,同时启用其内部上拉电阻。这通过只需要连接到地的开关简化了用户的布线,尽管建议用户采取额外的步骤,使用低通滤波器来减少引脚检测到的电气噪声。如果用户在 Grbl 设置中翻转了引脚,这只是翻转了哪个高或低读数表示活动信号。在正常操作中,这意味着用户需要连接正常打开的开关,但如果翻转,这意味着用户应该连接正常闭合的开关。 // 以下选项禁用内部上拉电阻,将引脚设置为正常低操作,并且现在必须将开关连接到 Vcc 而不是地。这也翻转了在 Grbl 设置中的反转引脚的含义,其中反转设置现在意味着用户应该连接正常打开的开关,反之亦然。 // 注意:与该特性相关的所有引脚都已禁用,即 XYZ 限位引脚,而不是各个轴的引脚。 // 警告:当禁用上拉电阻时,这需要使用下拉电阻进行额外的布线! //#define DISABLE_LIMIT_PIN_PULL_UP //#define DISABLE_PROBE_PIN_PULL_UP //#define DISABLE_CONTROL_PIN_PULL_UP // 设置工具长度补偿应用的轴。假定主轴始终与所选轴平行,工具定向朝向负方向。换句话说,会从当前位置减去正工具长度补偿值。 #define TOOL_LENGTH_OFFSET_AXIS Z_AXIS // 默认 z 轴。有效值为 X_AXIS、Y_AXIS 或 Z_AXIS。 // 启用不同 RPM 值的可变主轴输出电压。在 Arduino Uno 上,主轴使能引脚将在最大 RPM 时输出 5V,具有 256 个中间级别,在禁用时输出 0V。 // 注意:Arduino Uno 用户请注意!启用时,Z 限位引脚 D11 和主轴使能引脚 D12 将切换! // 需要硬件 PWM 输出在 D11 引脚上,用于可变主轴输出电压。 #define VARIABLE_SPINDLE // 默认启用。取消注释以禁用。 // 仅用于可变主轴输出。启用时,会强制 PWM 输出为最小占空比。 // 当主轴禁用时,PWM 引脚仍会读取 0V。大多数用户不需要此选项,但在某些情况下可能会有用。此最小 PWM 设置与最小主轴 RPM 设置相符,例如从最大 PWM 到最大 RPM。如果需要最小 RPM 的最小 PWM 和禁用时的电压之间有更大的电压差,请使用此选项。每个 PWM 值的此差值为 0.02V。因此,当最小 PWM 设置为 1 时,使能和禁用之间仅相隔 0.02 伏特。在 PWM 5 时,这将是 0.1 伏特。请记住,随着最小 PWM 值的增加,将失去 PWM 分辨率,因为在总共的 255 个 PWM 级别范围内,可以用于信号不同主轴速度的范围越来越少。 // 注意:通过以下公式计算最小 PWM 时的占空比:(% 占空比)=(SPINDLE_PWM_MIN_VALUE/255)*100 // #define SPINDLE_PWM_MIN_VALUE 5 // 默认禁用。取消注释以启用。必须大于零。整数(1-255)。 // 默认情况下,在 328p(Uno)上,Grbl 将可变主轴 PWM 和使能合并到一个引脚中,以帮助保留 I/O 引脚。对于某些设置,这些可能需要分开的引脚。此配置选项使用主轴方向引脚(D13)作为单独的主轴使能引脚,同时在引脚 D11 上使用主轴速度 PWM。 // 注意:此配置选项仅适用于启用了 VARIABLE_SPINDLE 并且使用 328p 处理器(Uno)的情况。 // 注意:如果没有方向引脚,M4 将没有引脚输出来指示与 M3 的区别。 // 注意:谨慎!Arduino 引导加载程序在启动时会切换 D13 引脚。如果您使用编程器(您可以使用一个备用的 Arduino 作为 "Arduino as ISP"。在网络上搜索如何连接它。),这种 D13 LED 切换应该会消失。我们尚未测试这一点。请报告进展如何! // #define USE_SPINDLE_DIR_AS_ENABLE_PIN // 默认禁用。取消注释以启用。 // 通过 USE_SPINDLE_DIR_AS_ENABLE_PIN 选项更改主轴使能引脚的行为。默认情况下,如果主轴速度为零且 M3/4 处于活动状态,Grbl 将不会禁用使能引脚,但仍会将 PWM 输出设置为零。这允许用户知道主轴是否处于活动状态并将其用作附加的控制输入。然而,在某些情况下,用户可能希望在零主轴速度时禁用使能引脚,并在主轴速度大于零时重新启用。此选项执行此操作。 // 注意:需要启用 USE_SPINDLE_DIR_AS_ENABLE_PIN。 // #define SPINDLE_ENABLE_OFF_WITH_ZERO_SPEED // 默认禁用。取消注释以启用。 // 启用此选项后,Grbl 将返回接收到的行的回显,该行已进行了预解析(删除了空格、大写字母、无注释),并且将立即由 Grbl 执行。回显不会在行缓冲区溢出时发送,但应用于 Grbl 的所有正常行都应该发送回显。例如,如果用户发送行 'g1 x1.032 y2.45(测试注释)',Grbl 将以 '[echo: G1X1.032Y2.45]' 的形式回显。 // 注意:仅用于调试目的!在进行回显时,这会占用宝贵的资源并可能影响性能。如果绝对需要进行正常操作,串行写缓冲区的大小应大大增加,以帮助在串行写协议内最小化传输等待。 // #define REPORT_ECHO_LINE_RECEIVED // 默认禁用。取消注释以启用。 // 规划器连接点的默认最小连接速度。对于从静止开始和缓冲区末尾的连接点,始终为零,除此之外,在每个缓冲块连接点,规划器都会计划默认的最小连接速度。此值控制机器在不考虑加速度限制或相邻块线移动方向之间的角度的情况下,穿过连接点的速度有多快。这对于不能容忍工具停留片刻的机器非常有用,例如 3D 打印机或激光切割机。如果使用,此值不应远远大于零,或者至少应该是机器正常工作所需的最小值。 #define MINIMUM_JUNCTION_SPEED 0.0 // (mm/min) // 设置规划器允许的最小进给速率。任何小于此值的值都将设置为此最小值。这还可以确保计划的运动始终完成,并考虑到任何浮点数舍入误差。尽管不建议,但更低于 1.0 mm/min 的值在较小的机器上可能适用,也许可以降低到 0.1mm/min,但您的成功可能因多种因素而异。 #define MINIMUM_FEED_RATE 1.0 // (mm/min) // 小角度近似在精确圆弧轨迹校正之前的弧生成迭代次数。如果弧的生成存在准确性问题,此参数可以减少,如果弧的执行因太多三角计算而变得复杂,此参数可以增加。 #define N_ARC_CORRECTION 12 // 整数(1-255) // 弧 G2/3 G 代码标准在定义上存在问题。基于半径的弧在半圆(π)或全圆(2π)处存在严重的数值误差。基于偏移的弧更加准确,但在弧是全圆(2π)时仍然存在问题。此定义解决了基于偏移的弧被命令为全圆时的浮点数问题,但由于数值舍入和精度问题,被解释为极小弧(大约机器极小值(1.2e-7rad))。此定义值设置机器极小值截断,以确定弧是否为全圆。 // 注意:调整此值时要非常小心。它应该始终大于 1.2e-7,但不要太大。默认设置应该可以捕获大多数全弧错误情况。 #define ARC_ANGULAR_TRAVEL_EPSILON 5E-7 // 浮点数(弧度) // 在停留期间执行的时间延迟增量。默认值设置为 50ms,可提供最大约 55 分钟的最大停留时间,足够满足大多数应用。增加此延迟将线性增加最大停留时间,但也会减少运行时命令执行的响应速度,如状态报告,因为这些在每个停留时间步之间执行。此外,要注意 Arduino 延迟定时器对长时间延迟的准确性不高。 #define DWELL_TIME_STEP 50 // 整数(1-255)(毫秒) // 通过在方向引脚设置和相应的步脉冲之间创建延迟来在步脉冲执行算法和规划器块之间创建延迟。主 Grbl 中断(定时器1比较)设置方向引脚,但不会立即设置步进引脚,就像在正常操作中一样。接下来,Timer2 比较会在步脉冲延迟时间之后触发,Timer2 溢出将在步脉冲时间加上步脉冲延迟后完成步脉冲,但现在延迟了步脉冲时间加上步脉冲延迟。 (感谢 langwadt 的建议!) // 注意:取消注释以启用。建议的延迟必须 > 3us,并且与用户提供的步脉冲时间相加后,总时间不能超过 127us。对于某些设置,报告的成功值范围为 5 到 20us。 // #define STEP_PULSE_DELAY 10 // 步脉冲延迟,以微秒为单位。默认禁用。 // 规划器缓冲区中同时计划的线性运动数。Grbl 使用的绝大部分 RAM 基于此缓冲区大小。仅当存在额外的可用 RAM 时(例如重新编译为 Mega2560)才能增加。或者如果 Arduino 由于可用 RAM 不足而开始崩溃,或者 CPU 不能及时跟上计划的新进动,那么可以减少该值。 // #define BLOCK_BUFFER_SIZE 16 // 取消注释以覆盖 planner.h 中的默认值。 // 在步进执行算法和规划器块之间创建中间步进段缓冲区。每个段是以恒定速度执行的一组步骤,持续时间由 ACCELERATION_TICKS_PER_SECOND 定义。它们被计算为规划器块速度配置文件的精确跟踪。该缓冲区的大小控制了步进执行前其他 Grbl 进程进行计算和操作的前导时间,目前大约为约 50 毫秒的步进移动。 // #define SEGMENT_BUFFER_SIZE 6 // 取消注释以覆盖 stepper.h 中的默认值。 // 从串行输入流到要执行的线路缓冲区的大小。还会影响每个启动块的大小,因为它们都存储为此大小的字符串。确保在 settings.h 中定义的内存地址处考虑可用 EEPROM 和所需的启动块数量。 // 注意:80 个字符对于极端情况来说并不是问题,但线路缓冲区的大小可能过小,可能会导致 g 代码块被截断。正式地说,g 代码标准支持多达 256 个字符。在将来的版本中,随着我们知道可以重新投资到其中的额外内存空间量,此默认值将增加。 // #define LINE_BUFFER_SIZE 80 // 取消注释以覆盖 protocol.h 中的默认值。 // 串行发送和接收缓冲区的大小。接收缓冲区通常用作由 Grbl 准备时处理的要处理的块的另一个流缓冲区。大多数流接口都会计算并跟踪发送到每个块发送到每个块响应的字符数。因此,如果需要更深的接收缓冲区进行流式处理,并且可用内存允许,可以增加接收缓冲区。发送缓冲区主要处理 Grbl 中的消息。仅当发送大型消息并且 Grbl 开始因等待发送其余消息而停滞时,才需要增加缓冲区。 // 注意:Grbl 生成的平均状态报告约为 0.5 毫秒,但串行 TX 流在 115200 波特率下传输典型 55 字符的报告需要 5 毫秒。最坏情况下的报告约为 90-100 个字符。只要串行 TX 缓冲区不会持续达到最大值,Grbl 将继续高效运行。将 TX 缓冲区的大小设置为最坏情况报告的大小。 // #define RX_BUFFER_SIZE 128 // (1-254) 取消注释以覆盖 serial.h 中的默认值。 // #define TX_BUFFER_SIZE 100 // (1-254) // 用于硬限位开关的简单软件去抖动功能。启用后,监视硬限位开关引脚的中断将启用 Arduino 的看门狗定时器,以在约 32 毫秒后重新检查限位开关引脚状态。这可以帮助具有问题的硬限位开关的 CNC 机床,但它无法解决来自外部源的信号电缆上的电气干扰问题。首先建议使用屏蔽信号电缆,其屏蔽与地连接(旧的 USB/计算机电缆效果良好且价格低廉),并将低通电路连接到每个限位引脚。 // #define ENABLE_SOFTWARE_DEBOUNCE // 默认禁用。取消注释以启用。 // 在处理器检测到硬限位 ISR 例程中的引脚更改时,强制 Grbl 检查硬限位开关的状态。默认情况下,由于弹跳开关可能导致此类状态检查错误读取引脚,因此 Grbl 将触发硬限位报警。当触发硬限位时,它们应该是 100% 可靠的,这也是此选项默认禁用的原因。仅当系统/电子设备可以保证开关不会弹跳时,我们建议启用此选项。这将有助于在机器脱离开关时防止触发硬限位。 // 注意:如果启用了 SOFTWARE_DEBOUNCE,则此选项无效。 // #define HARD_LIMIT_FORCE_STATE_CHECK // 默认禁用。取消注释以启用。 // 调整归位循环搜索和定位标量。这些是 Grbl 的归位循环使用的乘数,以确保在归位循环的每个阶段通过每个阶段的限位开关。搜索阶段使用轴的最大行程设置乘以 SEARCH_SCALAR 来确定查找限位开关的距离。一旦找到,定位阶段开始并使用归位回退距离设置乘以 LOCATE_SCALAR 来回退并重新激活限位开关。 // 注意:这两个值都必须大于 1.0 才能确保正确功能。 // #define HOMING_AXIS_SEARCH_SCALAR 1.5 // 取消注释以覆盖 limits.c 中的默认值。 // #define HOMING_AXIS_LOCATE_SCALAR 10.0 // 取消注释以覆盖 limits.c 中的默认值。 // 启用 '$RST=*'、'$RST=$' 和 '$RST=#' EEPROM 恢复命令。在某些情况下,这些命令可能不可取。只需注释掉所需的宏以禁用它。 // 注意:有关自定义 `$RST=*` 命令的设置,请参阅 SETTINGS_RESTORE_ALL 宏。 #define ENABLE_RESTORE_EEPROM_WIPE_ALL // '$RST=*' 默认启用。取消注释以禁用。 #define ENABLE_RESTORE_EEPROM_DEFAULT_SETTINGS // '$RST=$' 默认启用。取消注释以禁用。 #define ENABLE_RESTORE_EEPROM_CLEAR_PARAMETERS // '$RST=#' 默认启用。取消注释以禁用。 // 定义在设置版本更改和 `$RST=*` 命令时恢复的 EEPROM 数据。每当 Grbl 版本之间的设置或其他 EEPROM 数据结构发生更改时,Grbl 将自动擦除并恢复 EEPROM。此宏控制要擦除和恢复的数据。这对于需要保留特定数据的 OEM 特别有用。例如,BUILD_INFO 字符串可以通过单独的 .INO 脚本写入到 Arduino EEPROM 中,以包含产品数据。将此宏更改为不恢复构建信息 EEPROM 将确保在固件升级后保留此数据。 // 注意:取消注释以覆盖 settings.h 中的默认值 // #define SETTINGS_RESTORE_ALL (SETTINGS_RESTORE_DEFAULTS | SETTINGS_RESTORE_PARAMETERS | SETTINGS_RESTORE_STARTUP_LINES | SETTINGS_RESTORE_BUILD_INFO) // 启用 '$I=(string)' 构建信息写入命令。如果禁用,则任何现有的构建信息数据必须通过外部手段放入具有有效校验和值的 EEPROM 中。此宏选项对于防止用户覆盖此数据非常有用,当用于存储 OEM 产品数据时。 // 注意:如果禁用,并且为确保 Grbl 永远不会更改构建信息行,您还需要启用上面的 SETTING_RESTORE_ALL 宏,并从掩码中删除 SETTINGS_RESTORE_BUILD_INFO。 // 注意:请参阅附带的 grblWrite_BuildInfo.ino 示例文件,以单独写入此字符串。 #define ENABLE_BUILD_INFO_WRITE_COMMAND // '$I=' 默认启用。取消注释以禁用。 // AVR 处理器要求在 EEPROM 写入期间禁用所有中断。包括步进 ISR 和串行通信 ISR。在长时间 EEPROM 写入的情况下,此 ISR 暂停可能导致主动步进失去位置,并且串行接收数据丢失。此配置选项会在写入 EEPROM 时完全清空规划器缓冲区,以防止丢失步骤的任何机会。 // 但是,这并不能防止在 EEPROM 写入期间丢失串行 RX 数据,特别是如果 GUI 同时预先填充了串行 RX 缓冲区。强烈建议对于这些 G 代码(G10、G28.1、G30.1),GUI 在包含这些命令的块之后始终等待 "ok",然后再发送更多数据,以消除此问题。 // 注意:大多数 EEPROM 写入命令在作业期间都会被隐式阻止(所有 '$' 命令)。然而,坐标设置 G 代码命令(G10、G28/30.1)不会,因为它们是活动流式作业的一部分。目前,此选项仅在这些 G 代码命令中强制规划器缓冲区同步。 #define FORCE_BUFFER_SYNC_DURING_EEPROM_WRITE // 默认启用。取消注释以禁用。 // 在 Grbl v0.9 和之前,存在一个旧的未解决的 bug,即 `WPos:` 工作位置报告可能与正在执行的位置不一致,因为 `WPos:` 基于 g 代码解析器状态,这可能落后于几个运动。此选项会在更改工作坐标偏移量 `G10、G43.1、G92、G54-59` 的命令时,强制规划器缓冲区为空、同步和停止运动。这是确保 `WPos:` 始终正确的最简单方法。幸运的是,这些命令中很少使用需要连续运动。 #define FORCE_BUFFER_SYNC_DURING_WCO_CHANGE // 默认启用。取消注释以禁用。 // 默认情况下,Grbl 禁用所有 G38.x 探测循环命令的进给率覆盖。尽管这可能与一些专业级机床不同,但可以争论应该是这样的。大多数探测传感器产生的误差水平取决于速度。通过保持探测循环的编程进给率,探测传感器应该更加可重复。如果需要,可以通过取消注释以下定义来禁用此行为。 // #define ALLOW_FEED_OVERRIDE_DURING_PROBE_CYCLES // 默认禁用。取消注释以启用。 // 启用并配置安全门状态下的停车运动方法。主要用于 OEM 希望为其集成机器启用此功能的情况。目前,Grbl 假定停车运动仅涉及一个轴,尽管停车实现编写得可以轻松重构为任意数量的在不同轴上运动的运动,通过修改停车源代码。此时,Grbl 仅支持停车一个轴(通常为 Z 轴),在收回时沿正方向移动,并在恢复位置时沿负方向移动。该运动以缓慢的拉出收回运动、断电和快速停车执行。恢复到恢复位置会按照这些设置的相反顺序进行:快速恢复到拉出位置,超时的上电操作,然后以较慢的拉出速率再次插入到原始位置。 // 注意:仍处于进行中。机器坐标必须在所有负空间中,并且不适用于启用了 HOMING_FORCE_SET_ORIGIN 的情况。停车运动仅向正方向移动。 // #define PARKING_ENABLE // 默认禁用。取消注释以启用 // 配置启用时的停车运动选项。 #define PARKING_AXIS Z_AXIS // 定义执行停车运动的轴 #define PARKING_TARGET -5.0 // 停车轴目标。以 mm 为单位,作为机器坐标 [-max_travel,0]。 #define PARKING_RATE 500.0 // 在拉出后停车的快速速率,以 mm/min 为单位。 #define PARKING_PULLOUT_RATE 100.0 // 拉出/插入的缓慢进给率,以 mm/min 为单位。 #define PARKING_PULLOUT_INCREMENT 5.0 // 主轴拉出和插入距离,以 mm 为单位。递增距离。 // 必须为正值或等于零。 // 启用一组特殊的 M 代码命令,以启用和禁用停车运动。通过 `M56`、`M56 P1` 或 `M56 Px` 来启用,`M56 P0` 来禁用。该命令是模态的,并且会在规划器同步后设置。由于它是 g 代码,所以与 g 代码命令同步执行。它不是实时命令。 // 注意:PARKING_ENABLE 是必需的。默认情况下,初始化时 M56 处于活动状态。使用 DEACTIVATE_PARKING_UPON_INIT 来将 M56 P0 设置为上电默认值。 // #define ENABLE_PARKING_OVERRIDE_CONTROL // 默认禁用。取消注释以启用 // #define DEACTIVATE_PARKING_UPON_INIT // 默认禁用。取消注释以启用。 // 此选项将在进给保持期间通过立即调用主轴停止覆盖来自动禁用激光。但是,这也意味着如果需要,激光仍然可以通过禁用主轴停止覆盖来重新启用。这只是一个安全功能,以确保激光在停止时不会无意间保持通电状态,从而引发火灾。 #define DISABLE_LASER_DURING_HOLD // 默认启用。取消注释以禁用。 // 此功能将主轴 PWM/速度更改为具有简单分段线性曲线的非线性输出。适用于不从 Grbl 的标准主轴 PWM 线性模型产生正确 RPM 的主轴。需要在仓库的 /doc/script 文件夹中的 'fit_nonlinear_spindle.py' 脚本的解决方案。请参阅文件注释以了解如何收集主轴数据并运行脚本生成解决方案。 // #define ENABLE_PIECEWISE_LINEAR_SPINDLE // 默认禁用。取消注释以启用。 // N_PIECES、RPM_MAX、RPM_MIN、RPM_POINTxx 和 RPM_LINE_XX 常量都由 'fit_nonlinear_spindle.py' 脚本解决方案设置和给出。仅在启用 ENABLE_PIECEWISE_LINEAR_SPINDLE 时使用。确保常量值与脚本解决方案完全相同。 // 注意:当 N_PIECES < 4 时,无需使用未使用的 RPM_LINE 和 RPM_POINT 定义,并且将被省略。 #define N_PIECES 4 // 整数(1-4)。脚本解决方案中使用的分段线数量。 #define RPM_MAX 11686.4 // 模型的最大 RPM。$30 > RPM_MAX 将限制为 RPM_MAX。 #define RPM_MIN 202.5 // 模型的最小 RPM。$31 < RPM_MIN 将限制为 RPM_MIN。 #define RPM_POINT12 6145.4 // 当 N_PIECES >=2 时使用。线 1 和 2 之间的连接点。 #define RPM_POINT23 9627.8 // 当 N_PIECES >=3 时使用。线 2 和 3 之间的连接点。 #define RPM_POINT34 10813.9 // 当 N_PIECES = 4 时使用。线 3 和 4 之间的连接点。 #define RPM_LINE_A1 3.197101e-03 // 当 N_PIECES >=1 时使用。线 1 的 A 和 B 常量。 #define RPM_LINE_B1 -3.526076e-1 #define RPM_LINE_A2 1.722950e-2 // 当 N_PIECES >=2 时使用。线 2 的 A 和 B 常量。 #define RPM_LINE_B2 8.588176e+01 #define RPM_LINE_A3 5.901518e-02 // 当 N_PIECES >=3 时使用。线 3 的 A 和 B 常量。 #define RPM_LINE_B3 4.881851e+02 #define RPM_LINE_A4 1.203413e-01 // 当 N_PIECES = 4 时使用。线 4 的 A 和 B 常量。 #define RPM_LINE_B4 1.151360e+03 /* --------------------------------------------------------------------------------------- 此可选的双轴功能主要用于寻找双电机门式结构的两侧,即自我校准的归位循环。这需要一个额外的限位开关用于克隆的电机。为了进行自我校准,克隆轴上的两个限位开关必须在门式结构平方时触发。强烈建议始终启用电机,以确保门式结构保持在 $1=255 的设置下保持平方。 对于 Arduino Uno 上的 Grbl,克隆轴的限位开关必须与 Z 轴限位引脚共用,并连线。归位循环必须分别归位 z 轴和克隆轴,这已经是默认配置。 双轴功能通过将轴步进输出克隆到另一对步进和方向引脚上来工作。克隆电机的步进脉冲和方向可以独立设置。然而,为了节省宝贵的 flash 和内存,此双轴功能必须与父电机相同的设置(每步/mm、最大速度、加速度)共享。这不是用于独立的第四轴的功能。只是一个电机克隆。 警告:确保测试双轴电机的方向!在运行第一次归位循环或任何长时间运动之前,它们必须设置为相同方向!运动方向相反的电机可能会对您的机器造成严重损害!请自行决定是否使用此双轴功能。 */ // 注意:此功能需要约 400 字节的 flash。某些配置可能在 Arduino 328p/Uno 上的 flash 不足以适应。仅支持 X 轴和 Y 轴。变速主轴/激光模式受支持,但仅适用于一个配置选项。不支持核心 XY、主轴方向引脚和 M7 喷雾冷却。 // #define ENABLE_DUAL_AXIS // 默认禁用。取消注释以启用。 // 选择要镜像另一个电机的轴。目前仅支持 X 轴和 Y 轴。 #define DUAL_AXIS_SELECT X_AXIS // 必须为 X_AXIS 或 Y_AXIS // 为了防止归位循环在由于开关故障或噪声导致第二个电机的限位触发在第一个之前时滑动双轴,如果第二个电机的限位开关在以下定义的三个距离参数内不触发,则归位循环将自动中止。 // 轴长度百分比将自动计算失败距离,作为另一个非双轴轴的最大行程的百分比,即如果双轴选择为 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 // 浮点数(mm) #define DUAL_AXIS_HOMING_FAIL_DISTANCE_MIN 2.5 // 浮点数(mm) // 双轴引脚配置目前支持两个扩展板。取消注释您想要的扩展板,并注释其他扩展板。 // 注意:Protoneer CNC Shield v3.51 的 A.STP 和 A.DIR 分别连线到引脚 A4 和 A3。 // 变速主轴(即激光模式)构建选项适用并且可以启用或禁用。 // 冷却引脚 A3 移到 D13,取代了主轴方向。 #define DUAL_AXIS_CONFIG_PROTONEER_V3_51 // 取消注释以选择。注释其他配置。 // 注意:Arduino CNC Shield Clone(原始 Protoneer v3.0)的 A.STP 和 A.DIR 分别连线到 D12 和 D13。 // 由于可用引脚有限,该双轴的限位引脚和步进使能引脚必须在此相同端口上。现在,主轴使能引脚位于 A3 上,取代了冷却使能。冷却使能移到 A4 引脚上。主轴使能经常使用,此引脚设置有助于方便用户在不需要太多工作的情况下集成此功能。 // 变速主轴(即激光模式)与此配置不兼容。虽然变速主轴在技术上可以与此扩展板一起使用,但对于大多数用户配置来说,需要太多的更改来适应。最好通过共享所有限位开关在引脚 D9/D10 上(如 [X1,Z]/[X2,Y] 或 [X,Y2]/[Y1,Z]),分别归位每个轴,并更新大量代码以确保一切正常运行。 // #define DUAL_AXIS_CONFIG_CNC_SHIELD_CLONE // 取消注释以选择。注释其他配置。 /* --------------------------------------------------------------------------------------- OEM 单文件配置选项 说明:将下面的 cpu_map 和默认设置定义粘贴到此处,不需要包含 #ifdef。将本文件顶部的 CPU_MAP_xxx 和 DEFAULT_xxx 定义注释掉,编译器将忽略 defaults.h 和 cpu_map.h 的内容,并使用以下定义。 */ // 粘贴 CPU_MAP 定义在此处。 // 粘贴 DEFAULT 定义在此处。 #endif ``` ## 多固件共存 常规改固件内容是直接更改库文件的,多设备固件不同无法独立修改 我们可以在 grbl文件夹下创建一个 名为`grbl.ino`的空文件,然后使用IDE打开这个空文件就可以了 在IDE的 `libraries` 文件夹下无需安装 grbl库,在编译时会使用该项目文件夹中的库文件  **相关教程:** [lasterGrbl和GRBL使用指南](https://blog.csdn.net/acktomas/article/details/103728623)
造物者W
2023年10月19日 13:28
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码