FDM 3D Printer for Stepcraft CNC Using MK8 Extruder

The aim of this project is providing a low cost 3D FDM printer for those already having a Stepcraft 3D router (CNC). Stepcraft sells its own FDM kit without heat bed and software for 480€ (as of Jan 2019). The BOM for this project is about 55€.

Nevertheless, I shall mentioned here that CNC and 3D printers have opposite constraints that make separate products a much better choice. Nowadays, we can found efficient and cost effective 3D printers for less than 200€.

To design our DIY FDM 3D Printer we have used the well known Repetier Firmware (v1.0.3) that runs on Arduino Mega 2560 platform, the RAMPS board associated with a graphic 128x64 LCD display and the famous MK8 Extruder.

The Repetier FW has been configured for the Stepcraft SC2/600 parameters and menus modified for this CNC specificity. It cannot be used for other Stepcraft models because the working areas are different unless you successfully change these parameters.

NOTE : There are still parameters optimizations such as acceleration, jerk and speed to perform in order to get the best from this project.

Why to build or not to build our DIY FDM kit:

  • Already have a 3D router and want to challenge yourself to turn it into a 3D FDM printer at reasonable cost.
  • Need to print small pieces only.
  • Will use only PLA (recyclable), PETG (suitable for food use) or TPU (flexible) filaments - these types of filaments do not required heated bed.


  • It's very, really very noisy ! (CNC are able to applied torque and are designed for low motions)
  • Z height is limited to about 100 mm.
  • Stepcraft misconception on X-axis (Z=0 will damage the CNC if X < 3.5 cm) is a permanent threat with 3D print where Z is low
  • Environment air flow is critical with 3D prints and there no easy way to enclose the CNC.
  • The very demanding displacements stress the steppers much more than in normal milling operations.
  • The CNC inertia is significant and limits the printing performances. Whereas
    the max speed can be up to 50 mm/s, limiting the speed to 30 mm/s seems to be a safer choice. Acceleration WAS the major issue to avoid layer shifted issues. This problem also concern the official stepcraft 3D kit (check their forums).
  • Cannot easily print ABS filament.
  • Will not really benefit from the size of the CNC because the printable area must remains small.

To sum-up, it's a fun project to demonstrate the capability of your CNC and learn about 3D printing but it cannot be seen as a replacement (at most a temporary one) of a dedicated 3D printer.


Automatic machines shall never be left unattended, especially when children are present in the area. 
Emergency stop shall be left clear for activation in case of unexpected behavior to prevent body injury (cuts or bruises, fingers are particularly exposed) or mechanical damages (see misconception limitations above).
If not handled properly, 3D printers hot ends may be responsible for burns and CNC having high torques may cause cuts and severe injures. You endorse the sole and complete responsibility for directs and indirects damages.

Step 1: Building the Hardware

What you will need :

  • MK8 Extruder (15,00 € - Amazon/Gancunsh)
  • DRV8825 driver (1,45 € - eBay/fr_aurora)
  • LCD 12864 Graphic Smart Display Controller pour RepRap (10,88 € - eBay/WiseDealmates)
  • RAMPS v1.4 (3,95 € - Amazon/ Passionné Capricorne)
  • Arduino ATMega 2560 (8,32 € - Amazon/Gazechimp)
  • Power supply 12V/60-120W (14,99 € - Amazon/Scalar)

The total cost for the Bill of Material is about 55€.

For cabling and assembling, check the photos and schematics.

  • For supporting the MK8 extruder, you have to mill/print the mounting bracket made of a hub and an arm (see STL file below and mechanical drawing above) that goes into the CNC tool holder. The hub part can be printed in plastic (infill 30% or more) or better milled from Teflon. The arm part uses aluminum or Teflon for better thermal insulation. The arm size can be different but should remain stiff enough.
    IMPORTANT : An aluminum arm will heat since the nozzle is attached to it. It may become very hot and could melt the hub if printed in plastic (for an extruder at 190°C, our alu arm reaches and stabilized about 40°C at the center of the hub for an ambient at 20°C). This could lead to negative impacts along with the ambient temperature, the FDM temperature use and the print duration. Choose your design accordingly.

  • The firmware supports a heat bed but when not installed, you must have a 100k resistor to emulate the bed sensor on RAMPS (reading will be 25°C). Slicing (with Repetier/Cura for example) will be done with heat bed temperature set to 0°C.
  • The DRV8825 stepper driver must be adjusted. With a multimeter, measure the voltage between GND and the potentiometer center. Adjust the potentiometer for reading 0.5V. Leave all 3 jumpers below the DVR8825 for 1/32 steps.
  • Build the cable between the RAMPS board and the SC2/600 as described on the photos (there are some additional wires for laser support and external 4th axis on RAMPS-E1 ). The cable between the MK8 extruder and the RAMPS box has been extended to 2 meters long (use wires with sufficient diameters) for securing the CNC moves anywhere without traction on the cable.
  • The MK8 fan is used for both cooling the head and the print. For better adhesion, it can be switch off during the first printed layer only but should remain on all the time included when the print is completed for cooling the head.

