May 22, 2017

For the purposes of this class, I kept power & software fairly rudimentary. The motor is powered from a 12V supply (using alligator cables) and driven with an H-bridge/Arduino/USB setup hooked directly to my laptop. I'm just running the generic stepper library and not trying to use microstepping, so the motor is ridiculously loud and inefficient compared to its potential.

Between assembly and testing the HobbyShop staff started storing stuff on my desk...

It goes up and down! Tuning the Arduino code to behave with a not-actually-a-stepper-driver at a reasonable speed while not causing ridiculous vibrations took some time.

I conducted some repeatability abbe-error tests with a laser pointer. The laser fixture was clamped to the desk and pointed towards the wall, 1m away (there was a brick column in the way!).

Laserpointer assembly clamped to the center of the desk.

The test shown below has the desk commanded to move between two set points 14cm apart. The laser-projected locations of the lower setpoint were marked on a piece of paper, from which positioning error can be determined from average deviation. This positioning error (unweighted) ended up being an average of 2.39mm over the 1m distance, so 0.33mm error over the 14cm travel.

This desk therefore has an unweighted positioning error of 2.4 microns per mm-travel.

An unweighted desk is an unused desk. The desk-requirements allow for an unweighted desk when moving, but it still needs to hold stuff.

I grabbed 2.5lb (1.134kg) and 10lb (4.536kg) weights and observed their effects when placed on different areas of the desk relative to the rail-ballscrew shafts.

2.5lb weight at (-430, 420)

Experiment with 20lbs at (0, 250)

Coordinate system for desk tests

After adding HDPE skids (see vertical axis build post), I experimentally determined max yaw displacement by pushing on the corner of the desk until it hit the hardstops. These projected errors were +19.83mm and -22.24mm for a vaguely 10lbf push.

where I'm making the approximation that vertical displacement only comes from pitch and horizontal displacement from roll since I have so few samples and since the measurements are reasonably close within sets.

Using these error calculations, I calculated pitch, roll, and yaw stiffnesses of the desk, where roll stiffness > pitch > yaw by approximately an order of magnitude each.

I also did some qualitative testing, and discovered that my system is too low-friction and too backdrivable for my motor to support loads as predicted by the error spreadsheet. That's kinda expected, given that my system uses a high-pitch ballscrew.

However, an unfortunate consequence of this is that a load of ~7lbs (laptop + 2.5lb weight) is the most this actuator can take while traveling up and down at speed, and it sounds terrible doing it. I could have tuned the system to run at a lower speed, but this is somewhat difficult to do with my software setup. Soooo... meh.

This means I can type on my laptop and put my elbows on this desk, but putting my legs on the desk backdrives the motor (no power). If power were turned on, it would likely hold more; however putting 20lb on the desk draws 3A current, at which point I start to worry about thermal dissipation in my H-bridge driver setup.

Even small dynamic loads lower the desk.

The desk holds laptop and legs in static-loading just fine

Adding a gearbox between my motorshaft and the ballscrew would help make my desk sittable, but in its current setup I doubt it would hold close to bodyweight before either my motordriver overheats or my rails break. So, no-go on the "Real Desk" functional requirement.

