eros:mainboard_ctltable

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
eros:mainboard_ctltable [2017/10/30 18:06] Pedro Ramiloeros:mainboard_ctltable [2023/03/13 18:36] (current) – [Control Table] SeedR KB Admin
Line 25: Line 25:
  
 There are specific memory positions where you can query the presence of features such as Capacitive Touch sensors, Bluetooth module, etc. to clearly understand which features are present for a given unit. There are specific memory positions where you can query the presence of features such as Capacitive Touch sensors, Bluetooth module, etc. to clearly understand which features are present for a given unit.
 +
 +==== 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:dynamixel_protocol|Dynamixel Protocol]] or the [[seedstpprotocol:control_using_stp|STP Protocol]].
 +
 +==== WORD values vs BYTE values ====
 +
 +The control table entries are either of WORD type (2 bytes) or BYTE type (1 byte) depending on 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 is Stored first, to the memory address shown in the control table, followed by the high byte at the next memory position:\\
 +''[ADDRESS AT CONTROL TABLE] LOW BYTE'' \\
 +''[ADDRESS AT CONTROL TABLE + 1] HIGH BYTE'' \\
 +
 +In pseudo code, it would be:
 +<code>
 +# PSEUDO CODE. Writing a WORD value 
 +word OUT_VALUE = 2048
 +w = new write_command(OUT_VALUE & 0xFF, (OUT_VALUE >> 8) & 0xFF)
 +uart_send_bytes(w)
 +</code>
 +
 +It is 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 them separately 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:dynamixel_protocol|Dynamixel Protocol]] or the [[seedstpprotocol:control_using_stp|STP Protocol]].
 +
  
 ==== Control Table ==== ==== Control Table ====
Line 45: Line 87:
 | 65 (0x41) | Main Board SN (2) | 1 | R | - | | 65 (0x41) | Main Board SN (2) | 1 | R | - |
 | 66 (0x42) | Main Board SN (3) | 1 | R | - | | 66 (0x42) | Main Board SN (3) | 1 | R | - |
 +| 67 (0x43) | Internal PSU RESET | 1 | RW | - |
 | 68 (0x44) | Hand LED RGB [LOW] | 1 | RW | RAM | | 68 (0x44) | Hand LED RGB [LOW] | 1 | RW | RAM |
 | 69 (0x45) | Hand LED RGB [HIGH] | 1 | RW | RAM | | 69 (0x45) | Hand LED RGB [HIGH] | 1 | RW | RAM |
Line 77: Line 120:
 | 124 (0x7C) | Port 9 Current Reading | 2 | R | RAM | | 124 (0x7C) | Port 9 Current Reading | 2 | R | RAM |
 | 126 (0x7E) | Port 10 Current Reading | 2 | R | RAM | | 126 (0x7E) | Port 10 Current Reading | 2 | R | RAM |
-| 129 (0x81) | Port 1 Attached Servo ID | 1 | RW | RAM | +| 128 (0x80) | Re-scan Attached Servo IDs | 1 | R | RAM | 
-| 130 (0x82) | Port 2 Attached Servo ID | 1 | RW | RAM | +| 129 (0x81) | Port 1 Attached Servo ID | 1 | R | RAM | 
-| 131 (0x83) | Port 3 Attached Servo ID | 1 | RW | RAM | +| 130 (0x82) | Port 2 Attached Servo ID | 1 | R | RAM | 
-| 132 (0x84) | Port 4 Attached Servo ID | 1 | RW | RAM | +| 131 (0x83) | Port 3 Attached Servo ID | 1 | R | RAM | 
-| 133 (0x85) | Port 5 Attached Servo ID | 1 | RW | RAM | +| 132 (0x84) | Port 4 Attached Servo ID | 1 | R | RAM | 
-| 134 (0x86) | Port 6 Attached Servo ID | 1 | RW | RAM | +| 133 (0x85) | Port 5 Attached Servo ID | 1 | R | RAM | 
-| 135 (0x87) | Port 7 Attached Servo ID | 1 | RW | RAM | +| 134 (0x86) | Port 6 Attached Servo ID | 1 | R | RAM | 
-| 136 (0x88) | Port 8 Attached Servo ID | 1 | RW | RAM | +| 135 (0x87) | Port 7 Attached Servo ID | 1 | R | RAM | 
-| 137 (0x89) | Port 9 Attached Servo ID | 1 | RW | RAM | +| 136 (0x88) | Port 8 Attached Servo ID | 1 | R | RAM | 
-| 138 (0x8A) | Port 10 Attached Servo ID | 1 | RW | RAM |+| 137 (0x89) | Port 9 Attached Servo ID | 1 | R | RAM | 
 +| 138 (0x8A) | Port 10 Attached Servo ID | 1 | R | RAM |
 | 174 (0xAE) | RW Shared Memory Byte 0 | 1 | RW | RAM | | 174 (0xAE) | RW Shared Memory Byte 0 | 1 | RW | RAM |
 | 176 (0xB0) | RW Shared Memory Byte 1 | 1 | RW | RAM | | 176 (0xB0) | RW Shared Memory Byte 1 | 1 | RW | RAM |
