The latest version of the Marlin X2 firmware is available on Github:
https://github.com/dob71/MarlinX2.
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:
- Dual X or Y drive machines support;
- M322 the "follow me" mode command;
- M331/M332 (position save/restore commands);
- M340 (filament compression compensation) command (experimental);
- M220 command extensions for auto-slowdown (experimental);
- All setup commands take 'T' parameter;
- Acceleration and retract_acceleration are now saved in EEPROM;
- Failsafe for M109, M104 H and L options;
- Introduced new optional output format for M105, M109 and M190;
- Added option to disable human readable output during printing.
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.
Auto-slowdown
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.