February 7, 2015

Coreless Axial Flux Motors

I've been thinking about this kind of motor since I started playing with the ServoDisc's for the robot arm.  There are lots of reason I think this particular motor topology is especially cool, and I won't go into all of them.  Near the top of the list, though, is that the disk-like form factor and lack of laminate steel core allow for a lot of flexibility in construction.  This is probably why they're particularly popular with the diy-wind turbine folks.

I'll jump straight into the design, and then go back and justify it.  

Here's a motor:



Here's what the stator looks like.  This winding pattern is fairly incomprehensible from this picture, so I'll explain it more clearly later:


The stator consists of two thin fiberglass disks wound with litz wire, sandwiched on either side of another fiberglass disk, which is bolted to an aluminum hub.

Here's half of the rotor.  The magnet arrangement is a 12 pole-pair, 90 degree halbach array arrangement assembled out of identical .25"x.25"x1" N50 magnets.


And the whole rotor (minus the cylindrical shell between the halves).  Because of halbach array magic, the rotor can be made out of something awesome like carbon fiber, instead of steel.  Honestly, there's little to no weight savings here using carbon fiber over aluminum, but A) carbon fiber is awesome, and B) techx funding is a great excuse to buy fancy materials.



To explain how this thing actually motors, I'll start out by explaining the windings.  I spent a lot of time thinking about how to wind such a motor.  Not being constrained to wind around a laminated steel stator means there are lots of options.  

My first thought was to waterjet three identical winding out of sheets of copper, and epoxy them together 120 electrical degrees out of phase.  Copper sheet windings would allow for variable wire width, so the conductors could get wider as the radius increased.  Also, the end turns would not be constrained to the width of the rest of the winding, so they could be made much fatter.  I knew eddy current loss in the windings would probably be a problem with this design, so I spent lots of time running through different winding geometries in MATLAB to figure out just how bad the losses would be.  Then I gave up with that idea.  

Turns out there's a really cool masters thesis on basically this exact thing.  It's great at very low speed, since the copper fill factor is extremely high, but at any reasonable speed it gets destroyed by eddy current loss in the solid copper conductors.  Also, it's probably the most beautiful set of windings I've ever seen.

Next option is to go the to the other end of the spectrum, and use litz wire to wind the stator.  Extremely fine insulated strands should nearly entirely eliminate eddy current loss in the conductors.  There are a bunch of possible strategies for winding the stator.  Concentrated windings, like Shane's LEAF motor makes winding much easier, but there's a lot of unused space in the stator where copper could go.  To think about winding configurations, I mentally stretched the motor out into a line.  My first thought for a distributed winding pattern looked something like this:

With one phase, it's really easy to see how how the lorentz-force action works:


To make it three phase, just copy and paste that same winding pattern twice, shifting by 120 electrical degrees each time:


Wrapped around into axial-flux, a phase looks like this:


Unsurprisingly, this has been done.  Here's a great example of a stator which appears to be made this way.  There are a few things I don't like about his winding pattern though.  First, there is quite a bit of copper in the end turns (although the end turn to active copper ratio goes down as you add more poles).  Also, the end turns have to overlap each other with three phases, meaning the inner and outer rings of the stator need to be thicker than the active region.

Here's another idea.  Turns go diagonally across each pole, instead of up and over:


That's interesting.  It's pretty intuitive that this winding pattern will have a lower torque constant than the rectangular winding, since each turn overlaps the whole sinusoidal field.  To the first order, I'd expect the peak torque produced by a phase to be lower by a factor of roughly 2/Ï€ ((integral from 0 to pi of sin(x)) / (integral from 0 to pi of 1)) However, it also clearly will have lower resistance than the rectangular winding.  Also, there's no end-turn overlap, so stator can be made a constant thickness throughout.  

Just by looking at it, it's not exactly clear whether the lost resistance makes up for the lower torque constant, but it does seem easier to build, so I designed a motor around it and then figured out how it should perform.  Fun fact, it turns out this is pretty much how Faulhaber motors are wound, but those are radial, not axial.  I haven't seen any axial flux motors wound this way.

On to actually analyzing this thing.  First I took a look at the magnet array in FEMM.  I unrolled the motor to a line at its average radius, since FEMM is 2D.  I didn't bother with looking at the entire magnet array, and just simulated a few pole pairs:


The normal flux density around the middle of the airgap looks like this.  Peak normal flux density of around .75 T.  Not too bad for a 10mm gap between magnet surfaces.  Looks pretty sinusoidal, too (ignore the edges).


Now I know what the field looks like.  Rather than doing the rest of the simulation in FEMM, which is certainly possible, I did it in MATLAB because I have little interest in learning how to do FEMM Lua scripting.

My stator is wound for 12 pole pairs, and 5 turns per phase.  However, the turns are evenly distributed about the circumference of the  stator, not concentrated on top of one another.  Stretched out into a line (again), the winding pattern looks like this:


