grbl_mc: controlling all but motion

grbl can control the spindle (on/off + dir or pwm) and coolant (flood/mist) via a couple of pins. But i wanted to have more control and be more flexible. The first version just interfaced to the spindle-on/off pin and translated that into a RC compatible pwm signal.

Currently, grbl is talking to the controller via i2c. There is a simple protocol to send rpm values, switch coolant, select tool index, switch tool and display a message.

Rpm values are sent as 15bit uint. That goes into a PID controller which measures the actual motor rpm and drives the motor accordingly.

Leonardo Version

The current version looks like this:


  • dual layer PCB, SMD parts, the TXB0108 is tricky to solder
  • connectors for SPI 1.8″ TFT display (including SDcard reader)
  • i2c connector (bottom right)
  • turn/press knob (bottom left)
  • rpm sense input (for an ir-reflective-optical/hall sensor)
  • esc control output
  • backlight on/off via FET
  • spare PWM FET for laser power control
  • some spare pins

Source is available in grbl_mc_leonardo at github.

Micro Version

There’s a version for the Micro attached to a 128×64 LC display showing all of the above information.

Next Version

The next version will run on a digispark pro + OLED @ 128×64.

There are a couple of firmware versions and iterations available, for digispark and for Arduino micro/Leonardo.

Source is available as download and for the later versions via github.

Leave a Reply

Your email address will not be published. Required fields are marked *