2 layer board of 1.65x1.65 inches (41.94x41.94mm). $13.60 for three.
Engineers use servo motors to achieve the precision motion required in applications such as robotics, automation, and CNC manufacturing. Like RC servos, industrial servos actively correct for external disturbances. Unlike RC servos, industrial servos can provide very accurate motion, and often support advanced motion control modes. Unfortunately the cost of industrial servos is prohibitive to the individual maker (thousands of dollars per motor).
We’ve been developing an affordable open-source industrial servo motor, opening the door to sophisticated mechatronics applications. Our design leverages the low cost of mass produced stepper motors. We are able to achieve very high resolution via 14b encoder feedback (after calibration routine!).
Position, velocity, torque loops
Step & direction inputs for drop-in compatibility with stepper motors / step stick
I2c, serial inputs
Customizable/open source with access to internal variables
Transparent and user-definable control algorithms (commercial servos often lack this)
Arduino compatible with easy to use interface
High resolution pointing (sub 0.1 degree)
Low cost (should not be a huge leap from stepper + stepstick cost)
Serial interfaces for inter-motor communication
On-board processor allows for stand alone for simple applications
Adjustable commutation profiles
PID auto tuning
Open to customization. Outside of our firmware, we see Mechaduino as a very useful hardware package. If you would like to use the stepper motor in open loop mode w/ encoder to verify location, you can do that.
An industrial servo motor can be broken down into four main components (below). First we looked at each of these components and tried to piece together an affordable breadboard-level prototype. After some experimentation, we were able to distill out a working lineup of components. From there, we’ve been iterating on our design, working out all the kinks, and tuning the control loops. It’s starting to come together!
…Back to those four main components:
The actual motor, usually of the brushless dc variety. When you look at industrial servo motors, a big chunk of the cost is the motor itself. They are often custom built, or at least built in limited quantities, which means $$$. Watt for watt, I'd guess that a mass produced NEMA 17 or NEMA 23 stepper motor is between a tenth and a hundredth the cost of the BDC motors used in industrial servos. Although their design is optimized for "stepping," stepper motors are really just 50-pole brushless dc motors. They can be controlled exactly like a more traditional 3 phase BDC motor with more poles. So that's the plan. It's working!
A sensor for feedback, usually an encoder. Optical encoders are pretty standard, but get quite pricey if you want high resolution and/or absolute position information. We were intrigued by some of the cheap, high resolution magnetic encoders offered by vendors like AMS. It turns out that although they claim 12 and 14 bit resolutions (that's 0.09 and 0.02 degrees respectively), they suffer from non-linearities on the order of a degree or so! However, we found that this non-linearity is very repeatable, and we were able to develop a quick, self contained (on motor) calibration routine that restores resolution to better than 0.1 degrees. (More on this later. This was a significant design effort and is worthy of its own build log!)
Drive circuitry/power electronics to excite the motor windings. Many industrial servos use discrete H bridges. Each phase requires it's own H bridge ( for a two phase motor... half bridges for each in a three phase motor), which consists of at least 4 if not 8 (...including freewheeling diodes) discrete switching devices. Throw in gate drive circuitry, and things start to get expensive. We hoped to find a single-chip, integrated solution that would allow for current feedback, and we found just that in the A4954 dual full bridge PWM driver.
Control Electronics. Usually a microcontroller or FPGA. Early on, we decided that Arduino compatibility was a must in order to make the firmware as accessible as possible. We chose to use a SAMD21 ARM M0+ (Arduino Zero compatible) processor to balance cost and performance. Our breadboard prototype system verified that this processor was more than capable of executing the necessary algorithms.
Fine, closed loop positioning for 3D printers
Fine pointing for optics (laser, telescope, camera gimbal)
Velocity loop for a record player
Force feedback/impedance control for robotics
Force feedback for gaming controllers
Adjustable mechanical impedance: virtual spring,mass,damper
Electrical gearing between two axes on a cnc machine, etc.
Gravity-cancellation (counter the gravitational torques on a robotic arm for example)
Load detection and characterization (simple case: use as a scale!)
Paper towel/tp dispenser
Variable load (brake)
Variable load (generator)
After market valve control (automate a garden hose, etc)
Finer resolution than stepper motors (0.02 degrees)
True closed loop for disturbance rejection
Lower power consumption: only uses power to fight disturbances. This in turn means higher peak torque.
Absolute position control (not incremental). No need to home on power-on.
All Mechaduino related materials are released under the Creative Commons Attribution Share-Alike 4.0 License
I had some difficulty getting some of the aesthetics on the board, namely the silk of tropical labs and the Mechaduino in copper on the top layer…everything else is 100% as is from his github