That’s why @johnboiles and I spent time on the optical calibration. It can potentially mitigate all those sources of variation.
or at least measure them to make sure our other corrections are working.
The biggest sources of errors are the things we haven’t addressed. We are
trying to solve the issue using the same knobs that we’ve already mastered.
The current triangular calibration calibrates the known measurements to
compensate for unknown measurements. It is no wonder we are getting
Here is my list of the biggest sources of variation that haven’t been correctly addressed by the current calibration:
- Chain Tolerances
- It is my understanding that the chains are ± 6 mm over their length. This is a huge source of variation.
-0 to +1.5% IIRC. It varies from chain to chain and the ‘normal’ recommendation
is to replace the chain when it gets to 3%.
- Distance Between Motors
- The reason this is on the list is because this needs to be measured to within 0.2 mm to achieve 1 mm accuracy
we should be able to get to ~.5mm with a tape measure
- Chain Sag
- Even though this is addressed in the calibration, I don’t think the calibration of this parameter is working.
we know that the formula used for chain sag in incorrect, so this is a known
IMHO, this is probably the biggest problem we still have.
- Chain Stretch
this is the same as #1
- Frame Flex
the top beam goes a long way to eliminating this, but it is still a potential
source of error. But I think it’s a minor thing now.
measuring the motor distance with a slack chain and while under tension will
tell us how much this is.
and measuring the motor distance manually and comparing it to the measurement by
chain can tell us the chain tolerance/stretch for that length of chain. Do it
for both chains to find out if they are the same.
It would be useful for someone to loop their chains and check every few inches
to see how much it varies over the lenth of the chain. My guess is that a batch
of chain is going to be pretty consistant, but that’s just a guess.
If one of the Programmers could make a short script to feed out chain in mm for one motor, vertically with a tape measure behind, I would do it with a 15kg dumbbell. It’s not a the width of the Maslow but could serve as an indicator. On full chain length the stretch is ~2mm.
@Gero, I can do that, which motor would you choose? I can give you a macro the extends the chain a set amount each time it is clicked (how much to extend?) or a .nc file the extends the increment, then waits a set number of seconds, then extends again, wait, extend, etc (how many times, how long to wait between? I guess you could use the ‘Hold’ button to extend the wait time…
I was planning on doing the measurements with the motors, I posted roughtly the
commands recently, but can dig that up and turn it into a g-code file.
the idea was to hook the two chains together with the master links to make a
loop, do the normal chain measurement, and then cycle through doing the same
thing again and again every few inches.
we would need to log file to see the results.
go through the same routine that measures the motor distance now.
then roll both motors in the same direction 3-4 inches, pull tight again just
like the motor distance measurement does, report current position (just like the
motor distance does), then release tension and repeat
oh yes, the encoder positions should be zeroed as the chain is pulled tight each
time so that the numbers reported are since the last test, not ever growing
I think you’d run out of chain, and only actually test the slack tail of the chain spanning the motors?
hook the two chains together into a loop, when you run out of the first chain,
you are now testing part of both chains, then you are only testing the second
chain, then testing both until you loop all the way around.
what we are looking for is to see if the various steps all return very similar
values, or if they drift up and down over the different parts of the chains.
Here’s a start for you, it moves both motors 100mm and then waits 60 seconds for you to make a measurement then repeats. This isn’t the ‘two chains hooked together’ arrangement, just a way to make measurements on one or both chains. You’ll need to recalibrate your chains after it’s done, and there’s no way to show any progress numbers on screen. I think I put enough comments in so you could change the distances and wait times (shorter wait times, and click ‘Hold/Resume’ might work).
G21 ( metric mode ) B06 L0 R0 ( zero the axes ) G91 ( set relative mode ) B09 L100 R100 F1000 ( move both motors 100 mm, fast ) G90 ( return to absolute mode ) G4 S60 ( wait 60 second - edit to repeat these four lines as many times as you want ) G91 B09 L100 R100 F1000 G90 G4 S60 G91 B09 L100 R100 F1000 G90 G4 S60 G91 B09 L100 R100 F1000 G90 G4 S60 G91 B09 L100 R100 F1000 G90 G4 S60 B06 L0 R0 ( zero the axes ) G90 ( return to absolute mode ) M30 ( all done )
There is a B code that will return the motor positions
so I think it would be something like:
G91 ( set relative mode )
B09 L100 R100 F1000 ( move both motors 100 mm, fast )
B-code to apply power to the right motor (I’d do it in two steps, first at
low-medium power to take up the slack, then high power to pull it tight)
B-code to report motor positions (shows up in the logs)
B06 L0 R0 ( zero the axes )
B09 R10 (release tension on the system
G90 ( return to absolute mode )
G4 S60 ( wait 60 second - edit to repeat these four lines as many times as you want )
why bounce back and forth between relative and absolute modes?
That’s right, B10. I was looking on screen (doesn’t show there), and my log grep was hiding the line.
@Gero, here’s a version that will show the chain measurements in the log, like this:
Sent: B10 L B10 L [Measure: 199.94] Sent: B10 R B10 R [Measure: 199.76]
G21 ( metric mode ) B06 L0 R0 ( zero the axes ) G91 ( set relative mode ) B09 L100 R100 F1000 ( move both motors 100 mm, fast ) G90 ( return to absolute mode ) B10 L ( measure the left axis chain length ) B10 R ( measure the right axis chain length ) G4 S60 ( wait 60 second, repeat these four lines as many times as you want ) G91 B09 L100 R100 F1000 G90 B10 L B10 R G4 S60 G91 B09 L100 R100 F1000 G90 B10 L B10 R G4 S60 G91 B09 L100 R100 F1000 G90 B10 L B10 R G4 S60 G91 B09 L100 R100 F1000 G90 B10 L B10 R G4 S60 B06 L0 R0 ( zero the axes ) G90 ( return to absolute mode ) B10 L B10 R M30 ( all done )
I like to stay in absolute mode unless I’m currently making a relative movement. Belt and suspenders.
That script would make quite a few hard pulls. There have been enough users who’ve damaged driver chips and gears that I don’t want to publish a script that would do that many high power pulls in so short a time.
don’t pull that hard then, but there’s more stress on the gears rotating under
tension than there would be to release tension, roll a bit, then snug things up.
As long as we are pulling at the same strength every time, the results should be
The script as currently written will always return the same values, because you
are always telling it to move a particular distance, so it will move that
amount, even if the chain sags in the meantime (or will pull the chain really
tight trying to move that distance if the chain is shorter)
so even if you don’t want to pull tight at full power, you do need the back-off
and tighten for each move.
try the tighten at 25% power to start with.
It is the script that @Gero requested, to aid in measuring the chain with a tape measure.
I’ve got a pair of motors and a PowerControl card to sacrifice, write the script and I’ll find time to run it.
it doesn’t measure the chain, it moves both motors 100mm and then checks if it
says it moved them 100mm. there’s no way that it would ever report anything
other than 100mm, no matter if the chain is shorter or longer (unless it fails
with a “can’t keep up” error)
to actually measure, you need to have some movement that is based on the length
of the chain, which requires the loosen-tighten steps for each measurement.
That’s what it does, again and again. The numbers aren’t part of the process. A tape measure, a pencil and paper are. Written to spec.
I had to go back and check the logs to make sure, but the numbers reported by the B10 commands each time reflect the total amount of chain that’s been extended since the axis was zeroed at the beginning of the script.
Does anyone have any ideas or in-progress work to address this?
Thanks for the great support with gcode commands. I have stored and will use them.
Friday or Saturday I would be willing to do a vertical and loop test.
But thinking about it, I had ~ 2mm stretch on full length on 2 old (abused) and 2 new chains, horizontally stretched over a 2x4 with 15kg. (friction and minus own weight)
2+ mm on a complete chain with 15kg does not give me confidence that I can measure chain in 100mm steps with a tape measure. A vertical wire/string encoder attached could give more usable results.
A ‘pull tight’ applies ~30kg on the chain.
Highest sled weight here 17kg and me second with 15kg.
If you happen to have a gcode that involves only the left motor to pull up in the right top corner (arch), I guess the force on the motor is more than the sled weight? If we are looking at ~20kg force on the chain, my guess it would be in the 2.5 - 3 mm range on a full chain.