The desk does hold at least static-108N (laptop + 20lb weights) without failing, so it does meet the class calculation-standards with 100N loads (albeit barely; it probably wouldn't meet the expected 2x safety factor).

Circling back to the original error predictions for a 100N load, I had expected to get 0.23mm displacement from the theoretical desk. Instead, I got 2.87 - an order of magnitude higher.

What went wrong?

Searching through the error spreadsheet, I found a problem with my model.

Linear stiffness of the carriage in the model equals bearing stiffness

I had included flexures in my carriage to account for parallelism-errors with the rails, and had discovered that the rail-shafts bend before the flexures do when I was assembling the vertical axis. And that makes sense - the rails are only 8mm in diameter and have an unsupported length of ~350mm, whereas the ball-bushings are set in a thick block of aluminum.

I had considered shaft stiffness before (in that post, actually), but at the time I was only concerned with whether deflections approached yield stress. Returning back to those calculations, and changing rotation and linear stiffnesses in the spreadsheet to be an average of ballscrew and rail shaft stiffnesses, I get some more reasonable results.

Shaft compliance calculations

new results. Note the F = kX displacement.

Reality only matches models when the models are accurate - shaft stiffness is where my order of magnitude discrepancy came from.

May 21, 2017

During the course of this project, I came across several switchable magnet toolholders and vise accessories.

These things! From a generic google image search

Unlike electromagnets, these require no external power to switch on and off. Instead, they have a pair of permanent magnets. Turning the control knob physically rotates one of the magnets to allow or oppose magnetic field.

When the two magnets are aligned (both poles face the same direction), the magnetic field circulates through the casing and into the workpiece. When the magnets oppose each other, magnetic field travels directly through the magnets (and the casing) without reaching the workpiece. Thickness of the casing therefore has to be tuned to the magnets to prevent flux leakage.

Diagram of magnetic flux circulating through the workpieceFrom kjmagnetics.com

Holding strength is directly related to the thickness of the workpiece. A thicker workpiece allows more magnetic flux - pull force specifications on the manufacturer datasheet come from testing on large thick steel plates in ideal conditions. In practice, the magnets have lower pull strengths since they are holding onto thinner things.

A peristaltic pump is used for supplying precise fluid volumes and flow rates without exposing/contaminating the fluid with pump components. They're commonly used for pumping sterile fluids in hospital settings and for pumping abrasives or aggressive solvents in industrial machines.

Fluid flow is driven by rollers periodically compress a tube, which does two things. Increased pressure pushes the fluid forwards, and tube compression prevents backflow. As the roller rotates and releases pressure on the tube section, vacuum pressure draws more fluid into the tube.

Because all fluid is contained within the tube, this pump doesn't have to worry about finding chemically-compatible o-rings or seals. The only component of concern is the tube itself.

Tubes in peristaltic pumps need to be elastomeric to sustain millions of compression cycles, which rules out common polymer choices like PTFE or PVDF. The most common material choices for peristaltic tubes include natural and synthetic rubbers (good fatigue resistance and chemical compatibility) and silicone for water-based fluids.

The ideal peristaltic pump, one that minimizes tube compression-fatigue and pulsations, has infinite diameter pump-head and rollers (so impossible). Pumps that approach this ideal often use designs like asymmetric heads and offset rollers to increase effective diameters.

The maximum compression force a pump can apply on the tube is determined by the minimum gap between the roller and the housing wall. There's an inverse relationship between pumping force and tube life, bounded by minimum-acceptable-tubing-life (maximum squeezing) and force required to prevent backflow (minimum squeezing). This squeeze force is called 'occlusion', and is usually 20 to 40% of the tube wall thickness:

This flower transplanter robot (TTA PackPlanter 2230) is really cool. How does it repeatably pick up tiny fragile flowershoots without crushing them?

robot picking up plants

The end effector of these pneumatic picker-uppers consists of a shovel-shaped set of needles. The gripper takes advantage of the increased density of the plant's rootball (relative to the rest of the soil) so that compressive force is tuned just enough to hold onto the plant and not crush the roots.

The gripper has to overcome adhesive forces (wall of the tray or soil sticking to the seedling) as well as gravity. The end effector has three needles, so each needle needs to handle

$\alpha$ being needle angle, $A$ being adhesion force, $\mu$ being the coefficient of friction.

A pansy plug weighs approximately 20g, and the coefficient of friction can be assumed similar to snow ~0.2. Adhesion force between water and plastic is estimated to be 4N, and gripper force is estimated to be 5N.

The tradeoff between plug forces and friction sets $\alpha$ to be somewhere around 10$^\circ$.

Designing the vertical axis was focused on reusing a THK ballscrew assembly I already had. This ballscrew required a bit of reconditioning before use, and no longer had a datasheet/drawing on file from the manufacturer, but I found a close approximation from which I could estimate numbers.

This particular ballscrew assembly has a dynamic load rating (axial) of 3.7kN and a stiffness of 120 N/μm, so at least it won't be the thing that breaks first.I also had on hand a number of Misumi-brand LMU8 linear bushings and 608Z bearings, so the desk rails would continue to be the 8mm diameter steel rods (though I swapped out my original rods for 400mm long hardened-steel ones). Coincidentally, the free end of the ballscrew has a diameter of 8mm.The unibody carriage was machined from a single piece of 6061-T6 rectangle stock. Since it was the most complicated component to machine, I tackled it first.

Carriage machine drawing: manual mill and bandsaw

The most critical dimensions of the carriage were parallelism and symmetry of the bushing-throughholes relative to the ballnut pocket, followed by surface flatness for the plane attaching to the desktop.

To ensure that the ballscrew dictated carriage positioning vs the rails, I bandsawed flexures into the carriage - one allows compliance in yaw, and the other in roll. Careful positioning in assembly would take care of pitch. It turned out that these flexures were unnecessary; the rails themselves were compliant enough.

Shaft compliance of 8mm rails

Bushing clearance holes were oversized by 0.05mm to provide a slight interference fit. Bushings were first added and held in place with retaining rings; after rails were inserted in the assembly I fixed the bushings in-place with Loctite 648.

The ballnut pocket took advantage of the preexisting hole pattern, although after machining I realized I had forgotten to make one set of holes tap-clearance instead of screw-clearance. I fixed my mistakes by drilling two access-holes and dropped M5 nuts in the bolt-paths (oops).

Bushings with retaining rings

Carriage with ballnut in place

The other major reuse-element was the motor. Final desk is going with a MachMotion 23-size stepper instead of the previous Nema 17-motor, which allows me more freedom in friction and weight loads on the ballscrew. Torque required to drive a ballscrew is:

where F = load (N), R = ballscrew lead (mm) andη = efficiency (assume 90% for ballscrew). For an expected desk axial load of 1000N and a ballscrew with a 5mm lead, torque required should be somewhere around 0.89Nm, which this motor can supply. I also don't need to worry about actuator resonance of the ballscrew... any reasonable speed running this desk will be under the critical speed.

I needed to make a motor mount that coupled to the ballscrew driver block. The motor itself is coupled to the driveshaft via a flexible coupling, so precision concentricity wasn't strictly required. Clearance hole patterns from both the motor and the driver block were drilled into a piece of angle stock, and the motor got bolted in place after attaching the coupling. This assembly method minimized overconstraint, though enough was present that the motor ended up being louder than necessary.

You might notice funny white blocks that got added the carriage. After the first desk-expo on May 10 (documentation trailing behind project schedules once again), I decided that despite originally not caring about deflection in yaw the amount I got was a little ridiculous. The purpose of these HDPE skids (from leftover kayak plastic!) was to act as hardstops against the wall to minimize desk rotation.

There was pretty minimal planning before machining these skids and adding them in - just measuring required distances on the desk with a tape measure and matched-machining a pair to ensure dimensions were the same.

The motor coupling I got ended up being a millimeter too large for the ballscrew shaft, so I shimmed it with a drilled-through, bandsaw-slotted bushing.

Bushing-shim, coupling, ballscrew shaft

I made a support block to match the commercial driver-block on the ballscrew assembly. This block held a 608Z bearing which would then press against the ballscrew shaft when bolted to the wall plate. The only critical dimension here was making sure the distance from the bearing center to the wall was the same as on the driver block. Everything else could be aligned in assembly.

Machine drawing for shaft-support block

Shaft support block with bearing

In the middle of assembling everything I decided I wanted to flip which side of the driver block was contacting the wall, which then made the support block dimension slightly off. I got two washers and pressed them into the pine wallplate with a vice until they were the correct height.

I made a set of 4 mounting blocks for the rails, which clamped them to the wallplate. These blocks were bandsawed in half after they were machined.

Drawing for rail-mount blocks x 4

A stack of blocks

Everything was first horizontally assembled on the table to position holes in the wallplate, then bolts were fed through the holes, wallplate was screwed to the wall, and everything got reassembled in-space.