November 30, 2014

Robot Arm Z-Axis and Custom Servo Drive

Finally back to the robot arm!  I've been taking a break from rideable things recently to arm more robots.  Most significantly, the robot arm got much bigger and gained a degree of freedom.

Part 1: More Billet

I started out with a huge linear rail which I think was scavenged from a large format plotter.  I found it in a corner of MITERS while replacing a table earlier this year.  I conveniently was also able to scavenge four recirculating linear ball bearings for the same shaft diameter.  I made a pair of bearing blocks to hold the bearings and robot arm to the rail:


The robot clamps to the bearing blocks using the same mounting clamps I used on the temporary 80/20 frame.


The bearing blocks have set screws which allow me to adjust the preload on the bearings:


The actuator for the z-axis is another DC motor (not servodisc pancake-style, this time) coupled to a four start leadscrew.  This was found in the same corner of MITERS as the linear rail.  It also has a really neat steel membrane shaft coupling, unlike the helical shaft couplings I'm used to seeing:


The frame for the robot is yet another piece of cruft.  This absurdly massive aluminum frame, fashioned from 1" thick aluminum plates, was found by Nick and Bayley outside a lab:


The whole assembly clamped together:


To actually fix the z-axis to the frame, I drilled and counterbored a bunch of holes in the 1" thick aluminum:



The z-axis actuated with a drill:



To stiffen up the axis, I bolted it through two of the 1" thick plates.  This was by far the largest piece of metal I've ever put on the bridgeport:


I took care to get the plate square on the mill.  It was fairly easy to get it within about 1/2 a thousandth per foot, which will be much smaller than the slop in the clearance bolt holes anyway:



Part 2: Diving into Power Electronics

This term I'm taking 6.131: Power Electronics Lab.  The class has been a very different experience from most of my other classes here.  It's very focused on learning how to actually design and build power converters of all sorts, rather than analyzing them to death.  Everyone in the class does a final project, which can be pretty much anything within reason (where reason means it can't be dangerous, for the professors' definition of dangerous).  

For my final project, I'm building a servo drive for the robot arm.  Basically its two H-bridges on a board with current sensors, encoder inputs, and an interconnect to a separate microcontroller board.  What makes it interesting is the motors I'm trying to drive.  The shiny Kollmorgen ServoDisc motors, due to their corelessness, have practically zero inductance.  When PWM'ed at standard motor controller frequencies (~20-ish KHz) the current through the motor is basically a square wave, since their electrical time constant is much smaller than the PWM period.  This means that RMS current, which determines resistive heating in the windings, is greater than average current, which determines motor torque.  Some motor makers (maxon, for example) fix this by actually putting series inductors on the outputs of their motor controllers.  I'm trying to fix this by switching really fast.

I designed the servo drive to switch at 200 Khz, using these neat CSD19531KCS logic-level FETs (7 mΩ, 37 nC gate charge, 100 V), IR2184 half-bridge gate drivers, and Allegro current sensors.  I put together a schematic and board layout in eagle:


And some time later a pile of PCBs appeared:


Here's a little mbed daughter board.  When I get sick of using mbeds and want to learn how to microcontroller for real, I can just switch out this board for another microcontroller breakout:



The board assembled, minus FETS:


And with FETs installed below the board:


This revision of the servo drive has a few problems, namely that it doesn't work properly with the originally spec'ed logic-level MOSFETS. The fast turn-on transient causes crazy ringing on the gates but it works well enough for the class with slower fets.  Further details on the controller and its problems will be documented in the future.

No comments:

Post a Comment