All the turns in a phase are in series with one another.
To figure out things like back EMF and torque constant I took another LEAF (ha!) out of Shane's book.

Method 1: Lorentz Force

The most intuitive way to look at the torque constant is probably doing ILxB on all the wires to find the force on them for a given current, and adding up the wires that correspond to each phase.  This method resulted in a torque constant of .0752 N-m/A for one phase.

Method 2: Looking at Flux Linkage

This was was definitely less intuitive, but produces some more information.  Here's how it works:
  1. Define the shape of one turn of one phase, and define a sinusoidal flux density for a couple pole pairs.  
  2. Integrate the flux density over the area of the turn, for flux linked by one turn of one coil.  
  3. Virtually shift the coil a little bit along the magnets, and repeat the above calculations.  Repeat until the coil has shifted by 2Ï€.
  4. Repeat for each of the 15 coils (5 turns per phase, 3 phases), which are all offset from one another.   This gives the linked flux vs electrical angle of each coil, which looks like this:  
  5. Take the derivative and multiply by an arbitrary electrical frequency.  I used 1256 rad/s, which corresponds to 1000 mechanical rpm with a 12 pole pair motor.  This produces the voltage induced on each winding vs electrical angle.  
  6. Add up the voltages of the coils which are part of the same phase: 
  7. Back EMF constant (Ke) and torque constant (Kt) are equivalent, for a phase Kt of .077 N-m/A.  Hey look, that's basically the same as before!
To see what would happen when wye-terminating the motor, you can subtract two phases from each other, since they are connected in series but joined at the ends:


Wye terminated, I should expect something like .13 N-m/A, or 72.5 RPM/volt.  Seems pretty reasonable.

It's easy to compare skewed vs straight windings this way, also.  For my particular motor geometry, using straight windings gives a 30% boost in torque constant, and a corresponding 30% increase in phase resistance.  So overall, it actually produces a slightly higher performance motor, since motor constant (here defined as Kt/√resistance) is higher.

Actually building this thing:

Most of the motor parts were made on the MITERS CNC mill.  Here's the fancy-looking end cap that joins the rotor to the shaft:


Plates that connect the thin section can bearing to the rotor:


The stator parts were routed out of 1/32" Garolite using a 1/16" carbide endmill borrowed from Nick.  I messed up these parts a few time (trying to fit too many turns on the stator, messing up winding, etc) so I've gotten really fast at making these.  I experimented with a couple methods for fastening the fiberglass to the mill.  I bolted a sheet of masonite to my milling fixture, and adhered the fiberglass using spray adhesive, hot glue, and double sided tape.  In the end, I like the double sided tape the best.



Getting the winding down took a few tries.  The motor was wound with 20x5x38AWG litz wire.  Since litz wire is twisted, when folding the wire around the opposite side of the fiberglass winding form, the wire behaves strangely.  Winding one direction, it bends parallel to the sheet, and the other direction it bends perpendicular to the sheet.  I chose the wrong direction to wind my first one, and it turned out terribly messy as a result.  Next time around I realized winding the other direction would be much easier, and switched.

Here's one phase:


Two phases:


And all three:


I squished the windings in the mill vice to get them nice and flat:


The two stator windings were epoxied together with high temperature epoxy, clamped between two aluminum forms, and baked to cure:


Rotor parts were routed out of .1" carbon fiber sheet using the same 1/8" endmill.  The sheet I used was laminated from unidirectional layers, and the top and bottom edges came out a bit fuzzy:


Filing with a diamond abrasive file cleaned up the edges:



Beginning the magnet array:



All the north-south pairs glued down:


Magnets really don't appreciate being forced into a halbach array, so I stuck a big steel plate on top of the array (with a thin plastic buffer between), and slid the sideways-pointing magnets in from the side, positioning them with a 3d-printed jig:


Everything was then slathered with epoxy and cured:


The steel disk was sheared off by tapping it with a hammer.


The aluminum hub holding the stator was the only component that was manual machining-intensive:


I paralleled the two halves of the stator, wye terminated them, and attached one of the two rotor disks for testing:





Testing was done with a crufted hobbyking sensorless controller.  I first tried with a sketchy ebay chinese e-bike motor controller, but I think the motor was too low inductance, causing the controller's current control loop to misbehave.  Also, a drill-and-scope back EMF test showed a torque constant of .055 N-m/A (175 RPM/volt) with only half of the rotor when wye terminated.  I expected something like .13 N-m/A with the full rotor, so that number is pretty in line with my prediction.

A couple things are apparent.  First, it definitely wants sinusoidal commutation.  Nice and noisy with the hobbyking controller.

