Registration Projects


 RepRap X2V3   RepRap X2   Virtual Display Image Viewer for PDA   XUL Jabber Client   Voice Sensitive Screen Saver 

RepRap X2

Overview Hardware Firmware Host Software Printing


The firmware is based on Marlin. The modifications to support multiple extruders were made to the Marlin_v1 branch. The pull request was submitted, some changes have already been merged and hopefully the rest will eventually make it to the mainstream Marlin firmware. In the meantime you can use my RepRap X2 fork here on GitHub: (instructions below).

The code compiles with Arduino v0.22 or later. The Arduino downloads are available here: Arduino IDE v1.0 might have problems communicating with Arduino MEGA 2560 board used by RAMPS 1.4 electronics, so Arduino IDE v0.23 is the best option at the moment. After the download follow the Getting Started instructions for your OS.

When ready to build the X2 firmware, proceed to downloading the sources. If you are using GIT clone the latest code from here:
git clone -b m git://
Then open the file Marin.pde in the Arduion IDE, adjust the Configuration.h to match your printer configuration (the instructions are in the file), build and upload the firmware.
You can also download the code directly from here: (pick the latest version)

Here are the major commands (available in the latest X2 beta) related to the multiple extruders setup:
T<n> [F<speed>] [S<m>] - select extruder ("n" is the extruder number to select, "speed" is the feed rate at which to make the move for positioning the selected extruder, "S" controls either the E axis coordinate should be treated independenly or considered to be continuous to that of the extruder "m"). After the extruder is selected the generic commands that do not have extruder specified in the arguments will apply to the selected extruder only;
M104 [T<n>]... - can accept extruder number to set the temperature for;
M105 [T<n>] [A<0|1>]... - can accept extruder number to show the temperature for, or show temperature for all extruders;
M109 [T<n>] [A<0|1>] [W<NUM>]... - can specify which extruder to wait for or wait for all extruders to be ready, the W parameter can adjust the dwell time.
The M104 and M109 commands can also accept H<VALUE> or L<VALUE> parameter that can be used to make the target temperature higher or lower to the specivied value.
You can find the latest information in the firmware readme file under the Multiple extruder support section.

There are changes and fixes in the X2 firmware unrelated to the dual extruder support. For example the PID activation range (limiting the PID algoritm to be active only within specific range from the target temperature), separately configurable jerk speed for filament retracts, etc. See the commit log for all the commits and individual changes.

The command for switching extruders (T) can be used in a few ways. Its behaviour is controlled by F and S options.

If you change the extruders and specify the F option the new active extruder will be moved to the same spot where the previous one was pointing. If F is not specified the move is not performed, but the coordinates are adjusted anyway (i.e. the printer knows that it points now to a point off of its position before the extruder change).

The S modifier sets the current E position of the new current extruder to be the last seen position of the extruder specified by the modifier's parameter. For example, let say both extruder 0 and 1 initially are at point 0 on E axis. Then the support material is printed with the extruder 0 and its E coordiate advances. Then T1 S0 command is sent to the printer to switch to extruder 1 for printing the object itself. Since S0 is specified the E axis for extruder 1 is set to the last seen E position of the extruder 0 and the G-code generated for absolute E coordinate moves can then be used to continue print with extruder 1 without adjusting E coordinates of the moves (assuming the extruders are identical).
Alternatively, if the S modifier is not used, the printer can print G-code generated for each extruder independently. That's the method the color prints here and here are done with.