ÿþ<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>RoboRack Motorized Antenna Mount</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <style type="text/css"> BODY {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 14; color : #000000; text-align : justify;} P {text-align : justify;} H1 {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 24; font-weight : bold;} H2 {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 16; font-weight : bold;} TH {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 14; font-weight : bold;} TH.small {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12; font-weight : bold;} TH.verysmall {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10; font-weight : bold;} TD {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12;} TD.big {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 16;} TD.light {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 14; color : #E6D99B; font-weight : bold;} TD.small {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 14;} TD.verysmall {font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12;} </style> </head> <body marginwidth="80%" marginheight=0 leftmargin="10%" topmargin=20> <p> <center> <h1>RoboRack Motorized Antenna Mount</h1> A Metal Schnitzel work by WA1RUS, Updated 2/14/2009<br> <b>Be sure to click the pictures for a better view!</b> </center> </p> <p><a href="Truck.jpg"><img src="Truck-LR.jpg" align="right" alt="The Unsuspecting Victim"></a> This project is a follow up to RoboMast. RoboMast was a powered pivoting platform for a single antenna that used a linear actuator with internal limit switches to raise & lower the antenna. A center-off toggle switch inside the vehicle was used to initiate movement, but the limit switches made it automatically stop at its end of travel. Like RoboMast, RoboRack will be built with aluminum and stainless steel to eliminate the possibilities of rust and to make it a <i>zero maintenance</i> device. Bearings will be composite and also impervious to corrosion. </p> <p> The downsides to my original RoboMast are a slow transit time of about 15 seconds (partly due to the use of a 24 volt actuator with only 12 volts), lack of positive confirmation of its position without bending around to look at the antenna and of course only a single antenna. Also, the antenna cable is exposed and rubs as it moves, although this never led to cable damage. </p> <p> RoboRack will have a much faster transit time of about 6 seconds, it will have an <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=812" target="new">LCD display</a> to show the operator its current position and it will support several antennas. The cables will be protected inside the structure and will have provisions to prevent damage from chafing and rubbing. It will be controlled by a microprocessor with a user interface terminal mounted inside the vehicle. The LCD display will show the device's position as well as total height for bridge clearance. The control will be a simple <a href="http://www.ctscorp.com/components/datasheets/288.pdf" target="new">digital rotary encoder</a> (knob) to make selections and that knob has a pushbutton function. </p> <p>I already have plans to mount a <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8975" target="new"> GPS module</a> under a custom-molded radome to it to provide data to a laptop and to my radios. Maybe someday, RoboMast will even automatically lower the antennas when I approach pre-designated low-clearance areas. Of course the real purpose behind this whole project is to build something new and to spend ridiculous amounts of time thinking about it, designing, building and redesigning. If I get something useful at the end, then something must've accidentally gone right. </p> <p> I don't have an overview plan yet -- all that exists only in my head -- but the idea is that the device mounts to my truck just behind the cab like a roll bar. In the photo above, you can see my original RoboMast. In its place, a 2" x 3" aluminum tube will be mounted to the front bed rail. Another tube will be mounted on the other side and a 48" long one will run between them at the roof level. A chain drive mechanism will live inside one of the vertical tubes and the antenna cables will pass through the other. </p> <H2>Power Source & Motor</H2> <p><a href="PowerInverter.jpg"><img src="PowerInverter-LR.jpg" align="right" alt="DC Power Inverter"></a> RoboRack will also use a 24 volt motor, but this time I have a <a href="http://www.trcelectronics.com/Meanwell/dc-dc-converter-sd50.shtml" target="new">DC inverter</a> that will produce 24V out from 12V in. Why not just use a 12 volt motor? Well, I couldn't find an affordable 12V gear motor that had a low enough output RPM and a fair amount of torque. The ideal output speed is about 4 rpm. <a href="http://www.herbach.com/Merchant2/merchant.mv?Screen=PROD&Store_Code=HAR&Product_Code=TM97MTR3044&Category_Code=DCGEARHEAD" target="new">The one I found</a> is 24V with 4 RPM out and 70 oz-in of torque. It has a great little planetary gear box with about 4 or 5 stages to it. That makes a very compact package. I gave up trying to design my own gearbox with off-the-shelf gears due to cost & complexity, so this was perfect. I decided to get another 33% reduction through sprocket sizing to gain some more torque. </p> <H2>Position Sensor</H2> <p>A magnetic position encoder will detect and track the position of the mechanism. This encoder has a resolution of 0.36° or 1,000 parts per revolution and is made by <a href="http://www.usdigital.com/" target="new">US Digital</a>. It's an absolute encoder, so no end-of-travel sensor or power-on initialization is needed. </p> <H2>Motor Drive Assembly</H2> <p><a href="RoboRackMotor.wmv"><img src="MotorRendering-LR.jpg" align="right" alt="3D Rendering Of The Motor Assembly"></a> This has gotten the majority of the design work and late night thought. This assembly will bolt up to the bottom of one of the vertical support tubes so the drive chain runs inside the tube. The motor sticks out several inches so it will have a housing over it to protect it from the weather. Once I had the basic design down, I created this 3D model to show how it's put together. Click the picture to the right to see the <a href="RoboRackMotor.wmv">animation</a> (662 kB Windows Media). The outer housing is cutaway in this view so you can see the motor. </p> <p> In order to bring everything together, I had to create a shaft adapter for the motor. This is a piece that I machined from solid 5/8" stainless steel bar stock. It slips over the motor shaft and is pinned on with a stainless roll pin. The drive sprocket slips over the adapter and locks on with two set screws. A 1/4" extension turns the position sensor. This was the hardest part to make because the sensor's tolerances are very tight. It only allows for 0.0006" deviation on the shaft diameter and +0.04" / -0.02" on the length. An attempt at a two-piece adapter (left) was a failure, the first one-piece one (center) was out of tolerance and the last one (right) was perfect. By the way, this is the first thing I ever made with a lathe. </p> <p><center> <table cellpadding=5 cellspacing=5> <tr> <td> <a href="LatheOperation.jpg"><img src="LatheOperation-LR.jpg" align="right" alt="Motor Shaft Adapter On The Lathe"></a> </td> <td> <a href="MotorShaftAdapter.jpg"><img src="MotorShaftAdapter-LR.jpg" align="right" alt="Motor Shaft Adapter Versions"></a> </td> </tr> <tr> <td align="center" valign="top"> Motor Shaft Adapter On The Lathe<br> Click for a video:<br> <a href="LatheOperation.wmv">high def</a> (10.3 MB) or <a href="LatheOperationMR.wmv">regular</a> (2.1 MB) </td> <td align="center" valign="top"> 3 Versions Of The Adapter </td> </tr> <tr> <td> <a href="MotorDriveTestFit.jpg"><img src="MotorDriveTestFit-LR.jpg" align="right" alt="Motor Drive Assembly"></a> </td> <td> <a href="DriveSprocket.jpg"><img src="DriveSprocket-LR.jpg" align="right" alt="Drive Sprocket Installed"></a> </td> </tr> <tr> <td align="center" valign="top"> Motor Drive Assembly Being Test-Fit<br> The other assembly is the driven shaft<br>for the top of the tube. </td> <td align="center" valign="top"> Installed Drive Sprocket </td> </tr> </table> </center></p> <H2>It Works!!!</H2> <p> Using a Parallax BS2 microcontroller (PIC chip), I verified that the motor drive assembly works. The controller uses an <a href="http://focus.ti.com/lit/ds/symlink/sn754410.pdf" target="new">SN754410 H-bridge chip</a> to select the direction and turn the motor on or off. This chip allows the motor to be powered from the 24 volt supply while interfacing to the electronics at the normal 5 volt TTL level. I put together a program that reads the pulse width modulated signal from the position sensor and commands the motor to go to any position I want. I'm still experimenting with parameters, but currently it runs full speed to within 2 degress of the commanded position, allows the motor to settle, then bumps it into the correct position with one or two 8 millisecond pulses spaced 20 milliseconds apart. Woo hoo! </p> <p><center> <table cellpadding=5 cellspacing=5> <tr> <td> <a href="PrototypeBenchAnnotated.jpg"><img src="PrototypeBenchAnnotated-LR.jpg" align="right" alt="Test Bench"></a> </td> <td> <a href="MotorDriveClose.jpg"><img src="MotorDriveClose-LR.jpg" align="right" alt="Motor Drive Close-Up"></a> </td> </tr> <tr> <td align="center" valign="top"> The Test Setup </td> <td align="center" valign="top"> Motor Drive In Action<br> Click for a video:<br> <a href="CommandedSeek.wmv">high def</a> (10.7 MB) or <a href="CommandedSeekMR.wmv">regular</a> (3.4 MB) </td> </tr> </table> </center></p> <p> In the video above, the controller commands the motor to seek home position (0 degrees), then go to 90°, 30°, 45° and back to 0°. All of this is autonomous with fine adjustments automatically made based on the sensor feedback. </p> <H2>Top Spindle Assembly</H2> <p> The top spindle assembly will fit into a pair of precisely matched square holes on opposite sides of the 3" x 2" vertical support tube. Unlike the motor assembly which installs inboard at the bottom of the tube, this unit installs from the outboard side of the top. The spindle has composite flange bearings, a stainless steel collar and a spacer that ensure the driven sprocket lines up with the drive sprocket below. The shaft that extends past the inner plate will lock into the rotating antenna platform. </p> <p><center> <table cellpadding=5 cellspacing=5> <tr> <td> <a href="UpperSpindle1.jpg"><img src="UpperSpindle1-LR.jpg" align="right" alt="Upper Spindles, Side View"></a> </td> <td> <a href="UpperSpindle2.jpg"><img src="UpperSpindle2-LR.jpg" align="right" alt="Upper Spindles, End View"></a> </td> </tr> <tr> <td align="center" valign="top"> Upper Spindle, Side View </td> <td align="center" valign="top"> Upper Spindle, End View </td> </tr> </table> </center></p> <H2>Controller Software Development</H2> <p> <u>1/29/2009 Update</u>: After seeing some strange behavior in the positioning command, I did some investigation and realized that the Parallax BS2 microcontroller's 8-bit integer doesn't have enough precision to calculate the motor's position. Between 182° and 360° it suffers a math overflow and behaves unpredictably. I have a <a href="http://www.micromegacorp.com/umfpu-v3.html" target="new">Micromega math coprocessor</a> chip I could hook up, but that's overkill and doesn't solve the next problem: the chip's measurement of the pulse width from the sensor lacks adequate timing resolution because of the hideous amount of overhead in the built-in BASIC interpreter. Even with the math coprocessor, there's a 1.45° measurement error potential. So I think I'll switch to the <a href="http://arduino.cc/" target="new">Arduino</a> platform. The Arduino is based on the <a href="http://www.atmel.com/dyn/products/product_card.asp?part_id=3303" target="new">Atmel ATmega168</a> microcontroller and has floating point math built in and timing resolution to 10 microseconds (thousands of times better than what I need). So it'll be a few days before Mr. Postman can bring me a present from <a href="http://www.sparkfun.com" target="new"> Sparkfun</a>. </p> <p> On the bright side, I improved the fine positioning subroutine tonight to bump the motor with 25% duty cycle pulses 15 times per degree of desired revolution. This results in much more precise positioning. Of course, many of my parameters will change once the whole system is built and the motor has to perform under load. So a challenge ahead of me now is to write software that learns from experience and adjusts the parameters automatically. Doing it by hand with the help of Excel is teaching me a lot about how to develop that software. </p> <p><a href="ArduinoBoard.jpg"><img src="ArduinoBoard-LR.jpg" align="right" alt="The New Microcontroller"></a> <u>2/5/2009 Update</u>: The Arduino development board is here. Woo hoo! Now I need another day to set up the circuits and rewrite the software. That includes learning to program in the Processing/Wiring language. </p> <p> <u>2/7/2009 Update</u>: While setting up the new microcontroller, I managed to blow out the motor driver chip. Fortunately, it's separate from the controller board and I had a spare chip. Taking this as a lesson, I installed 0.1 ¼F metalized polyester suppression capacitors on the motor. Hopefully this, combined with twisting the motor leads and adding caps to the driver end of the leads will prevent another burnout. </p> <p> On the bright side, transitioning to the Arduino platform is much easier than I expected. After just an hour or two of experimentation, I have it working with the LCD display and reading the position sensor with full resolution. </p> <H2>Drive Pillar Build</H2> <p> <u>2/14/2009 Update</u>: Getting closer. Today, I started building the left pillar that contains the drivetrain. That began with a 21" long section of 2" x 3" aluminum tubing. I machined the mounting port for the drive motor and got that unit mated up nicely. Unfortunately, as I was reviewing the blueprints before machining it for the upper spindle assembly, I realized I had overlooked some measurements for how the parts fit up top. If I were to continue as planned, the pillars would extend 1/8" above the antenna deck. Aesthetically, I don't want that, so I went back to the drawing board. Now, instead of the upper spindle being an assembly that is installed & removed as a unit, I decided to just build bearing mounts into the pillar tube. It will be a little less convenient to assemble & maintain, but it will look a lot better. </p> <p> The aluminum is pretty dinged up. The supplier must've sent second hand scraps. It'll take some work, but after all the building & prototyping, I'll get everything cleaned up and it will look pretty spiffy. The good news is that the metal distributor gave me a partial refund and a 30% discount on my next order. </p> <p> A couple of days ago, I had some more success with the motor control software and the driver circuits, so that section is coming along very nicely. The motor suppression capacitors seem to be doing their job of protecting the controller and the microcontroller is now showing position information on the LCD display. I've also gotten it to read the ambient temperature from a <a href="http://www.maxim-ic.com/products/1-wire/" target="new">Dallas/Maxim 1-Wire temperature sensor</a>, which is something the old Parallax controller was not capable of doing. </p> <p><center> <table cellpadding=5 cellspacing=5> <tr> <td> <a href="DrivePillarMotorPort.jpg"><img src="DrivePillarMotorPort-LR.jpg" align="right" alt="Drive Pillar Motor Port"></a> </td> <td> <a href="DrivePillar1.jpg"><img src="DrivePillar1-LR.jpg" align="right" alt="Drive Pillar On The Bench"></a> </td> </tr> <tr> <td align="center" valign="top"> Drive Pillar Motor Mounting Port </td> <td align="center" valign="top"> Drive Pillar With The Motor Installed </td> </tr> <tr> <td> <a href="DrivePillar1Inside.jpg"><img src="DrivePillar1Inside-LR.jpg" align="right" alt="Inside The Drive Pillar"></a> </td> <td> <a href="LCD1.jpg"><img src="LCD1-LR.jpg" align="right" alt="LCD Display"></a> </td> </tr> <tr> <td align="center" valign="top"> Looking Into The Bottom Of The Drive Pillar </td> <td align="center" valign="top"> The LCD Display Works Now </td> </tr> </table> </center></p> <H2>Lots Of Work To Go</H2> <p> I'm continuing to work out design challenges and have decided how to complete the motor's weather housing. I'm also considering a number of ideas for the user interface. Some possibilities include a full color OLED display, maybe even with a touch screen. Or perhaps some capacitive touch sensors behind a glass faceplate with backlighting to make a nice clean looking display without any bumps or visible switches. That might be kind of cool -- it would be a plain black piece of glass when it's turned off, but light up in color when it's on. I prototyped something like that for a digital car dashboard years ago. It'd be nice to bring that to fruition. </p> <p> There are several other fabrication steps still pending. The the horizontal antenna deck needs to be built. Next, I think I'm going to have to build an electric brake so wind loads and antenna wagging forces won't be transmitted into the gear box. I have a pretty good idea how to do that and am sketching the details. But the most intimidating part of all is the right hinge. The hinge will allow all the antenna cables to pass through it without exposing them to the weather. This is going to be a huge challenge for me to build well. </p> <p> Stay tuned. </p> </body> </html>