Registration Projects


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

RepRap X2V3

Overview Hardware Electronics Firmware LCD Support Host Software & Printing

Marlin X2 Firmware

The latest version of the Marlin X2 firmware is available on Github: It is based on Marlin mod for RepRap X2. The mainstream (RC2) changes up to April 2013 are currently merged in. On top of that the firmware has the following features: The history of changes from original Marlin repository is preserved, therefore merges back and forth can be performed. The default configuration file is for RepRap X2V3, but there are example configuration files for standard single extruder printers and RepRap X2 machines on branches "one_e" and "x2".

Dual X/Y drive machines support
That feature was introduced to support machines like RepRap X2V3 that have independently moving carriages for hotends on X or Y axis. The feature can be enabled by uncommenting DUAL_X_DRIVE or DUAL_Y_DRIVE defines in Configuration.h. The hardware configuration should also specify the pins for controlling the secondary extruder carriage motor driver and its hotend fan. Several defines that previously were "one-per-axis" have to be commented out and their dual axis equivalent used if the feature is enabled. For example, X0_HOME_DIR and X1_HOME_DIR are to be used instead of X_HOME_DIR when DUAL_X_DRIVE support is on. The default configuration is for the RepRap X2V3 machines. The detailed explanation for all the related configuration defines is available in the configuration files ( Configuration.h and Configuration_adv.h ).

M322 the "follow me" mode command
The "follow me" mode command, turns the "follow me" mode on or off for extruders (T<extruder> S<1-on/0-off>). The feature is designed for simultaneous printing from multiple identical extruders. The mode has to be "off" (0) for the active extruder. The extruders that have the mode set to "on" (1) repeat moves of the active extruder. The command also has H, F and M options for turning on/off "follow me heater" (H), "follow-me fan" (F) and "reverse" (R) modes. When the former 2 modes are "on" the temperature and fan setting changes of the active extruder are applied to the followers too. When the "reverse" mode is "on" the follower's carriage inverses the direction of the replicated moves on the shared axis. That results in printing of a mirror copy of the object. For example, that can be used to print left and right extruder parts for the printer simultaneously. Note, that "follow me" works by repeating the steps, therefore it requires identical extruders and filament. In the case of the dual drive machine identical pulleys and timing belts for both hotend carriages are to be used.

Position save/restore commands
M331 command saves current position coordinates (all axes including E, of the active extruder). It takes option S<SLOT> that specifies 0-based memory slot number to save into (defaults to 0).
M332 command restores the saved by M331 coordinates to the currently active extruder (not necessarily the same the coordinates were saved for). The options X<0|1>, Y<0|1>, Z<0|1> and E<0|1> can be used to ignore some of the axis (ignore by setting the option value to 0). The option F<SPEED> tells the command to make a move to the restored position at the speed specified. If 'F' is not used the restored coordinates set as current position and no move is made. The option S<SLOT> specifies memory slot to restore from.
The number of slots available is configured by NUM_POSITION_SLOTS define in Configuration_adv.h).

Compression compensation

Compression compensation effect
M340 allows to set up the filament compression compensation table. The table used by the firmware to approximate how much filament is going to be squeezed in the filament drive tube when machine is printing at the specific speed. The faster the printing speed the harder it is to push the filament through the hotend and more of it is compressed inside the tube. The default configuration acceleration and speed are tuned for very fast acceleration and relatively low maximum printing speed (40-50mm/sec). Because of that the acceleration phase is extremely short and the printing speed stays relatively stable during the moves. However, the speed has to be slowed down a lot when "cooling" is activated or the configuration is changed to slower the acceleration in order to achieve faster maximum printing speed. That's when the feature can help to improve the print quality. It is however quite hard to configure properly and it is often simply physically impossible for the hardware to adjust the filament position fast enough.
Here is an example of the filament compression compensation table:
#define C_COMPENSATION  {{0.1, 0.3}, {0.1, 0.3}}, \
                        {{0.5, 0.9}, {0.5, 0.9}}, \
                        {{1.0, 1.2}, {1.0, 1.2}}, \
                        {{3.0, 2.0}, {3.0, 2.0}}
