Thought it would make sense to move one of my replies to a separate topic to give it a bit more visibility considering it might be of general interest.
Originally I was writing about improving dimensional accuracy of prints on the a1 series, so there is some stuff beyond shrinkage calibration. Hope the following text helps.
The idea is to isolate dimensional errors that depend on the print’s size from those that are size-independent.
This in itself leads to a way to isolate (and calibrate) filament shrinkage uninfluenced by other calibration values like flow or pressure advance.
--------------------------- snip ---------------------------
In terms of getting as much accuracy as possible with the least amount of trial & error, proportional errors need to be separated from constant errors.
Proportional / linear error sources:
- (a) motion system (mechanical axis & drive system arrangement, motor & driver)
- (b) filament shrinkage
Constant error sources:
- (c) axis backlash
- (d) input shaping effects
- (e) extrusion
- In reality (c)(d)(e) are also influenced by feed, accel, jerk, shape of the print but they are definitely not proportional to the size of the print
Determining (a) is beyond the typical user’s scope. Simplyfying things we can burry (a) in (b) and call it factor f.
Formalizing the problem a bit we get a nice and simple linear equation
d' = d * f + e
where
d : is the target dimension
d': is the resulting printed dimension
f : is the proportional factor
e : is a constant error (sum of (c) (d) (e))
Having f we can set the filament shrinkage percent and having e we can offset the model’s perimeter walls by the right amount ( -0.5 * e)!
To find f and e we need a series of test prints that are shaped in such a way that e doesn’t fluctuate between sizes, like this for example:
- seam at constant position and as far away as possible from measurement points
- no infill, just multiple wall loops allowing for a consistent continuous print motion
- single contact round measurement face avoiding pressure advance artifacts
And a measurement setup that is consistent and reliable:
- caliper head is temporarily affixed to the granite plate
- jo blocks ensure parallel alignment
- none of these extra tools are really required - it just makes consistent measurements much easier
We will then have a set of target and resulting dimensions to do a linear regression to find f and e. A few lines of python will do the job:
import statistics
# list designed target dimensions
d_targets = [39, 78, 117, 156]
# list resulting dimensions
d_measured = [38.75, 77.65, 116.59, 155.53]
f, e = statistics.linear_regression(d_targets, d_measured)
f = round(f, 6)
e = round(e, 4)
print(f'shrinkage f:\t\t{f} or {f*100} %')
print(f'constant error e:\t{round(e, 3)} mm')
Output for those values:
shrinkage f: 0.998154 or 99.8154 %
constant error e: -0.19 mm
In case anybody really goes all the way - you can follow this link to enter your values and run the code online.
There is also the issue of x and y behaving differently - combine the info above with the following post to fix that (applies to x/p series too):