Step 2: Install the Material

Once your hardware is ready, you may want to install the electronics it into a casing. They are several boxes for RAMPS/Arduino Mega available from Thingiverse. I have chosen one that suited my needs and printed it (using a dedicated 3D printer). It took about 20 hours to have the box completely printed.

You need a fan to cool down the RAMPS electronics. Under 12V the current for the MK8 40W heater is about 3.5A. The Extruder heater MOSFET transistor heats to 110°C very quickly. You can attach a small isolated heat sink to the D10 output transistor. The PID management ensuring a +/-0.2°C regulation stresses a lot the transistor. With dead-time management with +/-1°C, the MOSFET temperature drops to 75°C and for -0.5/+1°C to 55°C.We have preferred this mode (see photo of the temperature variation) to limit the stress of the MOSFET and the lack of significant effect on the 3D printed object.

Take care for wires not to be in direct contact with the heater or bed transistors. The heated bed transistor is known to be fragile when using 12V bed as the current may rise up to 10A for 120W beds. You better have an external system if you intend to use a heated bed.

The filament roll can be located behind or below the CNC using a Thingiverse roll support suitable for most of the rolls. Ensure to polish correctly the 4 wheels in order to get a smooth rotation.

Step 3: The Repetier Firmware

Printing with a Stepcraft CNC

