Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
eros:seedactuators_controltable [2017/11/15 13:39] – Pedro Ramilo | eros:seedactuators_controltable [2021/07/01 12:59] (current) – SeedR KB Admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
===== Control Table for the Seed Robotics Smart Actuators ===== | ===== Control Table for the Seed Robotics Smart Actuators ===== | ||
- | |||
- | **DISAMBIGUATION**: | ||
- | If you are using an **RH2D unit**, it uses Actuators from Robotis, in particular the XL320 Actuator, which has a slightly different control table and capabilities. See [[rh2d: | ||
- | |||
- | For all other Seed Robotics units, please continue reading. | ||
- | |||
- | -- | ||
The Seed Robotics smart actuators run Seed Robotics own firmware that is developed in parallel and, as part, of the EROS architecture. | The Seed Robotics smart actuators run Seed Robotics own firmware that is developed in parallel and, as part, of the EROS architecture. | ||
- | At present, the micro28, micro57, mini67 and micro44 | + | At present, the Seed56, Seed58, Seed67 |
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. | 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. | ||
Line 47: | Line 40: | ||
# PSEUDO CODE. Writing a WORD value | # PSEUDO CODE. Writing a WORD value | ||
word OUT_VALUE = 2048 | word OUT_VALUE = 2048 | ||
- | uart_write_bytes(OUT_VALUE & 0xFF, (OUT_VALUE >> 8) & 0xFF) | + | w = new write_command(OUT_VALUE & 0xFF, (OUT_VALUE >> 8) & 0xFF) |
+ | uart_send_bytes(w) | ||
</ | </ | ||
Line 59: | Line 53: | ||
==== Control Table ==== | ==== Control Table ==== | ||
- | ^ Address ^ Size (nr of bytes to read/ | + | ^ Address ^ Size (nr of bytes to read/ |
| 0 (0x0) | WORD (2) | Model Number | R |Model number of the Actuator | HARD CODED | | | 0 (0x0) | WORD (2) | Model Number | R |Model number of the Actuator | HARD CODED | | ||
| 2 (0x2) | BYTE (1) | Version of Firmware | R |Installed Firmware version | HARD CODED | | | 2 (0x2) | BYTE (1) | Version of Firmware | R |Installed Firmware version | HARD CODED | | ||
Line 68: | Line 62: | ||
| 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.| EEPROM | | | 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.| EEPROM | | ||
| 16 (0x10) | BYTE (1) | Status Return Level | RW |Default=2, | | 16 (0x10) | BYTE (1) | Status Return Level | RW |Default=2, | ||
+ | | 18 (0x12) | BYTE (1) | Shutdown Conditions | RW | Default=OVERLOAD or excess TEMPERATURE | EEPROM | | ||
| 20 (0x14) | BYTE (1) | Emulate 12 bit resolution | RW |Default=1, | | 20 (0x14) | BYTE (1) | Emulate 12 bit resolution | RW |Default=1, | ||
- | | 23 (0x17) | BYTE (1) | PID Tuning Lock | RW |Default=1, | + | | 21 (0x15) | WORD (2) | Zero Offset | RW |Default=2048 (if in 12 bit mode)/512 (if in 10bit mode) | EEPROM | |
+ | | 23 (0x17) | BYTE (1) | PID, Zero_Offset and Resolution | ||
| 24 (0x18) | BYTE (1) | Torque Enable | RW |Default=0 (torque disabled, H bridge in Dynamic brake mode) | RAM | | | 24 (0x18) | BYTE (1) | Torque Enable | RW |Default=0 (torque disabled, H bridge in Dynamic brake mode) | RAM | | ||
- | | 26 (0x11) | BYTE (1) | D Gain (Position Controller) | R(RW) |D Gain for the Position Controlller | RAM (initial value read from EEPROM) | | + | | 26 (0x11) | BYTE (1) | D Gain (Position Controller) | R(RW) |D Gain for the Position Controlller | RAM (initial value read from EEPROM) | |
- | | 27 (0x1B) | BYTE (1) | I Gain (Position Controller) | R(RW) |I Gain for the Position Controlller | RAM (initial value read from EEPROM) | | + | | 27 (0x1B) | BYTE (1) | I Gain (Position Controller) | R(RW) |I Gain for the Position Controlller | RAM (initial value read from EEPROM) | |
- | | 28 (0x1C) | BYTE (1) | P Gain (Position Controller) | R(RW) |P Gain for the Position Controlller | RAM (initial value read from EEPROM) | | + | | 28 (0x1C) | BYTE (1) | P Gain (Position Controller) | R(RW) |P Gain for the Position Controlller | RAM (initial value read from EEPROM) | |
- | | 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. | RAM | | + | | 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. | RAM | |
- | | 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 | RAM | | + | | 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 | RAM | |
- | | 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. | RAM | | + | | 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. | RAM | |
- | | 38 (0x26) | WORD (2) | Present Speed | R |Since firmware version 21 this value is expressed in units of 0,11 RPM. | RAM | | + | | 38 (0x26) | WORD (2) | Present Speed | R |Since firmware version 21 this value is expressed in units of 0,11 RPM. | RAM | |
- | | 43 (0x2B) | BYTE (1) | Present Temperature | R |Approximate temperature inside the actuator, in degrees Celsius | RAM | | + | | 43 (0x2B) | BYTE (1) | Present Temperature | R |Approximate temperature inside the actuator, in degrees Celsius | RAM | |
- | | 46 (0x2E) | BYTE (1) | Moving | R |Indicates if the servo output shaft is moving. | RAM | | + | | 46 (0x2E) | BYTE (1) | Moving | R |Indicates if the servo output shaft is moving. | RAM | |
- | | 81 (0x51) | BYTE (1) | Bootloader Password Length | R |The number of characters that compose the Booloader password. | BOOLOADER | | + | | 81 (0x51) | BYTE (1) | Bootloader Password Length | R |The number of characters that compose the Booloader password. | BOOLOADER | |
- | | 82 (0x52) | BYTE (1) | First Character of the Bootloader Password | R |This value is the ASCII code of the character. | BOOLOADER | | + | | 82 (0x52) | BYTE (1) | First Character of the Bootloader Password | R |This value is the ASCII code of the character. | BOOLOADER | |
- | | 85 (0x55) | BYTE (1) | Bootloader Timeout | R |Timeout for bootloader activation | BOOLOADER | | + | | 85 (0x55) | BYTE (1) | Bootloader Timeout | R |Timeout for bootloader activation | BOOLOADER | |
- | | 87 (0x57) | BYTE (1) | UART Comm Health: Framing Errors count | R |For debugging and troubleshooting purposes | RAM | | + | | 87 (0x57) | BYTE (1) | UART Comm Health: Framing Errors count | R |For debugging and troubleshooting purposes | RAM | |
- | | 88 (0x58) | BYTE (1) | UART Comm Health: Processor Buffer overflow count | R |For debugging and troubleshooting purposes | RAM | | + | | 88 (0x58) | BYTE (1) | UART Comm Health: Processor Buffer overflow count | R |For debugging and troubleshooting purposes | RAM | |
- | | 89 (0x59) | BYTE (1) | UART Comm Health: Firmware Buffer overflow count | R |For debugging and troubleshooting purposes | RAM | | + | | 89 (0x59) | BYTE (1) | UART Comm Health: Firmware Buffer overflow count | R |For debugging and troubleshooting purposes | RAM | |
- | | 90 (0x5A) | BYTE (1) | Servo Control Mode (Position control or Direct PWM control) | R |0=Position control, 1=PWM Control | RAM | | + | | 90 (0x5A) | BYTE (1) | Servo Control Mode | R |0=Position control, 1=PWM Control. Default=0 | RAM | |
- | | 92 (0x5C) | WORD (2) | Motor PWM | R(RW) |Writable if position 0x5A is set to Direct PWM mode | RAM | | + | | 92 (0x5C) | WORD (2) | Motor PWM | R(RW) |Writable if position 0x5A is set to Direct PWM mode | RAM | |
+ | |||
+ | **Storage Persistence of values** | ||
+ | |||
+ | The meaning of Storage Persistence is shown below: | ||
+ | * HARD CODED - these values are part of the firmware code and may only be changed by a firmware update | ||
+ | * EEPROM - values stored in EEPROM will persist after a power cycle and will be permanently recorded. | ||
+ | * RAM - values stored in RAM will be reset to default after a power cycle. | ||
+ | * BOOTLOADER - these are special values stored in the Bootloader configuration area. They can only be changed by the bootloader itself, during a Bootloader session. | ||
**Model Number** | **Model Number** | ||
Line 156: | Line 161: | ||
The default configuration is 2. | The default configuration is 2. | ||
+ | |||
+ | **Shutdown Conditions** | ||
+ | |||
+ | This setting was introduced with Actuator firmware version 27. It is not available in earlier versions.\\ | ||
+ | This setting lets the user disable the Torque Shutdown conditions of OVERLOAD and excess TEMPERATURE. | ||
+ | |||
+ | These checks exist in the unit to protect it against damage by disabling torque when any of these conditions occur.\\ | ||
+ | For more information on how these conditions affect motion and how to prevent them, see setting the **Target Position** below which frther expands on the topic of shutdown conditions. | ||
+ | |||
+ | This value is a bitmask, composed by the following: | ||
+ | |||
+ | * ERROR_OVERLOAD | ||
+ | * ERROR_TEMPERATURE | ||
+ | |||
+ | By default, it is set to 36 (0x20 + 0x4 = 0x24 or 36 in Decimal) which corresponds to shutting down torque on an OVERLOAD or excess TEMPERATURE condition. | ||
+ | |||
+ | If you wish to disable any of these conditions, WRITE to this memory position and don't set the appropriate bit (for example setting to 0 disables all Shutdown conditions). | ||
+ | |||
+ | Please note we DO NOT recommend disabling the Shutdown conditions. They are in place to protect the unit. This option should only be changed after careful analysis and consideration. | ||
**Emulate 12 bit resolution** | **Emulate 12 bit resolution** | ||
Line 164: | Line 188: | ||
By oversampling, | By oversampling, | ||
- | By default this is configured to 1 (12 bit emulation enabled). | + | By default, this is configured to 1 (12 bit emulation enabled). |
If your library or framework works in 10 bit resolution, you may set the unit to 10bit resolution by writing a " | If your library or framework works in 10 bit resolution, you may set the unit to 10bit resolution by writing a " | ||
The new resolution configuration becomes effective immediately after changing this parameter. | The new resolution configuration becomes effective immediately after changing this parameter. | ||
- | **PID Tuning Lock** | + | **IMPORTANT**\\ |
+ | If you need to change this setting you must first set memory position '' | ||
- | Locks WRITING to the memory positions and adjust the PID values (26 to 28). | + | **Zero offset** |
- | This is meant to prevent misconfiguring | + | This setting lets the user re-tune the 0 (or center position) for each joint. |
- | If you wish to tune the PID settings, set this flag to 0 first, to enable Writing | + | This is useful for: |
+ | * joints with double actuation such as Wirst Flexion, Adduction where the settling of tendor fibers may produce minor deviations from the center position | ||
+ | * Under actuated joints (i.e. closing of fingers) where settling of the tendon fibers causes the finger to start moving only after a set position (and not within the first 10~20units). Previously this required physically readjusting the tendon. Using this option this can now be tuned on the fly. | ||
+ | |||
+ | The default value is 2048 (if in 12bit mode) or 512 (if on 10bit). These numbers correspond to 0. | ||
+ | |||
+ | By reducing this number you are adjusting the zero clockwise; by increasing this number you are adjusting the zero Counterclockwise. | ||
+ | |||
+ | There is a limit to how much this number can be adjusted. Once the offset reaches the extreme limits of the position sensor, increasing or decreasing it no longer produces any effect. | ||
+ | |||
+ | **IMPORTANT (1)**: do not set this to 0, as it would correspond to an adjustment of -2048/-512 (depending on the resolution of operation). Remember, the default zero position is a setting of 2048/512 (depending on the resolution of operation). | ||
+ | |||
+ | **IMPORTANT (2)**\\ | ||
+ | If you need to change this setting you must first set memory position '' | ||
+ | This setting was introduced with Actuator firmware version 27. It is not available in earlier versions. | ||
+ | |||
+ | |||
+ | **PID, Zero_Offset & Resolution Tuning Lock** | ||
+ | |||
+ | Unlocks/ | ||
+ | |||
+ | This is meant to prevent inadvertent misconfiguration of the unit, mostly because some libraries for the Dynamixel protocol (i.e. Pypot) make assumptions about the hardware and try to re-tune these values incorrectly, | ||
+ | |||
+ | Therefore if you wish to adjust the Zero offset, enable/ | ||
+ | On every boot, this flag is set to 1 to protect these tuning parameters. | ||
**Torque Enable** | **Torque Enable** | ||
Line 186: | Line 235: | ||
This ensures the unit is torqued at the current position in order to avoid any jumping or inadvertent movement. | This ensures the unit is torqued at the current position in order to avoid any jumping or inadvertent movement. | ||
- | Also note that WRITing a Target Position or a Target Speed, automatically enables Torque. Once again, this is implemented for compatibility with third party libraries. | + | Also note that WRITing a Target Position or a Target Speed, automatically enables Torque. Once again, this is implemented for compatibility with third-party libraries. |
Line 195: | Line 244: | ||
We generally DON'T recommend tweaking these values as PID tuning is an advanced topic. | We generally DON'T recommend tweaking these values as PID tuning is an advanced topic. | ||
- | By default the units come tuned for the fastest output response at maximum torque.\\ | + | By default, the units come tuned for the fastest output response at maximum torque.\\ |
If you wish to attempt tuning a more elastic behavior you may want to try reducing the P and increasing the I. | If you wish to attempt tuning a more elastic behavior you may want to try reducing the P and increasing the I. | ||
Changes to the P,I,D gains are stored in RAM only. They will be reset to factory default after a power cycle. | Changes to the P,I,D gains are stored in RAM only. They will be reset to factory default after a power cycle. | ||
- | **IMPORTANT:** some joints are mounted with physical mechanical limits. Misconfiguration of the PID gains may result in uncontrolled motion and possible collision with the mechanical limits and consequent damage to the unit.\\ | + | **IMPORTANT |
- | If you are unsure or require assistance for PID tuning | + | If you are unsure or require assistance for PID tuning, please |
+ | |||
+ | **IMPORTANT (2)**\\ | ||
+ | If you need to change this setting you must first set memory position '' | ||
**Target Position** | **Target Position** | ||
Line 212: | Line 264: | ||
When writing a Target Position, if Torque (position 24) is disabled, it will be automatically enabled. | When writing a Target Position, if Torque (position 24) is disabled, it will be automatically enabled. | ||
- | **OVERLOAD** | + | **OVERLOAD |
- | This is meant to protect the hardware from damage due to stalling. | + | This is meant to protect the hardware from damage due to stalling |
+ | (if the user wishes, the check for Shutdown Conditions can be disabled in memory position '' | ||
The Overload error is reported in the RETURN PACKET after a command is sent to the unit.\\ | The Overload error is reported in the RETURN PACKET after a command is sent to the unit.\\ | ||
- | - When the unit has an OVERLOAD error, Torque can't be re enabled until the unit is rebooted | + | - When the unit has an OVERLOAD error, Torque can't be re-enabled until the unit is rebooted.\\ |
- | If the actuator is connected to an EROS main board, you can reset power to the internal | + | You can reboot the actuator by sending a REBOOT packet over the Dynamixel protocol or by power cycling the unit. |
+ | If the actuator is connected to an EROS mainboard, you can reset power to the internal | ||
**To prevent overload errors**, the user is advised to accompany the motion of the unit by querying the Present Position parameter (position 36) and ensuring that it is varying.\\ | **To prevent overload errors**, the user is advised to accompany the motion of the unit by querying the Present Position parameter (position 36) and ensuring that it is varying.\\ | ||
- | If the users detects a stall, it can either set the '' | + | If the user detects a stall, it can either set the '' |
- | If you are **making a movement to grasp an object** the recommended approach is to set a low Target Speed ('' | + | If you are **making a movement to grasp an object** the recommended approach is to set a low Target Speed near the target |
+ | You can also check the Temperature of the actuator, by reading memory position '' | ||
**Target Speed** | **Target Speed** | ||
Line 230: | Line 285: | ||
If set to 0, the unit will move at maximum speed. This is the default setting. | If set to 0, the unit will move at maximum speed. This is the default setting. | ||
- | Different actuator models will have different maximum speeds. On average it is in the range of 50~60RPM. | + | The maximum value accepted for this parameter is 1023.\\ |
+ | Different actuator models will have different maximum speeds. On average it is in the range of 50~60RPM; therefore if the user sets a Target Speed higher then the maximum physical speed, the actuator will move at its maximum physical speed. | ||
When writing a Target Speed, if Torque (position 24) is disabled, it will be automatically enabled. | When writing a Target Speed, if Torque (position 24) is disabled, it will be automatically enabled. | ||
Line 244: | Line 300: | ||
These are the recommended values to best operation when closing but, most importantly, | These are the recommended values to best operation when closing but, most importantly, | ||
- | NOTE: The minimum speed for smooth operation is ~1 RPM ( a setting of 10 ). Lower values will be accepted, not to limit the user, but discretization of the movement may be observed. | + | NOTE: The minimum speed for smooth operation is ~1 RPM ( a setting of 10 ). Lower values will be accepted, not to limit the user, but discretization of the movement may be observed.\\ |
**Present Position** | **Present Position** | ||
Line 257: | Line 313: | ||
Returns the present speed as measured by the internal sensor. | Returns the present speed as measured by the internal sensor. | ||
- | This value is and Unsigned WORD value. However direction of movement can be determined by reading the 10th bit of the value returned.\\ | + | This value is and Unsigned WORD value. However direction of movement can be determined by reading the 11th bit of the value returned.\\ |
- | (in practice if value <1023 it is moving on CCW direction; if value >1023 it is moving is CW direction) | + | (in practice if value <=1023 it is moving on CCW direction; if value >1023 it is moving is CW direction) |
**Present Temperature** | **Present Temperature** | ||
Line 264: | Line 320: | ||
Present temperature inside the actuator in degrees Celsius. | Present temperature inside the actuator in degrees Celsius. | ||
- | This value is aproximate, and may have a maximum | + | This value is approximate (it may have a small error of a few degrees, due to inherent behavior of the sensor). |
**Moving** | **Moving** | ||
Line 303: | Line 359: | ||
At the moment this set to the default of POSTITION CONTROL mode, which is the typical control mode for any servo motor. | At the moment this set to the default of POSTITION CONTROL mode, which is the typical control mode for any servo motor. | ||
- | 0=Position Control Mode | + | 0=Position Control Mode\\ |
1=Direct PWM Control mode | 1=Direct PWM Control mode | ||
- | About Direct PWM Control mode: | + | __About |
By querying Current Drawn by the motor through the control table on the EROS main board, and since Current is directly proprotional to PWM, | By querying Current Drawn by the motor through the control table on the EROS main board, and since Current is directly proprotional to PWM, | ||
by controlling the PWM on the motor users are able to build a closed loop control cycle for true Force Estimation and Torque Control. | by controlling the PWM on the motor users are able to build a closed loop control cycle for true Force Estimation and Torque Control. | ||
Line 320: | Line 376: | ||
**Motor PWM** | **Motor PWM** | ||
- | __When memory position 90 is set to Position Control Mode__, this will report the current PWM applied | + | __When memory position 90 is set to Position Control Mode__, this will report the current PWM applied |
In this mode, this value is READ ONLY. | In this mode, this value is READ ONLY. |
Copyright © 2015-2023 Seed Robotics Ltd