This page created on 03/14/01 updated 05/29/01
Combat Robot Index | Home | Next>
My motor controller projects
Motor Controller Index
- A quick bipolar version
- Version 1 - A simple MOSFET driver
- Version 2 - A better gate drive circuit
- Version 3 - An even better gate drive circuit
- Results - Testing version 1 and 3
- Paralleling MOSFETs for more power
- Adding a relay to reverse the motor
- Using a CPU instead of a servo electronics board
- H-bridge The H-bridge controller
- H-bridge results Testing the h-bridge design
- Motor controller references
I needed a motor controller for a combat robot I am putting together. I will need one or two motor controllers which will be compatible with a standard hobby type radio control (R/C) system.
I have two options:
The first option is to buy a motor controller/driver off the shelf. There are various electronic speed controllers (ESCs) available for R/C cars, planes and such. They are rated by number of cells your battery has and number of turns of wire on your motor armature. The number of cells equates directly to the voltage they expect the ESC to run at. A 10 cell controller equates to 12V since the ni-cad cells have 1.2V per cell. The number of turns equates to a resistance that can be driven. The voltage divided by the resistance is the current the ESC can handle. But the controller I have looked seem to have a 10 to 14 cell max limit. They also brag about handling 300 amps. And they obviously can't handle that much. Since I want to run 24V to 36V I wouldn't trust the R/C ESC devices. They also aren't going to gauruntee an ESC will work with something other than an R/C motor.
There are bigger controllers available. Companies like Curtis, Vantec, 4QD make controller which are meant for larger motors. They also have larger price tags.
My second option is to design my own controller. Why would I want to do this?
I built a similar system years ago to control my Yard Rover platform. I built R/C servos from scratch using NE544 chips. These were available from Digi-Key back in those days. I built the servos on a protoboard.
[Picture of protoboard and driver]
I used 2N3055 bipolar transistor as the switch device. I made a darlington configuration by adding a TIP122 transistor to the 2N3055. This worked to give me a variable speed forward only controller/driver.
So how can I drive big motors from a tiny R/C servo? To answer that we need to examine how a standard R/C servo works. I won't go into alot of detail as to how R/C control works because there are other places that do a good job of that:
[Links to servo sites.]
But the basics are:
So we can say the servo electronics convert the input position pulses to a 0% to 100% pulse width modulation (PWM) to run the motor. The servo has a built-in potentiometer (pot) which measures the current position. So the servo runs the motor until the pot reports a position that matches the incoming requested position.
Robotics people routinely modify R/C servos to be used a motors for small robots. It involves removing a mechanical stop that prevents it from turning all the way around. Then you set the position pot to its center position. If you supply a 1.5ms pulse to the servo then it trys to run the motor to the center position. With the pot set to the center position the motor does not turn. If we increase the width of the pulse the servo thinks the position is off and runs the motor to correct the problem. The further from center that we command, the faster the motor turns.
[Links to servo modification web sites.]
So this gives us a motor control system by making a simple conversion. But the standard R/C servos are rated at about 42 oz/in of torque. So if we want much more torque we can remove the small motor and add external drivers and a bigger motor.
One way to do this is to sense the current which originally went through the small motor. You can do this with opto-isolators, which is what I did on the Yard Rover circuit. An optoisolator is basically an LED light source and a photosensitive device in one package. Just put a resistor in series with the LED and connect it where the motor goes. To sense forward and reverse, add a second optoisolator wired in reverse. So one LED turns on for a forward current flow and the other one turns on for reverse current flow. Your driver electronics are then controlled from the photosensitive device in the optoisolator.
Another way to do it is to use the voltage from one of the motor terminals, which is what I did on version 1 of my current project. To make the motor run forward, the servo drives one motor pin (A) to +V and the other pin (B) to GND. To reverse the motor the "A" pin is driven to GND and the "B" pin to +V. So a device connected between these pins has current flow from "A" to "B" or "B" to "A" depending if we are going forward or backward. It also means that pin "A" will be positive (with respect to GND) when the motor is commanded in the forward direction. Likewise, the "B" pin will be positive when the motor is commanded in the reverse direction.
So I built a power driver that is turned on by a positive voltage. I just connected to whichever pin on the servo went positive when I commanded a "forward" direction from the transmitter.
I had to add a 470 ohm load resistor to the motor output pin I was using. Otherwise when I turned the transmitter off the motor ran at full speed. And that might get ugly for big motors...
Combat Robot Index | Home | Next>
Visit Twin Cities Robotics Group
This page is currently maintained by Jeff Sampson