Stepcraft have some specifications that requires customization of the Repetier firmware:

  • Y endstop is at Max position.
  • Z endstop is at Max position so there is no Z=0 detection.
  • CNC has to be moved to a relative position (center of XY et Z touching the bed) that is set as the Origin.
  • Printing GCode file must be generated to a relative centered position.

  • CNC has to be homed, then moved to the Origin BEFORE printing.
  • There is always damage threats if moving with Z low and hurting the covers if X < 3.5cm (that's why we must print on the center of the XY working area).


Repetier Firmware modified for the Stepcraft

Upload the Arduino Mega with the HEX file below using XLoader for example (details for using XLoader can be found on Internet).

Current Control Box firmware is Repetier 1.0.3 modified for Stepcraft : 1.0.3-001

Testing the hardware/software must be done carefully and always be sure to quickly access the Stepcraft Emergency Stop button if behavior goes wrong.

Default communication baudrate is 250 000.

The firmware is pre-loaded with the default parameters for Stepcraft SC2-600.

  • First initialize the EEPROM with default parameters from "Configuration" menu, "Reset EEPROM" and "Store into EEPROM" (or using command M502 to load values from "configuration.h" and M500 to save values into eeprom)
  • Parameters can be dumped using M205 command or using the Repetier Host software (see below).


A- Before your first printing and each time you change the printing area conditions, the CNC must be calibrated (origin defined) using the menu "Calibrate machine" and following the procedure :

  1. Home all (set absolute origin)
  2. Move to X/Y center to reach the CNC working area center and avoid damage when lowering the Z-axis
  3. Set Z=0. Process carefully because the descent speed depends of the speed ot the rotary button. Once you have close to the bed surface, change for the "Z Babystep" menu to fine tune the Z=0 position. Maybe you should remove the extruder during the coarse approach and then do a fine tuning with the extruder installed. We also use the PC software (GCode Feeder or Repetier Host) to manually control the moves and smoothly approach and touch the surface.
  4. Set to origin or defining the current position as XYZ=0.
  5. Memorize position. This position can bere used later (even after a new power-up) if your Z=0 conditions have not changed

B- For the next printing, you will only have to:

  1. Open the Control menu ans select Home all to get the absolute coordinates reference.
  2. Move down the menu to Goto memorized pos. and wait for the extruder to move to the printing area with the pre-defined Z.
  3. Move up in the menu to Set to origin.
  4. Start the printing from the SD Card using the menu Print file.
  5. Your G-code must have been generated for a centered printing area (you can use our Repetier Host profile for Stepcraft).

Parameter changes: Most parameters can be changed using the Firmware menu. Some cannot be modified from these menus, such as the printer sizes. You can try using the "Repetier Host" menu "Config >> Firmware EEPROM Configuration" for these parameters.

NOTE: When an new coordinate system has been define by selecting "Set to origin", the main screen display reads the coordinates relative to the new origin which can be notice from X:/Y:/Z: turning into x:/y:/z:. Setting a new origin defines offsets on axis regarding the machine coordinate system. Homing one axis will reset the offset on this axis.

Step 4: Repetier Host Application

The Repetier Host application is able to slice your STL files and to control your printer. It will be helpful to use this interface while tuning your hardware. In order to work with the Stepcraft machine, the Printer Settings must be set and the Slicer (we use Cura) configured (see attached photos for Repetier Host Printer settings and Cura configuration).

The test.gcode file here attached must print fine with the default parameters (about 30 minutes).

NOTE: Repetier FW has an autorun feature for printing a file at startup or when inserting the SC card. Rename your GCode file as "init.g".


Some recommendations

Only use this printer for small prints (about 1 hour) because the MK8 extruder holder become warm. Do not stay too close to the CNC (but always keep eyes on it) or wear hearing protections. Ensure the filament tube and/or the cable between the extruder and the box are free to move. Place your CNC, filament roll and control box on steady surfaces.

Enjoy your work !

Step 5: Running the FDM

This section gives information about the behavior and the HMI (Human Machine Interface).


  • ?.?? coordinates means the machine has not been homing or stepper have been stopped since then.
  • init.g filename means there is no file currently selected for printing (init.g is the default autorun filename).
  • Layers are only displayed when printing from Repetier Host that send this kind of information.
  • Buffer gives the number of operations pending. On stop the buffer will have to be emptied first.
  • SD: and ETE: have been added for SD prints to display the percentage of data processed and a very coarse Estimate To End counter prorated from the SD file percentage and the elapsed time. With no further information, that's the kind of estimation the users could do to get a remaining time. For sure this is far to be accurate (we just do the computation for you).


GCode Feeder utility

During our project development, we have built the GCode Feeder utility to control the Stepcraft FDM. This utility is an Alpha version (very quickly developed) for debugging and not for production that feeds GCode and control the Stepcraft machine in FDM 3D printer, CNC Milling or Laser engraver modes. GCode Feeder support XBox gamepad for managing CNC displacement and speed, step by step GCode execution, and breakpoints, manual CNC control, etc.



  • Logo displays twice / machine reset during prints : The watchdog activates when there is no answer for at least 4 seconds. The boot is longer than 4 sec and reset the firmware. Should you have issue during prints, add the "M281 X0" line in the Start GCode for disabling the watchdog before printing.
  • Shifted layers : This occurs when acceleration and/or Jerk value are too high. Despite the maximum acceleration could be set to 200 mm/s, this will introduces systematic layer shifts. The values have been set respectively to 50 mm/s² for acceleration and 5 mm/s for jerk. These values can be optimized through trials.

Step 6: Optional Laser and CNC Supports

These two modes have not been fully tested and are provided AS IS. Keep in mind that this project is primarily a demonstrator for education.

The Repetier Firmware v1.0.3 has been compiled with both the Laser and CNC options. When running the CNC from a SD card file, the machine will actually stop only once the buffer will be emptied. For emergency press the ESB button on the Stepcraft. You can use our GCode Feeder utility to control the Mill or Laser, calibrate the origin and send CNC commands Step-by-Step for example.

IMPORTANT: GCode Feeder is experimental and in Alpha version only (for debugging).


Laser Mode

When using a Laser you must IMPERATIVELY comply with the Laser security rules.

Insert the M452 code in Start GCode to switch into Laser mode. The main screen will display Machine (XYZ) and Relative coordinate systems (xyz). The Laser power will be displayed as percentage.

Revert from laser mode by reseting the unit or sending the M451 Gcode (FDM mode).

Laser commands are M3 Sx (x=0-255) and M5 (laser off). Laser is active only during moves (G1) not on travels (G0) or static positions.

The 490Hz PWM signal for laser is available on Sub-D25 pin 17 (PWM Spindle) and active high.


CNC Mode

Insert the M453 code in Start GCode to switch into CNC mode.
The main screen will display Machine (XYZ) and Relative coordinate systems (xyz). Despite the spindle speed will be displayed (Max speed was set to 25000 rpm) the PWM is not supported and the spindle can only be On/Off (speed Sxxxx parameter is ignored).

Revert from CNC mode by reseting the unit or sending the M451 Gcode (FDM mode).

CNC commands are M3 Sx (x=rpm) for spindle on clockwise, M4 Sx for spindle on counterclocwise and M5 for spindle off. When Sx is omitted, speed is set to maximum.

CNC on/off signal is available on Sub-D15 pin 1 (Relay 1) and active high.
Spindle direction is available on Sub-D25 pin 14 (Relay 2) where M3 clockwise is +5V and M4 counterclockwise is 0V.

Step 7: The Repetier Firmware Customization

Repetier is a nice suite for 3D printing providing firmware (Arduino) and PC software (Repetier Host).

Should you want to create your own firmware, you will have to understand the Repetier firmware and create customized files:

  • Configuration.h : for the firmware parameters
  • CustomMenu.h : for your specific menu
  • CustomTranslations.h : for the language string translations
  • CustomEvents.h : for specifics routines and/or G-Codes declarations
  • CustomEventsImpl.h : for your routines implementation and new G/M-codes processing

This is not a trivial work whereas not impossible to achieve. Unfortunately, We have not found a comprehensive description of the Repetier firmware available over the Internet and of course this is far beyond the scope of this topic. Hopefully they are plenty of information available such as from the Repetier Firmware GitHub.



    • Epilog X Contest

      Epilog X Contest
    • Pocket Sized Contest

      Pocket Sized Contest
    • Pie Contest

      Pie Contest