We now have a supported macro solution available for GrblHAL. The solution offers full ATC functionality with dust cover and tool recognition support.


You can download the latest version or visit our GitHub repository.

Firmware Requirements

GrblHAL Core

RapidChange ATC Macros for GrblHAL require GrblHAL core version 20240506 or higher.


FlexiHAL boards will require the uFlexiNET Ethernet and SD Card Module. FlexiHAL supported builds

Other Boards

Your board must support reading from an SD card. To build supported firmware:

  • Visit the GrblHAL Web Builder
  • Go through the appropriate tabs enabling what you need.
  • Make sure RS274 NGC Expression support is checked.
  • Generate and download the firmware.

Included Macros


P200.macro contains the settings for all RapidChange ATC macros. This file should be modified to contain the appropriate values for your RapidChange ATC configuration. Call this macro upon startup using the startup blocks as well as anytime you make changes to your configuration.

G65 P200

Enter the appropriate VALUE

#<_rc_setting_name> = VALUE

Example from P200.macro

; ******** BEGIN USER CONFIGURATION ********
; ATC Operations
; The units for your configuration: 20 = Inches, 21 = Millimeters
#<_rc_units> = 21
(debug, Units: #<_rc_units>)

; The number of pockets in your magazine.
#<_rc_pockets> = 6
(debug, Pockets: #<_rc_pockets>)


; The optional reference position for TLO. This may remain at it's default of 0 or be customized.
#<_rc_tlo_ref> = 0
(debug, Tool Measure TLO Ref Pos: #<_rc_tlo_ref>)
; ********* END USER CONFIGURATION *********


P208.macro opens the dust cover if enabled.

G65 P208


P209.macro closes the dust cover if enabled.

G65 P209


P231.macro performs a tool measurement if there is a valid current tool.

G65 P231


TC.macro is called whenever an M6 with a valid selected tool is encountered.


Upload Macros

It is a good idea to save a local copy of the P200.macro. You will need to modify this file to make changes to your RapidChange configuration.

Upload your modified P200.macro and the other provided macros to your SD card. You may need to reboot the firmware after uploading the macros for the first time so that the firmware can recognize TC.macro.

Set Startup Block

To enable automatically loading your RapidChange settings at startup, you can use a Grbl startup block to call P200 every time you power on or reboot the firmware.

First view your current startup blocks type $N from the console. You should see a response like this:


Choose an empty startup block and assign the P200 macro like this:

$N0=G65 P200

This will run the P200 macro and store it to be called at startup.

Test Macros

Your macros are now ready to be tested and fine tuned. Be sure to sync the current tool with the firmware before attempting a tool change for the first time.

M61 Qx

It is always a good idea to first get the tool change working with all peripherals disabled (dust cover, tool recognition, tool measurement). Once you are satisfied, enable and test each peripheral component individually.

Updating Settings

Whenever you want to update one or more settings:

  • Make the appropriate changes to your local P200.macro.
  • Upload the modified P200.macro to your SD card.
  • Execute G65 P200 to update the settings.
  • There is no need to restart the firmware.


Once the ATC process is fully configured and ready, follow this workflow each time you startup or reboot the firmware.

Sync the current tool with the firmware.

M61 Qx

If there is a tool loaded, measure it.

G65 P231

The tool is now synced and the TLO recorded. These values will persist and be tracked for the remainder of your session.

The TLO is employed and tracked using G43.1 Zx. As long as you do not alter this value at any time, you can adjust your work Z using any tool that has been measured. Each subsequent tool change and measurement will adust the tool length offset accordingly.

If at any time during your session the tool gets out of sync through an unexpected stop in the middle of a tool change cycle, follow the steps above before resuming operations.

Important Notes

Unload Current Tool

To unload the current tool for example to load an oversized tool manually use M6 T98. Unloading the current tool may not be achieved using M6 T0. (Calling M6 with 0 for the selected tool will bypass the TC.macro and set the tool in the UI to “None” without unloading it. The included macros use Tool 98 as a substitute for Tool 0 as a workaround for this behavior).

Debug Messages

The included macros use the DEBUG function to provide messages to the user and aid in debugging when there is an unexpected issue. In order for the messages to print to the console, setting $534 must be set to 1.

Updated on May 24, 2024

Still looking for answers? Ask our community on Discord.