z Leveling
Hi, I am still having a lot of issues. At this rate of asking questions and waiting a day or two, I expect to have it done maybe at the end of the month. I wish there was someone to call and I would have it done in 15 minutes. Anyway, I followed the video you produced (thank you) and I have pasted the log after my M99 commands where I used a rod to align the carriages. I note here that I had to use the screws that hold the rods into them as the printed parts that attach the rods to the sliders are very uneven, not well made. So anyway, I get the errors listed and have still, no clear idea of what I am doing (even though I am a former electronics hardware engineer). I am one of those folks who have to understand what and why he is doing something before he can do them I guess. And thank you so much for your responses to my previous questions.
20:50:47.905 : N568 M99 X0 *112
20:51:14.051 : N578 M99 Y0 *112
20:51:43.320 : N588 M99 Z0 *124
20:52:51.492 : N611 G132 S1 *77
20:52:51.497 : Info:Autoleveling disabled
20:52:53.147 : Tower 1:0
20:52:53.147 : Tower 2:49
20:52:53.147 : Tower 3:31
20:52:53.207 : RequestPause:Homing failed!
20:52:53.262 : X:0.00 Y:0.00 Z:246.238 E:0.0000
20:52:59.455 : N615 G90 *50
20:52:59.462 : N616 G1 X0 Y0 F4800 *98
20:52:59.465 : N617 G1 Z140 F1000 *32
20:52:59.469 : N618 G92 E0 *104
20:52:59.469 : N619 G1 F1000 *97
20:53:26.550 : N629 G32 S2 *116
20:53:26.555 : Z correction disabled
20:53:29.373 : X:0.00 Y:0.00 Z:246.238 E:0.0000
20:53:29.435 : Error:B hit floor
20:53:29.439 : Warning:Invalid delta coordinate - move ignored x:-3650 y:3650 z:960
20:53:29.440 : Warning:in queueDeltaMove to calculateDeltaSubSegments returns error.
20:53:29.443 : Warning:moveTo / queueDeltaMove returns error
20:53:39.411 : Z-probe:3.70 X:-40.38 Y:40.38 zCorr:0.00
20:53:39.634 : Error:A hit floor
20:53:39.637 : Warning:Invalid delta coordinate - move ignored x:3021 y:4505 z:960
20:53:39.638 : Warning:in queueDeltaMove to calculateDeltaSubSegments returns error.
20:53:39.641 : Warning:moveTo / queueDeltaMove returns error
20:53:42.537 : Z-probe:3.69 X:5.77 Y:54.23 zCorr:0.00
20:53:42.845 : Error:C hit floor
20:53:42.848 : Warning:Invalid delta coordinate - move ignored x:-3204 y:-4726 z:960
20:53:42.848 : Warning:in queueDeltaMove to calculateDeltaSubSegments returns error.
20:53:42.852 : Warning:moveTo / queueDeltaMove returns error
20:53:48.950 : Z-probe:17.24 X:-61.54 Y:-53.46 zCorr:0.00
20:53:50.500 : Error:C hit floor
20:53:50.500 : Warning:Invalid delta coordinate - move ignored x:-4923 y:-4277 z:960
20:53:50.504 : Warning:in queueDeltaMove to calculateDeltaSubSegments returns error.
20:53:50.508 : Warning:moveRelativeDistanceInSteps / queueDeltaMove returns error
20:53:51.342 : Transformation matrix: 1.000000 -0.000007 0.000083 0.000000 0.995948 0.089926 -0.000083 -0.089926 0.995948
20:53:51.342 : Printer height:246.65
20:53:51.342 : Info:Autoleveling enabled
20:53:52.137 : X:-53.20 Y:-52.17 Z:16.763 E:0.0000
20:53:52.137 : Info:Autoleveling disabled
20:53:58.895 : X:0.00 Y:0.00 Z:246.650 E:0.0000
20:53:58.895 : Info:Autoleveling enabled
20:50:47.905 : N568 M99 X0 *112
20:51:14.051 : N578 M99 Y0 *112
20:51:43.320 : N588 M99 Z0 *124
20:52:51.492 : N611 G132 S1 *77
20:52:51.497 : Info:Autoleveling disabled
20:52:53.147 : Tower 1:0
20:52:53.147 : Tower 2:49
20:52:53.147 : Tower 3:31
20:52:53.207 : RequestPause:Homing failed!
20:52:53.262 : X:0.00 Y:0.00 Z:246.238 E:0.0000
20:52:59.455 : N615 G90 *50
20:52:59.462 : N616 G1 X0 Y0 F4800 *98
20:52:59.465 : N617 G1 Z140 F1000 *32
20:52:59.469 : N618 G92 E0 *104
20:52:59.469 : N619 G1 F1000 *97
20:53:26.550 : N629 G32 S2 *116
20:53:26.555 : Z correction disabled
20:53:29.373 : X:0.00 Y:0.00 Z:246.238 E:0.0000
20:53:29.435 : Error:B hit floor
20:53:29.439 : Warning:Invalid delta coordinate - move ignored x:-3650 y:3650 z:960
20:53:29.440 : Warning:in queueDeltaMove to calculateDeltaSubSegments returns error.
20:53:29.443 : Warning:moveTo / queueDeltaMove returns error
20:53:39.411 : Z-probe:3.70 X:-40.38 Y:40.38 zCorr:0.00
20:53:39.634 : Error:A hit floor
20:53:39.637 : Warning:Invalid delta coordinate - move ignored x:3021 y:4505 z:960
20:53:39.638 : Warning:in queueDeltaMove to calculateDeltaSubSegments returns error.
20:53:39.641 : Warning:moveTo / queueDeltaMove returns error
20:53:42.537 : Z-probe:3.69 X:5.77 Y:54.23 zCorr:0.00
20:53:42.845 : Error:C hit floor
20:53:42.848 : Warning:Invalid delta coordinate - move ignored x:-3204 y:-4726 z:960
20:53:42.848 : Warning:in queueDeltaMove to calculateDeltaSubSegments returns error.
20:53:42.852 : Warning:moveTo / queueDeltaMove returns error
20:53:48.950 : Z-probe:17.24 X:-61.54 Y:-53.46 zCorr:0.00
20:53:50.500 : Error:C hit floor
20:53:50.500 : Warning:Invalid delta coordinate - move ignored x:-4923 y:-4277 z:960
20:53:50.504 : Warning:in queueDeltaMove to calculateDeltaSubSegments returns error.
20:53:50.508 : Warning:moveRelativeDistanceInSteps / queueDeltaMove returns error
20:53:51.342 : Transformation matrix: 1.000000 -0.000007 0.000083 0.000000 0.995948 0.089926 -0.000083 -0.089926 0.995948
20:53:51.342 : Printer height:246.65
20:53:51.342 : Info:Autoleveling enabled
20:53:52.137 : X:-53.20 Y:-52.17 Z:16.763 E:0.0000
20:53:52.137 : Info:Autoleveling disabled
20:53:58.895 : X:0.00 Y:0.00 Z:246.650 E:0.0000
20:53:58.895 : Info:Autoleveling enabled
Comments
AGain, when I see things like Floor saftey margin and have no idea how to calculate that, or Max Horz Radius, Should I extrapolate corners? What criteria should I use , Again these are examples of about HALF of the things I need to enter values for but do not have any documentation to give me even an idea of where to start. Is there a fully commented config.h I can use to help me? Is there somewhere where somebody who has not been emersed in this for years like most here have been, like me, get a handle on this without spewnding a month figure it out by trial and error? (a year after fixing damage to printer) I find no books and all who write SW assume that everybody knows what is up with what has been done. I have been told that my offset is wrong. What offset? where is it found? The only word "offset" I find besides the extruder (and I have no idea what that is for either, since it does not say) is the X Y Zprobe offset which I take to mean what direction/distance the probe is from the nozzle. But again I must guess since I have no udea what it means because I find no explaination for it either. Surely with all the users of this out there someone has written how to determine what values to enter for all this stuff ? ?
My printer seems to want to work, it moves fine, homes fine even seemed to z probe fine except for all the errors. but half the entries I made on the Configurator tool were complete guesses since half the entries (at least half) give no indication on how to determine them. PLEASE HELP
value="140.000">Horizontal rod radius at 0,0</epr><epr pos="925" type="3" value="65.000">Max printable radius</epr><epr pos="891" type="1" value="70">Segments/s for travel</epr><epr pos="889" type="1" value="180">Segments/s for printing</epr><epr pos="893" type="1" value="0">Tower X endstop offset</epr><epr pos="895" type="1" value="49">Tower Y endstop offset</epr><epr pos="897" type="1" value="31">Tower Z endstop offset</epr><epr pos="901" type="3" value="210.000">Alpha A(210):</epr><epr pos="905" type="3" value="330.000">Alpha B(330):</epr><epr pos="909" type="3" value="90.000">Alpha C(90):</epr><epr pos="913" type="3" value="0.000">Delta Radius A(0):</epr><epr pos="917" type="3" value="0.000">Delta Radius B(0):</epr><epr pos="921" type="3" value="0.000">Delta Radius C(0):</epr><epr pos="933" type="3" value="0.000">Corr. diagonal A</epr><epr pos="937" type="3" value="0.000">Corr. diagonal B</epr><epr pos="941" type="3" value="0.000">Corr. diagonal C</epr><epr pos="1024" type="3" value="0.000">Coating thickness</epr><epr pos="808" type="3" value="2.000">Z-probe height</epr><epr pos="929" type="3" value="10.000">Max. z-probe - bed dist.</epr><epr pos="812" type="3" value="10.000">Z-probe speed</epr><epr pos="840" type="3" value="25.000">Z-probe x-y-speed</epr><epr pos="800" type="3" value="-25.000">Z-probe offset x</epr><epr pos="804" type="3" value="0.000">Z-probe offset y</epr><epr pos="816" type="3" value="-75.000">Z-probe X1</epr><epr pos="820" type="3" value="75.000">Z-probe Y1</epr><epr pos="824" type="3" value="75.000">Z-probe X2</epr><epr pos="828" type="3" value="75.000">Z-probe Y2</epr><epr pos="832" type="3" value="-75.000">Z-probe X3</epr><epr pos="836" type="3" value="-75.000">Z-probe Y3</epr><epr pos="880" type="0" value="1">Autolevel active (1/0)</epr><epr pos="976" type="3" value="0.000">tanXY Axis Compensation</epr><epr pos="980" type="3" value="0.000">tanYZ Axis Compensation</epr><epr pos="984" type="3" value="0.000">tanXZ Axis Compensation</epr><epr pos="1020" type="0" value="0">Enable retraction conversion</epr><epr pos="992" type="3" value="3.000">Retraction length</epr><epr pos="1000" type="3" value="40.000">Retraction speed</epr><epr pos="1004" type="3" value="0.000">Retraction z-lift</epr><epr pos="1008" type="3" value="0.000">Extra extrusion on undo retract</epr><epr pos="1016" type="3" value="20.000">Retraction undo speed</epr><epr pos="200" type="3" value="370.000">Extr.1 steps per mm</epr><epr pos="204" type="3" value="50.000">Extr.1 max. feedrate</epr><epr pos="208" type="3" value="20.000">Extr.1 start feedrate</epr><epr pos="212" type="3" value="5000.000">Extr.1 acceleration</epr><epr pos="216" type="0" value="3">Extr.1 heat manager</epr><epr pos="217" type="0" value="230">Extr.1 PID drive max</epr><epr pos="245" type="0" value="40">Extr.1 PID drive min</epr><epr pos="218" type="3" value="7.0000">Extr.1 PID P-gain/dead-time</epr><epr pos="222" type="3" value="2.0000">Extr.1 PID I-gain</epr><epr pos="226" type="3" value="40.0000">Extr.1 PID D-gain</epr><epr pos="230" type="0" value="255">Extr.1 PID max value</epr><epr pos="231" type="2" value="0">Extr.1 X-offset</epr><epr pos="235" type="2" value="0">Extr.1 Y-offset</epr><epr pos="290" type="2" value="0">Extr.1 Z-offset</epr><epr pos="239" type="1" value="1">Extr.1 temp. stabilize time</epr><epr pos="250" type="1" value="150">Extr.1 temp. for retraction when heating</epr><epr pos="252" type="1" value="0">Extr.1 distance to retract when heating</epr><epr pos="254" type="0" value="255">Extr.1 extruder cooler speed</epr></Repetier-Firmware-EEPROM>
I read in another thread on github that this issue can happen on tall printers with 300+ mm and radius greater than 85 mm. I changed horizontal radius to 84 mm just to see but it still fails. I also tried increasing the factor to 2.5, 3.0 and even 4.0 in Printer.cpp on line 1141.
I set Z max length lower than actual, tried from 310 mm down to 290 mm as suggested elsewhere, also tried 330 mm (over-sized).
Every time I run G132 S1 there is always one endstop that does not trigger and I get the homing failed message.
17:15:31.757 : Tower 1:0
17:15:31.761 : Tower 2:132
17:15:31.761 : Tower 3:454
17:15:31.892 : RequestPause:Homing failed!
If I decrease Z max length in EEPROM below 300 mm the failed endstop will change so I know it's a soft issue considering homing works perfectly outside the G132 command.
17:36:08.769 : Tower 1:183
17:36:08.769 : Tower 2:0
17:36:08.769 : Tower 3:448
17:36:08.904 : RequestPause:Homing failed!
Increasing Z max length to 330 mm causes 2 endstops to fail:
18:25:19.164 : Tower 1:0
18:25:19.168 : Tower 2:0
18:25:19.168 : Tower 3:196
18:25:19.385 : RequestPause:Homing failed!
My endstop settings should be correct since I have no issues with homing at all other than this one with G132. I'm currently on 0.92.5 but I tried 0.92.3 and have the same problem. Here's the relevant sections of my configuration.h:
// ##########################################################################################
// ## Endstop configuration ##
// ##########################################################################################
/* By default all endstops are pulled up to HIGH. You need a pullup if you
use a mechanical endstop connected with GND. Set value to false for no pullup
on this endstop.
*/
#define ENDSTOP_PULLUP_X_MIN false
#define ENDSTOP_PULLUP_Y_MIN false
#define ENDSTOP_PULLUP_Z_MIN false
#define ENDSTOP_PULLUP_X_MAX true
#define ENDSTOP_PULLUP_Y_MAX true
#define ENDSTOP_PULLUP_Z_MAX true
//set to true to invert the logic of the endstops
#define ENDSTOP_X_MIN_INVERTING false
#define ENDSTOP_Y_MIN_INVERTING false
#define ENDSTOP_Z_MIN_INVERTING true
#define ENDSTOP_X_MAX_INVERTING true
#define ENDSTOP_Y_MAX_INVERTING true
#define ENDSTOP_Z_MAX_INVERTING true
// Set the values true where you have a hardware endstop. The Pin number is taken from pins.h.
#define MIN_HARDWARE_ENDSTOP_X false
#define MIN_HARDWARE_ENDSTOP_Y false
#define MIN_HARDWARE_ENDSTOP_Z false
#define MAX_HARDWARE_ENDSTOP_X true
#define MAX_HARDWARE_ENDSTOP_Y true
#define MAX_HARDWARE_ENDSTOP_Z true
//If your axes are only moving in one direction, make sure the endstops are connected properly.
//If your axes move in one direction ONLY when the endstops are triggered, set ENDSTOPS_INVERTING to true here
//// ADVANCED SETTINGS - to tweak parameters
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
#define X_ENABLE_ON 0
#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
// Disables axis when it's not being used.
#define DISABLE_X false
#define DISABLE_Y false
#define DISABLE_Z false
#define DISABLE_E false
/* If you want to keep z motor running on stepper timeout, remove comments below.
This may be usefull if your z bed moves when motors are disabled. Will still
turn z off when heaters get also disabled.
*/
//#define PREVENT_Z_DISABLE_ON_STEPPER_TIMEOUT
// Inverting motor direction. Only in case of pure cartesian printers, this
// is also the axis you invert!
#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false
//// ENDSTOP SETTINGS:
// Sets direction of endstops when homing; 1=MAX, -1=MIN
#define X_HOME_DIR 1
#define Y_HOME_DIR 1
#define Z_HOME_DIR 1
// Delta robot radius endstop
#define max_software_endstop_r true
//If true, axis won't move to coordinates less than zero.
#define min_software_endstop_x false
#define min_software_endstop_y false
#define min_software_endstop_z false
//If true, axis won't move to coordinates greater than the defined lengths below.
#define max_software_endstop_x false
#define max_software_endstop_y false
#define max_software_endstop_z false
// If during homing the endstop is reached, how many mm should the printer move back for the second try
#define ENDSTOP_X_BACK_MOVE 5
#define ENDSTOP_Y_BACK_MOVE 5
#define ENDSTOP_Z_BACK_MOVE 5
// For higher precision you can reduce the speed for the second test on the endstop
// during homing operation. The homing speed is divided by the value. 1 = same speed, 2 = half speed
#define ENDSTOP_X_RETEST_REDUCTION_FACTOR 3
#define ENDSTOP_Y_RETEST_REDUCTION_FACTOR 3
#define ENDSTOP_Z_RETEST_REDUCTION_FACTOR 3
// When you have several endstops in one circuit you need to disable it after homing by moving a
// small amount back. This is also the case with H-belt systems.
#define ENDSTOP_X_BACK_ON_HOME 5
#define ENDSTOP_Y_BACK_ON_HOME 5
#define ENDSTOP_Z_BACK_ON_HOME 5
// You can disable endstop checking for print moves. This is needed, if you get sometimes
// false signals from your endstops. If your endstops don't give false signals, you
// can set it on for safety.
#define ALWAYS_CHECK_ENDSTOPS 0
// maximum positions in mm - only fixed numbers!
// For delta robot Z_MAX_LENGTH is the maximum travel of the towers and should be set to the distance between the hotend
// and the platform when the printer is at its home position.
// If EEPROM is enabled these values will be overidden with the values in the EEPROM
#define X_MAX_LENGTH 310
#define Y_MAX_LENGTH 310
#define Z_MAX_LENGTH 310
// Coordinates for the minimum axis. Can also be negative if you want to have the bed start at 0 and the printer can go to the left side
// of the bed. Maximum coordinate is given by adding the above X_MAX_LENGTH values.
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
// ##########################################################################################
// ## Movement settings ##
// ##########################################################################################
// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU. Currently only works for RAMBO boards
#define MICROSTEP_MODES {8,8,8,8,8} // [1,2,4,8,16]
// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
#if MOTHERBOARD==301
//#define MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
#define MOTOR_CURRENT_PERCENT {53,53,53,53,53}
#elif MOTHERBOARD==12
//#define MOTOR_CURRENT {35713,35713,35713,35713,35713} // Values 0-65535 (3D Master 35713 = ~1A)
#define MOTOR_CURRENT_PERCENT {55,55,55,55,55}
#endif
/** \brief Number of segments to generate for delta conversions per second of move
*/
#define DELTA_SEGMENTS_PER_SECOND_PRINT 160 // Move accurate setting for print moves
#define DELTA_SEGMENTS_PER_SECOND_MOVE 70 // Less accurate setting for other moves
// Delta settings
#if DRIVE_SYSTEM==DELTA
/** \brief Delta rod length (mm)
*/
#define DELTA_DIAGONAL_ROD 182.5 // mm
/* =========== Parameter essential for delta calibration ===================
C, Y-Axis
| |___| CARRIAGE_HORIZONTAL_OFFSET (recommend set it to 0)
| | \------------------------------------------
|_________ X-axis | \ |
/ \ | \ DELTA_DIAGONAL_ROD (length) Each move this Rod Height
/ \ \ is calculated
/ \ \ Carriage is at printer center! |
A B \_____/--------------------------------
|--| END_EFFECTOR_HORIZONTAL_OFFSET (recommend set it to 0)
|----| ROD_RADIUS (Horizontal rod pivot to pivot measure)
|-----------| PRINTER_RADIUS (recommend set it to ROD_RADIUS)
Column angles are measured from X-axis counterclockwise
"Standard" positions: alpha_A = 210, alpha_B = 330, alpha_C = 90
*/
/** \brief column positions - change only to correct build imperfections! */
#define DELTA_ALPHA_A 210
#define DELTA_ALPHA_B 330
#define DELTA_ALPHA_C 90
/** Correct radius by this value for each column. Perfect builds have 0 everywhere. */
#define DELTA_RADIUS_CORRECTION_A 0
#define DELTA_RADIUS_CORRECTION_B 0
#define DELTA_RADIUS_CORRECTION_C 0
/** Correction of the default diagonal size. Value gets added.*/
#define DELTA_DIAGONAL_CORRECTION_A 0
#define DELTA_DIAGONAL_CORRECTION_B 0
#define DELTA_DIAGONAL_CORRECTION_C 0
/** Max. radius (mm) the printer should be able to reach. */
#define DELTA_MAX_RADIUS 75
// Margin (mm) to avoid above tower minimum (xMin xMinsteps)
// If your printer can put its carriage low enough the rod is horizontal without hitting the floor
// set this to zero. Otherwise, measure how high the carriage is from horizontal rod
// Also, movement speeds are 10x to 20x cartesian speeds at tower bottom.
// You may need to leave a few mm for safety.
// Hitting floor at high speed can damage your printer (motors, drives, etc)
// THIS MAY NEED UPDATING IF THE HOT END HEIGHT CHANGES!
#define DELTA_FLOOR_SAFETY_MARGIN_MM 0
/** \brief Horizontal offset of the universal joints on the end effector (moving platform).
*/
#define END_EFFECTOR_HORIZONTAL_OFFSET 36
/** \brief Horizontal offset of the universal joints on the vertical carriages.
*/
#define CARRIAGE_HORIZONTAL_OFFSET 35
/** \brief Printer radius in mm,
measured from the center of the print area to the vertical smooth tower.
Alternatly set this to the pivot to pivot horizontal rod distance, when head is at (0,0)
*/
#define PRINTER_RADIUS 161
#define ROD_RADIUS 90.1 // DELTA_RADIUS aka Horizontal Rod Radius
/** 1 for more precise delta moves. 0 for faster computation.
Needs a bit more computation time. */
#define EXACT_DELTA_MOVES 1
/* ========== END Delta calibation data ==============*/
/** When true the delta will home to z max when reset/powered over cord. That way you start with well defined coordinates.
If you don't do it, make sure to home first before your first move.
*/
#define DELTA_HOME_ON_POWER 0
/** To allow software correction of misaligned endstops, you can set the correction in steps here. If you have EEPROM enabled
you can also change the values online and autoleveling will store the results here. */
#define DELTA_X_ENDSTOP_OFFSET_STEPS 0
#define DELTA_Y_ENDSTOP_OFFSET_STEPS 0
#define DELTA_Z_ENDSTOP_OFFSET_STEPS 0
#endif
#if DRIVE_SYSTEM==TUGA
// ========== Tuga special settings =============
/* Radius of the long arm in mm. */
#define DELTA_DIAGONAL_ROD 240
#endif
/** \brief Number of delta moves in each line. Moves that exceed this figure will be split into multiple lines.
Increasing this figure can use a lot of memory since 7 bytes * size of line buffer * MAX_DELTA_SEGMENTS_PER_LINE
will be allocated for the delta buffer.
PrintLine PrintLine::lines[PRINTLINE_CACHE_SIZE (default 16?)];
Printline is about 200 bytes + 7 * DELTASEGMENTS_PER_PRINTLINE
or 16 * (200 + (7*22=154) = 354) = 5664 bytes! !1
min is 5 * (200 + (7*10=70) =270) = 1350
This leaves ~1K free RAM on an Arduino which has only 8k
Mega. Used only for nonlinear systems like delta or tuga. */
#define DELTASEGMENTS_PER_PRINTLINE 22
/** After x seconds of inactivity, the stepper motors are disabled.
Set to 0 to leave them enabled.
This helps cooling the Stepper motors between two print jobs.
Overridden if EEPROM activated.
*/
#define STEPPER_INACTIVE_TIME 360
/** After x seconds of inactivity, the system will go down as far it can.
It will at least disable all stepper motors and heaters. If the board has
a power pin, it will be disabled, too.
Set value to 0 for disabled.
Overridden if EEPROM activated.
*/
#define MAX_INACTIVE_TIME 0L
/** Maximum feedrate, the system allows. Higher feedrates are reduced to these values.
The axis order in all axis related arrays is X, Y, Z
Overridden if EEPROM activated.
*/
#define MAX_FEEDRATE_X 250
#define MAX_FEEDRATE_Y 250
#define MAX_FEEDRATE_Z 250
/** Home position speed in mm/s. Overridden if EEPROM activated. */
#define HOMING_FEEDRATE_X 100
#define HOMING_FEEDRATE_Y 100
#define HOMING_FEEDRATE_Z 100
/** Set order of axis homing. Use HOME_ORDER_XYZ and replace XYZ with your order.
* If you measure Z with your extruder tip you need a hot extruder to get right measurement. In this
* case set HOME_ORDER_ZXYTZ and also define ZHOME_HEAT_HEIGHT and ZHOME_MIN_TEMPERATURE. It will do
* first a z home to get some reference, then raise to ZHOME_HEAT_HEIGHT do xy homing and then after
* heating to minimum ZHOME_MIN_TEMPERATURE will z home again for correct height.
* */
#define HOMING_ORDER HOME_ORDER_ZXY
// Used for homing order HOME_ORDER_ZXYTZ
#define ZHOME_MIN_TEMPERATURE 0
// needs to heat all extruders (1) or only current extruder (0)
#define ZHOME_HEAT_ALL 0
// Z-height for heating extruder during homing
#define ZHOME_HEAT_HEIGHT 20
// If your bed might bend while probing, because your sensor is the extruder tip
// you can define a predefined x,y position so beding is always the same and
// can be compensated. Set coordinate to 999999 to ignore positions and just
// use the position you are at.
#define ZHOME_X_POS IGNORE_COORDINATE
#define ZHOME_Y_POS IGNORE_COORDINATE
/* If you have a backlash in both z-directions, you can use this. For most printer, the bed will be pushed down by it's
own weight, so this is nearly never needed. */
#define ENABLE_BACKLASH_COMPENSATION 0
#define Z_BACKLASH 0
#define X_BACKLASH 0
#define Y_BACKLASH 0
/** Comment this to disable ramp acceleration */
#define RAMP_ACCELERATION 1
/** If your stepper needs a longer high signal then given, you can add a delay here.
The delay is realized as a simple loop wasting time, which is not available for other
computations. So make it as low as possible. For the most common drivers no delay is needed, as the
included delay is already enough.
*/
#define STEPPER_HIGH_DELAY 0
/** If your driver needs some additional delay between setting direction and first step signal,
you can set this here. There are some commands between direction and signal, but some drivers
might be even slower or you are using a fast arduino board with slow driver. Normally 0 works.
If you get skewed print, you might try 1 microsecond here.
*/
#define DIRECTION_DELAY 0
/** The firmware can only handle 16000Hz interrupt frequency cleanly. If you need higher speeds
a faster solution is needed, and this is to double/quadruple the steps in one interrupt call.
This is like reducing your 1/16th microstepping to 1/8 or 1/4. It is much cheaper then 1 or 3
additional stepper interrupts with all it's overhead. As a result you can go as high as
40000Hz.
*/
#define STEP_DOUBLER_FREQUENCY 12000
/** If you need frequencies off more then 30000 you definitely need to enable this. If you have only 1/8 stepping
enabling this may cause to stall your moves when 20000Hz is reached.
*/
#define ALLOW_QUADSTEPPING 1
/** If you reach STEP_DOUBLER_FREQUENCY the firmware will do 2 or 4 steps with nearly no delay. That can be too fast
for some printers causing an early stall.
*/
#define DOUBLE_STEP_DELAY 1 // time in microseconds
//// Acceleration settings
/** \brief X, Y, Z max acceleration in mm/s^2 for printing moves or retracts. Make sure your printer can go that high!
Overridden if EEPROM activated.
*/
#define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_X 1500
#define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Y 1500
#define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Z 1500
/** \brief X, Y, Z max acceleration in mm/s^2 for travel moves. Overridden if EEPROM activated.*/
#define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_X 2000
#define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Y 2000
#define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Z 2000
/** If you print on a moving bed, it can become more shaky the higher and bigger
your print gets. Therfore it might be helpfull to reduce acceleration with
increasing print height. You can define here how acceleration should change.
You set ACCELERATION_FACTOR_TOP to the factor in percent for the top position
of your printer. Acceleration will then be modified linear over height.
INTERPOLATE_ACCELERATION_WITH_Z sets, which accelerations get changed:
0 = do not interpolate at all
1 = interpolate x and y acceleration
2 = interpolate z acceleration
3 = interpolate x,y and z acceleration
*/
#define INTERPOLATE_ACCELERATION_WITH_Z 0
#define ACCELERATION_FACTOR_TOP 100
/** \brief Maximum allowable jerk.
Caution: This is no real jerk in a physical meaning.
The jerk determines your start speed and the maximum speed at the join of two segments.
Its unit is mm/s. If the printer is standing still, the start speed is jerk/2. At the
join of two segments, the speed difference is limited to the jerk value.
Examples:
For all examples jerk is assumed as 40.
Segment 1: vx = 50, vy = 0
Segment 2: vx = 0, vy = 50
v_diff = sqrt((50-0)^2+(0-50)^2) = 70.71
v_diff > jerk => vx_1 = vy_2 = jerk/v_diff*vx_1 = 40/70.71*50 = 28.3 mm/s at the join
Segment 1: vx = 50, vy = 0
Segment 2: vx = 35.36, vy = 35.36
v_diff = sqrt((50-35.36)^2+(0-35.36)^2) = 38.27 < jerk
Corner can be printed with full speed of 50 mm/s
Overridden if EEPROM activated.
*/
#define MAX_JERK 20.0
#define MAX_ZJERK 0.3
/** \brief Number of moves we can cache in advance.
This number of moves can be cached in advance. If you wan't to cache more, increase this. Especially on
many very short moves the cache may go empty. The minimum value is 5.
*/
#define PRINTLINE_CACHE_SIZE 16
/** \brief Low filled cache size.
If the cache contains less then MOVE_CACHE_LOW segments, the time per segment is limited to LOW_TICKS_PER_MOVE clock cycles.
If a move would be shorter, the feedrate will be reduced. This should prevent buffer underflows. Set this to 0 if you
don't care about empty buffers during print.
*/
#define MOVE_CACHE_LOW 10
/** \brief Cycles per move, if move cache is low.
This value must be high enough, that the buffer has time to fill up. The problem only occurs at the beginning of a print or
if you are printing many very short segments at high speed. Higher delays here allow higher values in PATH_PLANNER_CHECK_SEGMENTS.
*/
#define LOW_TICKS_PER_MOVE 250000
/* Z-Probing */
/* After homing the z position is corrected to compensate
for a bed coating. Since you can change coatings the value is stored in
eeprom if enabled, so you can switch between different coatings without needing
to recalibrate z.
*/
#define Z_PROBE_Z_OFFSET 0 // offset to coating form real bed level
/* How is z min measured
0 = trigger is height of real bed neglecting coating
1 = trigger is current coating
For mode 1 the current coating thickness is added to measured z probe distances.
That way the real bed is always the reference height. For inductive sensors
or z min endstops the coatng has no effect on the result, so you should use mode 0.
*/
#define Z_PROBE_Z_OFFSET_MODE 1
#define FEATURE_Z_PROBE 1
#define Z_PROBE_PIN ORIG_Z_MIN_PIN //63
#define Z_PROBE_PULLUP 1
#define Z_PROBE_ON_HIGH 0
#define Z_PROBE_X_OFFSET 0
#define Z_PROBE_Y_OFFSET 0
#define Z_PROBE_BED_DISTANCE 5.0 // Higher than max bed level distance error in mm
// Waits for a signal to start. Valid signals are probe hit and ok button.
// This is needful if you have the probe trigger by hand.
#define Z_PROBE_WAIT_BEFORE_TEST 0
/** Speed of z-axis in mm/s when probing */
#define Z_PROBE_SPEED 10
#define Z_PROBE_XY_SPEED 150
#define Z_PROBE_SWITCHING_DISTANCE 0 // Distance to safely switch off probe after it was activated
#define Z_PROBE_REPETITIONS 5 // Repetitions for probing at one point.
/** Distance between nozzle and bed when probe triggers. */
#define Z_PROBE_HEIGHT -0.23
/** These scripts are run before resp. after the z-probe is done. Add here code to activate/deactivate probe if needed. */
#define Z_PROBE_START_SCRIPT ""
#define Z_PROBE_FINISHED_SCRIPT ""
/* Autoleveling allows it to z-probe 3 points to compute the inclination and compensates the error for the print.
This feature requires a working z-probe and you should have z-endstop at the top not at the bottom.
The same 3 points are used for the G29 command.
*/
#define FEATURE_AUTOLEVEL 0
#define Z_PROBE_X1 -56.3
#define Z_PROBE_Y1 -32.5
#define Z_PROBE_X2 56.3
#define Z_PROBE_Y2 -32.5
#define Z_PROBE_X3 0
#define Z_PROBE_Y3 65
/* Bending correction adds a value to a measured z-probe value. This may be
required when the z probe needs some force to trigger and this bends the
bed down. Currently the correction values A/B/C correspond to z probe
positions 1/2/3. In later versions a bending correction algorithm might be
introduced to give it other meanings.*/
#define BENDING_CORRECTION_A 0
#define BENDING_CORRECTION_B 0
#define BENDING_CORRECTION_C 0
/* DISTORTION_CORRECTION compensates the distortion caused by mechanical imprecisions of nonlinear (i.e. DELTA) printers
* assumes that the floor is plain (i.e. glass plate)
* and that it is perpendicular to the towers
* and that the (0,0) is in center
* requires z-probe
* G29 measures the Z offset in matrix NxN points (due to nature of the delta printer, the corners are extrapolated instead of measured)
* and compensate the distortion
* more points means better compensation, but consumes more memory and takes more time
* DISTORTION_CORRECTION_R is the distance of last row or collumn from center
*/
#define DISTORTION_CORRECTION 0
#define DISTORTION_CORRECTION_POINTS 5
#define DISTORTION_CORRECTION_R 75
/** Uses eeprom instead of ram. Allows bigger matrix (up to 22x22) without any ram cost.
Especially on arm based systems with cached eeprom it is good, on AVR it has a small
performance penalty.
*/
#define DISTORTION_PERMANENT 0
/** Correction computation is not a cheap operation and changes are only small. So it
is not necessary to update it for every subline computed. For example lets take DELTA_SEGMENTS_PER_SECOND_PRINT = 150
and fastest print speed 100 mm/s. So we have a maximum segment length of 100/150 = 0.66 mm.
Now lats say our point field is 200 x 200 mm with 9 x 9 points. So between 2 points we have
200 / (9-1) = 25 mm. So we need at least 25 / 0.66 = 37 lines to move to the next measuring
point. So updting correction every 15 calls gives us at least 2 updates between the
measured points.
NOTE: Explicit z changes will always trigger an update!
*/
#define DISTORTION_UPDATE_FREQUENCY 15
/** z distortion degrades to 0 from this height on. You should start after the first layer to get
best bonding with surface. */
#define DISTORTION_START_DEGRADE 0.5
/** z distortion correction gets down to 0 at this height. */
#define DISTORTION_END_HEIGHT 1.5
/** If your corners measurement points are not measureable with given radius, you can
set this to 1. It then omits the outer measurement points allowing a larger correction area.*/
#define DISTORTION_EXTRAPOLATE_CORNERS 0
/* If your printer is not exactly square but is more like a parallelogramm, you can
use this to compensate the effect of printing squares like parallelogramms. Set the
parameter to then tangens of the deviation from 90° when you print a square object.
E.g. if you angle is 91° enter tan(1) = 0.017. If error doubles you have the wrong sign.
Always hard to say since the other angle is 89° in this case!
*/
#define FEATURE_AXISCOMP 0
#define AXISCOMP_TANXY 0
#define AXISCOMP_TANYZ 0
#define AXISCOMP_TANXZ 0
/** \brief Experimental calibration utility for delta printers
* Change 1 to 0 to disable
*/
#define FEATURE_SOFTWARE_LEVELING 0
/* Babystepping allows to change z height during print without changing official z height */
#define FEATURE_BABYSTEPPING 1
/* If you have a threaded rod, you want a higher multiplicator to see an effect. Limit value to 50 or you get easily overflows.*/
#define BABYSTEP_MULTIPLICATOR 1