The communication to and from the servo motors used to be a major bottleneck. The FUmanoid robots use Dynamixel servo motors which communicate via an RS485 interface. In order to increase the communication performance a realtime communication unit was developed. We are happy to provide you the schematics and the software of this board as an open-source project, available online at http://www.github.com/fumanoids/erolf
There are two stm32f505 (ARM Cortex M4) processors embedded in the board. The first processor – processor1 – is dedicated to the communication to the motors. The second processor – processor 2 – is dedicated to processing the IMU values but can be used for motion execution and planning as well since the computation of the orientation leaves lots of resources free.
Communication to the servo motors
One processor is dedicated for the communication to the servo motors. Ithandles up to three transactions (read command and reply or write command) at the same time while processing those information. By using three RS485 busses very high communication rates can be achieved (about 10000 operations per second max).
Reading of values (eg. position, speed and torque) in the motors is done automatically in order to collect those data and to tranfer one single packet containing all motor values to a main computing unit.
When the processor receives a packet from the main computer containing values to write to the motors it schedules those write operations and processes them in a real time fashion.
The second processor is dedicated to an inertial measurement unit (IMU) and for data processing. An extended kalman filter is implemented which updates at about 1000Hz and distributes the board’s orientation to the main computing
unit at about 200Hz.
The sensors used are a LSM303DLHC (accelerometer and magnetometer) and a L3GD20 (angular rotation sensor).
Communication to main computing unit
A main computing unit can be attached via a UART interface. The integrated level shifter allows all voltage levels from 1.8V to 5V on this interface with communication rates up to 1M Baud.
A protocol for communication is already implemented inside the framework to deliver packets or messages in a really little-code-generating manner.
The most frequent cause of electrical failure in the motors happened when the voltage supply wire touched a data wire resulting in a overvoltage which destroyed most ICs connected to the data bus. Those events are hard to foresee
or to prevent since the whole cabling of the robots has to be checked.
To prevent any damage caused by such an event a power cutting mechanism is implemented in this board. Whenever a data wire carries more than a certain voltage (adjustable via Zenner-Diode) the supply voltage to the motors is cut off via a P-MOSFET. The power supply can be reenabled by writing a 1 into a d-FlipFlop but will be cut immediately when the overvoltage condition occurs again.
The delay between the occurence of the error condition and the cutting of the supply voltage is about 200ns.
This safety feature can be disabled by software in case you do not need it or if you experience trouble with it.
There is a micro SD Card slot attached to processor 2 wich can be used to store motions for execution on the board itself.
A piezo buzzer can be used to generate sounds either in a wave generation fashion where two frequency profiles and frequencies can be added. It is also possible to play sounds stored on the SD Card.
Up to five buttons can be attached to a connector for use as user input. You can even use Buttons with embedded LED which can be used for debug information or state signaling.
Toggling of the LED does not affect the input capabilities of the buttons.