Many people share their print settings online. Some are really good, like the ones from Chris Warkocki aka codiac2600 who publishes them in the Prusa Facebook group and on GitHub.
While for many those profiles work very well out of the box, to me there is always some room for improvements that lead me to have my own profiles per printer, not per type of printer.
There are no 2 identical MK3S in the world. From little variations in the used parts over the care that was put in to put it together to the variation of adjustments like the belt tension there is always a difference in 2 printers.
So for really good prints, you need to spent some effort to calibrate your printer. Also if you have multiple printers like myself, then you want the printed parts to come out the same quality and size on every printer.
In the beginning I spent hours to adjust model dimensions in CAD between my first two printer.
But before we start, just a reminder that this is very much depending on the material you print and the shrinkage is dependent on the material and might have huge effect on the size of an object.
So one of the first things I start with is the extruder stepper. You can use Octoprint and the Terminal to send commands and receive the output.
With "M503" you get the current settings. Not just the steps per unit, but this is the part that is in focus here so I cut the rest out. I also assume that you have already some filament preferable PLA loaded.
Send: M503
Recv: echo:Steps per unit:
Recv: echo: M92 X100.00 Y100.00 Z400.00 E415.00
As I have a BMG extruder clone installed I have 415 steps for the extruder motor per unit.With a standard extruder you might have less, roughly 1/3.
Now we need to make accurate measurements or we will only make things worse. Take some calipers or a very precise ruler. A folding ruler like shown in some videos is not an appropriate tool for this job. The maximum my calipers can measure is 150mm. Now measure the 150mm from the top of the extruder body and mark the filament with a fine permanent marker.
Next we heat up the nozzle and maybe just give a 5°C more than usual to make sure the filament is properly molten in time. With the nozzle at temperature we go back to the terminal in Octoprint. And set the count for the extruder stepper to 0.
Send: G92 E0
Recv: ok
Again, make sure the nozzle is at temperature. Then send the command to extrude 100mm of filament. 100mm is just fine as it leaves you with plenty length to measure. If you would extrude 150mm the mark maybe already in the extruder body and not visible and/or reachable to measure.
Send: G1 E100 F30
Recv: ok
Then measure the distance from the extruder body to the mark you made with the permanent marker. In my case I there was 47mm of filament left. So the extruder extruded 103mm instead of 100mm.
We need a little bit of math now to calculate the new values based on the ratio.
100/103 x 415 = 402.91
That is quite some difference. For the next stepp we need to terminal again to send the new value to the printer.
Send: M92 E402.91
Recv: ok
But we also need to save it to the eeprom.
Send: M500
Recv: echo:Settings Stored
We can now read it back from the eeprom and ask for the values.
Send: M501
Recv: echo:Hardcoded Default Settings Loaded
Send: M503
Recv: echo:Steps per unit:
Recv: echo: M92 X100.00 Y100.00 Z400.00 E402.91
As next step I usually perform a first layer calibration. There are plenty of instructions about it that you can find with google or at the Prusa blog or forum. Important is that the surface is clean, so you don't have adhesion problems.
Then I print a 1 layer test rectangle of 40x40mm and let it cool down. Then I measure the thickness with my calipers. AS I use the cheaper powder coated steel sheets from China, they have a rougher surface as the Original ones from Prusa. Because of the texture you will not be able to get a 0.2mm thickness with a 0.2mm layer height. Usually I end up with a thickness between 0.2 and 0.3 mm. 0.25 is what I try to archive.
But be careful to not scratch the build surface with the tip of the nozzle. And keep in mind to you have to do this for every sheet. This is why Prusa added the feature to store values for multiple sheets.
When I am happy with my first layer, then I move onto the other dimensions. Usually I print a cube of 40x40x40mm. I often see people using cube with just 20mm edge length. That save some material, but as short the distance is as smaller the deviation will be that you can measure. The optimal size would be 200x200x200mm I guess, but that costs a lot of material as you might need to redo this step a few times.
Once the print is cooled down we start to measure. Make sure you mark the surface somehow so you know later which axis it is. There are cubes with marks, but they introduce irritation in the surface that might lead to false measurements.
So again in my example those where my measurements:
X 39,80mm Y39,60mm Z 40,70mm
Similar math as we did for the extruder needs to be done per axis now.
X = 40 / 39.8 x 100 = 100.50
Y = 40 / 39.6 x 100 = 101.01
Z = 40 / 40.7 x 400 = 393.12
So we have our new values now and need to program them into the eeprom of the printer.
Send: M92 X100.50 Y101.01 Z393.12
Recv: ok
Save them
Send: M500
Recv: echo:Settings Stored
Read back and check values
Send: M501
Recv: echo:Hardcoded Default Settings Loaded
Send: M503
Recv: echo:Steps per unit:
Recv: echo: M92 X100.50 Y101.01 Z393.12 E402.91
So now all stepper motors are calibrated for now. You might want to revisit this calibration once in a while to check if everything is till ok with you favorite print profile. As you can see here I still have a little "elephant foot" on the bottom of my test cube. There is are also some vertical lines that you can barely see.
I have noticed that the nozzle was scratching over the print while printing and making a squeaky noise sometimes. Could the steps for the z axis be wrong? Well, as the end result was exactly the 40mm the 0.2mm layer height seemed to be ok. Did it?
No, remember when I said above that you will never get an exact first layer height of 0.2mm with a textured print bed? So if your measured first layer height is 0.25mm, then the cube height should be 40.05mm, not exactly 40mm as you have to add the difference from the first layer.
So I had to adjust the steps for the z-axis again.
Last, but not least there is shrinking. Shrining is what makes objects warp on the drin surface. When the molten plastic cools down it shrinks a bit. Some plastics shrink a lot, like ABS, some less like PLA. so you might have a PLA cube that is exactly 40mm on all sides, but the same cube printed in PETG it is not.
Then I focused on the surface. So I just printed a rectangle with 10mm height. What you see in the photo is the pain top surface, no ironing. You can nearly see some marks from the infill.
But still I was not happy with the top surface. So the next area to improve the settings was the print profile in Prusa slicer. In the filament settings you find the extrusion multiplier. I used the pretty PLA profile from Chris as a base that had it set to 0.95 (95%). I ended up using 0.93(93%) in this case.
Keep in mind that this might also vary on the filament you use. Especially when you use cheap filament that varies in diameter over the length of a spool, the results might not be very good.
You can also set the change the flow multiplier in firmware with M221. But I prefer to do this in the slicer profile as this is very much different depending on the filament.
Basically the math is Total flow rate = Flow multiplier in firmware (M221) x Extrusion multiplier in PrusaSlicer. So a flow multiplier in the printer of 1.05 and a multiplier of 0.95 in Prusa Sliver would be a total flow rate of 0.99 again.
Once you have dialed in your slicer profile, you might want to revisit the calibration again as those settings might affect the overall values of the size of the printed part. If you really need that precision.