3.9.0 Firmware for MK3, MK3S, MK2.5 and MK2.5S
Summary:
- Linear Advance 1.5
- Automatic E-jerk conversion
- Screen brightness adjustment
- Filament sensor recognition
- New G-code files sorting
- Toggle and Translations
- MMU2S selector blade activated
- Show current Z offset in reset dialog before first layer calibration
- Unknown Z coordinate displayed
- Safer moves in Z-axis, if the position is unknown
- Heating disabled during MBL
- MINTEMP value lowered
- MINTEMP error differentiated
- Laser filament sensor sensitivity fix
- Flickering “Statistics” screen fixed
- Tone timer re-enabled
- Nozzle crash protection improved
- MMU runout for unknown filament fixed
- Belt test improvements
- Decoupling XYZ relative and E relative
- Other changes
- Fixed bugs
- GitHub templates
This is the final release of the firmware 3.9.0, a direct successor to the 3.8.1. Introducing new features, improved functionality, and bug fixes. These release notes are a summary of the previous releases BETA, RC1, RC3.
This release includes:
- 409 commits to the code
- 108 pull requests
- 66 closed issues
- cooperation of 14 developers
Special thanks to our community and the most active users @leptun, @wavexx, @3d-gussner, @nikkolade, @vintagepc @smurfix for discovering/reporting various issues and helping with fixing and testing them. Special thanks to @awenelo and @carlin57 for helping with the French translation. We really appreciate your cooperation.
Detailed description
Linear Advance 1.5
One of the biggest contributions from the community is the support for Linear Advance 1.5, which is also backward compatible with the previous version. In case you have a G-code with Linear Advance 1.0, the printer will analyze the code and convert the values automatically.
This graph is showing the function used for converting LA 1.0 and 1.5
Linear Advance 1.5 (LA15) has been introduced in the 3.9.0-BETA release and it was further improved in the RC1 and RC3 releases. One of the major fixes is addressing issue #2543 reported by user @nikkolade. The release 3.9.0-RC1 was causing print issues (mainly an inconsistency in quality) compared to the stable 3.8.1.
The cause of this issue was in the implementation of the linear advance function. And while fixing it, the developers have discovered that it is partly present in the latest stable release 3.8.1 as well. Further research revealed that it is also responsible for rare scenarios, in which the material was missing at the start of a path of an object's support, which negatively affected the support quality.
Another problem was with the acceleration while using a factor K=15. With this value, the printing speeds were lowered significantly because after the conversion to the LA15, the K factor value was close to zero (3E-9) and the firmware responded incorrectly.
Last addition to the Linear Advance 1.5 and PrusaSlicer profiles. To keep the profiles compatible with both FW 3.9.x+ and older firmware versions, this release accepts a G-code where the K factors are specified in pairs. The old firmware 3.8.1 picks up the last M900 Kxx (this will remain as the old Linear Advance 1.0 K factor value), while the new firmware 3.9.0 has a smarter algorithm. When the new FW encounters M900 Kxx with xx < 10 it automatically switches to Linear Advance 1.5 mode, accepting only xx < 10 from now on.
However, if a custom filament profile is used and the user wants to update these to be compatible with new and old firmware, it is important that the M900 Kx.xx LA1.5 value MUST be placed BEFORE the M900 Kyy LA1.0 value.
Otherwise, the FW3.9.0+ firmware will switch to LA1.0 conversion mode and ignore the 2nd M900 Kx.xx value as it K is <10 and so invalid in this mode.
Example of K factor in the G-code:
M900 K0.12
M900 K45
Firmware 3.8.1 behavior:
The firmware will pick up the second (last) value (K45)
Firmware 3.9.0 behavior:
The firmware will use the first (LA15) value K0.12
To make this compatible with MMU G-codes, which may set different K factors for different materials, M900 K0 resets the Linear Advance mode.
A new M900 Kxx with either new or old values may be accepted then and the firmware will act accordingly. In general, the M900 K0 resets the LA and it is recommended to have it at the end of every G-code.
A special note regarding the calibration prints created under LA 1.0. The automatic conversion to the LA 1.5 might not bring the same print results compared to the previous version. This is because the automatically converted K factors (LA 1.0 to LA 1.5) can differ from the ideal K factors for LA 1.5. It is highly recommended to reslice the calibration object having the LA 1.5 values already in the G-code.
In general, it is recommended that the user switches to the new profiles whenever possible. Even some community profiles are already LA 1.5 compatible and will produce better print results.
For custom profiles, starting this firmware there are three options:
- Use the new LA15 K values to achieve the best print results
- Use the old LA10 K values, which will be auto-converted to LA15
- Use both K values to create profile compatible with the old and new firmware
All the issues mentioned above are addressed in this release, the quality of the supports is now improved and the conversion function has been further tweaked to achieve optimal print results.
Automatic E-jerk conversion
With the introduction of Linear Advance 1.5 to the firmware, it was also necessary to convert the values of the E-jerk, originally used for Linear Advance 1.0. Based on internal testing, it was decided to set the conversion of the E-jerk parameter from 1.5 to 4.5. If there is a different E-jerk value in the G-code file, the printer uses the function shown in the graph below to convert the value correctly.
Old profiles with very low e-jerk might still result in a very slow print. Resetting the E-jerk to the standard values in the "Print Settings, Machine limits" menu will fix such an issue.
Screen brightness adjustment (MK3/MK3S)
Starting this release, certain printer models are capable of adjusting the brightness of the screen, which is convenient if the printer is used in a darker environment. The user can adjust the following parameters:
Screen Backlight ON
Screen Backlight OFF
In the menu head to Settings -> Brightness
This feature is available for printers manufactured in the second half of 2019. For older printers, you have to replace the LCD screen and also in some cases the Einsy board (you must have Einsy 1.1a or newer). Selected parts can be obtained in the official e-shop, spare parts section.
Filament sensor recognition (MK3S)
Over the lifetime of the MK3 and MK3S, we have introduced several iterations of the sensor responsible for filament checks. The MK3 was using a laser sensor, which was later replaced with another generation in the MK3S, which uses a steel ball and a lever-arm to trigger the sensor. In the latest iteration of the sensor with the red PCB introduced last year (2019), we have added one feature, which will be activated starting this release.
The printer will be able to recognize that the connection with the sensor was interrupted (e.g. broken wire or disconnected cable) and take appropriate action based on the settings in the Menu > Settings > HW setup > FS action
- Pause - pause the print, show an onscreen message and wait for the user
- Continue - ignore the issue and continue printing
To ensure correct operation, the printer needs to recognize the sensor first. As explained above, this will work only for the MK3S and only for the red PCB sensor, which is revision 0.4.
Right now there are two options for the MK3S:
- The printer is equipped with the unsupported revision 0.3 or older
- The printer is equipped with the supported revision 0.4 or newer*
*Currently, there are no plans for another revision of the filament sensor.
The process is fully automatic and the printer enables the new feature for the revision 0.4 only when all of the following conditions are met:
- The printer is in an idle state (e.g. not printing, not heating up, …)
- Only if the InfoScreen (home screen) is displayed
- The sensor state is either “Unknown” or “Older version”
- In the settings menu, the Filament sensor is set to “ON”
- The correct voltages were measured (conditions: no filament: 4.2-4.6 V, inserted filament: 0.3-0.5 V)
As soon as the new sensor is detected and the conditions are met, the printer will display the following message in the lowest row of the LCD screen: “FS v0.4 or newer”
In the Support > Voltages menu, a new value will now be displayed regardless of the version of the sensor: “IR: x.xxV”. This value represents the actual voltage measured on the pin of the filament sensor.
In the Support > Fil. sensor menu, information about the revision of the sensor will be displayed. Currently, three possible states are defined:
- 0.3 or older
- 0.4 or newer
- unknown status
There is a new submenu in Settings > HW settings > Fsensor Detection. Where the sensor revision recognition can be triggered manually for the MK3S printer, the MK3S with the MMU2S unit must run the Selftest.
The recognition process is as follows:
Note that if the procedure fails at any point, it stops completely and has to be started again by the user.
The measured values of the voltages during the process can be read from the serial connection:
- “Measured filament sensor high level: xxx V”
- “Measured filament sensor low level: xxx V”
In a very rare scenario, in which the user decides to downgrade the 0.4 sensor to an older revision, it is necessary to run the procedure manually, to inform the printer about the change.
A specific behavior is set after a factory reset is performed, which resets all the stored values including the filament sensor version. Upon the start there are two possible ways:
-
The initial Wizard has been completed correctly. In this scenario, the filament sensor is checked and regardless of the version it is set "0.3 or older". If the printer has version 0.4 installed, it will be automatically changed later on as soon as the five conditions for starting the automatic detection explained above are met.
-
The initial Wizard has been skipped. In this scenario, the printer is unable to make the initial check and therefore it stays in an "unknown state". The user can run the verification process by doing the Selftest from the menu, which will have the same results as finishing the initial Wizard. An alternative option for the MK3S without the MMU2S unit is to run the "Fsensor Detection" directly and fully complete the recognition.
Attention for those using a printer with a modified filament sensor (i.e. with a LED). Since we are unable to test every possible modification to the original hardware, please verify the behavior is correct. In case of any issues, this detection algorithm can be disabled in the source code.
New G-code files sorting
Until now, G-code files on the SD card were sorted based on the time when each file was created and the system was ignoring any modification to it. Another issue was discovered later on, while using only the “modification time” parameter for sorting the files.
If an old G-code file was copied to the SD card, it wasn't placed at the very top due to the sorting logic. This final release fixes all possible scenarios by checking both the “modification” and “creation time” parameters and selecting the most recent one.
Toggle and Translations
The code responsible for displaying the toggle menus was rewritten in order to enable faster switching and lower the requirements on the CPU. Toggle menus were previously hardcoded into the firmware, this is now changed to enable easier translations.
MMU2S selector blade activated
Part of the MMU2S unit is a selector equipped with a blade, which if needed will cut the tip of the filament unloaded from the extruder. Until now the cutting function wasn't enabled.
To start using this function, make sure you have:
- Firmware 1.0.6 installed in the MMU2S unit
- Firmware 3.9.0 installed in the MK3S/MK2.5S
The printed parts for the selector (mmu2-blade-holder and mmu2-selector-finda) were updated to provide a better grip of the blade and are available for download here.
Show current Z offset in reset dialog before first layer calibration
In the case of rerunning the First Layer Calibration, the printer first checks if the value of Live Adjust Z is stored in the EEPROM. Before the process is started, the user is asked to confirm, whether the calibration should start from the current value of the Live Adjust Z or reset this value to zero (factory defaults).
Unknown Z coordinate displayed
In a situation when the printer doesn't know the exact Z-axis position (e.g. after the power on) a question mark is displayed on the screen next to the Z coordinate.
There was also an issue with displaying the “?” instead of the correct Z-axis coordinate caused by the behavior of the black Delta PSU. This is now fixed.
Safer moves in Z-axis, if the position is unknown (MK3/MK3S) #1768
Additionally, in a situation when the printer doesn't know the exact Z-axis position (e.g. after the power on) a stall guard is activated to stop the movement immediately if the obstacle (heatbed) is detected.
Language dictionary size increased
The original design of the memory blocks in the external FLASH expected files smaller than 64 KB. However, while increasing the number of functions and respective text strings, the size of some language dictionaries required a bigger space allocation. After successfully refactoring this part of the code, this limit is no longer present.
Heating disabled during MBL
The Pulse-width modulation (PWM) of the heated bed created an electromagnetic field, which had a negative impact on the P.I.N.D.A. sensor during the mesh bed levelling (MBL) procedure. To increase the reliability of the measurements, heating is temporarily disabled when the sensor is above each of the measured points during the MBL.
MINTEMP value lowered (MK3/MK3S)
Based on the feedback from the community and internal testing, the minimal operational temperature was lowered from 15°C to 10°C (59°F to 50°F).
Note that for the MK2.5 and MK2.5 the lowest allowed temperature is still 15°C as the readings below this value are inconsistent.
MINTEMP error differentiated
Previously the firmware displayed a message “MINTEMP FIXED” after a successful recovery in an environment with low temperature. New firmware distinguishes between “MINTEMP HOTEND FIXED” and “MINTEMP BED FIXED”.
Laser filament sensor sensitivity fix (MK3)
The sensitivity of the laser filament sensor on older MK3 printers was improved to be more reliable and prevent false filament runout detections with problematic filaments, such as pink PLA or transparent green HG100. Advanced statistics are now available in the sensor menu of MK3 printers.
Flickering “Statistics” screen fixed
The screen displaying the statistics was flickering during the print due to an error in the code responsible for refreshing the screen. The error is now fixed.
Tone timer re-enabled
The function responsible for the tone playback was broken in the previous release. It is now fixed and available at timer4 (timer2 is used as a system_timer) both for Einsy (MK3S/MK3) and MiniRambo (MK2.5S/MK2.5).
Nozzle crash protection improved (MK3/MK3S)
Starting this release, the firmware has the StallGuard functionality for the Z-axis enabled also during the self-test procedure. If the P.I.N.D.A. sensor is set too high and the nozzle starts crashing into the heatbed, the StallGuard is activated and motion of the Z-axis immediately stopped to prevent any possible damage. A warning message “Bed leveling failed. The sensor didn't trigger. Debris on nozzle? Waiting for reset.” is then displayed on the screen.
Note, that this function is available only on the boards with the Trinamic drivers (MK3/MK3S). Older printers like MK2.5 and MK2.5S won't support it.
MMU runout for unknown filament fixed
This fix addresses the issue with the printer soft-resetting in case a filament runout is detected while the current filament is unknown. This can happen due to the following reasons:
- User performed a load to the nozzle and an event caused a power cycle (power panic during MMU print)
- User turned off the printer and continued printing with the same filament the next day
Since the currently loaded filament is unknown, the printer cannot reliably retract it and move the selector to the next one if the SpoolJoin function is enabled, nor can it be marked as fully depleted. After trying several automatic procedures, it was decided to trigger M600 in such scenarios and require the user's attention to verify the state of the filament.
This fixes issues #2464, #1993, #2301, #2500, and kudos to user @vintagepc for his contribution!
Belt test improvements (MK3/MK3S)
The belt test feature is providing approximate values indicating, whether the belts are properly tensioned. There were some scenarios, in which the test didn't finish correctly.
This release fixes all of them, namely: #2472, #2356, #2484, #968, #2547 and again kudos to @vintagepc.
Also, until now the status was refreshed only after running the Selftest. Based on the feedback from the community it is now as a standalone test available at all times. To run it, go to the Menu->Support->Belt status ( #1060 #1937).
Decoupling XYZ relative and E relative
Until now the Prusa-Firmware was preventing the user from using relative XYZ motion (for Z-hop) at the same time with absolute extrusion. This behavior was fixed and also switched at the same time to be more inline with the Marlin 2.0 standard (changing the XYZ relativity also affects the extruder).
The users however reported that some calibration G-codes stopped working with the RC1 release. It turns out those G-codes needed the axis to be decoupled just like previously in Prusa-Firmware and not be directly inline with Marlin 2.0. The second change, which came with RC2, which decoupled the XYZ relativity from the extruder completely, eliminating both mentioned issues simultaneously.
Other changes
Sheet's name displayed on the status screen
The name of the currently selected steel sheet is now displayed on the home screen for a better overview (if two or more sheets are calibrated).
Enable print fan to speed up while “waiting for a cooldown” procedure
While waiting for the hotend to cool down, the printer activates the print fan in order to speed up the cooling phase.
M350 for all axes
#2057
The G-code M350 (micro-stepping) is now implemented for all axes, previously only for the extruder.
Bug fixes
Heater running and extruder not parked at print's end
In some scenarios at the end of the print, the heater was still running and the extruder wasn't parked at the correct location.
F.I.N.D.A. sensor always triggered
The F.I.N.D.A. sensor on some MMU2S units was always triggered, even if no filament was present.
Infinite Loop
G-code M601 was in specific scenarios causing an endless loop.
Fixed planner for Octoprint MMU2S power panic improved
Fixed planner for Octoprint MMU2S after a power panic, which caused incorrect reconnection to the printed object.
Filament runout
The filament runout for MMU2S doesn't work properly.
Stop print
Stop print during print with MMU2S causes a filament runout.
GitHub templates
We have improved the procedure while creating an issue on the GitHub, the page is now equipped with several templates to address all possible issues.
- BUG
- ENHANCEMENT
- FEATURE REQUEST
- QUESTIONS
While starting a new issue please take your time, select and fill in the most appropriate one. It will speed up the entire process.