Both extruders are configured identically. For the speed 0.1mm/sec extra 0.3mm of the filament should be pushed into the tube, for 0.5mm/sec that extra filament length should be 0.9mm and so on. The effect one can see is shown in the picture on the right. The normal printing speed there is slowed down for cooling when the vertical columns are to be printed. There is visible excess of plastic extruded printing the first layer of the 2 smallest columns without filament compression compensation (1). That excess amount of plastic is noticeably smaller when the feature is enabled (2).
At the moment of this writing the filament compression compensation code is still in the experimental stage. There are several additional (that can potentially be eliminated in the future) configuration options for the feature in the Configuration.h and Configuration_adv.h. For example, filament compression compensation setting for its minimum speed. The firmware has to take into account that extra filament might have to be pushed in or pulled out at the same time as the printing is happening. Normally the 3mm filament feeding speed for 50-100mm/sec printing is about 0.5-1mm/sec. That leaves a lot of room to run filament compensation adjustments (usual max E feed rate limit is over 20mm/sec). However, in some situations that might not be the case. For those situations there is a setting that controls minimum speed the compression compensation work should be done at. The moves (usually only retract/return) that do not allow firmware to do the compensation at least at this minimum speed are slowed down.
Additional details about all related configuration options can be found in the configuration files.

M220 Allows to turn on/off auto-slowdown (using A0/A1 option). This feature uses feed rate multiplier to adjust printing speed if machine prints too fast for planner buffer to be replenished in time. When it is enabled the feed rate multiplier is saved before the print and restored after. The feature is in the experimental state as of this writing.

Various command changes
Some of the configuration commands used to require changing the active extruder to modify its settings. Starting with the version 1.1.0 all the commands that can change extruder specific settings can take 'T' parameter for choosing the extruder the setting applies to. For example:
    M92 T0 E661.78
    M203 T0 E23.00
    M201 T1 E5000
    M204 T0 S3000.00 R60000.00
    M205 T1 E17.00
    M218 T1 X0.00 Y-0.05
All the above examples apply setting to the specified extruder, but the active extruder stays unchanged. As of this writing the complete list of commands accepting 'T' parameter for choosing extruder includes:
    M92  - Set axis_steps_per_unit.
    M104 - Set extruder target temp (use T# to explicitly specify extruder, 
           H and L can be used to increase/decrease the target temperature).
           Note: increase/decrease is allowed only once unless opposite operation is 
                 performed before more attempts are made.
    M105 - Read current temp (use A1 to read for all extruders, T# for specific one).
    M106 - Fan on (use T# for dual drive machines to tun the fan on/off for specific 
           extruder, A1 for all).
    M107 - Fan off (use T# for dual drive machines to tun the fan on/off for specific 
           extruder, A1 for all).
    M109 - Wait for extruder to reach target temp (use A1 to wait for all extruders, 
           W to change dwell time).
    M201 - Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000).
    M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 
           E10000) in mm/sec.
    M204 - Set default acceleration: S normal moves, R filament only moves (M204 S3000 R7000) 
           im mm/sec^2, also sets minimum segment time in ms (B20000) to prevent buffer 
           underruns and minimum feedrate (M20), T sets the extruder R applies to.
    M205 - Advanced settings: minimum travel speed S=while printing V=travel only,  
           B=minimum segment time X=maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk 
           (for retracts), T=extruder option E applies to
    M206 - Set additional homeing offset.
    M218 - Set hotend offset (in mm): T<extruder_number> X<offset_on_X> Y<offset_on_Y>.
    M322 - Turn the "follow me" mode on or off for an extruder (parameters: T  S<1-on/0-off>), 
           it's automatically off for the active extruder. If used without S parameter prints current 
           settings. If used without T parameter applies to all extruders.
    M340 - Set filament compression (bowden drive) compensation table parameters. P<0-N> - table 
           entry position, S<speed> - E speed in mm/sec, C<compensation> - length (in mm) 
           of the filament compressed in the guiding tube when extruding at the given speed. The table 
           entries should be ordered by E speed value. Set E speed to 0 for the last entry if need 
           less that max size entries.
Note that the above modifications required changing the options that previously used 'T' for other purposes. M205 now uses 'V' for minimum travel feedrate and M204 now uses 'R' for the retract acceleration.

The retract acceleration ('R' option of the M204 command) settings are now stored in EEPROM.

The option 'R' of M301 command sets the range (off of the target temperature) where the PID algorithm is to be used. Outside of that range the temperature control is done with simple ON/OFF logic.

The option A can be used to turn on multiple extruder output format for commands M105, M109 and M190 (can be useful for the host software). When it is enabled (A1), the active extruder is always listed first. The current and target temperatures are displayed for all the extruders and the heated bed. Example:
    SENDING:M105 A1
    ok T0:19/0 T1:19/0  B:19/0
The human readable (those pre-pended by "echo:") printouts can now be disabled during printing (see NO_ECHO_WHILE_PRINTING define in Configuration_adv.h). The debug flags (changed by "M504" command") can be used to re-enable them without re-compiling the firmware.