What would you like to see in the 8-bit firmware?
as you know, we do not stop the development of our printers with their release. We keep improving both the hardware and especially the firmware. All you have to do is flash new firmware and your existing machine learns a few new tricks. Over the past years we’ve added many features that we can hardly imagine living without now, to name a few:
- Support for remaining time estimation
- Support for multiple languages
- Sheet profiles
- Customizable mesh bed leveling (7x7)
- Linear Advance 1.5
- Calibration using multiple filament types
Of course, it’s not just new features, but also bug fixes, tiny improvements and often changes invisible to the user, such as code optimizations and refactoring. Those are necessary to keep the firmware stable and maintainable in the long run.
We’ve reached a point where all the most requested features are now implemented and the firmware is extremely stable (thanks in part to the community feedback from beta versions, thank you!). As you know, our Original Prusa MINI+ is running on our 32-bit Buddy platform and our future printers will also be running 32-bit firmware. So part of our developer team is fully focused on that. And we’ve pushed the 8-bit platform quite close to its limits. With that said, we still have a bit of space left in the flash memory and we can be very creative when it comes to optimizations. 🙂 So that’s why we’re now asking you:
What feature/change would you like to see in the MK2.5/S & MK3/S/+ 8-bit firmware?
Our team has a couple of ideas:
- Randomize print positions on the bed (prolongs sheet life)
- More community translations
- Individual object canceling/skipping
- G-code compression (for print hosts/Prusa connect)
- 170 °C during Mesh Bed Leveling like on the MINI+ (prevent dripping)
If you have features on your wishlist, please, let us know!
P.s.: Have you tried our latest stable firmware 3.10.0?
DEFINITELY include on-the-fly individual item cancelling/skipping for when one (or more items or instances of an item) might detaches from the build plate in mid-build.
The sheet selection is clunky and I would like to see a smoother approach and possibly include the printer name.
Some think like: “MK3S+ Smooth1”
I would like a process to help change the nozzle: explanations on screen, hot end movement, temperature setting during process.
Here are a few things I've enabled in Marlin 2 on my other printer that I miss on the Mk3:
- The ability to change the on-board preheat parameters would be nice. Existing Marlin 2 features allow overriding the presets to specify PLA and PETG temperatures. I don't use ABS, so would rather have other info in there. In general, allow the user to change any hard-coded preset printing parameters (temperatures). I'd like a "cleaning" preset for example, but others might want PC. This exists in Marlin 2. Perhaps even adjusting length of extrusion for loading & unloading.
- A better Live-Z calibration routine. Jeff Jordan's "Life Adjust" is the king, but I realize there is limited space in the firmware. Perhaps have the Live Z routine allow the user to select from gcode on disk as an option? If nothing else, increase the size of the square printed at the end of the current pattern.
- An automated tweaking of bed level position at each test point -- akin to the "babystepping" correction in Marlin 2 -- would make small adjustments easier. This exists in Marlin 2 but is not automated. A 7x7 test print with small squares at each position would be helpful, similar to "Life Adjust" above.
New features that would help with very common problems:
- An automated Max volumetric rate test would be very useful. Load filament, heat, then step through feeding a user-selectable length of filament at increasing speeds, provide procedure describing what to look and listen for to identify maximum safe rate for each filament.
- An automated extrusion multiplier test. Let user set parameters, select a test print from disk, print. (This is probably a better slicer feature than printer firmware.)
- An automated nozzle change procedure. Unload filament, raise Z, heat to 285C, prompt through change procedure. Provide detailed GOOD instructions about the importance of nozzle spacing, how to test. Prompt through each step.
- An automated cold pull procedure. Unload existing filament, position nozzle, heat to user-selectable filament temp, load and extrude cleaning filament of choice. Drop temperature. Raise temperature gradually (I do pulls at 140C) and instruct on pull, referring to GOOD instructions on what to look for.
- Automated unclog process. If filament breaks below Bondtech gears or is stuck, a few steps to position and step through procedure to diagnose, referring to detailed GOOD instructions. This scares the hell out of new users the 1st time. A HELP menu with such options would be nice.
Might be worthwhile to point to disk (SD card) for larger diagnostic prints, provide gcode in a directory on SD card. I have a directory structure of Jeff Jordan "Life Adjust" type prints. Calibration/PLA,PETG/0.25mm nozzle, 0.4mm nozzle, 0.6mm nozzle for example.
I like many of Bob's suggestions, particularly the automated nozzle change procedure (something as simple as having a fixed setting of 285 degrees to pick in the nozzle temperature Menü would be better than spinning the wheel a dozen times) and replacing the current first layer calibration method with a live z my way approach. The latter seems to be the standard answer to what feels like every other post in these forums (fora?)...
Sometimes it's a bit hard to decide if something should be a feature of the firmware or the slicer. For example, the OP's original idea of randomizing print positions strikes me as a slicer issue more then firmware. I don't want the firmware to futz around with the positions I carefully selected in the slicer. Or copying the cool down process for bed leveling. While I think it would be great to do that in firmware, I can already do that with startup Gcode in the slicer so why waste that space in firmware?
One more idea but again it seems this requires cooperation of slicer and firmware: there's 20+ pages of discussion of the "bulge" (or buldge [sic]) issue in these forums. If there only one thing the Prusa devs could work on, I would pick this one, and I strongly expect it requires both slicer and firmware improvements.
170 °C during Mesh Bed Leveling like on the MINI+ (prevent dripping)
I like @bobstro's list.
other ideas (not everybody wants to/can set up octoprint/pronterface):
* steps/mm x,y,z,e: info, adjustment, reset to default (M503, M92, M500)
* bed PID-autotuning
* mesh bed level info (G81):
|bed levels 1/100mm: |
|1: +12 -13 +23 | wheel: up/down
|2: -01 +13 +37 |
|3: -17 +47 !!! | !!!: > +/-0.99mm
|bed levels 1/100mm: |
|1: +12 -01 -33 +44 -55 +17 -19 | horizontal autoscroll
|2: -01 +13 -11 +37 -39 +22 -07 |
|3: -03 +13 -11 +37 -39 +22 -07 |
|4: -01 +13 -11 +37 -39 +22 -07 |
|5: -01 +13 -11 +37 -39 +22 -07 |
|6: -01 +13 -11 +37 -39 +22 -07 |
|7: -01 +13 -11 +37 -39 +22 -07 |
Randomize print positions on the bed (prolongs sheet life)
Randomise the position of the intro line. It's printed in exctly the same place every time and that is the part of the bed that wears first. I have been using variations on G1 Y-5.0 F1000.0 ; go outside print area including printing the intro line from right to left but with multiple sheets with differing wear patterns this becomes an admin problem...
Add the output option to call post processing scripts to Printer Settings or Filament Settings so it can be saved and treated as a preset.
Plus: Some easy way to know how long the first layer will take. The information is already in the gcode but that's not much help for a non-techie. Either flash it on the LCD before the print starts, or make it part of the features display in the slicer, that way the user knows how long to commit to monitoring the start of a long print.
One thing I'd really like to see is a simple improvement to the bed level algorithm.
The current 7x7 uses a 7x7 array of points, and fits to those point. All good, however the bed is actually larger. When the algorithm calculates a point outside the bounds of the array - it appears the code still interpolates flatness from the array data. While that seems like a good idea, any set of vectors used - if large enough in variance - will cause these outside tails to go asymptotic. The resulting interpolations can be quite wrong.
A better way of interpolating points outside the data is to make a few assumptions, and increase the array bounds to include the full bed. An easy way is to make the array 9x9 - add one extra point on the perimeter. Since these points are not measurable, they need to be interpolated. It's fair to say the bed is 'reasonably' flat, that a linear average of all 49 inner and measured points is a valid way to guess what these new end points are (using the slope of 7 inner points). Once the array is filled with the 49 measurements, and the outer points are interpolated, now run the Lagrangian Transform on the full set of 9x9 data. This will more properly estimate the points outside the measured area, and will avoid the asymptotic behavior with unbounded polynomials.
I also like Bob's ideas for bed level improvements. The current bed level cal is a waste of time. The printer should print something much larger to provide enough time to make a sensible adjustment.
Also - maybe the fw can do the initial cal mid bed ... use that as the primary Z-offset. Then, have code that does a similar test in the four or eight edge points that records these values as offsets that are placed in bed level correction. The current bed level correct is so interactive (front affects sides, both affect middle) that it's painful to use and difficult to get right.
This along with improving the edge interpolation would set Prusa as the best bed level in the business.
Randomize print position? Perhaps that makes sense in farm mode, but a worthless and dangerous option for me. As a data point, I've been using the same smooth PEI for over three years, printing in the exact same center for 99.99% of prints. Plastic still sticks fine. Soap and water works.
@cwbullet: Why including the printer name? Right now, I am ok with cycling through 3 sheets (smooth, textured, satin). Granted, right now I actually have configured 4, including SATINL for PLA and SATING for PETG. Ymmv. Names are a bit short though. If you only configure 2 sheets, it is only one click, once you select that menu. That's hard to beat, isn't it? Do you have an idea how to make it smoother?
@Tim: I agree, the current bed level cal is way too small. I also favor Jeff Jordan's "Life Adjust" and to start with a sensible sized one in the middle. But if you start from Z=0, I actually like the initial zig-zag to wheel down quickly from safe distance into a sensible height without accumulating junk at the nozzle. Once there, I agree 100% with you including your view on the Lagrange Interpolation.
I did not think that through well. I have 12 total Prusa printers and some have 2 and others have 3 sheets. I like to keep sheets labeled with their Z offset. I label my sheets with “printer name” and smooth or textured and the Z Offset.
@cwbullet: Ah, I see. I only have my one and only printer. Thank you.
@cwbullet: No doubt about it.
Not like your other hobby where you send funny things up in the air. Lately, I was wondering: Will the larger prototype be manned? 🙂