Exact Constraint

Every object in the world has six degrees of freedom: three translational, and three rotational. This means that they can move linearly forward and back, side to side, and up and down, and can rotate around any of the X, Y, or Z axes. Combinations of these transformations allow objects to move through space and reorient themselves in it.

When designing a precision machine, you have to be careful with how your parts interface with each other. If you constrain too many of the degrees of freedom, your part won't be able to move in the required directions and might jam or break. If you constrain too few, it might move in ways you don't expect and cause problems.

But a more subtle problem than constraining too many or two few of the degrees of freedom is over constraining one of them. This can lead to distortion of the part, require high tolerances to maintain precision, or interfere with machine operation. If you want to avoid this problem, you need to constrain each of the undesired degrees of freedom exactly once - this is called "Exact Constraint", and it's the principle behind my vise design.

My goal with this project is to get repeatability in part positioning within 0.05mm. The existing system is just not set up to do that, and it's because the parts are both under constrained in key degrees of freedom, and over constrained in others.

clojure.lang.LazySeq@931963a1

This is the mounting plate that comes with the machine next to my vise. As you can see, the plate looks very similar to my design but it's a bit different. For starters, the corners are both square on the plate, but one of mine is filleted and the other has a 45 degree angle on it. You might also notice that the plate has holes at the bottom just like the vise does, but the vise's are much wider and longer.

These features make a big difference in repeatability. To see why, let's mount the plate in the machine.

clojure.lang.LazySeq@7b992b4e

If you look closely at the corners, you'll see that only one of them is able to be engaged fully because the cutouts make the plate a little undersized versus the mounting hardware. This means that the plate can shift from side to side, and it's hard to get a consistent reference.

clojure.lang.LazySeq@b2d32595

One solution to this is to make the cuts smaller, so that the plate fits perfectly and both corners are fully engaged. However, to make this work you need to maintain very tight tolerances on your parts - remember, they need to match exactly. This isn't possible for an inexpensive machine like the MDX-15, so we need a better solution.

Looking at the vise, we can see that both corners are fully engaged:

clojure.lang.LazySeq@573006c3

We've constrained three degrees of freedom here: both of X's and one of Y's translational degrees of freedom are constrained by the left corner, leaving the part able to rotate around the Z axis. The right corner contacts the locating feature at a point, constraining that rotation.

Of course, there are still several more that we need to constrain: Y's translation away from the locating features, Z translation, and rotation about the X and Y. These last are constrained by the Y axis plate that the vise is mounted to. Y translation is prevented in both designs by bolts which attach to this plate.

In the stock design, using the provided mounting hardware to install the plate introduces more errors into the part location because the holes are undersized for their purpose.

clojure.lang.LazySeq@219d8046

When attaching the plate, the fastener will contact the side wall and force it out of alignment. This is avoided in the vise design by deliberately making these holes oversized!

clojure.lang.LazySeq@951d2c07

Why would that be a good idea? Well, remember that we only want to constrain the Y axis translation and not introduce any other unneeded forces. To translate over the Y axis, the plate needs to rub against the rest of the machine under it, so we can constrain that motion by increasing the friction force on the plate using the mounting screws. To do that, they only need to contact the top of the vise and hold it firmly to the axis.

When it's all said and done, the part installs smoothly and precisely, with exactly the needed constraints and no extras.

clojure.lang.LazySeq@6677b61

There's only one more consideration to be made: we need to align the vise axes with the mill axes. To do that, we need to rotate the vise around the Z axis, which is constrained by the top right corner's 45 degree angle. This corner is designed to be a bit over size. If the vise is measured to be at an off angle, the machinist can file this corner down until the vise mounts correctly and they will maintain a repeatable, precise fit.

I haven't gotten a chance to measure the repeatability of this setup yet, but I'm expecting excellent results. Once I get my hands on some metrology gear, I'll report back.

If you like what I write, you can subscribe to my mailing list to get new posts in your inbox: