yes, making the machien wider keeps any of the angles from getting as close to
vertical. That helps a lot
Again, I don’t actually have a Maslow at this point so I’m just speculating. I also haven’t spent any time playing around with the Arduino so I don’t know its limitations. If the Arduino can’t handle the added circuitry, that obviously kills it. Beyond that, getting wires to the Arduino from the sled should be pretty basic.
A less accurate way of compensating for the tension in the chains would be to use the equations from @pillageTHENburn 's post to calculate the static tension in each chain in real time. It doesn’t account for the friction between the sled and the workpiece (waxing the bottom of the sled could help) or the resistance from the bit cutting the workpiece, but its a step in the right direction.
Hey everyone, I finally put this thing together but now I found out I can’t upload it. Its a spreadsheet that calculates the static tension in the two chains at any point on the work piece. I left the sprocket positions, frame angle and sled weight as variables so that people can play around with it and see how that changes things.
The first tab calculates everything for a single point that the user picks. The second tab calculates (and illustrates) tension on the right chain at 3" intervals around the entire work piece. The left chain would just mirror that.
I’ve attached my hand calculations in case anyone wants to double check my work. My numbers do seem to line up with @pillageTHENburn 's depending on his sprocket positions.
Is there a way for me to upload the excel file so people can use it?
Disclaimers:
- This calculates static tension. It does not account for the force from a router actually cutting the work piece.
- For now, it assumes the chains are weightless.
- It assumes the chains are attached at the bit. This probably wouldn’t make a difference in the tension calculations but it will change the chain length.
- There is a number for the frictional force between the sled and the work piece. The coefficient of friction I used came from here: http://www.physlink.com/Reference/FrictionCoefficients.cfm The running router should vibrate enough to where we can assume kinetic friction most of the time.
I think a .zip file would work.
Thank you for digging into this area. It’s been one of those uncharacterized unknowns in the past, this will help us explore in more depth. A good contribution!
You bet, I’m glad I could help.
Maslow Tension Calculations.zip (21.7 KB)
That is a thing of beauty! The pattern matches up well with what I have observed in practice.
I added .xls and .xlsx to the allowed file extensions
This is a long post, but I promise its worth reading till the end.
There are two effects acting on the chain causing its actual length to be different from the calculated length, which shouldn’t be mixed up:
1- chain stretch due to the tension force. The chain is an elastic body like any material on earth and will act like a spring, stretching when tension is applied to it.
2- chain sag due its own weight. Like any chain or rope, the weight per unit length causes a sag (engineers call the resulting curved shape under its own weight a ‘catenary curve’). Like the cables holding up a suspension bridge. Or a rope bridge between two mountains that sags in the middle under its own weight.
Chain stretch is probably most easily available directly from the spec sheet, or can be determined experimentally. Hang a chain vertically and measure the increase in chain length as weights are added to its end. This will give a ‘k value’ a.k.a. stiffness coefficient in N/m (lbf/in). Then, when the chain is on the Maslow, by estimating the force based on the position, we can use 1/k to calculate the stretch. The only issue I see is that while tension force due to sled weight is easy to estimate at any position (like @pillageTHENburn anf @Tommy show above), tension due to cutting forces is not easy to estimate, yet cutting forces are significant.
Chain sag due to its own weight is calculatable quite easily (noting that the chain is not horizontal most of the time, so only the component of it’s weight acting perpendicular to the chain’s orientation will cause sag). Heer’s the most simplified explanation of the catenary curve I could find:
https://www.spaceagecontrol.com/calccabl.htm
unfortunantly this is going to vary from one chain manufacturer to another (and
vary over time as the chain wears).
Fortunantly, chains have very little stretch in them, and with the relatively
low forces we have in play, there’s a good chance that this isn’t going to
matter much.
Do you have any figures to show what the stretch of chain would be going from
say 3 pounds of force to 66 pounds of force?
Difficult to find, but the best I could find was from chain manufacturer Tsubaki. The second diagram is a zoom in of the first:
The units in curly brackets are kg force. The elongation is in mm/m of chain (which is the same as % elongation multiplied by 10).
Estimating using graphs is not super precise, but with 66 lb (=30kg) (which I know that @pillageTHENburn disputes is the max force ) the stretch is approx 1.5mm for every metre of chain. Not small. Can be compensated for in software though because stretch varies linearly with chain tension.
Note that chains also wear over time, which gives them a PERMANENT stretch. This cannot be remedied and the chain must be replaced then. I suppose you could recalibrate maslow and squeeze a bit more service time out of the chain. (see here for a simplified discussion on how to prolong the time a chain remains in service: Understanding Roller Chain Wear Life | The Diamond Chain Company ). Lubrication is also essential to avoiding premature failure (even for chains that are not transmitting a lot of horsepower like on the Maslow).
Also from the same Tsubaki reference:
“Roller chain will stretch slightly during the first few dozen
hours of use as the contact surfaces wear in (about
0.05%). This may result in too much slack in the roller
chain and may require adjustment of the slack.
A tensioner can be used if the layout is designed for it. If
you do not have a tensioner, move the shafts to adjust
the amount of slack. Once the chain is worn-in, very little
stretching will occur.”
Here’s the link to the full reference:
http://tsubaki.ca/pdf/library/Revised-Tsubaki-Drive-Chain-Catalog.pdf
hmm, I wonder if it would be worthwhile to hook the chains together in a loop across both motors and run them for a few days to get that ‘break in’ wear settled
One of the wire rope manufacturers I was looking at offered to sell the wire already broken-in. I wonder if any of the roller chain suppliers offer that same service?
May I request that we collaborate on compensating for the tension-induced chain stretch please?
Not all the calculated chain length is subject to tension-force-induced stretch. The part of the chain wrapped around the sprocket won’t stretch. Only the “free” part will stretch: starting at the point the chain leaves the sprocket up to the point the chain attaches to the sled. We already have that length in the firmware.
We can also calculate the estimated tension. Either through a formula or a look-up table (which may be more CPU efficient?? i.e. faster) as posted by @Tommy above. The firmware can even generate a look-up table once at startup, based on user-supplied sled mass.
And we have the rate at which a #25 chain stretches per unit length under a given tension (the graph in my previous post).
So all the ingredients are here:
_StretchedChainLength := _FreeChainLength * _ChainStretchRatePerNewton * _ChainTensionForceInNewtons
//Using psedo-variables here for illustration purposes. Can be in meteic or imperial units.
Then the _TargetX and _TargetY can be modified using _StretchedChainLength * cos(_ChainAngle) and _StretchedChainLength * sin(_ChainAngle) respectively.
I would gladly try that myself, but I haven’t finished assembling my Maslow yet…
a formula for the chain sag and stretch would be the way to go, space for a
lookup table is very limited
Here is the necessary chain stretch rate for a #25 chain calculated from the graph, and verified at separate points. I also included an example for clarity.
stretch @30kgf = 1.332mm
@2.5mm stretch, the force = 56.1kgf
stretch @ 0kgf = 0mm
slope calculation from point 1 is 1.332/30 = 0.04433 mm/kgf per metre of chain
slope calculation from point 2 is 2.5/56.1 = 0.04456 mm/kgf per metre of chain
These are very close results given the accuracy of using a graph to obtain the values.
Average stretch rate is therefore (0.04456+0.04433)/2 = 0.04444 mm/kgf per metre of chain.
As an example, the stretch of 1.5 metres of chain under a 20kg load would then be:
20kgf * 0.04444 mm/m.kgf * 1.5m = 1.333mm
Picture attached. I will also try to upload the original PDF in case anyone wants to verify my calculations and do 600% zoom ins to the graph to verify accuracy.
This is only for tension-induced stretch. Sag is another calculation on top of that.
Source file for the stretch rate calculation
[Original page, excluding my markings, are copyright of Tsubakimoto Chain Co., reproduced here under the fair use/fair dealing guidelines for the educational purposes of understanding chain stretch]
Chain stretch per unit force extracted page.pdf (166.6 KB)
Could each chain itself be used as a conductor for the load cell signal? The other terminal of the load cell would be connected to a common ground with the Arduino’s ground. (I’m hoping the load cell does not rely on a differential signal?)
@Tommy The denominator of your T2 calculation can be simplified to
cos (phi2).sin(phi1) + cos(phi1).sin(phi2)
This makes a real difference to CPU load and calculation speed if you are calculating this formula 10 times a second in the Arduino. Sin and cos are calculated using MacLauren series (IIRC) which involve a lot of terms and are thus CPU intensive, hence the less we use of them the better.
Also, if a function like cos(phi1) is used in calculating both T1 and T2, it’s not the most efficient route to write the formulas for T1 and T2 with that term in each of them, since that forces the Arduino to do that calculation twice. Better to calculate it once at the start of the calculation loop, then assign the result to an intermediate variable, then use that variable in the formulas. This way that Arduino does the sin and cos calculations only once at the start of each loop.
Could each chain itself be used as a conductor for the load cell signal? The
other terminal of the load cell would be connected to a common ground with the
Arduino’s ground. (I’m hoping the load cell does not rely on a differential
signal?)
load cells are very sensitive to resistance in the wires, so you don’t want
anything other than perfect wiring to them
This is a good idea, and I think calculations for chain sag and stretch can be incorporated without too much difficulty.
Currently both kinematic algorithms calculate the angle of the chain leaving the sprocket, so this can be used as an input. I agree that if the same trigonometric value is going to be used on multiple occasions then it should be calculated once and assigned to an intermediate variable.
Other inputs needed would be the sled weight and the Maslow angle.
I would hesitate to include friction-related forces to start. This is because, unlike forces related to gravity, friction forces change direction as the sled moves in different directions. Therefore, we cannot assume the direction or coefficient of friction will be constant. If we wanted to calculate the current velocity of the sled and compare that to the chain angle then this would be possible, but I recommend we start small.