This is an old revision of the document!
Control Table for the Seed Robotics Smart Actuators
The Seed Robotics smart actuators run Seed Robotics own firmware that is developed in paralel and as part of the EROS architecture.
At present, the micro28, micro57, mini67 and micro448 actuator models are used in different Seed Robotics models.
The control table below applies to all of them. As part of the EROS initiative commitment, we wish that all our hardware is exposed and controlled by the user under one single command and control architecture.
WORD values vs BYTE values
The control table entries are either of WORD type (2 bytes) or BYTE type (1 byte) depending in the range of values they handle.
A BYTE value is written directly to the memory position.
A WORD value however is written in Little Endian style, that is you must break the word in two bytes. The Low order byte mus be written first, to the memory address shown in the control table, followed by the high byte:
[ADDRESS AT CONTROL TABLE] LOW BYTE
[ADDRESS AT CONTROL TABLE + 1] HIGH BYTE
In pseudo code, it would be:
# PSEUDO CODE. Writing a WORD value word OUT_VALUE = 2048 uart_write_byte(OUT_VALUE & 0xFF) uart_write_byte((OUT_VALUE << 8) & 0xFF)
It is also important to note that WORD values should be written in one single WRITE command.
Splitting the WRITE of a WORD value in two individual commands, and sending it as individual Bytes, is unsupported and will yield incorrect results: the first command with the LOW byte is discarded; the next command with the HIGH byte is processed and assumes a low byte of 0 since the low byte was not included in the second command.
Therefore writing WORD values should be done in one single command that will include both the LOW and HIGH bytes simultaneously.
For more information on how to WRITE to the control table see the protocol documentation: you can do it using the Dynamixel Protocol or the STP Protocol.
Reading vs Writing
All memory positions are typically readable.
READing from a memory position will return the state of that variable at the time of processing the READ request.
Here are a few examples of READING the control table:
- If you have set Torque Enable (position 24) to Off (0), you can query the Present Position (memory position 36) while you move the joint with your hand. You will see the values being updated in real time. This technique can be used to capture key frames for example.
- If you have set a Target Position (memory position 30), you can read memory positions 36 (Present position), 38 (Present speed) and 46 (Moving) to check if the trajectory is being followed. This is especially useful for detecting the arrival at the target or detecting anomalies such as stalling, normally due to external physical blockage
WRITing to a memory position will usually either configure a parameter or trigger an action.
As an example:
- To make the servo move to a specific position, WRITE your target to the memory position 30 (Target Position). If Torque is not enabled, it will be automatically enabled and servo will seek the Target position.
- If you wish to control the moving speed, you may WRITE to the memory position 32 (Target Speed) prior to setting your target position.
For more information on how to READ and WRITE to the control table see the protocol documentation: you can do it using the Dynamixel Protocol or the STP Protocol.
Control Table
Address | Size (nr of bytes to read/write) | Description | Access Mode | Default value/Remarks |
---|---|---|---|---|
0 (0x0) | WORD (2) | Model Number | R | Model number of the Actuator |
2 (0x2) | BYTE (1) | Version of Firmware | R | Installed Firmware version |
3 (0x3) | BYTE (1) | ID | RW | Bus ID |
4 (0x4) | BYTE (1) | Baud Rate | RW | See below for the meaning of the Baud Rate byte. |
5 (0x5) | BYTE (1) | Return Delay Time | R | Always 0. This position is made available for backwards comptibility with older libraries. |
6 (0x6) | WORD (2) | CW Angle Limit | RW | Sets the minimum value accepted as Target Position. Default=0. This value is set in the 10bit or 12 bit range, depending on the setting of Position 0x14. |
8 (0x8) | WORD (2) | CCW Angle Limit | RW | Sets the maximum value accepted as Target Position. Default=1023 or 4095: This value is set in the 10bit or 12 bit range, depending on the setting of Position 0x14. |
16 (0x10) | BYTE (1) | Status Return Level | RW | Default=2 |
20 (0x14) | BYTE (1) | Emulate 12 bit resolution | RW | Default=1, set to 12bit mode |
23 (0x17) | BYTE (1) | PID Tuning Lock | RW | Default=1. PID memory positions from inadvertent modification. |
24 (0x18) | BYTE (1) | Torque Enable | RW | Default=0 (torque disabled, H bridge in Dynamic brake mode) |
26 (0x11) | BYTE (1) | D Gain (Position Controller) | R(RW) | D Gain for the Position Controlller |
27 (0x1B) | BYTE (1) | I Gain (Position Controller) | R(RW) | I Gain for the Position Controlller |
28 (0x1C) | BYTE (1) | P Gain (Position Controller) | R(RW) | P Gain for the Position Controlller |
30 (0x1E) | WORD (2) | Target Position | RW | Sets the target position to seek. This value is set in the 10bit or 12 bit range, depending on the setting of Position 0x14. |
32 (0x20) | WORD (2) | Target Speed | RW | Desired target speed while in motion. 0=Maximum speed; any other value will limit the maximum speed. Speed is expressed in units of 0,11RPM. Default=0 |
36 (0x24) | WORD (2) | Present Position | R | Present Position. This value is expressed in the 10bit or 12 bit range, depending on the setting of Position 0x14. |
38 (0x26) | WORD (2) | Present Speed | R | Since firmware version 21 this value is expressed in units of 0,11 RPM. |
43 (0x2B) | BYTE (1) | Present Temperature | R | Aproximate temperature in degrees Celsius |
46 (0x2E) | BYTE (1) | Moving | R | Servo internal Temperature (in degrees Celsius). This value is aproximate with an accuracy of 10 degrees. |
81 (0x51) | BYTE (1) | Bootloader Password Length | R | The number of letters in the Booloader password. |
82 (0x52) | BYTE (1) | First Character of the Bootloader Password | R | This value is the ASCII code of the character. |
85 (0x55) | BYTE (1) | Bootloader Timeout | R | Timeout for bootloader activation |
87 (0x57) | BYTE (1) | UART Comm Health: Framing Errors count | R | For debugging and troubleshooting purposes |
88 (0x58) | BYTE (1) | UART Comm Health: Processor Buffer overflow count | R | For debugging and troubleshooting purposes |
89 (0x59) | BYTE (1) | UART Comm Health: Firmware Buffer overflow count | R | For debugging and troubleshooting purposes |
90 (0x5A) | BYTE (1) | Servo Control Mode (Position control or Direct PWM control) | R | 0=Position control, 1=PWM Control |
92 (0x5C) | WORD (2) | Motor PWM | R(RW) | Writable if position 0x5A is set to Direct PWM mode |
Copyright © 2015-2023 Seed Robotics Ltd