Also, the motor displayed astoundingly high loss at high speed.  Just spinning the rotor by hand, it was easy to see how quickly the rotation was damped.  Sounds like eddy current loss.  By chucking the rotor in a drill and spinning it, I could even feel the windings warming.  But wasn't the point of using fancy litz wire to eliminate that?  At first I thought the process of oven-curing the epoxy had destroyed the litz part of the litz wire.  I had set the oven to 120 C, so maybe there was a chance the temperature control loop overshot to 150 C, which would be dangerously hot for the insulation.

I made another stator.  Before epoxying everything, I quickly tested it.  And it displayed the exact same drag as the epoxied-and-baked stator.  So something else was up.  On a hunch, I unparalleled the two halves of the stator from each other.  And the issue disappeared.  Scoping corresponding phases on the two stator windings confirmed my suspicion.  With only one half of the rotor in place, the two halves of the stator experience very different fields from the magnets on the rotor.  Since they were wired in parallel, this caused massive circulating currents between the two halves of the stator, causing the drag that felt like eddy current drag.

Looking at the two curves on the scope screen, the yellow trace is the phase close to the rotor, while the blue one is the phase farther away.  The farther away phase has less than half the voltage induced across it.


I un-terminated the first stator, and confirmed that it was also fine.  Since the problem is due to the asymmetry of the rotor with only half of it installed, the obvious solution is just finishing the motor by adding the other half of the rotor.  The two sets of windings should then be happy and symmetric.  If the loss is still a problem, the solution is to series the two windings instead of paralleling them.  This will make the motor even slower, but should completely fix that loss.

Now I just need to make a ring to separate the two halves of the rotor, so the thin-section bearings don't explode due to the magnetic attraction between the two plates.  And find something silly to stick the motor on.  And build another one, since I've already gone to the trouble of building a second stator.

January 26, 2015

Some Long Needed Updates to the Big Scooter

The Big Scooter (version 2) has existed for a year and a half now, and I've finally gotten around to doing some long needed updates to it.  Most importantly, I originally did not build in a chain tensioning mechanism, because the chain length worked out pretty much perfectly.  Chains stretch, though, so the chain started falling off, especially when plowing through snow.  Since it's snow season again, it seemed prudent to fix this problem.

First quick fix, replacing the hand-truck bearings I never bothered upgrading with more legitimate bearings.  The original bearings had deteriorated so much there was about 10 degrees of slop in the back wheel.


Since the new bearings actually have precisely bored I.D.'s, I had to turn down my front axle a little bit to match:


I added an eccentric sprocket on the drive-side swingarm for tensioning the chain:


The sprocket gets clamped in this block, and rotated to apply the desired tension:



It's mounted to the scooter as high as possible, so there is little possibility of it scraping when driving over obstacles:


Finally, I added some grip tape to the deck.  Sadly, clear grip tape isn't particularly clear.  Next time around I'll probably go with plain black:


Now, I just need to whip up some studded tires or tire chains before the blizzard hits tomorrow.

January 23, 2015

Trying to Crack the EC Desk Safe

There's an old safe at the EC front desk that hasn't been opened in a while, and no one knows either the combination or what's in it.  A number of students have unsuccessfully tried manually cracking it, but a little label on the safe does say it has been tested to 20 hours of expert manipulation, or something like that, so manually cracking the combo is pretty difficult.  I actually don't know much about safe cracking.  I understand the mechanism behind this kind of lock, and some ways by which it can be exploited, but I have pretty much no experience actually trying to crack safes.  I do have experience building robots, however.

It shouldn't be too hard to build a simple robot to auto-dial safe combinations.  All you need is a servo to rotate the dial and some way of sensing when the correct combination has been entered.  And since robots are infinitely patient, it can just brute-force combinations until it finds the correct one.

How long will that take?  Well, the safe has 100 numbers per dial, and the combination is 3 numbers.  That means 100^3 or 1,000,000 possible combos, right?  Actually no.  First, locks have mechanical tolerance.  When entering a number into the dial, your number-entering precision needs to be something like ± 1 increment from the correct number.  Actual tolerance depends on the exact model of lock, going down to about ± .5.  I don't know exactly what model of lock is on the safe, but it appears to be made by Sargent and Greenleaf, and looking at their catalog of modern locks for reference, I settled on ±1.  So, that cuts the number of possible combinations by a factor of 8, bringing it down to 125,000.  Additionally, according to the manual, one should never set the third number to anything 95-20, because it can stop the lock from working correctly.  This brings the total number down to 92,500.  Much more reasonable.  Supposing it takes 6 seconds to enter a combination (I'll explain why it takes so long later), that's 6.4 days to try everything.  So it should average something like 3.2 days to open.  That is still a pretty long time, but as long as I'm not sitting there entering combinations, who cares?

