May 29, 2017

free-hand milling calipers pocket

I'm in the process of making a set of calipers boxes, where I'm roughing out the pockets on the mill and then cleaning up with chisels.

Mill pocketing is done free-handed, because it's more fun. It's like playing with an etch-a-sketch, but better!

video 2x speed

May 22, 2017

[2.70] Final Testing & Documentation

Last 2.70 post woooo!
After assembling the vertical axis, all that was left was bolting on the wooden desktop and testing.

laptop posed on desk at seated-height setting
pretty computer on pretty desk
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...

bike helmet and attire piled on desk with motor power supply and cables underneath
HobbyShop staff trust my desk as a shelf.
Powersupply below. Foam cup only holds screws (no liquid don't worry)
 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.

Using the same Abbe error equations as the previous linear axis testing,

$\alpha_{pitch} = \frac{\delta_y}{L}$
$err_{pitch} = \frac{\delta_y y}{L+y}$

$\alpha_{roll} = \frac{\delta_x}{L}$
$err_{roll} = \frac{\delta_x x}{L+x}$

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.

Desk happilly traveling with 20N loads, then getting upset at 30N load.

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.

That's it for the 2.70 desk!

Desk being a desk.

May 20, 2017

[2.70] MCM: Wall-mount Vertical Axis

This post is about the design, fabrication, and assembly of the desk's vertical axis.
The vertical axis builds upon preliminary linear axis work, documented here.
Concept outlined in a previous post.

Sketch diagram, CAD model, finished assembly on-wall
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.
THK BNK1205-2.5RRGT+330LC3Y machine drawing
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.

calculating critical speed of a simply supported lead screw

Motor & flexible coupling (left). Self-made drawing from motor measurements (right)

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.

Motor mount drawing

Motor mount, driver block (with flexible coupling inside), and carriage
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.

Vertical axis ready to accept the desktop!

[2.70] Desk CAD Images

CAD and renders in Solidworks: downloadable zip here.

Vertical Axis Module

Front view

Rear view, wall plate transparent to show structure

Side view (left) and iso view (right)