I recently wrote a post on different types of motors and feedback options, now I want to talk about how to control those motors. Each motor is often refereed to an “axis”, so a 8 axis motor controller can control up to 8 motors. There are two different components used in the control of motors and people often use the terms interchangeably.
Amplifier (amp) or Driver
This is the module that actually makes the motor spin and contains (usually) the FET’s to allow motion to occur. This is the part that needs to rated for the power that you will use spinning your motors. There are many types of amplifiers you can purchase and each motor type (brushless, stepper, etc..) will often require a different type of amplifier. One notable exception is that many brushless motor amplifiers can often be configured to control a brushed DC motor. For brushless motors the hall sensors usually connect here to the amplifier.
There are two types of amplifier inputs for issuing motor commands.
Analog – The drive takes an analog input signal to determine the speed of the motor. To change direction some amplifiers will have a separate direction bit that needs to be set or will want a negative analog voltage.
Digital – Digital amps will typically use higher level protocols and accept commands. The commands that can be issued digitally are typically more advanced than in an analog drive. Some common protocols for talking to a digital amplifier include serial, CAN, and etherCAT. Often a digital amplifier can also accept an analog signal.
This is the device that tells the amplifier what to do. Often encoders or other feedback devices will go into the controller which can then command the amplifiers for the desired position, velocity, or torque control. Other more advanced controllers can often be used that rely on various inputs, conditions, and pre-determined motions. Some examples of things that can be connected to a controller are secondary encoders, brakes, and limit switches.
There are many devices that combine the amplifier and controller into a single integrated unit. We will be discussing these in more detail below. Many of the integrated controller and amplifiers also have an output to control an external amplifier.
Within motor control systems there are two high level architectures. The first is a distributed system where each motor amplifier just controls a single motor and can be placed near that motor. The second type is a centralized system where all of the motor control decisions and amplifiers are in a single location. And as with everything else there is the hybrid option which is very common. In the hybrid option there is a separate amplifier/controller for each motor and then a separate higher level computer/controller that controls the coordination between the axis (remember axis=motor). Some of the deciding factors between the different architectures are:
Simplicity – The centralized option is often is simpler to program and coordinate motions between the various axis. In the centralized mode if the computer commands drive arcs or high level motions the centralized controller can determine the commands for each motor. Having a central controller lets each axis of motion know what the other axis are doing. It also can make integrating fail safes easier.
Wiring – This is often where distributed options win. In a centralized option if you are controlling a brushless motor with hall sensors and an encoder you can have 3 high power wires and 8 (5 for the encoder and 3 for the hall sensors) low power wires that need to be routed. In a distributed system you might only have 2 high power lines and 2 data lines (for example a CAN bus) that can be jumped between each amplifier (bus configuration instead of a star topology). If you have secondary encoders, limit switches, etc.. the wire count for the centralized option get worse while the distributed options remains the same. If you are trying to minimize wire count in a joint or running through the robot the distributed option is a clear winner. Also with the centralized option since all of the wires come to a single point it can be a large trunk of wires entering the controller that needs to be managed and possibly strain relieved.
Volume – In a centralized system you often have a single large block that needs to be mounted. In a distributed option the total volume might increase however it is in multiple blocks that can be moved around the robot and placed independently. This is not a pro or con for either approach, you need to determine which is more important is your system.
Heat Sinking – Motor amplifiers usually need to be heatsinked to a metal (thermally conductive) surface. Similar to the volume consideration above, where is it easier to get more thermal heatsinked surfaces in your robot.
Now after all of that we can discuss the various hardware options out there. This is far from exhaustive but reflects what I have used and the large companies out there. Also the images I show are an example of a form factor, many of the manufacturers have multiple form factors for their controllers including board mounted ones.
Centralized Architecture Systems
Galil Motor Control
The Galil motor controller is my first choice when I want a single centralized controller. The 41×3 lets you connect up to 8 axis of motion to a single controller. To start you choose your controller board and how many axis you want. Once you have that there are different boards/amplifiers that can connect to the controller board allowing you to control different types of motors (up to 750W) or get more I/O. If you do not want to use their amplifiers you can use this controller with many of the analog amplifiers below. The controller comes with several analog and digital inputs and outputs based on which model you choose. You can also get a shunt regulator integrated into the controller which is an awesome feature. One of the really nice things I like about Galil is the prices are available online and they do not require you to call them for a quote.
The free Windows based user interface is pretty bare but I like it. It shows you the state of the different variables (speed, faults, etc..), gives you a code editor, and a terminal to type commands. The commands are pretty simple. For example to start a motor you might type “BG” to start motion on all axis or “BGA” to start motion on just axis A. The interface allows you to upload the code that is running on the controller which is a very valuable feature.
Writing a Linux driver for it was pretty easy as it is basic ASCII commands. They also provide code that can be used from Windows, Mac OSX, and Linux to get started with development but I have not used their code.
The biggest downside to the Galil is how it handles errors. I have seen many cases where an axis would have an error and using the saved error variables we could not determine what happened. Other annoying things is that comments in the code can affect timing and variables names in the code must be less than 8 characters. When the code fails you will often now know why it fails and you need to track it down on your own. Having a variable name longer then 8 characters has caused several of my programs to fail and require me to spend time debugging. Another thing the Galil lacks is a good method for determining if the wiring of a brushless motor is correct. Every company that makes motors and controllers has a different idea about which phase is which. Getting the correct combination on the Galil often takes a little trial and error.
The Galil learning center is also good and you should watch some of the videos.
Distributed Architecture Systems
Elmo Motor Controls
The Elmo Motor controllers is a large family of controllers with integrated amplifiers that can fit many different input voltages and operating power. They have controllers from 12V to 780V and controller that can handle 65KW. The drives can accept just about any type of interface and feedback type. There are three main lines of controls; simpleIQ, ExtrIQ (rugged version), and gold (faster, more feedback options, and supports etherCat). If you wish to use a Elmo centralized controller there is a Maestro controller you can use (I used an earlier model of the Maestro that had reliability and speed issues). Each controller also has several analog and digital IO (again based on the model you choose).
I am not sure how or why marketing types choose to name the drives things like Whistle and Drum and not something meaningful !$$%##%%!
The interface is pretty advanced and allows you to configure the drives and create programs to run in the drives. There is an ASCII based protocol for the Elmo drives that takes two letters and some options. (This can get confusing when you are working with both a Galil and an Elmo. For example to set the velocity one uses “JG” and the other uses “JV”.) When commanding multiple motors on a bus (for example with CANopen) you need to integrate CAN which can be a challenge.
I typically use the PCAN adapter to connect my computer to the CAN bus if there is no native interface. There are two modes (that I care about) for commanding motors via the CAN bus. The first allows you to send the ASCII commands in a CAN message to a RPDO (receive data object). The second method lets you set things directly using normal CANopen methods. This second option is more flexible and faster however it is harder to implement the software driver for this second approach.
Click here for a full review of a Copley motor controller.
Copley is a newer player in the game however I have been impressed by their products. They are very similar to the Elmo’s however the cost is a little lower and the lead time is often shorter. The input voltage for the DC drives is from 20-180V and has a power rating of 2.7KW. Just like Elmo there are three classes of products; the standard drives, the plus versions, and the r-series rugged version. However within each class there are subclasses based on the type of motor you want to control. Thankfully the marking types did not create crazy names and stuck with meaningful names. For example a “ACM-055-18” is an accelnet (the family of the device) module (the form factor) with an input voltage range up to 55 volts and a peak current of 18 amps. As with the others there are several analog and digital IO on each drive.
The Copley interface can also be complicated like the Elmo one. You can program the controller and save routines in the controller (similar to the Galil and Elmo). Creating a driver for the Copley is really nice since you can communicate with one of the drivers over serial (RS-232) and then that driver can forward the CAN commands to all of the other drivers. This gives you the benefits of CAN with the simplicity of a serial protocol (I really like this feature!). Just like the other drives there is a basic ASCII protocol that can be used to talk to the drives.
Another nice thing is the Copley’s software process for setting up a new axis. While other controllers have this feature I like Copley’s the best. It has a process for auto detecting which phase of a brushless motor is which and can usually tell you how to fix the phases if needed (there is also a list of how to wire common motors. It also has an auto-tuning module that seems to work pretty good.
Their documentation for implementing CANopen is pretty bad.
Amplifiers (some with simple controllers)
Some of these amplifiers only take hall sensors and people will often try to commutate the motor based on that. However if you want reliable position and/or velocity control you will still want an encoder going to your controller.
JR Kerr (digital)
The JR Kerr motor controllers takes a simple serial ASCII protocol and can send commands to different types of motors. The JR Kerr controllers are wired to each other in a bus which can simplify wiring and allow for the amps to be distributed in the robot. Unlike many of the other amps in this section this one can accept encoders to allow for position and velocity control. These operate at 12-48VDC and up to 6A continuous. The boards communicate via RS-485 and they sell as USB<->RS-485 adapter that fits with the amplifier stack up.
One downside to JR Kerr is that it is a small operation and has a higher risk of not being able to supply products then the large manufacturers.
Elmo (analog) – These drives take a +/-10VDC control signal where the positive or negative value determine the direction. The control is toque (current) based and is proportional to the input analog voltage. The only feedback these support is hall sensors for commutaing brushless motors.
Copley (analog) – The Copley analog amplifiers is pretty much the same as I wrote for the Copley analog amps however they have a smaller voltage and current rating.
Advanced Motion Controls (analog)
A-M-C is a great company for getting analog drives from. They have a wide selection and have many of them in stock for minimal lead time. They have a line of products called the MicroZ which are 1.5″ x 1.5″ (nice and small). I have often used a Galil controller card (with no amplifiers) to control these A-M-C amplifier cards. They have drives that can be controlled via the standard +/-10V commands, and a series of drives that use a PWM signal plus a direction line. Some of the drives can also accept an encoder for doing velocity commands as well as torque.
I have two complaint about the drives; the first is that there should be more input protection. I had a case where a fuse blew allowing the line voltage to increase which killed one of the commutating phases (probably a blown FET) (to their credit it was right before a holiday when most people went home and they stayed on the phone to help me and process an RMA, so +10 for customer service). The second is that there are a couple of potentiometers used to configure the amp that could be labeled better.
I hope you enjoyed this post and please leave comments below. I will be making more detailed posts on these hardware choices in the future as well as about shunt regulators which are critical to have on your robot.
All controller/amplifier/can-adapter images come from their manufacturers websites.