Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
eros:mainboard_ctltable [2017/10/30 18:06] – Pedro Ramilo | eros: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: | ||
+ | |||
+ | ==== 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:\\ | ||
+ | '' | ||
+ | '' | ||
+ | |||
+ | In pseudo code, it would be: | ||
+ | < | ||
+ | # 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) | ||
+ | </ | ||
+ | |||
+ | 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: | ||
+ | |||
==== 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 multipler lets the user further tweak the fan speed setting to its needs. |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | ...\\ | + | |
- | '' | + | |
- | Please note that the unit will automatically adjust | + | By default |
- | This setting works as a multiplier | + | |
- | Nevertheless, on demanding settings such as manipulation | + | * 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 5 or above typically sets the FAN to its maximum speed, regardless 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 '' | This memory position relates to the '' | ||
- | These commands are being __deprecated__ in favour of '' | + | Seed Robotics' |
For this reason, the EROS firmware __does not support__ them but __fully supports__ '' | For this reason, the EROS firmware __does not support__ them but __fully supports__ '' | ||
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 '' | ||
+ | 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