Home » Projects » rStep


rStep is an open-source project which incorporates hardware & firmware & software to simplify the implementation of a CNC device.  The overarching goals are minimal cost, simple hardware (no dedicated PC requirement), and easy to use software.  I've too often seen people go through the steps of getting a dedicated PC running a real time operating system along with a software package to drive an antiquated LPT printer port connected to overpriced hardware which then controls a stepper motor.  There is no reason why it should be this difficult.

Hardware & Firmware

rStep aims to simplify the process by incorporating a gcode interpreter designed to run inside a microcontroller which is tightly integrated with stepper motor controllers and a DC motor controller.  The firmware & hardware are designed to be compatible with the arduino suite of tools and libraries to allow for beginners to quickly add functionality and customizations.  The first version has been designed as an arduino plug-n-play shield (picture above). 

In addition to providing the same capabilities as many commercial stepper motor controllers, the rStep hardware also has a number of innovations 

  • On the fly stepper-motor controller current adjustment (m-code)
  • Optically isolated limit switch inputs
  • Optically isolated emergency-stop input (can be used for auto-Z)
  • DC motor control (PWM  for variable power)
  • All configuration variables stored in non-volatile memory
  • LC filter for reducing noise from the power supply
Maximum Values
  Voltage Current
Stepper Controllers (Allergo A3984) 35V 2A / Winding
DC Motor Control (IRLR3410) 100V 17A


The hardware currently interfaces with any PC (windows/mac/linux) via a USB cable  and is controlled by sending gcode (and mcode) commands.  Future interfaces such as Ethernet or WIFI can be implemented if there is a need.

A client-side java application will handle viewing/editing the gcode, transmitting the gcode to the hardware, simple visualization so you know what's going on, and all configuration tasks to quickly setup your implementation.

Version 1

A proof of concept implementation has been fabricated and tested with excellent results.   My CNC mill uses an AC motor, thus a solid-state relay has been used in conjunction with the rStep, but is not necessary for most implementations which use a DC motor.

Version 2

The firmware needs to grow beyond the memory available to the atmega168 (used by most arduinos). It also seemed silly to expect people to buy a shield and an arduino for a dedicated piece of hardware.  Because of these reasons, it has been decided that rather than releasing the shield, a fully integrated version that's compatible with the arduino infrastructure will be made.  The target hardware uses an atmega644 which is compatible with the sanguino fork of the arduino code.  This not only affords us significantly more memory, but also a number of additional I/O pins for future expansion.  In addition to the atmega644s additional memory and flash, it incorporates:

  • Dedicated JTAG interface for debugging or for use as additional I/O pins
  • 6-Pin I/O header
  • Larger current traces
  • Multiple Status LEDs

The first PCBs have been assembled and are being tested.


So far, this project has been funded by me, and it's going to get more pricey.  So, reluctantly, I'm adding this donate button.