Last modified by Eric Nantel on 2024/11/21 09:43

From version < 93.1 >
edited by Coleman Benson
on 2019/01/31 15:51
To version < 98.2 >
edited by Coleman Benson
on 2019/02/05 11:13
< >
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -5,17 +5,19 @@
5 5  
6 6  = Serial Protocol Concept =
7 7  
8 -The Lynxmotion Smart Servo (LSS) serial protocol was created in order to be as simple and straightforward as possible from a user perspective ("human readable"), while at the same time trying to be compact and robust yet highly versatile. The protocol was based on Lynxmotion's SSC-32 RC servo controller and almost everything one might expect to be able to configure for a smart servo motor is available.
8 +The custom Lynxmotion Smart Servo (LSS) serial protocol was created in order to be as simple and straightforward as possible from a user perspective ("human readable format"), while at the same time compact and robust yet highly versatile. The protocol was based on Lynxmotion's SSC-32 RC servo controller and almost everything one might expect to be able to configure for a smart servo motor is available.
9 9  
10 -In serial mode, in order to have servos react differently when commands are sent to all servos in a bus, the first step a user should take is to assign a different ID number to each servo (explained below). Once this has been done, only the servo(s) which have been assigned to the ID sent as part of the command will take action. There is currently no CRC / checksum implemented as part of the protocol.
10 +In order to have servos react differently when commands are sent to all servos in a serial bus, the first step a user should take is to assign a different ID number to each servo (explained below). Once this has been done, only the servo(s) which have been assigned to the ID sent as part of the command will follow that command. There is currently no CRC / checksum implemented as part of the protocol.
11 11  
12 12  == Session ==
13 13  
14 14  A "session" is defined as the time between when the servo is powered ON to when it is powered OFF or reset.
15 15  
16 +Note that for a given session, the action related to a specific commands overrides the stored value in EEPROM.
17 +
16 16  == Action Commands ==
17 17  
18 -Action commands tell the servo, within that session, to do something (i.e. "take an action"). The type of action commands which can be sent are described below, and they cannot be combined with other commands such as queries or configurations. Only one action command can be sent at a time. Action commands are session-specific, therefore once a servo is power cycled, it will not have any "memory" of previous actions or virtual positions (as described at the bottom of this page). Action commands are sent serially to the servo's Rx pin and must be set in the following format:
20 +Action commands tell the servo, within that session, to do something (i.e. "take an action"). The types of action commands which can be sent are described below, and they cannot be combined with other commands such as queries or configurations. Only one action command can be sent at a time. Action commands are session-specific, therefore once a servo is power cycled, it will not have any "memory" of previous actions or virtual positions (described below on this page). Action commands are sent serially to the servo's Rx pin and must be sent in the following format:
19 19  
20 20  1. Start with a number sign # (U+0023)
21 21  1. Servo ID number as an integer
... ... @@ -26,11 +26,11 @@
26 26  (((
27 27  Ex: #5PD1443<cr>
28 28  
29 -This sends a serial command to all servo's Rx pins which are connected to the bus and only servo(s) with ID #5 will move to a position of 144.3 degrees. Any servo in the bus which does not have ID 5 will take no action when they receive this command.
31 +This sends a serial command to all servo's Rx pins which are connected to the bus and only servo(s) with ID #5 will move to a position in tenths of degrees ("PD") of 144.3 degrees. Any servo on the bus which does not have ID 5 will take no action when receiving this command.
30 30  
31 31  == Action Modifiers ==
32 32  
33 -Only two commands can be used as action modifiers: Timed Move (T) and Speed (S). Action modifiers can only be used with certain action commands. The format to include a modifier is:
35 +Only two commands can be used as action modifiers: Timed Move (T) and Speed (S) described below. Action modifiers can only be used with certain action commands. The format to include a modifier is:
34 34  
35 35  1. Start with a number sign # (U+0023)
36 36  1. Servo ID number as an integer
... ... @@ -42,26 +42,12 @@
42 42  
43 43  Ex: #5P1456T1263<cr>
44 44  
45 -This results in the servo with ID #5 rotating from the current angular position to a pulse position of 1456 in 1263 milliseconds. Position in pulses is described below.
47 +This results in the servo with ID #5 rotating from the current angular position to a pulse position ("P") of 1456 in a time ("T") of 1263 milliseconds.
46 46  )))
47 47  
48 -== Configuration Commands ==
49 -
50 -Configuration commands affect a servo's default values which are written to the servo's EEPROM and are retained in memory after the servo loses power or is reset. Some configuration commands affect the session, while others do not (see each command for details). Not all action commands have a corresponding configuration and vice versa. More information about which configuration commands are retained in RC mode can be found on the [[LSS - RC PWM page>>doc:Lynxmotion Smart Servo (LSS).LSS - RC PWM.WebHome]]. Configuration commands are not cumulative, in that if two configurations are sent, one after the next, only the last configuration is used and stored. The format to send a configuration command is identical to that of an action command:
51 -
52 -1. Start with a number sign # (U+0023)
53 -1. Servo ID number as an integer
54 -1. Configuration command (two to three letters, no spaces, capital or lower case)
55 -1. Configuration value in the correct units with no decimal
56 -1. End with a control / carriage return '<cr>'
57 -
58 -Ex: #5CO-50<cr>
59 -
60 -This assigns an absolute origin offset of -5.0 degrees (with respect to factory origin) to servo with ID #5 and changes the offset for that session to -5.0 degrees. Once the servo is powered off and then powered on, zeroing the servo will cause it to move to -5.0 degrees with respect to the factory origin. Configuration commands can be undone / reset either by sending the servo's default value for that configuration, or by doing a factory reset (clears all configurations) described below.
61 -
62 62  == Query Commands ==
63 63  
64 -Query commands request information from the servo. They are received via the Rx pin of the servo, and the servo's reply is sent via the servo's Tx pin. This is called "full duplex". Query commands are also similar to action and configuration commands and must use the following format:
52 +Query commands request information from the servo. They are received via the Rx pin of the servo, and the servo's reply is sent via the servo's Tx pin. Using separate lines for Tx and Rx is called "full duplex". Query commands are also similar to action and configuration commands and must use the following format:
65 65  
66 66  1. Start with a number sign # (U+0023)
67 67  1. Servo ID number as an integer
... ... @@ -81,41 +81,53 @@
81 81  1. The reported value in the units described, no decimals.
82 82  1. End with a control / carriage return '<cr>'
83 83  
84 -There is currently no option to control how fast a servo replies after it has received a query command, therefore when sending a query command to the bus, the controller should be prepared to immediately "listen" for and parse the reply. Sending multiple queries on a bus in fast succession may result in replies overlapping and giving incorrect or corrupt data. As such, the controller should receive a reply before sending a new command.
72 +There is currently no option to control how fast a servo replies after it has received a query command, therefore when sending a query command to the bus, the controller should be prepared to immediately "listen" for and parse the reply. Sending multiple queries on a bus in fast succession may result in replies overlapping and giving incorrect or corrupt data. As such, the controller should receive a reply before sending a new command. A reply to the query sent above might be:
85 85  
86 86  (((
87 87  Ex: *5QD1443<cr>
88 88  )))
89 89  
90 -This reply to the query above indicates that servo #5 is currently at 144.3 degrees (1443 tenths of degrees).
78 +This indicates that servo #5 is currently at 144.3 degrees (1443 tenths of degrees).
91 91  
92 -**Session vs Configuration Query**
80 +== Configuration Commands ==
93 93  
94 -By default, the query command returns the sessions' valueShould no action commands have been sent to change the session value, it will return the value saved in EEPROM from the last configuration command.
82 +Configuration commands and corresponding values affect a servo's defaults which are written to and read from the servo's EEPROM. These configurations are retained in memory aftethe servo is reset or power is cut / lost. Some configuration commands affect the session, while others do not. In the Command table below, the column "Session" denotes if the configuration command affects the session.. Not all action commands have a corresponding configuration command and vice versa. More information about which configuration commands are retained when in RC mode can be found on the [[LSS - RC PWM page>>doc:Lynxmotion Smart Servo (LSS).LSS - RC PWM.WebHome]]. Configuration commands are not cumulative, in that if two configurations are sent, one after the next, only the last configuration is used and stored. The format to send a configuration command is identical to that of an action command:
95 95  
96 -In order to query the value in EEPROM (configuration), add a '1' to the query command.
84 +1. Start with a number sign # (U+0023)
85 +1. Servo ID number as an integer
86 +1. Configuration command (two to three letters, no spaces, capital or lower case)
87 +1. Configuration value in the correct units with no decimal
88 +1. End with a control / carriage return '<cr>'
97 97  
98 -Ex: #5CSR20<cr> immediately sets the maximum speed for servo #5 to 20rpm (explained below) .
90 +Ex: #5CO-50<cr>
99 99  
100 -After RESET: #5SR4<cr> sets the session's speed to 4rpm.
92 +This configures an absolute origin offset ("CO") with respect to factory origin to servo with ID #5 and changes the offset for that session to -5.0 degrees (50 tenths of degrees). Once the servo is powered off and then powered on, zeroing the servo will cause it to move to -5.0 degrees with respect to the factory origin and report its position as 0 degrees. Configuration commands can be undone / reset either by sending the servo's default value for that configuration, or by doing a factory reset (clears all configurations) described below.
101 101  
102 -#5QSR<cr> would return *5QSR4<cr> which represents the value for that session.
94 +**Session vs Configuration Query**
103 103  
96 +By default, the query command returns the sessions' value. Should no action commands have been sent to change the session value, it will return the value saved in EEPROM which will either be the servo's default, or modified with a configuration command. In order to query the value stored in EEPROM (configuration), add a '1' to the query command:
97 +
98 +Ex: #5CSR20<cr> immediately sets the maximum speed for servo #5 to 20rpm (explained below) and changes the value in memory.
99 +
100 +After RESET, a command of #5SR4<cr> sets the session's speed to 4rpm, but does not change the configuration value in memory. Therefore:
101 +
102 +#5QSR<cr> would return *5QSR4<cr> which represents the value for that session, whereas
103 +
104 104  #5QSR1<cr> would return *5QSR20<cr> which represents the value in EEPROM
105 105  
106 106  == Virtual Angular Position ==
107 107  
108 -A "virtual position" is a feature which allows for rotation beyond 360 degrees, permitting multiple rotations of the output horn, moving the center position and more. In virtual position mode, the "absolute position" would be the angle of the output shaft with respect to 360.0 degrees, and can be obtained by taking the modulus (with respect to 360 degrees) of the value. For example if the virtual position is reported as 15335 (or 1533.5 degrees), taking the modulus would give 93.5 degrees (3600 * 4 + 935 = 15335).
108 +The ability to store a "virtual angular position" is a feature which allows for rotation beyond 360 degrees, permitting multiple rotations of the output horn, moving the center position and more. In virtual position mode, the "absolute position" would be the angle of the output shaft with respect to a 360.0 degree circle, and can be obtained by taking the modulus (with respect to 360 degrees) of the value. For example if the virtual position is reported as 15335 (or 1533.5 degrees), taking the modulus would give 93.5 degrees (3600 * 4 + 935 = 15335) as the absolute position (assuming no origin offset).
109 109  
110 110  [[image:LSS-servo-positions.jpg]]
111 111  
112 -In this example, the gyre direction (explained below, a.k.a. rotation direction) is positive (clockwise), and origin offset has not been modified. Each square represents 30 degrees. The following command is sent:
112 +In this example, the gyre direction (explained below, a.k.a. "rotation direction") is positive (clockwise), and origin offset has not been modified. Each square represents 30 degrees. The following command is sent:
113 113  
114 114  #1D-300<cr> This causes the servo to move to -30.0 degrees (green arrow)
115 115  
116 116  #1D2100<cr> This second position command is sent to the servo, which moves it to 210.0 degrees (orange arrow)
117 117  
118 -#1D-4200<cr> This next command rotates the servo counterclockwise to a position of -420 degrees (red arrow), which means one full rotation of 360 degrees stopping at an absolute position of 60.0 degrees (420.0 - 360.0), with a virtual position of -420.0 degrees.
118 +#1D-4200<cr> This next command rotates the servo counterclockwise to a position of -420 degrees (red arrow), which means one full rotation of 360 degrees plus 60.0 degrees (420.0 - 360.0), with a virtual position of -420.0 degrees.
119 119  
120 120  Although the final physical position would be the same as if the servo were commanded to move to -60.0 degrees, the servo is in fact at -420.0 degrees.
121 121  
... ... @@ -128,65 +128,72 @@
128 128  
129 129  = Command List =
130 130  
131 -|= #|=Description|= Action|= Query|= Config|= RC|= Serial|= Units|=(% style="width: 510px;" %) Notes|=(% style="width: 113px;" %)Default Value
132 -| 1|[[**L**imp>>||anchor="H1.Limp28L29"]]| L| | | | ✓|none|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
133 -| 2|[[**H**alt & **H**old>>||anchor="H2.Halt26Hold28H29"]]| H| | | | ✓|none|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
134 -| 3|[[**T**imed move>>||anchor="H3.Timedmove28T29"]]| T| | | | ✓|milliseconds|(% style="width:510px" %) Modifier only for {P, D, MD}|(% style="text-align:center; width:113px" %)
135 -| 4|[[**S**peed>>||anchor="H4.Speed28S29"]]| S| | | | ✓|microseconds / second|(% style="width:510px" %) Modifier only {P}|(% style="text-align:center; width:113px" %)
136 -| 5|[[**M**ove in **D**egrees (relative)>>||anchor="H5.28Relative29MoveinDegrees28MD29"]]| MD| | | | ✓|tenths of degrees (ex 325 = 32.5 degrees; 91 = 9.1 degrees)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
137 -| 6|[[**O**rigin Offset>>||anchor="H6.OriginOffsetAction28O29"]]| O| QO| CO| ✓| ✓|tenths of degrees (ex 325 = 32.5 degrees; 91 = 9.1 degrees)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)(((
131 +|= #|=Description|= Action|= Query|= Config|=Session|= RC|= Serial|= Units|=(% style="width: 510px;" %) Notes|=(% style="width: 113px;" %)Default Value
132 +| 1|[[**L**imp>>||anchor="H1.Limp28L29"]]| L| | | | | ✓|none|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
133 +| 2|[[**H**alt & **H**old>>||anchor="H2.Halt26Hold28H29"]]| H| | | | | ✓|none|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
134 +| 3|[[**T**imed move>>||anchor="H3.Timedmove28T29"]]| T| | | | | ✓|milliseconds|(% style="width:510px" %) Modifier only for {P, D, MD}|(% style="text-align:center; width:113px" %)
135 +| 4|[[**S**peed>>||anchor="H4.Speed28S29"]]| S| | | | | ✓|microseconds per second|(% style="width:510px" %) Modifier only {P}|(% style="text-align:center; width:113px" %)
136 +| 5|[[**M**ove in **D**egrees (relative)>>||anchor="H5.28Relative29MoveinDegrees28MD29"]]| MD| | | | | ✓|tenths of degrees (ex 325 = 32.5 degrees)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
137 +| 6|[[**O**rigin Offset>>||anchor="H6.OriginOffsetAction28O29"]]| O| QO|CO|✓| ✓| ✓|tenths of degrees (ex 91 = 9.1 degrees)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)(((
138 138  0
139 139  )))
140 -| 7|[[**A**ngular **R**ange>>||anchor="H7.AngularRange28AR29"]]| AR| QAR| CAR| ✓| ✓|tenths of degrees (ex 325 = 32.5 degrees; 91 = 9.1 degrees)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)(((
140 +| 7|[[**A**ngular **R**ange>>||anchor="H7.AngularRange28AR29"]]| AR| QAR| CAR|✓| ✓| ✓|tenths of degrees |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)(((
141 141  1800
142 142  )))
143 -| 8|[[Position in **P**ulse>>||anchor="H8.PositioninPulse28P29"]]| P| QP| | | ✓|microseconds|(% style="width:510px" %)(((
143 +| 8|[[Position in **P**ulse>>||anchor="H8.PositioninPulse28P29"]]| P| QP| | | | ✓|microseconds|(% style="width:510px" %)(((
144 144  Inherited from SSC-32 serial protocol
145 145  )))|(% style="text-align:center; width:113px" %)
146 -| 9|[[Position in **D**egrees>>||anchor="H9.PositioninDegrees28D29"]]| D| QD| | | ✓|tenths of degrees (ex 325 = 32.5 degrees; 91 = 9.1 degrees)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
147 -| 10|[[**W**heel mode in **D**egrees>>||anchor="H10.WheelModeinDegrees28WD29"]]| WD| QWD| | | ✓|tenths of degrees per second (ex 248 = 24.8 degrees per second)|(% style="width:510px" %)A.K.A. "Speed mode" or "Continuous rotation"|(% style="text-align:center; width:113px" %)
148 -| 11|[[**W**heel mode in **R**PM>>||anchor="H11.WheelModeinRPM28WR29"]]| WR| QWR| | | ✓| rpm|(% style="width:510px" %)A.K.A. "Speed mode" or "Continuous rotation"|(% style="text-align:center; width:113px" %)
149 -| 12|[[Max **S**peed in **D**egrees>>||anchor="H12.SpeedinDegrees28SD29"]]| SD| QSD|CSD| ✓| ✓|tenths of degrees per second (ex 248 = 24.8 degrees per second)|(% style="width:510px" %)QSD: Add modifier "2" for instantaneous speed|(% style="text-align:center; width:113px" %)Max per servo
150 -| 13|[[Max **S**peed in **R**PM>>||anchor="H13.SpeedinRPM28SR29"]]| SR| QSR|CSR| ✓| ✓|rpm|(% style="width:510px" %)QSR: Add modifier "2" for instantaneous speed|(% style="text-align:center; width:113px" %)Max per servo
151 -| 16|[[**LED** Color>>||anchor="H16.RGBLED28LED29"]]| LED| QLED| CLED| ✓| ✓|none (integer from 0 to 8)|(% style="width:510px" %)0=Off (black); 1=Red 2=Green; 3=Blue; 4=Yellow; 5=Cyan; 6=Magenta; 7=White;|(% style="text-align:center; width:113px" %)7
152 -| 17|[[**ID** #>>||anchor="H17.IdentificationNumber"]]| | QID| CID| | ✓|none (integer from 0 to 250)|(% style="width:510px" %)Note: ID 254 is a "broadcast" which all servos respond to|(% style="text-align:center; width:113px" %)0
153 -| 18|[[**B**aud rate>>||anchor="H18.BaudRate"]]| B| QB| CB| | ✓|none (integer)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)9600
154 -| 19|[[**G**yre direction (**G**)>>||anchor="H19.GyreRotationDirection"]]| G| QG| CG| ✓| ✓|none |(% style="width:510px" %) Gyre / rotation direction where 1= CW (clockwise) -1 = CCW (counter-clockwise)|(% style="text-align:center; width:113px" %)1 CW
155 -| 20|[[**F**irst Position (**P**ulse)>>||anchor="H20.First2InitialPosition28pulse29"]]| | QFP|CFP | ✓| ✓|none |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)(((
146 +| 9|[[Position in **D**egrees>>||anchor="H9.PositioninDegrees28D29"]]| D| QD| | | | ✓|tenths of degrees |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
147 +| 10|[[**W**heel mode in **D**egrees>>||anchor="H10.WheelModeinDegrees28WD29"]]| WD| QWD| | | | ✓|tenths of degrees per second (ex 248 = 24.8 degrees per second)|(% style="width:510px" %)A.K.A. "Speed mode" or "Continuous rotation"|(% style="text-align:center; width:113px" %)
148 +| 11|[[**W**heel mode in **R**PM>>||anchor="H11.WheelModeinRPM28WR29"]]| WR| QWR| | | | ✓|revolutions per minute (rpm)|(% style="width:510px" %)A.K.A. "Speed mode" or "Continuous rotation"|(% style="text-align:center; width:113px" %)
149 +| 12|[[Max **S**peed in **D**egrees>>||anchor="H12.SpeedinDegrees28SD29"]]| SD| QSD|CSD|✓| ✓| ✓|tenths of degrees per second |(% style="width:510px" %)(((
150 +QSD: Add modifier "2" for instantaneous speed.
151 +
152 +SD overwrites SR / CSD overwrites CSR and vice-versa.
153 +)))|(% style="text-align:center; width:113px" %)Max per servo
154 +| 13|[[Max **S**peed in **R**PM>>||anchor="H13.SpeedinRPM28SR29"]]| SR| QSR|CSR|✓| ✓| ✓|revolutions per minute (rpm)|(% style="width:510px" %)(((
155 +QSR: Add modifier "2" for instantaneous speed
156 +
157 +SR overwrites SD / CSR overwrites CSD and vice-versa.
158 +)))|(% style="text-align:center; width:113px" %)Max per servo
159 +| 14|[[**LED** Color>>||anchor="H16.RGBLED28LED29"]]| LED| QLED| CLED|✓| ✓| ✓|none (integer from 0 to 8)|(% style="width:510px" %)0=Off (black); 1=Red 2=Green; 3=Blue; 4=Yellow; 5=Cyan; 6=Magenta; 7=White;|(% style="text-align:center; width:113px" %)7
160 +| 15|[[**ID** #>>||anchor="H17.IdentificationNumber"]]| | QID| CID| | | ✓|none (integer from 0 to 250)|(% style="width:510px" %)Note: ID 254 is a "broadcast" which all servos respond to. |(% style="text-align:center; width:113px" %)0
161 +| 16|[[**B**aud rate>>||anchor="H18.BaudRate"]]| B| QB| CB| | | ✓|none (integer)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)9600
162 +| 17|[[**G**yre direction (**G**)>>||anchor="H19.GyreRotationDirection"]]| G| QG| CG|✓| ✓| ✓|none |(% style="width:510px" %)Gyre / rotation direction: 1= CW (clockwise) -1 = CCW (counter-clockwise)|(% style="text-align:center; width:113px" %)1
163 +| 18|[[**F**irst Position (**P**ulse)>>||anchor="H20.First2InitialPosition28pulse29"]]| | QFP|CFP | | ✓| ✓|none |(% style="width:510px" %)CFP overwrites CFD and vice-versa|(% style="text-align:center; width:113px" %)(((
156 156  Limp
157 157  )))
158 -| 21|[[**F**irst Position (**D**egrees)>>||anchor="H21.First2InitialPosition28Degrees29"]]| | QFD|CFD| ✓| ✓|none |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)Limp
159 -| 22|[[**T**arget (**D**egree) **P**osition>>||anchor="H22.QueryTargetPositioninDegrees28QDT29"]]| | QDT| | | ✓|tenths of degrees (ex 325 = 32.5 degrees; 91 = 9.1 degrees)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
160 -| 23|[[**M**odel **S**tring>>||anchor="H23.QueryModelString28QMS29"]]| | QMS| | | |none (string)|(% style="width:510px" %) Recommended to determine the model|(% style="text-align:center; width:113px" %)
161 -| 23b|[[**M**odel>>||anchor="H23b.QueryModel28QM29"]]| | QM| | | |none (integer)|(% style="width:510px" %) Returns a raw value representing the three model inputs (36 bit)|(% style="text-align:center; width:113px" %)
162 -| 24|[[Serial **N**umber>>||anchor="H24.QuerySerialNumber28QN29"]]| | QN| | | |none (integer)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
163 -| 25|[[**F**irmware version>>||anchor="H25.QueryFirmware28QF29"]]| | QF| | | |none (integer)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
164 -| 26|[[**Q**uery (general status)>>||anchor="H26.QueryStatus28Q29"]]| | Q| | | ✓|none (integer from 1 to 8)|(% style="width:510px" %) See command description for details|(% style="text-align:center; width:113px" %)
165 -| 27|[[**V**oltage>>||anchor="H27.QueryVoltage28QV29"]]| | QV| | | ✓|millivolts (ex 5936 = 5936mV = 5.936V)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
166 -| 28|[[**T**emperature>>||anchor="H28.QueryTemperature28QT29"]]| | QT| | | ✓|tenths of degrees Celsius|(% style="width:510px" %)Max temp before error: 85°C (servo goes limp)|(% style="text-align:center; width:113px" %)
167 -| 29|[[**C**urrent>>||anchor="H29.QueryCurrent28QC29"]]| | QC| | | ✓|milliamps (ex 200 = 0.2A)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
168 -| 30|[[**RC** Mode>>||anchor="H30.RCMode28CRC29"]]| | |CRC| |✓|none|(% style="width:510px" %)(((
169 -CRC: Add modifier "1" for RC-position mode.
170 -CRC: Add modifier "2" for RC-wheel mode.
171 -Any other value for the modifier results in staying in smart mode.
172 -Puts the servo into RC mode. To revert to smart mode, use the button menu.
166 +| 19|[[**F**irst Position (**D**eg)>>||anchor="H21.First2InitialPosition28Degrees29"]]| | QFD|CFD| | ✓| ✓|none |(% style="width:510px" %)CFD overwrites CFP and vice-versa|(% style="text-align:center; width:113px" %)Limp
167 +| 20|[[**T**arget (**D**eg) **P**osition>>||anchor="H22.QueryTargetPositioninDegrees28QDT29"]]| | QDT| | | | ✓|tenths of degrees (ex 325 = 32.5 degrees)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
168 +| 21|[[**M**odel **S**tring>>||anchor="H23.QueryModelString28QMS29"]]| | QMS| | | | |none (string)|(% style="width:510px" %) Returns the type of servo (ST, HS, HT)|(% style="text-align:center; width:113px" %)
169 +| 22|[[Serial **N**umber>>||anchor="H24.QuerySerialNumber28QN29"]]| | QN| | | | |none (integer)|(% style="width:510px" %) Returns the unique serial number for that servo|(% style="text-align:center; width:113px" %)
170 +| 23|[[**F**irmware version>>||anchor="H25.QueryFirmware28QF29"]]| | QF| | | | |none (integer)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
171 +| 24|[[**Q**uery (gen. status)>>||anchor="H26.QueryStatus28Q29"]]| | Q| | | | ✓|none (integer from 1 to 8)|(% style="width:510px" %) See command description for details|(% style="text-align:center; width:113px" %)
172 +| 25|[[**V**oltage>>||anchor="H27.QueryVoltage28QV29"]]| | QV| | | | ✓|millivolts (ex 5936 = 5936mV = 5.936V)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
173 +| 26|[[**T**emperature>>||anchor="H28.QueryTemperature28QT29"]]| | QT| | | | ✓|tenths of degrees Celsius|(% style="width:510px" %)Max temp before error: 85°C (servo goes limp)|(% style="text-align:center; width:113px" %)
174 +| 27|[[**C**urrent>>||anchor="H29.QueryCurrent28QC29"]]| | QC| | | | ✓|milliamps (ex 200 = 0.2A)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
175 +| 28|[[**RC** Mode>>||anchor="H30.RCMode28CRC29"]] - Position| | |CRC1|✓| | ✓|none|(% style="width:510px" %)(((
176 +Change to RC position mode. To revert to smart mode, use the button menu.
173 173  )))|(% style="text-align:center; width:113px" %)Serial
174 -|31|[[**RESET**>>||anchor="H31.RESET"]]| | | | | ✓|none|(% style="width:510px" %)Soft reset. See command for details.|(% style="text-align:center; width:113px" %)
175 -|32|[[**DEFAULT**>>||anchor="H32.DEFAULTA026CONFIRM"]]| | | | |✓|none|(% style="width:510px" %)Revert to firmware default values. See command for details|(% style="text-align:center; width:113px" %)
176 -|33|[[**UPDATE**>>||anchor="H33.UPDATEA026CONFIRM"]]| | | | |✓|none|(% style="width:510px" %)Update firmware. See command for details.|(% style="text-align:center; width:113px" %)
178 +| 29|[[**RC** Mode>>||anchor="H30.RCMode28CRC29"]] - Wheel| | |CRC2|✓| | ✓| |(% style="width:510px" %)Change to RC wheel mode. To revert to smart mode, use the button menu.|(% style="text-align:center; width:113px" %)Serial
179 +| 30|[[**RESET**>>||anchor="H31.RESET"]]| | | | | | ✓|none|(% style="width:510px" %)Soft reset. See command for details.|(% style="text-align:center; width:113px" %)
180 +| 31|[[**DEFAULT**>>||anchor="H32.DEFAULTA026CONFIRM"]]| | | | | |✓|none|(% style="width:510px" %)Revert to firmware default values. See command for details|(% style="text-align:center; width:113px" %)
181 +| 32|[[**UPDATE**>>||anchor="H33.UPDATEA026CONFIRM"]]| | | | | |✓|none|(% style="width:510px" %)Update firmware. See command for details.|(% style="text-align:center; width:113px" %)
177 177  
178 -(% class="wikigeneratedid" %)
179 179  == Advanced ==
180 180  
181 -|= #|=Description|= Action|= Query|= Config|= RC|= Serial|= Units|=(% style="width: 510px;" %) Notes|=(% style="width: 113px;" %)Default Value
182 -| 1|[[**A**ngular **S**tiffness>>||anchor="H14.AngularStiffness28AS29"]]| AS| QAS|CAS| ✓| ✓|none|(% style="width:510px" %)-4 to +4, but suggested values are between 0 to +4|(% style="text-align:center; width:113px" %)0
183 -| 2|[[**A**ngular **H**olding Stiffness>>||anchor="H15.AngularHoldStiffness28AH29"]]|AH|QAH|CAH| | ✓|none|(% style="width:510px" %)-10 to +10, with default as 0. |(% style="text-align:center; width:113px" %)1
184 -| 3|[[**A**ngular **A**cceleration>>||anchor="H15b:AngularAcceleration28AA29"]]|AA|QAA|CAA| | ✓|degrees per second squared|(% style="width:510px" %)Increments of 10 degrees per second squared|(% style="text-align:center; width:113px" %)
185 -| 4|[[**A**ngular **D**eceleration>>||anchor="H15c:AngularDeceleration28AD29"]]|AD|QAD|CAD| | ✓|degrees per second squared|(% style="width:510px" %)Increments of 10 degrees per second squared|(% style="text-align:center; width:113px" %)
186 -| 5|[[**E**nable **M**otion control>>||anchor="H15d:MotionControl28MC29"]]|EM|QEM| | | ✓|none|(% style="width:510px" %)EM0 to disable motion control, EM1 to enable. Session specific / does not survive power cycles|(% style="text-align:center; width:113px" %)
187 -| 6|[[**C**onfigure **L**ED **B**linking>>||anchor="H16b.ConfigureLEDBlinking28CLB29"]]| | | CLB| ✓| |none (integer from 0 to 63)|(% style="width:510px" %)0=No blinking, ; 63=Always blink; Blink while: 1=Limp; 2=Holding 4=Accel; 8=Decel; 16=Free 32=Travel;|(% style="text-align:center; width:113px" %)
188 -| | | | | | | | |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
185 +|= #|=Description|= Action|= Query|= Config|=Session|= RC|= Serial|= Units|=(% style="width: 510px;" %) Notes|=(% style="width: 113px;" %)Default Value
186 +| A1|[[**A**ngular **S**tiffness>>||anchor="H14.AngularStiffness28AS29"]]| AS|QAS|CAS|✓| ✓| ✓|none (integer -4 to +4)|(% style="width:510px" %)Suggested values are between 0 to +4|(% style="text-align:center; width:113px" %)0
187 +| A2|[[**A**ngular **H**olding Stiffness>>||anchor="H15.AngularHoldStiffness28AH29"]]|AH|QAH|CAH|✓| | ✓|none (integer -10 to +10)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)1
188 +| A3|[[**A**ngular **A**cceleration>>||anchor="H15b:AngularAcceleration28AA29"]]|AA|QAA|CAA|✓| | ✓|degrees per second squared|(% style="width:510px" %)Increments of 10 degrees per second squared|(% style="text-align:center; width:113px" %)
189 +| A4|[[**A**ngular **D**eceleration>>||anchor="H15c:AngularDeceleration28AD29"]]|AD|QAD|CAD|✓| | ✓|degrees per second squared|(% style="width:510px" %)Increments of 10 degrees per second squared|(% style="text-align:center; width:113px" %)
190 +| A5|[[**E**nable **M**otion Control>>||anchor="H15d:MotionControl28MC29"]]|EM|QEM| | | | ✓|none|(% style="width:510px" %)EM0 to disable motion control, EM1 to enable|(% style="text-align:center; width:113px" %)
191 +| A6|[[**C**onfigure **L**ED **B**linking>>||anchor="H16b.ConfigureLEDBlinking28CLB29"]]| | | CLB| | ✓| |none (integer from 0 to 63)|(% style="width:510px" %)(((
192 +0=No blinking, 63=Always blink;
189 189  
194 +Blink while: 1=Limp; 2=Holding 4=Accel; 8=Decel; 16=Free 32=Travel;
195 +)))|(% style="text-align:center; width:113px" %)
196 +
190 190  == Details ==
191 191  
192 192  ====== __1. Limp (**L**)__ ======
... ... @@ -199,13 +199,13 @@
199 199  
200 200  Example: #5H<cr>
201 201  
202 -This action overrides whatever the servo might be doing at the time the command is received (accelerating, moving continuously etc.) and causes it to stop immediately and hold that position.
209 +This action overrides whatever the servo might be doing at the time the command is received (accelerating, moving continuously etc.) and causes it to stop immediately and hold that angular position.
203 203  
204 204  ====== __3. Timed move (**T**)__ ======
205 205  
206 206  Example: #5P1500T2500<cr>
207 207  
208 -Timed move can be used only as a modifier for a position (P) action. The units are in milliseconds, so a timed move of 2500 milliseconds would cause the servo to rotate from its current position to the desired position in 2.5 seconds. This command is in place to ensure backwards compatibility with the SSC-32 / 32U protocol.
215 +Timed move can be used only as a modifier for a position (P, D, MD) actions. The units are in milliseconds, so a timed move of 2500 milliseconds would cause the servo to rotate from its current position to the desired position in 2.5 seconds. The onboard controller will attempt to ensure that the move is performed entirely at the desired velocity, though differences in torque may cause it to not be exact. This command is in place to ensure backwards compatibility with the SSC-32 / 32U protocol.
209 209  
210 210  Note: If the calculated speed at which a servo must rotate for a timed move is greater than its maximum speed (which depends on voltage and load), then it will move at its maximum speed, and the time of the move may be longer than requested.
211 211  
... ... @@ -225,11 +225,11 @@
225 225  
226 226  Example: #5O2400<cr>
227 227  
228 -This command allows you to temporarily change the origin of the servo in relation to the factory zero position. The setting will be lost upon servo reset / power cycle. Origin offset commands are not cumulative and always relate to factory zero. Note that for a given session, the O command overrides the CO command. In the first image, the origin at factory offset '0' (centered).
235 +This command allows you to temporarily change the origin of the servo in relation to the factory zero position for that session. As with all action commands, the setting will be lost upon servo reset / power cycle. Origin offset commands are not cumulative and always relate to factory zero. In the first image, the origin at factory offset '0' (centered).
229 229  
230 230  [[image:LSS-servo-default.jpg]]
231 231  
232 -In the second image, the origina, as well as the angular range (explained below) have been shifted by 240.0 degrees:
239 +In the second image, the origin, and the corresponding angular range (explained below) have been shifted by +240.0 degrees:
233 233  
234 234  [[image:LSS-servo-origin.jpg]]
235 235  
... ... @@ -237,33 +237,33 @@
237 237  
238 238  Example: #5QO<cr> Returns: *5QO-13
239 239  
240 -This allows you to query the angle (in tenths of degrees) of the origin in relation to the factory zero position.
247 +This allows you to query the angle (in tenths of degrees) of the origin in relation to the factory zero position. In this example, the new origin is at -1.3 degrees from the factory zero.
241 241  
242 242  Configure Origin Offset (**CO**)
243 243  
244 244  Example: #5CO-24<cr>
245 245  
246 -This command allows you to change the origin of the servo in relation to the factory zero position in EEPROM. The setting will be saved upon servo reset / power cycle. Origin offset configuration commands are not cumulative and always relate to factory zero. The new origin is also used in RC mode.
253 +This command allows you to change the origin of the servo in relation to the factory zero position in EEPROM. The setting will be saved upon servo reset / power cycle. Origin offset configuration commands are not cumulative and always relate to factory zero. The new origin is also used in RC mode. In the example, the new origin will be at -2.4 degrees from the factory zero.
247 247  
248 248  ====== __7. Angular Range (**AR**)__ ======
249 249  
250 250  Example: #5AR1800<cr>
251 251  
252 -This command allows you to temporarily change the total angular range of the servo in tenths of degrees. This applies to the Position in Pulse (P) command and RC mode. The default for (P) and RC mode is 1800 (180.0 degrees total, or ±90.0 degrees). In the first image,
259 +This command allows you to temporarily change the total angular range of the servo in tenths of degrees. This applies to the Position in Pulse (P) command and RC mode. The default for (P) and RC mode is 1800 (180.0 degrees total, or ±90.0 degrees). The image below shows a standard -180.0 to +180.0 range, with no offset:
253 253  
254 254  [[image:LSS-servo-default.jpg]]
255 255  
256 -Here, the angular range has been restricted to 180.0 degrees, or -90.0 to +90.0. The center has remained unchanged.
263 +Below, the angular range is restricted to 180.0 degrees, or -90.0 to +90.0. The center has remained unchanged.
257 257  
258 258  [[image:LSS-servo-ar.jpg]]
259 259  
260 -The angular range action command (ex. #5AR1800<cr>) and origin offset action command (ex. #5O-1200<cr>) an be used to move both the center and limit the angular range:
267 +Finally, the angular range action command (ex. #5AR1800<cr>) and origin offset action command (ex. #5O-1200<cr>) are used to move both the center and limit the angular range:
261 261  
262 262  [[image:LSS-servo-ar-o-1.jpg]]
263 263  
264 264  Query Angular Range (**QAR**)
265 265  
266 -Example: #5QAR<cr> might return *5AR2756
273 +Example: #5QAR<cr> might return *5AR1800, indicating the total angular range is 180.0 degrees.
267 267  
268 268  Configure Angular Range (**CAR**)
269 269  
... ... @@ -320,22 +320,22 @@
320 320  
321 321  The servo replies with the angular speed in rpm. A negative sign would indicate the opposite direction (for factory default a negative value would be counter clockwise).
322 322  
323 -====== __12. Speed in Degrees (**SD**)__ ======
330 +====== __12. Max Speed in Degrees (**SD**)__ ======
324 324  
325 325  Ex: #5SD1800<cr>
326 326  
327 -This command sets the servo's maximum speed for action commands in tenths of degrees per second for that session. In the example above, the servo's maximum speed for that session would be set to 180.0 degrees per second. Therefore maximum speed for actions can be set "on the fly". The servo's maximum speed cannot be set higher than its physical limit at a given voltage. SD overrides CSD (described below) for that session. Upon reset or power cycle, the servo reverts to the value associated with CSD as described below. Note that SD and SR (described below) are effectively the same, but allow the user to specify the speed in either unit. The last command (either SR or SD) is what the servo uses for that session.
334 +This command sets the servo's maximum speed for motion commands in tenths of degrees per second for that session. In the example above, the servo's maximum speed for that session would be set to 180.0 degrees per second. The servo's maximum speed cannot be set higher than its physical limit at a given voltage. The SD action command overrides CSD (described below) for that session. Upon reset or power cycle, the servo reverts to the value associated with CSD as described below. Note that SD and SR (described below) are effectively the same, but allow the user to specify the speed in either unit. The last command (either SR or SD) received is what the servo uses for that session.
328 328  
329 329  Query Speed in Degrees (**QSD**)
330 330  
331 331  Ex: #5QSD<cr> might return *5QSD1800<cr>
332 332  
333 -By default QSD will return the current session value, which is set to the value of CSD as reset/power cycle and changed whenever a SD/SR command is processed.
340 +By default QSD will return the current session value, which is set to the value of CSD as reset/power cycle and changed whenever an SD/SR command is processed.
334 334  If #5QSD1<cr> is sent, the configured maximum speed (CSD value) will be returned instead. You can also query the current speed using "2" and the current target travel speed using "3". See the table below for an example:
335 335  
336 336  |**Command sent**|**Returned value (1/10 °)**
337 337  |ex: #5QSD<cr>|Session value for maximum speed (set by latest SD/SR command)
338 -|ex: #5QSD1<cr>|Configured maximum speed  (set by CSD/CSR)
345 +|ex: #5QSD1<cr>|Configured maximum speed in EEPROM (set by CSD/CSR)
339 339  |ex: #5QSD2<cr>|Instantaneous speed (same as QWD)
340 340  |ex: #5QSD3<cr>|Target travel speed
341 341  
... ... @@ -345,22 +345,22 @@
345 345  
346 346  Using the CSD command sets the servo's maximum speed which is saved in EEPROM. In the example above, the servo's maximum speed will be set to 180.0 degrees per second. When the servo is powered on (or after a reset), the CSD value is used. Note that CSD and CSR (described below) are effectively the same, but allow the user to specify the speed in either unit. The last command (either CSR or CSD) is what the servo uses for that session.
347 347  
348 -====== __13. Speed in RPM (**SR**)__ ======
355 +====== __13. Max Speed in RPM (**SR**)__ ======
349 349  
350 350  Ex: #5SD45<cr>
351 351  
352 -This command sets the servo's maximum speed for action commands in rpm for that session. In the example above, the servo's maximum speed for that session would be set to 45rpm. Therefore maximum speed for actions can be set "on the fly". The servo's maximum speed cannot be set higher than its physical limit at a given voltage. SD overrides CSD (described below) for that session. Upon reset or power cycle, the servo reverts to the value associated with CSD as described below. Note that SD (described above) and SR are effectively the same, but allow the user to specify the speed in either unit. The last command (either SR or SD) is what the servo uses for that session.
359 +This command sets the servo's maximum speed for motion commands in rpm for that session. In the example above, the servo's maximum speed for that session would be set to 45rpm. The servo's maximum speed cannot be set higher than its physical limit at a given voltage. SD overrides CSD (described below) for that session. Upon reset or power cycle, the servo reverts to the value associated with CSD as described below. Note that SD (described above) and SR are effectively the same, but allow the user to specify the speed in either unit. The last command (either SR or SD) received is what the servo uses for that session.
353 353  
354 354  Query Speed in Degrees (**QSR**)
355 355  
356 356  Ex: #5QSR<cr> might return *5QSR45<cr>
357 357  
358 -By default QSR will return the current session value, which is set to the value of CSR as reset/power cycle and changed whenever a SD/SR command is processed.
365 +By default QSR will return the current session value, which is set to the value of CSR as reset/power cycle and changed whenever an SD/SR command is processed.
359 359  If #5QSR1<cr> is sent, the configured maximum speed (CSR value) will be returned instead. You can also query the current speed using "2" and the current target travel speed using "3". See the table below for an example:
360 360  
361 361  |**Command sent**|**Returned value (1/10 °)**
362 362  |ex: #5QSR<cr>|Session value for maximum speed (set by latest SD/SR command)
363 -|ex: #5QSR1<cr>|Configured maximum speed  (set by CSD/CSR)
370 +|ex: #5QSR1<cr>|Configured maximum speed in EEPROM (set by CSD/CSR)
364 364  |ex: #5QSR2<cr>|Instantaneous speed (same as QWR)
365 365  |ex: #5QSR3<cr>|Target travel speed
366 366  
... ... @@ -368,68 +368,10 @@
368 368  
369 369  Ex: #5CSR45<cr>
370 370  
371 -Using the CSR command sets the servo's maximum speed which is saved in EEPROM. In the example above, the servo's maximum speed will be set to 45rpm. When the servo is powered on (or after a reset), the CSR value is used. Note that CSD and CSR are effectively the same, but allow the user to specify the speed in either unit. The last command (either CSR or CSD) is what the servo uses for that session.
378 +Using the CSR command sets the servo's maximum speed which is saved in EEPROM. In the example above, the servo's maximum speed will be set to 45rpm. When the servo is powered on (or after a reset), the CSR value is used. Note that CSD and CSR are effectively the same, but allow the user to specify the speed in either unit. The last command (either CSR or CSD) received is what the servo uses for that session.
372 372  
373 -====== __14. Angular Stiffness (**AS**)__ ======
380 +====== ======
374 374  
375 -The servo's rigidity / angular stiffness can be thought of as (though not identical to) a damped spring in which the value affects the stiffness and embodies how much, and how quickly the servo tried keep the requested position against changes.
376 -
377 -A positive value of "angular stiffness":
378 -
379 -* The more torque will be applied to try to keep the desired position against external input / changes
380 -* The faster the motor will reach its intended travel speed and the motor will decelerate faster and nearer to its target position
381 -
382 -A negative value on the other hand:
383 -
384 -* Causes a slower acceleration to the travel speed, and a slower deceleration
385 -* Allows the target position to deviate more from its position before additional torque is applied to bring it back
386 -
387 -The default value is zero and the effect becomes extreme by -4, +4. There are no units, only integers between -4 to 4. Greater values produce increasingly erratic behavior.
388 -
389 -Ex: #5AS-2<cr>
390 -
391 -This reduces the angular stiffness to -2 for that session, allowing the servo to deviate more around the desired position. This can be beneficial in many situations such as impacts (legged robots) where more of a "spring" effect is desired. Upon reset, the servo will use the value stored in memory, based on the last configuration command.
392 -
393 -Ex: #5QAS<cr>
394 -
395 -Queries the value being used.
396 -
397 -Ex: #5CAS<cr>
398 -
399 -Writes the desired angular stiffness value to memory.
400 -
401 -====== __15. Angular Hold Stiffness (**AH**)__ ======
402 -
403 -The angular holding stiffness determines the servo's ability to hold a desired position under load. Values can be from -10 to 10, with the default being 0. Note that negative values mean the final position can be easily deflected.
404 -
405 -Ex: #5AH3<cr>
406 -
407 -This sets the holding stiffness for servo #5 to 3 for that session.
408 -
409 -Query Angular Hold Stiffness (**QAH**)
410 -
411 -Ex: #5QAH<cr> might return *5QAH3<cr>
412 -
413 -This returns the servo's angular holding stiffness value.
414 -
415 -Configure Angular Hold Stiffness (**CAH**)
416 -
417 -Ex: #5CAH2<cr>
418 -
419 -This writes the angular holding stiffness of servo #5 to 2 to EEPROM
420 -
421 -====== __15b: Angular Acceleration (**AA**)__ ======
422 -
423 -{More details to come}
424 -
425 -====== __15c: Angular Deceleration (**AD**)__ ======
426 -
427 -{More details to come}
428 -
429 -====== __15d: Motion Control (**EM**)__ ======
430 -
431 -{More details to come}
432 -
433 433  ====== __16. RGB LED (**LED**)__ ======
434 434  
435 435  Ex: #5LED3<cr>
... ... @@ -448,20 +448,6 @@
448 448  
449 449  Configuring the LED color via the CLED command sets the startup color of the servo after a reset or power cycle. Note that it also changes the session's LED color immediately as well.
450 450  
451 -====== __16b. Configure LED Blinking (**CLB**)__ ======
452 -
453 -This command allows you to control when the RGB LED will blink the user set color (see [[16. RGB LED>>||anchor="H16.RGBLED28LED29"]] for details).
454 -You can turn on or off blinking for various LSS status. Here is the list and their associated value: 0=No blinking, ; 63=Always blink; Blink while: 1=Limp; 2=Holding 4=Accel; 8=Decel; 16=Free 32=Travel;
455 -
456 -To set blinking, use CLB with the value of your choosing. To activate blinking in multiple status, simply add together the values of the corresponding status. See examples below:
457 -
458 -Ex: #5CLB0<cr> to turn off all blinking (LED always solid)
459 -Ex: #5CLB1<cr> only blink when limp
460 -Ex: #5CLB2<cr> only blink when holding
461 -Ex: #5CLB12<cr> only blink when accel or decel
462 -Ex: #5CLB48<cr> only blink when free or travel
463 -Ex: #5CLB63<cr> blink in all status
464 -
465 465  ====== __17. Identification Number__ ======
466 466  
467 467  A servo's identification number cannot be set "on the fly" and must be configured via the CID command described below. The factory default ID number for all servos is 0. Since smart servos are intended to be daisy chained, in order to respond differently from one another, the user must set different identification numbers. Servos with the same ID and baud rate will all receive and react to the same commands.
... ... @@ -653,3 +653,77 @@
653 653  Since it it not common to have to update firmware, a confirmation command is needed after an UPDATE command is sent. Should any command other than CONFIRM be received by the servo after the firmware command has been received, it will leave the firmware action.
654 654  
655 655  Note that after the CONFIRM command is sent, the servo will automatically perform a RESET.
591 +
592 +====== __A1. Angular Stiffness (**AS**)__ ======
593 +
594 +The servo's rigidity / angular stiffness can be thought of as (though not identical to) a damped spring in which the value affects the stiffness and embodies how much, and how quickly the servo tried keep the requested position against changes.
595 +
596 +A positive value of "angular stiffness":
597 +
598 +* The more torque will be applied to try to keep the desired position against external input / changes
599 +* The faster the motor will reach its intended travel speed and the motor will decelerate faster and nearer to its target position
600 +
601 +A negative value on the other hand:
602 +
603 +* Causes a slower acceleration to the travel speed, and a slower deceleration
604 +* Allows the target position to deviate more from its position before additional torque is applied to bring it back
605 +
606 +The default value is zero and the effect becomes extreme by -4, +4. There are no units, only integers between -4 to 4. Greater values produce increasingly erratic behavior.
607 +
608 +Ex: #5AS-2<cr>
609 +
610 +This reduces the angular stiffness to -2 for that session, allowing the servo to deviate more around the desired position. This can be beneficial in many situations such as impacts (legged robots) where more of a "spring" effect is desired. Upon reset, the servo will use the value stored in memory, based on the last configuration command.
611 +
612 +Ex: #5QAS<cr>
613 +
614 +Queries the value being used.
615 +
616 +Ex: #5CAS<cr>
617 +
618 +Writes the desired angular stiffness value to memory.
619 +
620 +====== __A2. Angular Holding Stiffness (**AH**)__ ======
621 +
622 +The angular holding stiffness determines the servo's ability to hold a desired position under load. Values can be from -10 to 10, with the default being 0. Note that negative values mean the final position can be easily deflected.
623 +
624 +Ex: #5AH3<cr>
625 +
626 +This sets the holding stiffness for servo #5 to 3 for that session.
627 +
628 +Query Angular Hold Stiffness (**QAH**)
629 +
630 +Ex: #5QAH<cr> might return *5QAH3<cr>
631 +
632 +This returns the servo's angular holding stiffness value.
633 +
634 +Configure Angular Hold Stiffness (**CAH**)
635 +
636 +Ex: #5CAH2<cr>
637 +
638 +This writes the angular holding stiffness of servo #5 to 2 to EEPROM
639 +
640 +====== __A3: Angular Acceleration (**AA**)__ ======
641 +
642 +{More details to come}
643 +
644 +====== __A4: Angular Deceleration (**AD**)__ ======
645 +
646 +{More details to come}
647 +
648 +====== __A5: Motion Control (**EM**)__ ======
649 +
650 +{More details to come}
651 +
652 +====== __A6. Configure LED Blinking (**CLB**)__ ======
653 +
654 +This command allows you to control when the RGB LED will blink the user set color (see [[16. RGB LED>>||anchor="H16.RGBLED28LED29"]] for details).
655 +You can turn on or off blinking for various LSS status. Here is the list and their associated value: 0=No blinking, ; 63=Always blink; Blink while: 1=Limp; 2=Holding 4=Accel; 8=Decel; 16=Free 32=Travel;
656 +
657 +To set blinking, use CLB with the value of your choosing. To activate blinking in multiple status, simply add together the values of the corresponding status. See examples below:
658 +
659 +Ex: #5CLB0<cr> to turn off all blinking (LED always solid)
660 +Ex: #5CLB1<cr> only blink when limp
661 +Ex: #5CLB2<cr> only blink when holding
662 +Ex: #5CLB12<cr> only blink when accel or decel
663 +Ex: #5CLB48<cr> only blink when free or travel
664 +Ex: #5CLB63<cr> blink in all status
Copyright RobotShop 2018