Line 231: Line 275:
 **Fan speed setting** **Fan speed setting**
  
-Adjusts the FAN speed of the unit. \\ +Adjusts the FAN speed multiplier. \\ 
-(please note that not all models support this feature; at the time of writing only the 7D and 8D do).+The hands automatically adjust the FAN speed based on the internal average temperature. The temperature is usually proportional to load and thus a balance between acoustic comfort and thermal performance should be achieved.
  
-''0''=Disables the fan (NOT RECOMMENDED)\\ +The FAN multipler lets the user further tweak the fan speed setting to its needs.
-''1''=Low speed\\ +
-''2''=Default\\ +
-''3''=High speed\\ +
-...\\ +
-''10''=Maximum speed at all times\\+
  
-Please note that the unit will automatically adjust the fan speed according to internal temperature, increasing it or lowering it as needed (unless this entry is set to 0).\\ +By default the FAN multiplier is set to 2 (FW versions < 45or set to 3 (fw versions >=45).
-This setting works as a multiplier to the computed target fan speed. The default of 2 should offer a balance between acoustic comfort and thermal behavior.+
  
-Neverthelesson demanding settings such as manipulation of heavy payloads or competitionwe recommend increasing this value for best thermal performance.+  * Lowering the Multiplier will reduce the fan speed. This may be suitable for environments where minimum fan noise is desirable 
 +  * Setting it to 0 will effectively disable the FAN ,which is NOT recommended. 
 +  * Setting it to a higher level will increase the multipler. A value of or above typically sets the FAN to its maximum speedregardless of the internal temperature. 
 + 
 +(please note that not all models support adjustable fan speed; at the time of writing only the 7D and 8D do).
  
 **Present Voltage** **Present Voltage**
Line 265: Line 307:
 This memory position relates to the ''REG_WRITE'' and ''ACTION'' commands of the Dynamixel protocol.\\ This memory position relates to the ''REG_WRITE'' and ''ACTION'' commands of the Dynamixel protocol.\\
  
-These commands are being __deprecated__ in favour of ''SYNC_WRITE''.+Seed Robotics' technical analysis indicates these commands are better performed using the more modern ''SYNC_WRITE''.
  
 For this reason, the EROS firmware __does not support__ them but __fully supports__ ''SYNC_WRITE'', which provides the same functionality in a more efficient manner. For this reason, the EROS firmware __does not support__ them but __fully supports__ ''SYNC_WRITE'', which provides the same functionality in a more efficient manner.
Line 287: Line 329:
 The serial number of the main board. The serial number should be reported in HEX and is composed in this manner The serial number of the main board. The serial number should be reported in HEX and is composed in this manner
 [SN1][SN2][SN3] [SN1][SN2][SN3]
 +
 +**Internal PSU RESET**
 +
 +Writing a ''1'' to this memory position will reset the Internal PSU that powers the Actuators.\\
 +This will result in power cycling all of the Internal Actuators.
 +
 +It is a convenient way to restart the internal servos without having the power cycle your entire robot.
 +
 +This feature is especially useful to reset the Actuators when an OVERLOAD error or other anomaly occurs.\\
 +It can also be used to power cycle them after changing a setting that requires a reboot.
 +
 +IMPORTANT: unless the main board is connected via USB, the Processor on the main board will also be powered by the Internal PSU. Therefore issuing a PSU restart may cause the processor to reboot as well. This will be visible on the LEDs on the hand showing the initialization sequence, and is a normal behavior.\\
 +Nevertheless the boot process is fairly fast and the unit should be responsive again within approximately 5 seconds.
  
  

Copyright © 2015-2023 Seed Robotics Ltd

  • eros/mainboard_ctltable.1509386775.txt.gz
  • Last modified: 2017/10/30 18:06
  • by Pedro Ramilo