Skip to content

Frequently Asked Questions

chamnit edited this page May 11, 2012 · 21 revisions

Please feel free to contribute more up-to-date answers or questions!

Compiling Grbl

Where can I download a pre-compiled Grbl HEX file to flash onto my Arduino?

The pre-compiled Grbl HEX files are located in the Downloads tab on the main front page.

The HEX file is larger than 32K that the Arduino will hold. Will it not upload?

No, the HEX file is in hexidecimal format, not binary. So it can be somewhat larger than the 32K flash limit on Arduinos.

Flashing Grbl

How do I flash Grbl to my Arduino?

Please check the Wiki help pages for details. If they are not up-to-date, please notify us or update them if you found they were in error or have another method. Thanks!

Does grbl overwrite the Arduino bootloader?

No, grbl fits on the ATmega328P without having to overwrite the bootloader; you will still be able to upload Arduino sketches after flashing without having to re-burn the bootloader.

Connecting Grbl

My CNC moves erratically when I boot up my Arduino! Why does it do this?

The Arduino bootloader takes a second or two to boot up before Grbl initializes. During this time, the stepper enable pin is LOW, which is enabled, before Grbl finishes its initialization and sets the pin to HIGH to disable the steppers. This brief moment makes your stepper drivers susceptible to electronic noise, so if your driver step pins have enough noise to falsely indicate a step, your steppers may start moving erratically.

We are looking into this, but this may be an unavoidable problem with straight-up Arduinos. There a some solutions however. You can try to locate the source of the electronic noise and remove it (a fan too close the other electronics). You can place a pull-up resistor on the stepper enable line to disable the steppers during the boot-up process. You can also remove the Arduino bootloader altogether and install Grbl through the ISCP header, which requires specific hardware to do it.

G-codes

Where are g-codes defined? What do each of them do?

Grbl follows the NIST NGC/RS274 v3 standard for numerical control, aka g-code. EMC2 and Mach3 follows this standard very closely as well. Click the link to download and read the g-code standard document.

Why are some of Grbl's g-codes a little different as on some other CNC machines?

While we follow the NIST NGC/RS274 v3 standard, this is actually not completely standardized between all existing CNC machines and manufacturers. Numerical control is pretty old, arcane, and predates MS-DOS. In other words, it's a mess. There have been pushes to standardized it, like by NIST, and it has been successful for the most of common g-code commands. Yet, there are a few g-codes that are not standardized, like the g-codes G28/G30, G92.X, etc. It's a goal of Grbl to strictly follow one published standard so that people may build off of it, so that not to muddy the g-code waters even more.

Why do you separate a circle into multiple arcs?

This comes from a problem of how the arc are defined in g-codes. In radius mode (R), solving the path for a complete circle will cause severe numerical round-off problems that are unavoidable. This can lead to an error in the tool path. In incremental arc mode (I,J), this isn't a problem. Some CNC manufacturers actually don't allow users to draw a complete circle to avoid this problem altogether, limiting users to either a maximum 90 or 180 degree arc motions only. It is good practice to seperate all of your arc motions into 90 or 180 degree motions.

What g-codes does Grbl support?

On v0.7 Master: Linear Motions (G0,G1), Arc Motions (G2,G3), Dwell (G4), Plane Selection (G17,G18,G19), Units (G20,G21), Homing* (G28,G30), Distance Modes (G90,G91), Feedrate Modes (G93,G94), Coordinate Offset (G92), Spindle Control (M3,M4,M5), and Others (G53,G80).

On v0.8 Edge: Coordinate System Select (G54+), Set Coordinate System Data (G10), Coordinate Offset Disable (G92.1), and Program Stop (M0,M1,M2,M30).