IntelliServo is a project aiming to transform regular hobby servos into intelligent ones by replacing their original boards. By doing so the servo has upgraded capabilities, such as being able to read its position, temperature and current consumption. Multiple servos can now be daisy-chained and controlled over I2C from a microcontroller, or over USB from a computer.
Each board features an LPC11U24 microcontroller, a DRV8837 motor driver, a TMP36 temperature sensor and a PCA9508 I2C repeater. Each servo is unique, and so the list of compatible servos will expand with the community, so don't hesitate to add your servo!
3D views of the board and servo
V_BAT: Main power line, energizes the motor and all the servo's ICs. Works between 5 and 12 volts. V_I2C: Voltage reference for the I2C bus and powers components on the auxiliary bus. Must be 3.3V or 5V.
The servo has different connector groups:
- Main bus (5 lines): It is used to power and control the servos in daisy-chain configuration, attaching each one's A side to the previous' B side.
- Auxiliary bus (4 lines): Its function is to provide an extra link to the I2C bus, to allow other devices to be used at the same time.
- Power bus (2 lines): The main bus can be powered from the power bus on any servo, or from the last servo's main bus V_BAT and GND.
- Micro USB: Used both to upload the firmware to the board as to use it to control the servo directly from the PC, without involving other microcontrollers.
Installing the firmware
The board runs the firmware included in the Software/Firmware section. It is written in C++ and uses Mbed, to upload it connect the board over USB and then power it using the V_BAT and GND lines while pressing the button.
To compile it use the "mBuino" Mbed platform, which uses the smaller LPC11U24FHI33/301 model instead of the larger LPC11U24FBD64/401 model normally used in other boards. This is important because the EEPROM memory maps are different between both and the board won't be able to access the EEPROM if the wrong platform is chosen.
The servos are controlled over I2C, but to simplify their use an arduino library with all the relevant functions and some example sketches are included as well. To install it simply copy it to the "sketchbook/libraries/" folder.
V_BAT: 5V-12V V_I2C: 3.3V/5V I_Servo: 1.8A max I_Line: 5A max (60mil trace)
This project is open-source and as so everyone is welcome to contribute. The most useful way of doing so is perhaps by expanding the list of compatible servos, by finding the moving range in degrees and PID parameters specific for each servo.
To do so add the servo to the IntelliServoConfig.h file as below
//Added by username #ifdef NAME_OF_SERVO float maxAngle=XXX; float Kp=XXX, Kd=XXX, Ki=XXX; #endif
and to the IntelliServoMain.cpp file
This project is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
On the web
Servos are extremely versatile actuators used in a large number of applications which need controlled mechanical movement. The usual way of driving them is by using a PWM output from a micro-controller. But if you’re building a robot or a drone which requires a large number of servos, then it makes sense to add smarts directly to the servo.
[Alvaro Ferrán Cifuentes] did just that by building IntelliServo – an add on board which makes regular servos smart by giving them enhanced capabilities as found in high-end versions.