On to the hardware.  Here's the basics of how it works:
The device will magnet on to the door of the safe.  A coupling with a spline matching that of the dial will mesh with the dial to connect it to a motor.  I'm using a giant stepper motor.  Now I want to be very clear, I hate stepper motors.  They're terrible.  Servos all the way.  However, I didn't have any motors with appropriate low-speed torque and backlash-free gear-down on hand, so I didn't have much choice but to use a stepper motor.  I grabbed the biggest one I could, which I scavenged out of some old lab equipment a while back.  The stepper is powered by a (also scavenged) stepper driver, which is controlled by an STM32 Nucleo F411RE.  I found about these things through Bayley, and they're great.  $10, lots of computing power, and compatible with the mbed compiler, which I am already very familiar with.  This is in turn connected to a netbook which logs attempted combinations and sends me an email every 1000 tries and when it thinks the lock has been opened.

Here's the motor, microcontroller, and stepper driver.  To start out, I used this Easy Power GSD200S, because some x-ray equipment MITERS crufted a couple months ago had a bunch of them.  This driver could only do half-stepping, so everything was really noisy.  When first testing out the machine, there was a noise complaint from someone living two floors above the desk.  I later swapped this stepper driver out for something a bit nicer.



The easiest thing to do with a stepper motor is just command it constant step rate for constant velocity motion.  When starting and changing directions, though, this demands nearly instant velocity change, which doesn't work that well for either the motor or the lock.  To make things smoother, I implemented some acceleration control which adjusts the delay between steps to approximate constant acceleration.

This isn't too difficult to do.  First define some starting velocity (because no one wants divide-by-zero errors): v_sart, in steps per second.  The pulse period, dt, required to move the motor at v_start is just 1/v_start.  Say the motor should accelerate at rate a, in steps/seconds^2.  The first time interval, dt_1, is equal to 1/v_start.  After accelerating at rate a for time dt_1, the motor's velocity should be v_start + a*dt_1.  So the next pulse duration, dt_2, should be 1/(v_start + a*dt_1).  Repeat this process, substituting in the previous step's velocity and period, and you can generate a set of pulse durations that approximate constant acceleration of the motor.  Mirror that set of pulse durations about its end, and you have a constant acceleration, constant deceleration trajectory between two points.  The smaller the steps are, the smaller you can make v_start, and the better the approximation is.



On to some hardware building.

Some metal plates for the structure where milled on the MITERS CNC mill:

T-nuts can be step clamps too

The front metal plate has four large neodymium magnets press-fit into it.



Two aluminum rods are press-fit into the front plate.  A set screw in the front can be tightened into the ring around the lock's dial, to prevent anything from rotating.  The spacing of the motor can be adjusted using the two clamps around the shafts on the motor plate.


A laser-cut delrin spline meshes with the dial:


The dial-spline is coupled to the motor with a flexible shaft coupling to compensate for lack of concentricity and wobble in the dial.


To sense when the correct combination has been entered, there is a one count per revolution encoder on the shaft, made from an optical limit sensor.  After entering the correct combination into one of these locks, you turn the dial clockwise until it locks up (around 95).  At this point the stepper will stall.  The sensor detects when the stall has occurred, so the microcontroller knows the lock is open.


Here it is installed and running for the first time:


(video credit to Danny Ben-David)

There are a couple points to note.
  • It's very loud.  This is caused by the half stepping limitation of the stepper driver used, and lack of mechanical isolation between the motor and frame.  I fixed the latter by adding some squishy rubber between the motor and it's aluminum plate, and securing it with Structural Zip Ties rather than steel screws.  Stepping noise was reduced by switching to a fancier stepper driver with 32x microstepping.
  • It's not very fast, especially on the first counter-clockwise rotation.  This particular lock gets extremely stiff on the fourth turn around the dial.  I had to slow down the stepper to stop it from skipping steps during that part of the rotation.  This could be solved with a higher voltage power supply.
Hopefully before the next report the safe will be open.  Current progress is around 2%

January 18, 2015

A Box for a Plane


I finally made it back to Atlanta this December, and while I was there I was given this beautiful little block plane.  It seemed appropriate to build a box for the plane, using the plane.

Here's the plane on top of the block of oak from which I made the box.  It's solid, but made from a few pieces glued together.  I think it's a section from a post on the staircase of our old house.


I started by sawing off a slice of the block to make a lid from.


I squared off all sides roughly with my larger block plane, after I spent a good long while sharpening it.


I finished the sides with the little plane.  No sanding needed.


I began chiseling out a recess for the plane using some small chisels and gouges.



I slowly carved deep enough to fully submerge the plane:



I chiseled a dovetail into the sides of the edge around the box, and beveled the lid to match:



I sawed a thin slice off the bottom of the box to finish the lid:


The two pieces of the lid were glued together and planed square with the rest of the box.  Here it is after a couple coats of tung oil:






The finished cavity of the plane.  I carved it as close to the actual shape of the plane as I reasonably could: