There exist different printer types that require some special treatments due to their nature. On this page we try to point out the differences and special settings required for each printer type. Please read them carefully and try to understand the implications of the type.
Caresian printers are the classical drive system. Each motor drives one axis and together they build a caresian coordinate system. In addition the E motor might be used by extruders, so normally you have a 4 axis system.
Core XYZ printers use a combination of motors to drive the 3 caresian axes. To move a axis you need a combined movement which can be described as a linear combination with weighting factors. That is the way we have solved this implementation. That way we can have XY as well as XZ or YZ combinations. We can even have different ratios. These ratios are defined in COnfiguration.h like this:
/* Ratios for core xyz. First index denotes motor and second axis. For each motor you can set the ratio of x,y,z position that adds to the position. 0 = no contribution. */ // X motor = x + y #define COREXYZ_X_X 1 #define COREXYZ_X_Y 1 #define COREXYZ_X_Z 0 // Y motor = x - y #define COREXYZ_Y_X 1 #define COREXYZ_Y_Y -1 #define COREXYZ_Y_Z 0 // Z motor = z #define COREXYZ_Z_X 0 #define COREXYZ_Z_Y 0 #define COREXYZ_Z_Z 1
Delta kinematic is rather complicated. Extruder is connected to 3 vertical slicers. The position of the tool can be exactly defined by a nonlinear equation with the three slider positions as parameter. While it looks quite cool how they work, this nonlinearity is the source of many problems. Any deviation from the perfect setup described will cause the tool to move not exactly as wanted in different regions. It is quite hard to find out what the real reason for an error is and you normally end up just tweaking the parameter to reduce the error to a minimum.
Deltas are described by these additional parameter in Configuration.h:
// Special geometry definition if printer type is delta /* =========== Parameter essential for delta calibration =================== C, Y-Axis | |___| Carriage horizontal offset | | \------------------------------------------ |_________ X-axis | \ | / \ | \ DELTA_DIAGONAL (length) Each move this Rod Height / \ \ is calculated / \ \ Carriage is at printer center! | A B \_____/-------------------------------- |--| End effector horizontal offset (recommend set it to 0) |----| DELTA_HORIZONTAL_RADIUS (Horizontal rod pivot to pivot measure) Column angles are measured from X-axis counterclockwise "Standard" positions: alpha_A = 210, alpha_B = 330, alpha_C = 90 */ #define DELTA_DIAGONAL 444.800f #define DELTA_HORIZONTAL_RADIUS 209.900f // Radius wherein we restrict the movements. Must be smaller then physical // reachable area. #define DELTA_PRINT_RADIUS 209.0f #define DELTA_ANGLE_A 210.0f #define DELTA_ANGLE_B 330.0f #define DELTA_ANGLE_C 90.123f // Following values are just corrections to perfect state // Correction of individual diagon length #define DELTA_CORRECTION_A 0.0f #define DELTA_CORRECTION_B 0.0f #define DELTA_CORRECTION_C 0.0f // Correction of horizontal radius #define DELTA_RADIUS_CORRECTION_A 0.0f #define DELTA_RADIUS_CORRECTION_B 0.0f #define DELTA_RADIUS_CORRECTION_C 0.0f // Offset to top end stops to be at equal height #define DELTA_HOME_OFFSET_A 2.9f #define DELTA_HOME_OFFSET_B 0.0f #define DELTA_HOME_OFFSET_C 0.85f
The dual x axis printer has 2 individual motors controlling one tool. Both are controlled by the x axis also internally the right tool will be controlled by the a axis. So this printer type has 5 axis (NUM_AXES 5). This allows the firmware to move both tools individually at the same time. This comes into play if you use the ditto mode that allows it to print the same object twice. Then both will move identically or mirrored.
The next special thing is that these printers normally park the tools left and right from the bed. That allows full access of the bed for both extruders and you can simply prime to compensate lost filament next to the bed so you have no need of a prime pillar. These park positions are defined separately so the "official" print region is defined as the region both extruders can reach without colliding with the inactive tool. None the less, the firmware will report true positions for active tool which can be left or right of the "official" dimensions.
After homing the tools stay at their park position. There is a mode called lazy mode that tries to keep them there as long as possible. To be exactly, it will move them out of the pocket on the first extrusion mode. This makes a difference when you switch extruders during the print. Both will work, but the lazy version may reduce crossing the objects a bit more and reduce the printing time a bit.
A dual x axis printer makes only sense if you have your bed really physically leveled. This is because it can happen that both tools are over the bed and in that case a software auto leveling could only adjust z for one tool and the other would then print too high or too low. So use only physical bed leveling for this printer type. A motorized bed correction is ok, but since you only need to do it once that might be overkill. If you have a z probe it must be connected the the left carriage!
Due to the double x axis definition of all limits is difficult to align to all conditions, therefore we use
a clear definition of limits that determines all other limits automatically. The main parameter are the tool
offsets left and right. They define the distance to the virtual x = 0 position. A good choice for x = 0 is over
the bed at a position that both can reach. Then DUAL_X_MIN_DISTANCE is the next important value. That is the
minimum distance the 2 heads must have to not collide. Any motion closer will be prevented.
The last 2 parameter are BED_X_MIN and BED_X_MAX. They must both lie in the area that both heads can reach without collision. Firmware will reduce area actively if the condition is broken.
The positions X and A min and max are all derived from these, so it does not matter what you set them.
#define PRINTER_TYPE PRINTER_TYPE_DUAL_X #define NUM_AXES 5 // X,Y,Z and E for extruder A,B,C would be 5,6,7 // Do not forget to add the extra parameter for A axis! #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_A 600 #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_A 600 #define AAXIS_STEPS_PER_MM 512 #define MAX_FEEDRATE_A 150 #define A_HOME_PRIORITY 0 #define A_MAX_LENGTH X_MAX_LENGTH #define A_MIN_POS X_MIN_POS // Position of the left and right tool when homed #define DUAL_X_LEFT_OFFSET -44.5 #define DUAL_X_RIGHT_OFFSET 404.7 // Minimum distance between both heads #define DUAL_X_MIN_DISTANCE 44 // 1 = lazy mode active, 0 = disabled #define LAZY_DUAL_X_AXIS 0