Take this with a big pinch of salt as I had to do a bit of extrapolation, but it might yield some useful insight later. It was triggered by some thoughts around flex/stretch and me realising I have too much friction in my arms (similar to others have posted), which i’m looking at separately.
Random thought that occurred to me:
- If we group all the flex/stretch together (belts, frame, Maslow unit) and just consider it ‘system flex’.
- It’s probably all linear flex, or pretty close to it.
- If that’s true, we can model it as y = mx + c
- If so - we should be able to measure it, even if we don’t know the units properly.
- What does c tell us? Is it useful?
Supposition:
- If we can graph stretch/flex at different motor currents, we can extrapolate from the data and find c at 0.
- Stretch is probably not 0 at 0 (which it should be(?) in a linear system with no friction/mechanical loss).
- The magnitude of c might give an indication of how much friction / how bound up the arms are - possibly a better measure than ‘Does retraction start to happen at force 600/900/1200?’
Now, impetuous person I am, I just went and ran calibration a few times at different forces to get the ‘Frame Flex’ value and looked at what the code actually does after
It’s one of the first things calibration does, and I stopped calibration after except the first time. That came back to bite me (more on that later).
Results:
force | TL-BR | TR-BL |
---|---|---|
600 | 5.276 | 4.185 |
900 | 3.669 | 4.829 |
1200 | 3.911 | 4.961 |
1500 | 6.17 | 2.526 |
1800 | 3.64 | 3.154 |
These are my raw results. I’m not sure what happened at force 1500, but I did repeat and got the same effect, so that’s interesting in itself.
A quick graph:
Yep, that’s interesting, clearly I had no idea what Frame Flex actually does - the graph looks like it vaguely trends downward but has an aberration at 1500.
Lets look at the code:
From (FluidNC/FluidNC/src/Maslow/Calibration.cpp at Maslow-Main · BarbourSmith/FluidNC · GitHub):
if(measureFlex){
howHardToPull = calibrationCurrentThreshold + 500;
}
and
if(measureFlex){
float newLenTLBR = measurements[0][0] + measurements[0][3];
float newLenTRBL = measurements[0][1] + measurements[0][2];
float origLenTLBR = calibration_data[0][0] + calibration_data[0][3];
float origLenTRBL = calibration_data[0][1] + calibration_data[0][2];
float diffTLBR = abs(newLenTLBR - origLenTLBR);
float diffTRBL = abs(newLenTRBL - origLenTRBL);
log_info("Flex measurement: TLBR: " << diffTLBR << " TRBL: " << diffTRBL);
Ok, so the value printed out is the difference in belt lengths with +500 added onto the calibration value. Makes sense - my belt lengths are ~1845 x 2 = 3600 (x 2 because it’s 2 belts), so about 0.1% system stretch (I think - assuming Frame Flex of 5 is 5mm).
Now that might be interesting in itself - arguably it could be showing me my whole system is super stable and has very little flex. It could be telling me I only have belt stretch, or I have no belt stretch. Or (most likely) it might be telling me a lot of the force is being used to turn the reels.
Wild extrapolation
Ok, this is where we get pinch-of-salt-y.
What I actually want is the calibration to measure the belt lengths at the centre point multiple times and bump up the force each time, and dump those raw values out. Maybe in time that can be added.
But for now, I do actually know some data and can fudge some extrapolation. I did run the initial calibration long enough to know the belt lengths at 600 are ~1845, and our first data point is at 1100, and giving us a length of ~1849 (as it tells us the total was ~ +4.5). So we can guess the base length at 1200 was 1850, and work out the value for 1700, and so on.
Dave’s Dodgy Data:
With that extrapolation, that would give us:
Force | Belt Length |
---|---|
600 | 1845 |
1200 | 1850 |
1800 | 1853 |
2300 | 1856 |
Graphed to:
Which (remembering our healthy pinch of salt) gives us a belt length at 0 force of ~1842 - or 3684.
Except I know from measuring that really it’s ~3710-3720.
I have measured values from another calibration that give the expected length at 900 as ~3698 - or 1849 - which matches this graph, so it’s plausible - though again, big grain of salt.
Which I think matches with my supposition that force is being lost as something other than stretch - primarily as mechanical loss in turning the reels.
Next:
If i had loads of time i’d make the code dump out more values and re-test with sticky reels, but the primary purpose (other than dumping my thoughts / first try) was to get a before snapshot.
I’m off to rebuild my Maslow with some sanded-to-free-spinning reels (and i’l post my experiences with that separately).
I’ll re-run this experiment with those, and we’ll see what we see