prusa mk3 lcd displays f made in china
Sliced with PrusaSlicer 2.0.0, Printing on MK3S with Firmware v3.7.1. This is only second print with this slicer/FW combination. I don"t think the F? was there before but not absolutely sure. It seems to be printing OK.
Check if the printer is thinking it has an MMU. The F? indenticates which filament is loaded. The question mark because it has no information about it.
I"ve the same isse from time to time, and another guy in the FB group too. My suggestion, it is caused from noise on the port where normally the MMU is connected, or an PWM, an fan. Maybe an bad powersupply or bad contact.
I used to have the same issue with noise from the power supply getting onto the screen and even sometimes resetting my printer mid-print. I found that if I had my USB programming cable plugged in I never experienced the issue. I found that the issue was the noise from the power supply wasn"t not being drained to earth ground, and it was actually tripping the reset on the micro-controller. Part of that comes from the micro-controller and screen having to share their power, which is regulated down to 5v from the incoming 12v. The trick is to supply the micro controller with its own 5v while printing and drain the incoming noise off to earth ground. I modified the typical USB A-B cable to resolve this. As long as you still use the SD card to load the gcode you can occupy the programming port with this cable to supply the 5v.
It’s well known in the desktop 3D printing world that you get what you pay for. If you want to spend under $300 USD, you get a Creality Ender 3 and deal with its slightly half-baked nature. Or if you’ve got the money to burn, you buy a Prusa i3 MK3 and know that you’ll remain on the cutting edge thanks to a constantly evolving slicer and regular hardware revisions.
Now it stands to reason that an expensive product will have expensive accessories, but even still, the recently unveiled “Original Prusa Enclosure” is sure to induce a bit of sticker shock in even the most ardent of [Josef Průša]’s fans — the most bare-bones configuration of the 10 kg (22 lbs) box rings up at $349 USD. You read that right, just the enclosure for Prusa’s flagship machine costs more than the average Chinese 3D printer. In fact it costs as much as the kit version of the Prusa Mini, which incidentally, is set to get its own version of the enclosure sometime in the future. If you select all the bells and whistles, a fully-decked out Prusa Enclosure will cost you $700 USD, plus shipping.
So what do you get for your money? Well, for the most part it’s just a box. We’re sure it’s very well built, and the design is perfectly matched to the dimensions of the Prusa i3 MK3, but it’s literally just a box. There’s an integrated temperature and humidity display, but the printer itself is responsible for heating the chamber. We like that you can move the printer’s control panel to the outside of the box so you won’t have to open the doors as often, though at that point the printer and enclosure will have been merged into one heavy-weight unit, which obviously hinders transportability. The air filtration system is likely to be a popular add-on for $76, but our interest in the fire suppression system is hampered by the fact that (at least for now) it’s only available to customers in the European Union.
In the blog post announcing the product’s release, [Josef] explains that there’s already an excellent low-cost enclosure solution for the i3 MK3 based on the IKEA Lack table, so the company decided to go all in and design something for the higher end of the market. Will the average i3 owner fork out the cash for the matching enclosure? We doubt it. But for the tech startup that’s running a small farm that they want to be as safe and reliable as possible? That’s a different story.
Marlin is a huge C++ program composed of many files, but here we’ll only be talking about the two files that contain all of Marlin’s compile-time configuration options: Configuration.h contains the core settings for the hardware, language and controller selection, and settings for the most common features and components.
These two files contain all of Marlin’s build-time configuration options. Simply edit or replace these files before building and uploading Marlin to the board. A variety of pre-built configurations are included in the Configurations repository to get you started.
To use configurations from an earlier version of Marlin, try dropping them into the newer Marlin and building. As part of the build process, the SanityCheck.h will print helpful error messages explaining what needs to be changed.
Marlin is configured using C++ compiler directives. This allows Marlin to leverage the C++ preprocessor and include only the code and data needed for the enabled options. This results in the smallest possible binary. A build of Marlin can range from 50K to over 230K in size.
The most authoritative source on configuration details will always be the configuration files themselves. They provide good descriptions of each option, and are themselves the source for most of the information presented here.
To get your core Configuration.h settings right you’ll need to know the following things about your printer: Printer style, such as Cartesian, Delta, CoreXY, or SCARA
The core and default settings of Marlin live in the Configuration.h file. Most of these settings are fixed. Once you compile Marlin, that’s it. To change them you need to re-compile. However, several items in Configuration.h only provide defaults -factory settings- that can be changed via the user interface, stored on EEPROM and reloaded or restored to initial values.
Settings saved in EEPROM persist across reboots and still remain after flashing new firmware, so always send M502, M500 (or “Reset EEPROM” from the LCD) after flashing.
This section follows the order of settings as they appear. The order isn’t always logical, so “Search In Page” may be helpful. We’ve tried to keep descriptions brief and to the point. For more detailed information on various topics, please read the main articles and follow the links provided in the option descriptions.
Marlin now checks for a configuration version and won’t compile without this setting. If you want to upgrade from an earlier version of Marlin, add this line to your old configuration file. During compilation, Marlin will throw errors explaining what needs to be changed.
#define CUSTOM_STATUS_SCREEN_IMAGE STRING_CONFIG_H_AUTHOR is shown in the Marlin startup message to identify the author (and optional variant) of the firmware. Use this setting as a way to uniquely identify your custom configurations. The startup message is printed whenever the board (re)boots.
The index of the on-board serial port that will be used for primary host communication. Change this if, for example, you need to connect a wireless adapter to non-default port pins.
The serial communication speed of the printer should be as fast as it can manage without generating errors. In most cases 115200 gives a good balance between speed and stability. Start with 250000 and only go lower if “line number” and “checksum” errors start to appear. Note that some boards (e.g., a temperamental Sanguinololu clone based on the ATMEGA1284P) may not be able to handle a baud rate over 57600. Allowed values: 2400, 9600, 19200, 38400, 57600, 115200, 250000.
The most important setting is Marlin is the motherboard. The firmware needs to know what board it will be running on so it can assign the right functions to all pins and take advantage of the full capabilities of the board. Setting this incorrectly will lead to unpredictable results.
Using boards.h as a reference, replace BOARD_RAMPS_14_EFB with your board’s ID. The boards.h file has the most up-to-date listing of supported boards - check there first if you don’t see yours listed here.
The Sanguino board requires adding “Sanguino” support to Arduino IDE. Open Preferences and locate the Additional Boards Manager URLs field. Copy and paste this source URL. Then use Tools > Boards > Boards Manager to install “Sanguino” from the list. An internet connection is required. (Thanks to “Dust’s RepRap Blog” for the tip.)
This is the name of your printer as displayed on the LCD and by M115. For example, if you set this to “My Delta” the LCD will display “My Delta ready” when the printer starts up.
A unique ID for your 3D printer. A suitable unique ID can be generated randomly at uuidtools.com. Some host programs and slicers may use this identifier to differentiate between specific machines on your network.
This value, from 0 to 6, defines how many extruders (or E steppers) the printer has. By default Marlin will assume separate nozzles all moving together on a single carriage. If you have a single nozzle, a switching extruder, a mixing extruder, or dual X carriages, specify that below.
This is the “nominal” filament diameter as written on the filament spool (1.75, 2.85, 3.0). If you typically use 1.75mm filament, but physically measure the diameter as 1.70mm, you should still use 1.75 if that’s what you have set in your slicer.
This value is used by Marlin to compensate for Filament Width when printing in volumetric mode (See M200), and by the Unified Bed Leveling command G26 when printing a test grid.
Enable SINGLENOZZLE if you have an E3D Cyclops or any other “multi-extruder” system that shares a single nozzle. In a single-nozzle setup, only one filament drive is engaged at a time, and each needs to retract before the next filament can be loaded and begin purging and extruding.
#if ENABLED(SWITCHING_EXTRUDER) #define SWITCHING_EXTRUDER_SERVO_NR 0 #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1[, E2, E3] #if EXTRUDERS > 3 #define SWITCHING_EXTRUDER_E23_SERVO_NR 1 #endif
A Switching Extruder is a dual extruder that uses a single stepper motor to drive two filaments, but only one at a time. The servo is used to switch the side of the extruder that will drive the filament. The E motor also reverses direction for the second filament. Set the servo sub-settings above according to your particular extruder’s setup instructions.
#if ENABLED(SWITCHING_NOZZLE) #define SWITCHING_NOZZLE_SERVO_NR 0 //#define SWITCHING_NOZZLE_E1_SERVO_NR 1 // If two servos are used, the index of the second
A Switching Nozzle is a carriage with 2 nozzles. A servo is used to move one of the nozzles up and down. The servo either lowers the active nozzle or raises the inactive one. Set the servo sub-settings above according to your particular extruder’s setup instructions.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder //#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#define PARKING_EXTRUDER_SOLENOIDS_INVERT // If enabled, the solenoid is NOT magnetized with applied voltage #define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil #define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // (ms) Delay for magnetic field. No delay if 0 or not defined. //#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#define MPE_FAST_SPEED 9000 // (mm/m) Speed for travel before last distance point #define MPE_SLOW_SPEED 4500 // (mm/m) Speed for last distance travel to park and couple #define MPE_TRAVEL_DISTANCE 10 // (mm) Last distance point #define MPE_COMPENSATION 0 // Offset Compensation -1 , 0 , 1 (multiplier) only for coupling
For CoreXY / HBot kinematics, toolheads are parked at one edge and held with an electromagnet. Supports more than 2 toolheads. See https://youtu.be/JolbsAKTKf4
#if ANY(SWITCHING_TOOLHEAD, MAGNETIC_SWITCHING_TOOLHEAD, ELECTROMAGNETIC_SWITCHING_TOOLHEAD) #define SWITCHING_TOOLHEAD_Y_POS 235 // (mm) Y position of the toolhead dock #define SWITCHING_TOOLHEAD_Y_SECURITY 10 // (mm) Security distance Y axis #define SWITCHING_TOOLHEAD_Y_CLEAR 60 // (mm) Minimum distance from dock for unobstructed X axis #define SWITCHING_TOOLHEAD_X_POS { 215, 0 } // (mm) X positions for parking the extruders #if ENABLED(SWITCHING_TOOLHEAD) #define SWITCHING_TOOLHEAD_SERVO_NR 2 // Index of the servo connector #define SWITCHING_TOOLHEAD_SERVO_ANGLES { 0, 180 } // (degrees) Angles for Lock, Unlock #elif ENABLED(MAGNETIC_SWITCHING_TOOLHEAD) #define SWITCHING_TOOLHEAD_Y_RELEASE 5 // (mm) Security distance Y axis #define SWITCHING_TOOLHEAD_X_SECURITY { 90, 150 } // (mm) Security distance X axis (T0,T1) //#define PRIME_BEFORE_REMOVE // Prime the nozzle before release from the dock
#if ENABLED(PRIME_BEFORE_REMOVE) #define SWITCHING_TOOLHEAD_PRIME_MM 20 // (mm) Extruder prime length #define SWITCHING_TOOLHEAD_RETRACT_MM 10 // (mm) Retract after priming length #define SWITCHING_TOOLHEAD_PRIME_FEEDRATE 300 // (mm/m) Extruder prime feedrate #define SWITCHING_TOOLHEAD_RETRACT_FEEDRATE 2400 // (mm/m) Extruder retract feedrate #endif #elif ENABLED(ELECTROMAGNETIC_SWITCHING_TOOLHEAD) #define SWITCHING_TOOLHEAD_Z_HOP 2 // (mm) Z raise for switching #endif
#if ENABLED(MIXING_EXTRUDER) #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164 //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
A Mixing Extruder uses two or more stepper motors to drive multiple filaments into a mixing chamber, with the mixed filaments extruded from a single nozzle. This option adds the ability to set a mixture, to save mixtures, and to recall mixtures using the T command. The extruder still uses a single E axis, while the current mixture is used to determine the proportion of each filament to use. An “experimental” G1 direct mixing option is included.
Hotend offsets are needed if your extruder has more than one nozzle. These values specify the offset from the first nozzle to each nozzle. So the first element is always set to 0.0. The next element corresponds to the next nozzle, and so on. Add more offsets if you have 3 or more nozzles.
#if ENABLED(AUTO_POWER_CONTROL) #define AUTO_POWER_FANS // Turn on PSU if fans need power #define AUTO_POWER_E_FANS #define AUTO_POWER_CONTROLLERFAN #define AUTO_POWER_CHAMBER_FAN //#define AUTO_POWER_E_TEMP 50 // (°C) Turn on PSU over this temperature
Enable this if you don’t want the power supply to switch on when you turn on the printer. This is for printers that have dual power supplies. For instance some setups have a separate power supply for the heaters. In this situation you can save power by leaving the power supply off until needed. If you don’t know what this is leave it.
Temperature sensors are vital components in a 3D printer. Fast and accurate sensors ensure that the temperature will be well controlled, to keep plastic flowing smoothly and to prevent mishaps. Use these settings to specify the hotend and bed temperature sensors. Every 3D printer will have a hotend thermistor, and most will have a bed thermistor.
The listing above these options in Configuration.h contains all the thermistors and thermocouples that Marlin knows and supports. Try to match your brand and model with one of the sensors in the list. If no match is found, use a profile for a similar sensor of the same brand, or try “1” – the generic profile. Each profile is calibrated for a particular temperature sensor so it’s important to be as precise as possible.
It is crucial to obtain accurate temperature measurements. As a last resort, use 100k thermistor for TEMP_SENSOR and TEMP_SENSOR_BED but be highly skeptical of the temperature accuracy.
Enable this option to use sensor 1 as a redundant sensor for sensor 0. This is an advanced way to protect against temp sensor failure. If the temperature difference between sensors exceeds MAX_REDUNDANT_TEMP_SENSOR_DIFF Marlin will abort the print and disable the heater.
Extruders must maintain a stable temperature for TEMP_RESIDENCY_TIME before M109 will return success and start the print. Tune what “stable” means using TEMP_HYSTERESIS and TEMP_WINDOW.
The bed must maintain a stable temperature for TEMP_BED_RESIDENCY_TIME before M109 will return success and start the print. Tune what “stable” means using TEMP_BED_HYSTERESIS and TEMP_BED_WINDOW.
These parameters help prevent the printer from overheating and catching fire. Temperature sensors report abnormally low values when they fail or become disconnected. Set these to the lowest value (in degrees C) that the machine is likely to experience. Indoor temperatures range from 10C-40C, but a value of 0 might be appropriate for an unheated workshop.
Maximum temperature for each temperature sensor. If Marlin reads a temperature above these values, it will immediately shut down for safety reasons. For the E3D V6 hotend, many use 285 as a maximum value.
Err: MAXTEMP: This error usually means that the temperature sensor wires are shorted together. It may also indicate an issue with the heater MOSFET or relay that is causing it to stay on.
Remember that cold surfaces near hot surfaces can lead to condensation, which is NOT GOOD for electronics. Use blower fans to keep air moving and use a Dew Point Calculator to check your local dew point.
Marlin uses PID (Proportional, Integral, Derivative) control (Wikipedia) to stabilize the dynamic heating system for the hotends and bed. When PID values are set correctly, heaters reach their target temperatures faster, maintain temperature better, and experience less wear over time.
Most vitally, correct PID settings will prevent excessive overshoot, which is a safety hazard. During PID calibration, use the highest target temperature you intend to use (where overshoots are more critical).
See the PID Tuning topic on the RepRap wiki for detailed instructions on M303 auto-tuning. The PID settings should be tuned whenever changing a hotend, temperature sensor, heating element, board, power supply voltage (12/24V), or anything else related to the high-voltage circuitry.
Disable PIDTEMP to run extruders in bang-bang mode. Bang-bang is a pure binary mode - the heater is either fully-on or fully-off for a long period. PID control uses higher frequency PWM and (in most cases) is superior for maintaining a stable temperature.
Enable PID_AUTOTUNE_MENU to add an option on the LCD to run an Autotune cycle and automatically apply the result. Enable PID_PARAMS_PER_HOTEND if you have more than one extruder and they are different models.
#define DEFAULT_Kp_LIST { 22.20, 22.20 } #define DEFAULT_Ki_LIST { 1.08, 1.08 } #define DEFAULT_Kd_LIST { 114.00, 114.00 } #else #define DEFAULT_Kp 22.20 #define DEFAULT_Ki 1.08 #define DEFAULT_Kd 114.00 #endif
Sample PID values are included for reference, but they won’t apply to most setups. The PID values you get from M303 may be very different, but will be better for your specific machine.
M301 can be used to set Hotend PID and is also accessible through the LCD. M304 can be used to set bed PID. M303 should be used to tune PID values before using any new hotend components.
Enable PIDTEMPBED to use PID for the bed heater (at the same PWM frequency as the extruders). With the default PID_dT the PWM frequency is 7.689 Hz, fine for driving a square wave into a resistive load without significant impact on FET heating. This also works fine on a Fotek SSR-10DA Solid State Relay into a 250 W heater. If your configuration is significantly different than this and you don’t understand the issues involved, you probably shouldn’t use bed PID until it’s verified that your hardware works. Use M303 E-1 to tune the bed PID for this option.
The max power delivered to the bed. All forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis). Setting this to anything other than 255 enables a form of PWM. As with PIDTEMPBED, don’t enable this unless your bed hardware is ok with PWM.
So-called “cold extrusion” can damage a machine in several ways, but it usually just results in gouged filament and a jammed extruder. With this option, the extruder motor won’t move if the hotend is below the specified temperature. Override this setting with M302 if needed.
A lengthy extrusion may not damage your machine, but it can be an awful waste of filament. This feature is meant to prevent a typo or glitch in a G1 command from extruding some enormous amount of filament. For Bowden setups, the max length should be set greater than or equal to the load/eject length.
Thermal protection is one of the most vital safety features in Marlin, allowing the firmware to catch a bad situation and shut down heaters before it goes too far. Consider what happens when a thermistor comes loose during printing. The firmware sees a low temperature reading so it keeps the heat on. As long as the temperature reading is low, the hotend will continue to heat up indefinitely, leading to smoke, oozing, a ruined print, and possibly even fire.
Marlin offers two levels of thermal protection: Check that the temperature is actually increasing when a heater is on. If the temperature fails to rise enough within a certain time period (by default, 2 degrees in 20 seconds), the machine will shut down with a “Heating failed” error. This will detect a disconnected, loose, or misconfigured thermistor, or a disconnected heater.
Monitor thermal stability. If the measured temperature drifts too far from the target temperature for too long, the machine will shut down with a “Thermal runaway” error. This error may indicate poor contact between thermistor and hot end, poor PID tuning, or a cold environment.
More thermal protection options are located in Configuration_adv.h. In most setups these can be left unchanged, but should be tuned as needed to prevent false positives.
For false thermal runaways not caused by a loose temperature sensor, try increasing WATCH_TEMP_PERIOD or decreasing WATCH_TEMP_INCREASE. Heating may be slowed in a cold environment, if a fan is blowing on the heat block, or if the heater has high resistance.
Marlin supports four kinematic motion systems: Cartesian, Core (H-Bot), Delta, and SCARA. Cartesian is the simplest, applying each stepper directly to an axis. CoreXY uses a special belt arrangement to do XY motion, requiring a little extra maths. Delta robots convert the motion of three vertical carriages into XYZ motion in an “effector” attached to the carriages by six arms. SCARA robots move an arm in the XY plane using two angular joints.
In open loop systems, endstops are an inexpensive way to establish the actual position of the carriage on all axes. In the procedure known as “homing,” each axis is moved towards one end until the endstop switch is triggered, at which point the machine knows that the axis is at the endstop (home) position. From this point on, the machine “knows” its position by keeping track of how far the steppers have been moved. If the machine gets out of step for any reason, re-homing may be required.
Specify all the endstop connectors that are connected to any endstop or probe. Most printers will use all three min plugs. On delta machines, all the max plugs should be used. Probes can share the Z min plug, or can use one or more of the extra connectors. Don’t enable plugs used for non-endstop and non-probe purposes here.
By default all endstops have pullup resistors enabled. This is best for NC switches, preventing the values from “floating.” If only some endstops should have pullup resistors, you can disable ENDSTOPPULLUPS and enable pullups individually.
Use M119 to test if these are set correctly. If an endstop shows up as “TRIGGERED” when not pressed, and “open” when pressed, then it should be inverted here.
These settings allow Marlin to tune stepper driver timing and enable advanced options for stepper drivers that support them. You may also override timing options in Configuration_adv.h.
Enable DISTINCT_E_FACTORS if your extruders are not all mechanically identical. With this setting you can optionally specify different steps-per-mm, max feedrate, and max acceleration for each extruder.
These are the most crucial settings for your printer, as they determine how accurately the steppers will position the axes. Here we’re telling the firmware how many individual steps produce a single millimeter (or degree on SCARA) of movement. These depend on various factors, including belt pitch, number of teeth on the pulley, thread pitch on leadscrews, micro-stepping settings, and extruder style.
When the velocity of any axis changes, its acceleration (or deceleration) in mm/s/s is limited by the current max acceleration setting. Also see the jerk settings below, which specify the largest instant speed change that can occur between segments.
Jerk sets the floor for accelerated moves. If the change in top speed for a given axis between segments is less than the jerk value for the axis, an instantaneous change in speed may be allowed. Limits placed on other axes also apply. Basically, lower jerk values result in more accelerated moves, which may be near-instantaneous in some cases, depending on the final acceleration determined by the planner.
The planner uses the default accelerations set here (or by M204) as the starting values for movement acceleration, and then constrains them further, if needed. There are separate default acceleration values for printing moves, retraction moves, and travel moves. Printing moves include E plus at least one of the XYZ axes.
In print/travel moves, DEFAULT_ACCELERATION and DEFAULT_TRAVEL_ACCELERATION apply to the XYZ axes. In retraction moves, DEFAULT_RETRACT_ACCELERATION applies only to the E-axis. During movement planning, Marlin constrains the default accelerations to the maximum acceleration of all axes involved in the move.
Jerk works in conjunction with acceleration (see above). Jerk is the maximum change in velocity (in mm/sec) that can occur instantaneously. It can also be thought of as the minimum change in velocity that will be done as an accelerated (not instantaneous) move.
Both acceleration and jerk affect your print quality. If jerk is too low, the extruder will linger too long on small segments and corners, possibly leaving blobs. If the jerk is set too high, direction changes will apply too much torque and you may see “ringing” artifacts or dropped steps.
Use this option in all cases when the probe is connected to the Z MIN endstop plug. This option is used for DELTA robots, which always home to MAX, and may be used in other setups.
You can use this option to configure a machine with no Z endstops. In that case the probe will be used to home Z and you will need to enable Z_SAFE_HOMING to ensure that the probe is positioned over the bed when homing the Z axis - done after X and Y.
Use this option if you’ve connected the probe to a pin other than the Z MIN endstop pin. With this option enabled, by default Marlin will use the Z_MIN_PROBE_PIN specified in your board’s pins file (usually the X or Z MAX endstop pin since these are the most likely to be unused). If you need to use a different pin, define your custom pin number for Z_MIN_PROBE_PIN in Configuration.h.
Even if you have no bed probe you can still use any of the core AUTO_BED_LEVELING_* options below by selecting this option. With PROBE_MANUALLY the G29 command only moves the nozzle to the next probe point where it pauses. You adjust the Z height with a piece of paper or feeler gauge, then send G29 again to continue to the next point. You can also enable LCD_BED_LEVELING to add a “Level Bed” Menu item to the LCD for a fully interactive leveling process. MANUAL_PROBE_START_Z sets the Z-height the printer initially moves to at each mesh point during manual probing. With this disabled, the printer will move to Z0 for the first probe point. Then each consecutive probe point uses the Z position of the probe point preceding it.
This option is for any probe that’s fixed in place, with no need to be deployed or stowed. Specify this type for an inductive probe or when using the nozzle itself as the probe.
To indicate a Servo Z Probe (e.g., an endstop switch mounted on a rotating arm) just specify the servo index. Use the M280 command to find the best Z_SERVO_ANGLES values.
The ANTCLABS BLTouch probe uses custom circuitry and a magnet to raise and lower a metal pin which acts as a touch probe. The BLTouch uses the servo connector and is controlled using specific servo angles. With this option enabled the other required settings are automatically configured (so there’s no need to enter servo angles, for example).
#if ENABLED(TOUCH_MI_PROBE) #define TOUCH_MI_RETRACT_Z 0.5 // Height at which the probe retracts //#define TOUCH_MI_DEPLOY_XPOS (X_MAX_BED + 2) // For a magnet on the right side of the bed
Touch-MI Probe by hotends.fr is deployed and activated by moving the X-axis to a magnet at the edge of the bed. By default, the magnet is assumed to be on the left and activated by a home. If the magnet is on the right, enable and set TOUCH_MI_DEPLOY_XPOS to the deploy position. Also option requires: BABYSTEPPING, BABYSTEP_ZPROBE_OFFSET, Z_SAFE_HOMING, and a minimum Z_HOMING_HEIGHT of 10.
This type of probe is mounted on a detachable “sled” that sits at the far end of the X axis. Before probing, the X carriage moves to the far end and picks up the sled. When probing is completed, it drops the sled off. The SLED_DOCKING_OFFSET specifies the extra distance the X axis must travel to pickup the sled. 0 should be fine but it may be pushed further if needed.
A retractable Z-probe for deltas that uses an Allen key as the probe. See “Kossel automatic bed leveling probe” at the RepRap wiki. It deploys by leveraging against the Z-axis belt, and retracts by pushing the probe down.
These offsets specify the distance from the tip of the nozzle to the probe — or more precisely, to the point at which the probe triggers. The X and Y offsets are specified as integers. The Z offset should be specified as exactly as possible using a decimal value. The Z offset can be overridden with M851 Z or the LCD controller. The M851 offset is saved to EEPROM with M500.
Probing should be done quickly, but the Z speed should be tuned for best repeatability. Depending on the probe, a slower Z probing speed may be needed for repeatable results.
Probing multiple times yields better results. Set to 2 for a fast/slow probe - the second probe result will be used. Set to 3 or more for slow probes - the average result will be used.
Z probes require clearance when deploying, stowing, and moving between probe points to avoid hitting the bed and other hardware. Servo-mounted probes require extra space for the arm to rotate. Inductive probes need space to keep from triggering early.
Use these settings to specify the distance (mm) to raise the probe (or lower the bed). The values set here apply over and above any (negative) probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. Only integer values >= 1 are valid for these settings. Example: M851 Z-5 with a CLEARANCE of 4 => 9 mm from bed to nozzle.
This enables you to test the reliability of your probe. Issue a M48 command to start testing. It will give you a standard deviation for the probe. Tip: 0.02mm is normally acceptable for bed leveling to work.
Heatinging the bed and extruder for probing will produce results that more accurately correspond with your bed if you typically print with the bed heated. Enable PROBING_HEATERS_OFF if you are experiencing electrical noise. A delay can also be added to allow noise and vibration to settle.
Use these options to disable steppers when not being issued a movement. This was implemented as a hack to run steppers at higher-than-normal current in an effort to produce more torque at the cost of increased heat for drivers and steppers.
Disabling the steppers between moves gives the motors and drivers a chance to cool off. It sounds good in theory, but in practice it has drawbacks. Disabled steppers can’t hold the carriage stable. This results in poor accuracy and carries a strong probability of axial drift (i.e., lost steps).
Most 3D printers use an “open loop” control system, meaning the software can’t ascertain the actual carriage position at a given time. It simply sends commands and assumes they have been obeyed. In practice with a well-calibrated machine this is not an issue and using open loop is a major cost saving with excellent quality.
We don’t recommend this hack. There are much better ways to address the problem of stepper/driver overheating. Some examples: stepper/driver heatsink, active cooling, dual motors on the axis, reduce micro-stepping, check belt for over tension, check components for smooth motion, etc.
The E disable option works like DISABLE_[XYZ] but pertains to one or more extruders. The default setting keeps the active extruder enabled, disabling all inactive extruders. This is reasonable for situations where a “wipe tower” or other means is used to ensure that the nozzle is primed and not oozing between uses.
These settings reverse the motor direction for each axis. Be careful when first setting these. Axes moving the wrong direction can cause damage. Get these right without belts attached first, if possible. Before testing, move the carriage and bed to the middle. Test each axis for proper movement using the host or LCD “Move Axis” menu. If an axis is inverted, either flip the plug around or change its invert setting.
This value raises Z to the specified height above the bed before homing X or Y. This is useful to prevent the head crashing into bed mountings such as screws, bulldog clips, etc. This also works with auto bed leveling enabled and will be triggered only when the Z axis height is less than the defined value, otherwise the Z axis will not move. NO_MOTION_BEFORE_HOMING and UNKNOWN_Z_NO_RAISE
Homing direction for each axis: -1 = min, 1 = max. Most Cartesian and core machines have three min endstops. Deltas have three max endstops. For other configurations set these values appropriately.
With Marlin you can directly specify the bed size. This allows Marlin to do extra logic related to the bed size when it differs from the movement limits below. If the XY carriage is able to move outside of the bed, you can specify a wider range below.
These values specify the physical limits of the machine. Usually the [XYZ]_MIN_POS values are set to 0, because endstops are positioned at the bed limits. [XYZ]_MAX_POS should be set to the farthest reachable point. By default, these are used as your homing positions as well. However, the MANUAL_[XYZ]_HOME_POS options can be used to override these, if needed.
Enable these options to constrain movement to the physical boundaries of the machine (as set by [XYZ]_(MIN|MAX)_POS). For example, G1 Z-100 can be min constrained to G1 Z0. It is recommended to enable these options as a safety feature. If software endstops need to be disabled, use M211 S0.
#if ENABLED(FILAMENT_RUNOUT_SENSOR) #define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each. #define FIL_RUNOUT_INVERTING false // Set to true to invert the logic of the sensor. #define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins. //#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins.
With this feature, a mechanical or opto endstop switch is used to check for the presence of filament in the feeder (usually the switch is closed when filament is present). If the filament runs out, Marlin will run the specified G-code script (by default M600).
RAMPS-based boards use SERVO3_PIN. For other boards you may need to define FIL_RUNOUT_PIN. Enable the M43 feature in your firmware (PINS_DEBUGGING) and load it to your printer. Assuming you already have a runout sensor (switch based) there, you can watch the pin states while toggling the runout sensor on an off to see which pin is changing.
It is highly recommended to get your printer aligned and constrained as much as possible before using bed leveling, because it exists to compensate for imperfections in the hardware.
With Bed Leveling enabled: G28 will disable bed leveling (but preserves your leveling data). You can enable RESTORE_LEVELING_AFTER_G28 to keep leveling in its previous state.
G29 will automatically probe the bed or guide you to do a paper-test at various points. After measurement it calculates a correction grid or matrix and enables leveling compensation. The specific behavior depends on configuration and type of bed leveling.
M420 S
Enable just one type of Bed Leveling. AUTO_BED_LEVELING_3POINT probes three points in a triangle. The flat plane gives a transform matrix suitable to compensate for a flat but tilted bed.
AUTO_BED_LEVELING_BILINEAR probes the bed in a grid, with optional Catmull-Rom subdivision. The mesh data is used to adjust Z height across the bed using bilinear interpolation. Good for delta, large, or uneven beds.
AUTO_BED_LEVELING_UBL (recommended) combines the features of 3-point, linear, bilinear, and mesh leveling. As with bilinear leveling, the mesh data generated by UBL is used to adjust Z height across the bed using bilinear interpolation. An LCD controller is currently required.
MESH_BED_LEVELING provides a custom G29 command to measure the bed height at several grid points using a piece of paper or feeler gauge. See G29 for MBL for the full procedure. This type of leveling is only compatible with PROBE_MANUALLY.
Normally G28 causes leveling to be disabled, so you have to re-enable it with M420 S1 or G29. If you enable this option then G28 will make sure to turn leveling back on if it was enabled beforehand.
Use this option to enable extra debugging of homing and leveling. You can then use M111 S32 before issuing G28 and G29 V4 to get a detailed log of the process for diagnosis. This option is useful to figure out the cause of unexpected behaviors, or when reporting issues to the project.
This option adds the Z parameter to M420 which sets a fade distance over which leveling will be gradually reduced. Above the given Z height, leveling compensation will no longer be applied.
This feature exists to prevent irregularities in the bed from propagating through the model’s entire height. Fading out leveling also reduces computational requirements and resonance from the Z axis above the fade height. For a well-aligned machine, this feature can improve print results.
Example: To have leveling fade out over the first 10mm of layer printing use M420 Z10. If each layer is 0.2 mm high, leveling compensation will be reduced by 1/50th (2 %) after each layer. Above 10mm the machine will move without compensation.
#if ENABLED(G26_MESH_VALIDATION) #define MESH_TEST_NOZZLE_SIZE 0.4 // (mm) Diameter of primary nozzle. #define MESH_TEST_LAYER_HEIGHT 0.2 // (mm) Default layer height for the G26 Mesh Validation Tool. #define MESH_TEST_HOTEND_TEMP 205 // (°C) Default nozzle temperature for the G26 Mesh Validation Tool. #define MESH_TEST_BED_TEMP 60 // (°C) Default bed temperature for the G26 Mesh Validation Tool. #define G26_XY_FEEDRATE 20 // (mm/s) Feedrate for XY Moves for the G26 Mesh Validation Tool.
When using any of the mesh-based leveling systems (1.1.7) you can activate G26_MESH_VALIDATION to print test patterns and fine-tune the mesh. See G26 Mesh Validation for full details. The G26 command accepts parameters for nozzle size, layer height, etc. The sub-options above specify the default values that will be applied for omitted parameters.
These settings specify the boundaries for probing with G29. This will most likely be a sub-section of the bed because probes are not usually able to reach every point that the nozzle can. Take account of the probe’s XY offsets when setting these boundaries.
Usually the probed grid doesn’t extend all the way to the edges of the bed. So, outside the bounds of the probed grid, Z adjustment can take one of two approaches. Either the Z height can continue to raise/lower by the established tilt of the nearest grid box (best when most of the bed was probed), or it can follow the contour of the nearest edge (the default). Enable this option for extrapolation.
If you have SRAM to spare, this option will multiply the resolution of the bilinear grid using the Catmull-Rom subdivision method. This option only applies to bilinear leveling. If the default value of 3 is too expensive, try 2 or 1. (In Marlin 1.1.1, the default grid will be stored in PROGMEM, as UBL now does.)
#define UBL_MESH_EDIT_MOVES_Z // Sophisticated users prefer no movement of nozzle #define UBL_SAVE_ACTIVE_ON_M500 // Save the currently active mesh in the current slot on M500
These options specify the inset, grid, and 3-point triangle to use for UBL. Note that probe XY offsets and movement limits may constrain the probeable area of the bed.
These options specify the number of points that will always be probed in each dimension during G29. The mesh inset is used to automatically calculate the probe boundaries. These can be set explicitly in Configuration_adv.h. MESH_G28_REST_ORIGIN moves the nozzle to rest at Z_MIN_POS when mesh probing is done. If Z is offset (e.g., due to home_offset or some other cause) this is intended to move Z to a good starting point, usually Z=0.
#if ENABLED(LCD_BED_LEVELING) #define MESH_EDIT_Z_STEP 0.025 // (mm) Step size while manually probing Z axis. #define LCD_PROBE_Z_RANGE 4 // (mm) Z Range centered on Z_MIN_POS for LCD Z adjustment //#define MESH_EDIT_MENU // Add a menu to edit mesh points
Available with MESH_BED_LEVELING and PROBE_MANUALLY (all forms of Auto Bed Leveling). See the Configuration.h file for sub-options and the G29 G-code documentation that applies to your selected leveling system.
#if ENABLED(LEVEL_BED_CORNERS) #define LEVEL_CORNERS_INSET 30 // (mm) An inset for corner leveling #define LEVEL_CORNERS_Z_HOP 4.0 // (mm) Move nozzle up before moving between corners #define LEVEL_CORNERS_HEIGHT 0.0 // (mm) Z height of nozzle at leveling points //#define LEVEL_CENTER_TOO // Move to the center after the last corner
Enable this option if the bed center is at X0 Y0. This setting affects the way automatic home positions (those not set with MANUAL_[XYZ]_POS) are calculated. This should always be enabled with DELTA.
These settings are used to override the home position. Leave them undefined for automatic settings. For DELTA Z home must be set to the top-most position.
#if ENABLED(Z_SAFE_HOMING) #define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2) // X point for Z homing when homing all axes (G28). #define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2) // Y point for Z homing when homing all axes (G28).
Z Safe Homing prevents Z from homing when the probe (or nozzle) is outside bed area by moving to a defined XY point (by default, the middle of the bed) before Z Homing when homing all axes with G28. As a side-effect, X and Y homing are required before Z homing. If stepper drivers time out, X and Y homing will be required again.
Enable this option if a probe (not an endstop) is being used for Z homing. Z Safe Homing isn’t needed if a Z endstop is used for homing, but it may also be enabled just to have XY always move to some custom position after homing.
Homing speed for use in auto home and auto bed leveling. These values may be set to the fastest speeds your machine can achieve. Homing and probing speeds are constrained by the current max feedrate and max acceleration settings.
#if ENABLED(SKEW_CORRECTION_FOR_Z) #define XZ_DIAG_AC 282.8427124746 #define XZ_DIAG_BD 282.8427124746 #define YZ_DIAG_AC 282.8427124746 #define YZ_DIAG_BD 282.8427124746 #define YZ_SIDE_AD 200 #define XZ_SKEW_FACTOR 0.0 #define YZ_SKEW_FACTOR 0.0 #endif
Commands like M92 only change the settings in volatile memory, and these settings are lost when the machine is powered off. With this option enabled, Marlin uses the built-in EEPROM to preserve settings across reboots. Settings saved to EEPROM (with M500) are loaded automatically whenever the machine restarts (and in most setups, when connecting to a host), overriding the defaults set in the configuration files. This option is highly recommended, as it makes configurations easier to manage.
These EEPROM options should be left as they are, but for 128K and smaller boards they may be used to recover some program memory. Vendors are strongly discouraged from using DISABLE_M503.
When you change saveable settings in the configuration files and re-flash, the new values don’t take effect right away. They are still overridden by the saved values in EEPROM. To get your new default settings into the EEPROM, use M502 followed by M500.
When Host Keepalive is enabled Marlin will send a busy status message to the host every couple of seconds when it can’t accept commands. Disable if your host doesn’t like keepalive messages. Use DEFAULT_KEEPALIVE_INTERVAL for the default number of seconds between “busy” messages. Override with M113. Marlin 1.1.5 and up include the BUSY_WHILE_HEATING option for hosts that treat host keepalive as a strict busy protocol.
This option adds support for M149 C, M149 K, and M149 F to set temperature units to Celsius, Kelvin, or Fahrenheit. Without this option all temperatures must be specified in Celsius units.
These are the default values for the Prepare > Preheat LCD menu options. These values can be overridden using the M145 command or the Control > Temperature > Preheat Material X conf submenus.
#define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 } #define NOZZLE_PARK_XY_FEEDRATE 100 // (mm/s) X and Y axes feedrate (also used for delta Z axis) #define NOZZLE_PARK_Z_FEEDRATE 5 // (mm/s) Z axis feedrate (not used for delta printers)
Automatically start and stop the print job timer when M104/M109/M190 commands are received. Also adds the following commands to control the timer: M75 - Start the print job timer.
Choose your preferred language for the LCD controller here. Supported languages include: Code Language Code Language Code Language en English (Default) an Aragonese bg Bulgarian
This option applies only to character-based displays. Character-based displays (based on the Hitachi HD44780) provide an ASCII character set plus one of the following language extensions: JAPANESE … the most common
The SDSUPPORT option must be enabled or SD printing will not be supported. It is no longer enabled automatically for LCD controllers with built-in SDCard slot.
Disable all menus and only display the Status Screen with NO_LCD_MENUS, or just remove some extraneous menu items to recover space with SLIM_LCD_MENUS.
This option reverses the encoder direction for navigating LCD menus. If CLOCKWISE normally moves DOWN this makes it go UP. If CLOCKWISE normally moves UP this makes it go DOWN.
This option reverses the encoder direction for Select Screen If CLOCKWISE normally moves LEFT this makes it go RIGHT. If CLOCKWISE normally moves RIGHT this makes it go LEFT.
The duration and frequency for the UI feedback sound. Set these to 0 to disable audio feedback in the LCD menus. Test audio output with the G-code M300 S
Marlin includes support for several controllers. The two most popular controllers supported by Marlin are: REPRAP_DISCOUNT_SMART_CONTROLLER A 20 x 4 character-based LCD controller with click-wheel.
REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER A monochrome 128 x 64 pixel-based LCD controller with click-wheel. Able to display simple bitmap graphics and up to 5 lines of text.
LCD_I2C_PANELOLU2 PANELOLU2 LCD with status LEDs, separate encoder and click inputs. The click input can either be directly connected to a pin (if BTN_ENC is defined) or read through I2C (with BTN_ENC undefined). Requires LiquidTWI2 library v1.2.3 or later.
Use software PWM to drive the fan, as with the heaters. This uses a very low frequency which is not as annoying as with the hardware PWM. On the other hand, if this frequency is too low, you should also increment SOFT_PWM_SCALE.
Incrementing this by 1 will double the software PWM frequency, affecting heaters (and the fan if FAN_SOFT_PWM is enabled). However, control resolution will be halved for each increment; at zero value, there are 128 effective control positions.
If SOFT_PWM_SCALE is set to a value higher than 0, dithering can be used to mitigate the associated resolution loss. If enabled, some of the PWM cycles are stretched so on average the desired duty cycle is attained.
Temperature status LEDs that display the hotend and bed temperature. If all hotend and bed temperature set-point are < 54C then the BLUE led is on. Otherwise the RED led is on. There is 1C hysteresis.
Files sliced with SkeinForge contain the wrong arc G-codes when using “Arc Point” as fillet procedure. This option works around that bug, but otherwise should be left off.
Use software PWM to drive the fan. This uses a very low frequency which is not as annoying as with the hardware PWM. Increase SOFT_PWM_SCALE if the frequency is too low. If experiencing resolution loss when SOFT_PWM_SCALE is set to a value greater than 0, SOFT_PWM_DITHER can be used to mitigate it. If enabled.
Marlin includes support for the Baricuda Extruder for 3D Printing Sugar and Chocolate also hosted on GitHub. The feature adds the codes M126, M127, M128, and M129 for controlling the pump and valve of the Baricuda.
Marlin currently supplies two options for RGB-addressable color indicators. In both cases the color is set using M150 Rr Ug Bb to specify RGB components from 0 to 255.
Enable support for an RGB(W) LED connected to 5 V digital pins, or an RGB(W) Strip connected to MOSFETs controlled by digital pins. An inexpensive RGB LED can be used simply by assigning digital pins for each component. If the pins are able to do hardware PWM then a wide range of colors will be available. With simple digital pins only 7 colors are possible.
Adds the M150 command to set the LED (or LED strip) color. If pins are PWM capable (e.g., 4, 5, 6, 11) then a range of luminance values can be set from 0 to 255.
LED Strips require a MOFSET Chip between PWM lines and LEDs, as the Arduino cannot handle the current the LEDs will require. Failure to follow this precaution can destroy your Arduino!
#if ENABLED(NEOPIXEL_LED) #define NEOPIXEL_TYPE NEO_GRBW // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h) #define NEOPIXEL_PIN 4 // LED driving pin //#define NEOPIXEL2_TYPE NEOPIXEL_TYPE
#define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip, larger of 2 strips if 2 NeoPixel strips are used #define NEOPIXEL_IS_SEQUENTIAL // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once. #define NEOPIXEL_BRIGHTNESS 127 // Initial brightness (0-255) //#define NEOPIXEL_STARTUP_TEST // Cycle through colors at startup
This option causes the printer to give status feedback on the installed color LED, BLINKM, or PCA9632: Gradually change from blue to violet as the heated bed gets to target temp.
The total number of servos to enable for use. One common application for a servo is a Z bed probe consisting of an endstop switch mounted on a rotating arm. To use one of the servo connectors for this type of probe, set Z_ENDSTOP_SERVO_NR in the probe options above.
Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle. 300ms is a good value but you can try less delay. Specify a large enough delay so the servo has enough time to complete a full motion before deactivation.
With this option servos are powered only during movement, then turned off to prevent jitter. We recommend enabling this option to keep electrical noise from active servos from interfering with other components. The high amperage generated by extruder motor wiring during movement can also induce movement in active servos. Leave this option enabled to avoid all such servo-related troubles.
#if TEMP_SENSOR_0 == 1000 #define HOTEND0_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor #define HOTEND0_RESISTANCE_25C_OHMS 100000 // Resistance at 25C #define HOTEND0_BETA 3950 // Beta value
#if TEMP_SENSOR_1 == 1000 #define HOTEND1_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor #define HOTEND1_RESISTANCE_25C_OHMS 100000 // Resistance at 25C #define HOTEND1_BETA 3950 // Beta value
#if TEMP_SENSOR_2 == 1000 #define HOTEND2_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor #define HOTEND2_RESISTANCE_25C_OHMS 100000 // Resistance at 25C #define HOTEND2_BETA 3950 // Beta value
#if TEMP_SENSOR_3 == 1000 #define HOTEND3_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor #define HOTEND3_RESISTANCE_25C_OHMS 100000 // Resistance at 25C #define HOTEND3_BETA 3950 // Beta value
#if TEMP_SENSOR_4 == 1000 #define HOTEND4_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor #define HOTEND4_RESISTANCE_25C_OHMS 100000 // Resistance at 25C #define HOTEND4_BETA 3950 // Beta value
#if TEMP_SENSOR_5 == 1000 #define HOTEND5_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor #define HOTEND5_RESISTANCE_25C_OHMS 100000 // Resistance at 25C #define HOTEND5_BETA 3950 // Beta value
#if TEMP_SENSOR_BED == 1000 #define BED_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor #define BED_RESISTANCE_25C_OHMS 100000 // Resistance at 25C #define BED_BETA 3950 // Beta value
#if TEMP_SENSOR_CHAMBER == 1000 #define CHAMBER_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor #define CHAMBER_RESISTANCE_25C_OHMS 100000 // Resistance at 25C #define CHAMBER_BETA 3950 // Beta value
#if TEMP_SENSOR_CHAMBER #define CHAMBER_MINTEMP 5 #define CHAMBER_MAXTEMP 60 #define TEMP_CHAMBER_HYSTERESIS 1 // (°C) Temperature proximity considered "close enough" to the target //#define CHAMBER_LIMIT_SWITCHING
A heated chamber can greatly improve print quality. Check the pins file of your board for TEMP_CHAMBER_PIN. The spare extruder and hotend temperature pins can be used for HEATER_CHAMBER_PIN and TEMP_CHAMBER_PIN.
#if DISABLED(PIDTEMPBED) #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control #if ENABLED(BED_LIMIT_SWITCHING) #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS #endif
#if ENABLED(THERMAL_PROTECTION_HOTENDS) #define THERMAL_PROTECTION_PERIOD 40 // Seconds #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius #define WATCH_TEMP_PERIOD 20 // Seconds #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
The second set of options applies to changes in target temperature. Whenever an M104 or M109 increases the target temperature the firmware will wait for the WATCH_TEMP_PERIOD to expire, and if the temperature hasn’t increased by WATCH_TEMP_INCREASE degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109, but only if the current temperature is far enough below the target for a reliable test.
If you get false positives for “Heating failed” increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE. (WATCH_TEMP_INCREASE should not be set below 2.)
#if ENABLED(THERMAL_PROTECTION_BED) #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius #define WATCH_BED_TEMP_PERIOD 60 // Seconds #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
The second set of options applies to changes in target temperature. Whenever an M140 or M190 increases the target temperature the firmware will wait for the WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn’t increased by WATCH_BED_TEMP_INCREASE degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190, but only if the current temperature is far enough below the target for a reliable test.
If you get too many “Heating failed” errors, increase WATCH_BED_TEMP_PERIOD and/or decrease WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be set below 2.)
#if ENABLED(THERMAL_PROTECTION_CHAMBER) #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius
Similar to the description for the Bed Thermal Protection above. Use M141](/docs/gcode/M141.html) to set target chamber temperature and M191 to set and wait target chamber temperature.
This option further improves hotend temperature control by accounting for the extra heat energy consumed by cold filament entering the hotend melt chamber. If material enters the hotend more quickly, then more heat will need to be added to maintain energy balance. This option adds a scaling factor that must be tuned for your setup and material.
Extrusion scaling keeps a circular buffer of forward E movements done at each temperature measurement which acts to delay the applied factor and allow for heat dissipation. The size of this queue during printing is set by M301 L, limited by LPQ_MAX_LEN.
#if ENABLED(PID_FAN_SCALING_ALTERNATIVE_DEFINITION) #define PID_FAN_SCALING_AT_FULL_SPEED 13.0 //=PID_FAN_SCALING_LIN_FACTOR*255+DEFAULT_Kf #define PID_FAN_SCALING_AT_MIN_SPEED 6.0 //=PID_FAN_SCALING_LIN_FACTOR*PID_FAN_SCALING_MIN_SPEED+DEFAULT_Kf #define PID_FAN_SCALING_MIN_SPEED 10.0 // Minimum fan speed at which to enable PID_FAN_SCALING
#define DEFAULT_Kf (255.0*PID_FAN_SCALING_AT_MIN_SPEED-PID_FAN_SCALING_AT_FULL_SPEED*PID_FAN_SCALING_MIN_SPEED)/(255.0-PID_FAN_SCALING_MIN_SPEED) #define PID_FAN_SCALING_LIN_FACTOR (PID_FAN_SCALING_AT_FULL_SPEED-DEFAULT_Kf)/255.0
#else #define PID_FAN_SCALING_LIN_FACTOR (0) // Power loss due to cooling = Kf * (fan_speed) #define DEFAULT_Kf 10 // A constant value added to the PID-tuner #define PID_FAN_SCALING_MIN_SPEED 10 // Minimum fan speed at which to enable PID_FAN_SCALING #endif #endif
With Automatic Temperature the hotend target temperature is calculated by all the buffered lines of G-code. The maximum buffered steps/sec of the extruder motor is called “se”. Start autotemp mode with M109 F
Example: Try M109 S215 B260 F1 in your start.gcode to set a minimum temperature of 215 when idle, which will boost up to 260 as extrusion increases in speed.
High temperature thermistors may give aberrant readings. If this is an issue, use this option to set the maximum number of consecutive low temperature errors that can occur before Min Temp Error is triggered. If you require a value over 10, this could indicate a problem.
High Temperature Thermistors tend to give poor readings at ambient and lower temperatures. Until they reach a sufficient temperature, these sensors usually return the lowest raw value, and this will cause a Min Temp Error.
To solve this issue, this option sets the number of milliseconds a hotend will preheat before Marlin starts to check the temperature. Set a delay sufficient to reach a temperature your sensor can reliably read. Lower values are better and safer. If you require a value over 30000, this could indicate a problem.
These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements. The final reading is derived from measuredTemp * TEMP_SENSOR_AD595_GAIN + TEMP_SENSOR_AD595_OFFSET.
#if ENABLED(EXTRUDER_RUNOUT_PREVENT) #define EXTRUDER_RUNOUT_MINTEMP 190 #define EXTRUDER_RUNOUT_SECONDS 30 #define EXTRUDER_RUNOUT_SPEED 1500 // mm/m #define EXTRUDER_RUNOUT_EXTRUDE 5 // mm
#define CONTROLLERFAN_SPEED_MIN 0 // (0-255) Minimum speed. (If set below this value the fan is turned off.) #define CONTROLLERFAN_SPEED_ACTIVE 255 // (0-255) Active speed, used when any motor is enabled #define CONTROLLERFAN_SPEED_IDLE 0 // (0-255) Idle speed, used when motors are disabled #define CONTROLLERFAN_IDLE_TIME 60 // (seconds) Extra time to keep the fan running after disabling motors //#define CONTROLLER_FAN_EDITABLE // Enable M710 configurable settings
A controller fan is useful to cool down the stepper drivers and MOSFETs. When stepper drivers reach a certain temperature they’ll turn off, either stuttering or stopping. With this option enabled the fan will turn on automatically whenever any steppers are enabled and turn off after a set period when all steppers are turned off.
When PWM fans are set to low speed, they may need a higher-energy kickstart first to get moving. Once up to speed the fan can drop back to the set speed. This option specifies the kickstart duration in milliseconds. This option doesn’t work with the software PWM fan on Sanguinololu.
This option can be defined to set the minimum and maximum PWM speeds (1-255) required to keep the PWM fans moving. Fan speeds set by M106 will be scaled to the reduced range above this minimum.
Extruder auto fans turn on whenever their extruder temperatures go above EXTRUDER_AUTO_FAN_TEMPERATURE. Your board’s pins file already specifies the recommended pins. Override those here or set to -1 to disable the fans completely.
This feature allows you to digitally multiplex the fan output. The multiplexer is automatically switched at tool-change. To enable, just assign one or more FANMUX[012]_PIN values for up to 2, 4, or 8 multiplexed fans.
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW #define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin) //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
With this option is active, the Z steppers will only turn on at the last moment be