Last modified by Eric Nantel on 2025/06/06 07:47

From version < 168.1 >
edited by RB1
on 2020/04/24 12:59
To version < 109.1 >
edited by Coleman Benson
on 2019/02/22 12:02
< >
Change comment: There is no comment for this version

Summary

Details

Page properties
Parent
... ... @@ -1,1 +1,1 @@
1 -lynxmotion-smart-servo.WebHome
1 +Lynxmotion Smart Servo (LSS).WebHome
Author
... ... @@ -1,1 +1,1 @@
1 -xwiki:XWiki.RB1
1 +xwiki:XWiki.CBenson
Content
... ... @@ -3,19 +3,17 @@
3 3  
4 4  {{toc depth="3"/}}
5 5  
6 -= Serial Protocol =
6 += Serial Protocol Concept =
7 7  
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 staying compact and robust yet highly versatile. The protocol was based on Lynxmotion's SSC-32 & SSC-32U RC servo controllers 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 order to be able to control each servo individually with commands, the first step should be 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.
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 #1: For a given session, the action related to a specific commands overrides the stored value in EEPROM.
17 -Note #2: During the power-on / reset process the LSS cannot accept commands for a small amount of time (1.25 s).
18 -You can ensure the LSS is ready by using a query command to check for response (ex: #[id]Q\r or #[id]QID\r). If the LSS is ready for commands (initialized) it will respond to the query. A timeout between 50-100 ms is recommended.
16 +Note that for a given session, the action related to a specific commands overrides the stored value in EEPROM.
19 19  
20 20  == Action Commands ==
21 21  
... ... @@ -81,7 +81,7 @@
81 81  
82 82  == Configuration Commands ==
83 83  
84 -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 after the 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-radio-control-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:
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 after the 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:
85 85  
86 86  1. Start with a number sign # (U+0023)
87 87  1. Servo ID number as an integer
... ... @@ -132,73 +132,71 @@
132 132  
133 133  == Regular ==
134 134  
135 -|= #|=Description|=Mod|= Action|= Query|= Config|=Session|= RC|= Serial|= Units|=(% style="width: 510px;" %) Notes|=(% style="width: 113px;" %)Default Value
136 -| 1|[[**L**imp>>||anchor="H1.Limp28L29"]]| | L| | | | | ✓|none|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
137 -| 2|[[**H**alt & **H**old>>||anchor="H2.Halt26Hold28H29"]]| | H| | | | | ✓|none|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
138 -| 3|[[**T**imed move>>||anchor="H3.Timedmove28T29modifier"]]|T| | | | | | ✓|milliseconds|(% style="width:510px" %)Modifier only for {P, D, MD}. Time is estimated and can change based on load|(% style="text-align:center; width:113px" %)
139 -| 4|[[**S**peed>>||anchor="H4.Speed28S2CSD29modifier"]]|S/SD| |QS| | | | ✓|microseconds per second / degrees per second|(% style="width:510px" %)S modifier only for {P}. SD modifier only for {D, MD}.|(% style="text-align:center; width:113px" %)
140 -| 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" %)
141 -| 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" %)(((
133 +|= #|=Description|= Action|= Query|= Config|=Session|= RC|= Serial|= Units|=(% style="width: 510px;" %) Notes|=(% style="width: 113px;" %)Default Value
134 +| 1|[[**L**imp>>||anchor="H1.Limp28L29"]]| L| | | | | ✓|none|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
135 +| 2|[[**H**alt & **H**old>>||anchor="H2.Halt26Hold28H29"]]| H| | | | | ✓|none|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
136 +| 3|[[**T**imed move>>||anchor="H3.Timedmove28T29modifier"]]| T| | | | | ✓|milliseconds|(% style="width:510px" %) Modifier only for {P, D, MD}|(% style="text-align:center; width:113px" %)
137 +| 4|[[**S**peed>>||anchor="H4.Speed28S29modifier"]]| S| | | | | ✓|microseconds per second|(% style="width:510px" %) Modifier only {P}|(% style="text-align:center; width:113px" %)
138 +| 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" %)
139 +| 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" %)(((
142 142  0
143 143  )))
144 -| 7|[[**A**ngular **R**ange>>||anchor="H7.AngularRange28AR29"]]| | AR| QAR| CAR|✓| ✓| ✓|tenths of degrees |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)(((
142 +| 7|[[**A**ngular **R**ange>>||anchor="H7.AngularRange28AR29"]]| AR| QAR| CAR|✓| ✓| ✓|tenths of degrees |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)(((
145 145  1800
146 146  )))
147 -| 8|[[Position in **P**ulse>>||anchor="H8.PositioninPulse28P29"]]| | P| QP| | | | ✓|microseconds|(% style="width:510px" %)(((
145 +| 8|[[Position in **P**ulse>>||anchor="H8.PositioninPulse28P29"]]| P| QP| | | | ✓|microseconds|(% style="width:510px" %)(((
148 148  Inherited from SSC-32 serial protocol
149 149  )))|(% style="text-align:center; width:113px" %)
150 -| 9|[[Position in **D**egrees>>||anchor="H9.PositioninDegrees28D29"]]| | D| QD / QDT| | | | ✓|tenths of degrees |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
151 -| 10|[[**W**heel mode in **D**egrees>>||anchor="H10.WheelModeinDegrees28WD29"]]| | WD| QWD| | | | ✓|degrees per second|(% style="width:510px" %)A.K.A. "Speed mode" or "Continuous rotation"|(% style="text-align:center; width:113px" %)
152 -| 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" %)
153 -| 12|[[Max **S**peed in **D**egrees>>||anchor="H12.MaxSpeedinDegrees28SD29"]]| | SD| QSD|CSD|✓| ✓| ✓|degrees per second (°/s)|(% style="width:510px" %)(((
148 +| 9|[[Position in **D**egrees>>||anchor="H9.PositioninDegrees28D29"]]| D| QD / QDT| | | | ✓|tenths of degrees |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
149 +| 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" %)
150 +| 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" %)
151 +| 12|[[Max **S**peed in **D**egrees>>||anchor="H12.MaxSpeedinDegrees28SD29"]]| SD| QSD|CSD|✓| ✓| ✓|degrees per second (°/s)|(% style="width:510px" %)(((
154 154  QSD: Add modifier "2" for instantaneous speed.
155 155  
156 156  SD overwrites SR / CSD overwrites CSR and vice-versa.
157 157  )))|(% style="text-align:center; width:113px" %)Max per servo
158 -| 13|[[Max **S**peed in **R**PM>>||anchor="H13.MaxSpeedinRPM28SR29"]]| | SR| QSR|CSR|✓| ✓| ✓|revolutions per minute (rpm)|(% style="width:510px" %)(((
156 +| 13|[[Max **S**peed in **R**PM>>||anchor="H13.MaxSpeedinRPM28SR29"]]| SR| QSR|CSR|✓| ✓| ✓|revolutions per minute (rpm)|(% style="width:510px" %)(((
159 159  QSR: Add modifier "2" for instantaneous speed
160 160  
161 161  SR overwrites SD / CSR overwrites CSD and vice-versa.
162 162  )))|(% style="text-align:center; width:113px" %)Max per servo
163 -| 14|[[**LED** Color>>||anchor="H14.LEDColor28LED29"]]| | LED| QLED| CLED|✓| ✓| ✓|none (integer from 0 to 7)|(% 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" %)0 (OFF)
164 -| 15|[[**G**yre direction (**G**)>>||anchor="H15.GyreRotationDirection28G29"]]| | G| QG| CG|✓| ✓| ✓|none |(% style="width:510px" %)Gyre / rotation direction: 1= CW (clockwise) -1 = CCW (counter-clockwise)|(% style="text-align:center; width:113px" %)1
165 -| 16|[[**ID** #>>||anchor="H16.IdentificationNumber28ID29"]]| | | 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
166 -| 17|[[**B**aud rate>>||anchor="H17.BaudRate"]]| | | QB| CB| | | ✓|none (integer)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)115200
167 -| 18|//{coming soon}//| | | | | | | | |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)(((
168 -
161 +| 14|[[**LED** Color>>||anchor="H14.LEDColor28LED29"]]| 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
162 +| 15|[[**G**yre direction (**G**)>>||anchor="H15.GyreRotationDirection28G29"]]| 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 +| 16|[[**ID** #>>||anchor="H16.IdentificationNumber28ID29"]]| | 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
164 +| 17|[[**B**aud rate>>||anchor="H17.BaudRate"]]| | QB| CB| | | ✓|none (integer)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)9600
165 +| 18|[[**F**irst Position (**P**ulse)>>||anchor="H18.FirstPosition28Pulse2928FP29"]]| | QFP|CFP |X| | |none |(% style="width:510px" %)CFP overwrites CFD and vice-versa|(% style="text-align:center; width:113px" %)(((
166 +Limp
169 169  )))
170 -| 19|[[**F**irst Position (**D**eg)>>||anchor="H19.FirstA0Position28Degrees29"]]| | | QFD|CFD|X| ✓| ✓|none |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)No Value
171 -| 20|[[**M**odel **S**tring>>||anchor="H20.QueryModelString28QMS29"]]| | | QMS| | | | |none (string)|(% style="width:510px" %) Returns the type of servo (ex: LSS-ST1, LSS-HS1, LSS-HT1)|(% style="text-align:center; width:113px" %)
172 -| 21|[[Serial **N**umber>>||anchor="H21.QuerySerialNumber28QN29"]]| | | QN| | | | |none (integer)|(% style="width:510px" %) Returns the unique serial number for that servo|(% style="text-align:center; width:113px" %)
173 -| 22|[[**F**irmware version>>||anchor="H22.QueryFirmware28QF29"]]| | | QF| | | | |none (integer)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
174 -| 23|[[**Q**uery (gen. status)>>||anchor="H23.QueryStatus28Q29"]]| | | Q| | | | ✓|none (integer from 1 to 8)|(% style="width:510px" %) See command description for details|(% style="text-align:center; width:113px" %)
175 -| 24|[[**V**oltage>>||anchor="H24.QueryVoltage28QV29"]]| | | QV| | | | ✓|millivolts (ex 5936 = 5936mV = 5.936V)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
176 -| 25|[[**T**emperature>>||anchor="H25.QueryTemperature28QT29"]]| | | QT| | | | ✓|tenths of degrees Celsius|(% style="width:510px" %)Max temp before error: 85°C (servo goes limp)|(% style="text-align:center; width:113px" %)
177 -| 26|[[**C**urrent>>||anchor="H26.QueryCurrent28QC29"]]| | | QC| | | | ✓|milliamps (ex 200 = 0.2A)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
178 -| 27|[[**C**hange to** RC**>>||anchor="H27.ConfigureRCMode28CRC29"]]| | | |CRC|✓| | ✓|none|(% style="width:510px" %)(((
168 +| 19|[[**F**irst Position (**D**eg)>>||anchor="H19.FirstPosition28Degrees2928FD29"]]| | QFD|CFD|X| ✓| ✓|none |(% style="width:510px" %)CFD overwrites CFP and vice-versa|(% style="text-align:center; width:113px" %)Limp
169 +| 20|[[**M**odel **S**tring>>||anchor="H20.QueryModelString28QMS29"]]| | QMS| | | | |none (string)|(% style="width:510px" %) Returns the type of servo (ST, HS, HT)|(% style="text-align:center; width:113px" %)
170 +| 21|[[Serial **N**umber>>||anchor="H21.QuerySerialNumber28QN29"]]| | QN| | | | |none (integer)|(% style="width:510px" %) Returns the unique serial number for that servo|(% style="text-align:center; width:113px" %)
171 +| 22|[[**F**irmware version>>||anchor="H22.QueryFirmware28QF29"]]| | QF| | | | |none (integer)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
172 +| 23|[[**Q**uery (gen. status)>>||anchor="H23.QueryStatus28Q29"]]| | Q| | | | ✓|none (integer from 1 to 8)|(% style="width:510px" %) See command description for details|(% style="text-align:center; width:113px" %)
173 +| 24|[[**V**oltage>>||anchor="H24.QueryVoltage28QV29"]]| | QV| | | | ✓|millivolts (ex 5936 = 5936mV = 5.936V)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
174 +| 25|[[**T**emperature>>||anchor="H25.QueryTemperature28QT29"]]| | QT| | | | ✓|tenths of degrees Celsius|(% style="width:510px" %)Max temp before error: 85°C (servo goes limp)|(% style="text-align:center; width:113px" %)
175 +| 26|[[**C**urrent>>||anchor="H26.QueryCurrent28QC29"]]| | QC| | | | ✓|milliamps (ex 200 = 0.2A)|(% style="width:510px" %) |(% style="text-align:center; width:113px" %)
176 +| 27|[[**C**hange to** RC**>>||anchor="H27.ConfigureRCMode28CRC29"]]| | |CRC|✓| | ✓|none|(% style="width:510px" %)(((
179 179  Change to RC mode 1 (position) or 2 (wheel).
180 180  )))|(% style="text-align:center; width:113px" %)Serial
181 -| 28|[[**RESET**>>||anchor="H28.RESET"]]| | | | | | | ✓|none|(% style="width:510px" %)Soft reset. See command for details.|(% style="text-align:center; width:113px" %)
182 -| 29|[[**DEFAULT**>>||anchor="H29.DEFAULTA026CONFIRM"]]| | | | | | |✓|none|(% style="width:510px" %)Revert to firmware default values. See command for details|(% style="text-align:center; width:113px" %)
183 -| 30|[[**UPDATE**>>||anchor="H30.UPDATEA026CONFIRM"]]| | | | | | |✓|none|(% style="width:510px" %)Update firmware. See command for details.|(% style="text-align:center; width:113px" %)
179 +| 28|[[**RESET**>>||anchor="H28.RESET"]]| | | | | | ✓|none|(% style="width:510px" %)Soft reset. See command for details.|(% style="text-align:center; width:113px" %)
180 +| 29|[[**DEFAULT**>>||anchor="H29.DEFAULTA026CONFIRM"]]| | | | | |✓|none|(% style="width:510px" %)Revert to firmware default values. See command for details|(% style="text-align:center; width:113px" %)
181 +| 30|[[**UPDATE**>>||anchor="H30.UPDATEA026CONFIRM"]]| | | | | |✓|none|(% style="width:510px" %)Update firmware. See command for details.|(% style="text-align:center; width:113px" %)
184 184  
185 185  == Advanced ==
186 186  
187 -|= #|=(% style="width: 182px;" %)Description|=(% style="width: 56px;" %)Mod|=(% style="width: 70px;" %) Action|=(% style="width: 71px;" %) Query|=(% style="width: 77px;" %) Config|=(% style="width: 77px;" %)Session|=(% style="width: 56px;" %) RC|=(% style="width: 151px;" %) Serial|= Units|=(% style="width: 510px;" %) Notes
188 -| A1|(% style="width:182px" %)[[**A**ngular **S**tiffness>>||anchor="HA1.AngularStiffness28AS29"]]|(% style="width:56px" %) |(% style="width:70px" %)AS|(% style="width:71px" %)QAS|(% style="width:77px" %)CAS|(% style="width:77px" %)✓|(% style="width:56px" %) ✓|(% style="width:151px" %) ✓|none (integer -4 to +4)|(% style="width:510px" %)Suggested values are between 0 to +4
189 -| A2|(% style="width:182px" %)[[**A**ngular **H**olding Stiffness>>||anchor="HA2.AngularHoldingStiffness28AH29"]]|(% style="width:56px" %) |(% style="width:70px" %)AH|(% style="width:71px" %)QAH|(% style="width:77px" %)CAH|(% style="width:77px" %)✓|(% style="width:56px" %) |(% style="width:151px" %) ✓|none (integer -10 to +10)|(% style="width:510px" %)Effect is different between serial and RC
190 -| A3|(% style="width:182px" %)[[**A**ngular **A**cceleration>>||anchor="HA3:AngularAcceleration28AA29"]]|(% style="width:56px" %) |(% style="width:70px" %)AA|(% style="width:71px" %)QAA|(% style="width:77px" %)CAA|(% style="width:77px" %)✓|(% style="width:56px" %) |(% style="width:151px" %) ✓|degrees per second squared|(% style="width:510px" %)Increments of 10 degrees per second squared
191 -| A4|(% style="width:182px" %)[[**A**ngular **D**eceleration>>||anchor="HA4:AngularDeceleration28AD29"]]|(% style="width:56px" %) |(% style="width:70px" %)AD|(% style="width:71px" %)QAD|(% style="width:77px" %)CAD|(% style="width:77px" %)✓|(% style="width:56px" %) |(% style="width:151px" %) ✓|degrees per second squared|(% style="width:510px" %)Increments of 10 degrees per second squared
192 -| A5|(% style="width:182px" %)[[**E**nable **M**otion Control>>||anchor="HA5:MotionControl28EM29"]]|(% style="width:56px" %) |(% style="width:70px" %)EM|(% style="width:71px" %)QEM|(% style="width:77px" %) |(% style="width:77px" %) |(% style="width:56px" %) |(% style="width:151px" %) ✓|none|(% style="width:510px" %)EM0 to disable motion control, EM1 to enable
193 -| A6|(% style="width:182px" %)[[**C**onfigure **L**ED **B**linking>>||anchor="HA6.ConfigureLEDBlinking28CLB29"]]|(% style="width:56px" %) |(% style="width:70px" %) |(% style="width:71px" %)QLB|(% style="width:77px" %) CLB|(% style="width:77px" %) |(% style="width:56px" %) ✓|(% style="width:151px" %) ✓|none (integer from 0 to 63)|(% style="width:510px" %)(((
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="HA1.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="HA2.AngularHoldingStiffness28AH29"]]|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="HA3: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="HA4: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="HA5:MotionControl28EM29"]]|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="HA6.ConfigureLEDBlinking28CLB29"]]| | | CLB| | ✓| |none (integer from 0 to 63)|(% style="width:510px" %)(((
194 194  0=No blinking, 63=Always blink;
195 195  
196 -Blink while: 1=Limp; 2=Holding; 4=Accel; 8=Decel; 16=Free 32=Travel;
197 -)))
198 -| A7|(% style="width:182px" %)[[**C**urrent **H**alt & **H**old>>||anchor="HA7.CurrentHalt26Hold28CH29"]]|(% style="width:56px" %)CH|(% style="width:70px" %) |(% style="width:71px" %) |(% style="width:77px" %) |(% style="width:77px" %)✓|(% style="width:56px" %) |(% style="width:151px" %)✓|milliamps (ex 400 = 0.4A)|(% style="width:510px" %)Modifier for D, MD, WD, WR
199 -| A8|(% style="width:182px" %)[[**C**urrent **L**imp>>||anchor="HA8.CurrentLimp28CL29"]]|(% style="width:56px" %)CL|(% style="width:70px" %) |(% style="width:71px" %) |(% style="width:77px" %) |(% style="width:77px" %)✓|(% style="width:56px" %) |(% style="width:151px" %)✓|milliamps (ex 400 = 0.4A)|(% style="width:510px" %)Modifier for D, MD, WD, WR
194 +Blink while: 1=Limp; 2=Holding 4=Accel; 8=Decel; 16=Free 32=Travel;
195 +)))|(% style="text-align:center; width:113px" %)
200 200  
201 -== Details - Basic ==
197 +== Details ==
202 202  
203 203  ====== __1. Limp (**L**)__ ======
204 204  
... ... @@ -220,21 +220,12 @@
220 220  
221 221  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.
222 222  
223 -====== __4. Speed (**S**, **SD**) modifier__ ======
219 +====== __4. Speed (**S**) modifier__ ======
224 224  
225 225  Example: #5P1500S750<cr>
226 -Example: #5D0SD180<cr>
227 227  
228 -Modifier (S) is only for a position (P) action and determines the speed of the move in microseconds per second. A speed of 750 microseconds would cause the servo to rotate from its current position to the desired position at a speed of 750 microseconds per second. This command is in place to ensure backwards compatibility with the SSC-32 / 32U protocol.
223 +This command is a modifier only for a position (P) action and determines the speed of the move in microseconds per second. A speed of 750 microseconds would cause the servo to rotate from its current position to the desired position at a speed of 750 microseconds per second. This command is in place to ensure backwards compatibility with the SSC-32 / 32U protocol.
229 229  
230 -Modifer (S) is only for a position (D) or relative position (MD) action and determines the speed of the move in degrees per second. A speed modifier (SD) of 180 would cause the servo to rotate from its current position to the desired absolute or relative position at a speed of 180 degrees per second.
231 -
232 -Query Speed (**QS**)
233 -
234 -Example: #5QS<cr> might return *5QS300<cr>
235 -
236 -This command queries the current speed in microseconds per second.
237 -
238 238  ====== __5. (Relative) Move in Degrees (**MD**)__ ======
239 239  
240 240  Example: #5MD123<cr>
... ... @@ -304,7 +304,7 @@
304 304  
305 305  ====== __9. Position in Degrees (**D**)__ ======
306 306  
307 -Example: #5D1456<cr>
294 +Example: #5PD1456<cr>
308 308  
309 309  This moves the servo to an angle of 145.6 degrees, where the center (0) position is centered. Negative values (ex. -176 representing -17.6 degrees) are used. A full circle would be from -1800 to 1800 degrees. A value of 2700 would be the same angle as -900, except the servo would move in a different direction.
310 310  
... ... @@ -325,15 +325,15 @@
325 325  
326 326  ====== __10. Wheel Mode in Degrees (**WD**)__ ======
327 327  
328 -Ex: #5WD90<cr>
315 +Ex: #5WD900<cr>
329 329  
330 330  This command sets the servo to wheel mode where it will rotate in the desired direction at the selected speed. The example above would have the servo rotate at 90.0 degrees per second clockwise (assuming factory default configurations).
331 331  
332 332  Query Wheel Mode in Degrees (**QWD**)
333 333  
334 -Ex: #5QWD<cr> might return *5QWD90<cr>
321 +Ex: #5QWD<cr> might return *5QWD900<cr>
335 335  
336 -The servo replies with the angular speed in degrees per second. A negative sign would indicate the opposite direction (for factory default a negative value would be counter clockwise).
323 +The servo replies with the angular speed in tenths of degrees per second. A negative sign would indicate the opposite direction (for factory default a negative value would be counter clockwise).
337 337  
338 338  ====== __11. Wheel Mode in RPM (**WR**)__ ======
339 339  
... ... @@ -403,7 +403,7 @@
403 403  
404 404  This action sets the servo's RGB LED color for that session.The LED can be used for aesthetics, or (based on user code) to provide visual status updates. Using timing can create patterns.
405 405  
406 -0=Off (black); 1=Red 2=Green; 3=Blue; 4=Yellow; 5=Cyan; 6=Magenta; 7=White;
393 +0=OFF 1=RED 2=GREEN 3= BLUE 4=YELLOW 5=CYAN 6= 7=MAGENTA, 8=WHITE 
407 407  
408 408  Query LED Color (**QLED**)
409 409  
... ... @@ -453,11 +453,11 @@
453 453  
454 454  ====== __17. Baud Rate__ ======
455 455  
456 -A servo's baud rate cannot be set "on the fly" and must be configured via the CB command described below. The factory default baud rate for all servos is 115200. Since smart servos are intended to be daisy chained, in order to respond to the same serial bus, all servos in a project should ideally be set to the same baud rate. Setting different baud rates will have the servos respond differently and may create issues. Available baud rates are: 9600 bps, 19200 bps, 38400 bps, 57600 bps, 115.2 kbps, 230.4 kbps, 250.0 kbps, 460.8 kbps, 500.0 kbps. Servos are shipped with a baud rate set to 115200. The baud rates are currently restricted to those above.
443 +A servo's baud rate cannot be set "on the fly" and must be configured via the CB command described below. The factory default baud rate for all servos is 9600. Since smart servos are intended to be daisy chained, in order to respond to the same serial bus, all servos in a project should ideally be set to the same baud rate. Setting different baud rates will have the servos respond differently and may create issues. Available baud rates are: 9600 bps, 19200 bps, 38400 bps, 57600 bps, 115.2 kbps, 230.4 kbps, 250.0 kbps, 460.8 kbps, 500.0 kbps. Servos are shipped with a baud rate set to 9600. The baud rates are currently restricted to those above.
457 457  
458 458  Query Baud Rate (**QB**)
459 459  
460 -Ex: #5QB<cr> might return *5QB115200<cr>
447 +Ex: #5QB<cr> might return *5QB9600<cr>
461 461  
462 462  Since the command to query the baud rate must be done at the servo's existing baud rate, it can simply be used to confirm the CB configuration command was correctly received before the servo is power cycled and the new baud rate takes effect.
463 463  
... ... @@ -469,29 +469,41 @@
469 469  
470 470  Sending this command will change the baud rate associated with servo ID 5 to 9600 bits per second.
471 471  
472 -====== __18. {//Coming soon//}__ ======
459 +====== __18. First Position (Pulse) (**FP**)__ ======
473 473  
474 -Command coming soon....
461 +In certain cases, a user might want to have the servo move to a specific angle upon power up; we refer to this as "first position" (a.k.a. "initial position"). The factory default has no first position value stored in EEPROM and therefore upon power up, the servo remains limp until a position (or hold command) is assigned. FP and FD are different in that FP is used for RC mode only, whereas FD is used for smart mode only. If a first position pulse is assigned, the servo will move to that angle and hold there for up to 2 seconds before going limp should a new pulse not be received.
475 475  
476 -====== __19. First Position (Degrees)__ ======
463 +Query First Position in Pulses (**QFP**)
477 477  
478 -In certain cases, a user might want to have the servo move to a specific angle upon power up; we refer to this as "first position" (a.k.a. "initial position"). The factory default has no first position value stored in EEPROM and therefore upon power up, the servo remains limp until a position (or hold command) is assigned. Note that the number should be restricted to -1790 (-179.0 degrees) to +1790 (179.0 degrees) and values beyond this will be changed to 1800.
465 +Ex: #5QFP<cr> might return *5QFP1550<cr>
479 479  
467 +The reply above indicates that servo with ID 5 has a first position pulse of 1550 microseconds. If no first position has been set, servo will respond with DIS ("disabled").
468 +
469 +Configure First Position in Pulses (**CFP**)
470 +
471 +Ex: #5CP1550<cr>
472 +
473 +This configuration command means the servo, when set to RC mode, will immediately move to an angle equivalent to having received an RC pulse of 1550 microseconds upon power up. Sending a CFP command without a number (Ex. #5CFP<cr>) results in the servo remaining limp upon power up (i.e. disabled).
474 +
475 +====== __19. First Position (Degrees) (**FD**)__ ======
476 +
477 +In certain cases, a user might want to have the servo move to a specific angle upon power up; we refer to this as "first position" (a.k.a. "initial position"). The factory default has no first position value stored in EEPROM and therefore upon power up, the servo remains limp until a position (or hold command) is assigned. FP and FD are different in that FP is used for RC mode only, whereas FD is used for smart mode only.
478 +
480 480  Query First Position in Degrees (**QFD**)
481 481  
482 482  Ex: #5QFD<cr> might return *5QFD64<cr>
483 483  
484 -The reply above indicates that servo with ID 5 has a first position pulse of 1550 microseconds. If there is no first position value stored, the reply will be DIS
483 +The reply above indicates that servo with ID 5 has a first position pulse of 1550 microseconds.
485 485  
486 486  Configure First Position in Degrees (**CFD**)
487 487  
488 488  Ex: #5CD64<cr>
489 489  
490 -This configuration command means the servo, when set to smart mode, will immediately move to 6.4 degrees upon power up. Sending a CFD command without a number (Ex. #5CFD<cr>) results in the servo remaining limp upon power up. In order to remove the first position, send no value, ex: #5CFD<cr>
489 +This configuration command means the servo, when set to smart mode, will immediately move to 6.4 degrees upon power up. Sending a CFD command without a number (Ex. #5CFD<cr>) results in the servo remaining limp upon power up.
491 491  
492 492  ====== __20. Query Model String (**QMS**)__ ======
493 493  
494 -Ex: #5QMS<cr> might return *5QMSLSS-HS1<cr>
493 +Ex: #5QMS<cr> might return *5QMSLSS-HS1cr>
495 495  
496 496  This reply means the servo model is LSS-HS1, meaning a high speed servo, first revision.
497 497  
... ... @@ -509,7 +509,7 @@
509 509  
510 510  ====== __23. Query Status (**Q**)__ ======
511 511  
512 -The status query described what the servo is currently doing. The query returns an integer which must be looked up in the table below. Use the CLB advanced command to have the LED blink for certain statuses.
511 +The status query described what the servo is currently doing. The query returns an integer which must be looked up in the table below.
513 513  
514 514  Ex: #5Q<cr> might return *5Q6<cr>, which indicates the motor is holding a position.
515 515  
... ... @@ -517,7 +517,7 @@
517 517  |ex: *5Q0<cr>|0: Unknown|LSS is unsure / unknown state
518 518  |ex: *5Q1<cr>|1: Limp|Motor driving circuit is not powered and horn can be moved freely
519 519  |ex: *5Q2<cr>|2: Free moving|Motor driving circuit is not powered and horn can be moved freely
520 -|ex: *5Q3<cr>|3: Accelerating|Increasing speed from rest (or previous speed) towards travel speed
519 +|ex: *5Q3<cr>|3: Accelerating|Increasing speed from rest (or previous speeD) towards travel speed
521 521  |ex: *5Q4<cr>|4: Traveling|Moving at a stable speed
522 522  |ex: *5Q5<cr>|5: Decelerating|Decreasing from travel speed towards final position.
523 523  |ex: *5Q6<cr>|6: Holding|Keeping current position
... ... @@ -524,19 +524,14 @@
524 524  |ex: *5Q7<cr>|7: Outside limits|{More details coming soon}
525 525  |ex: *5Q8<cr>|8: Stuck|Motor cannot perform request movement at current speed setting
526 526  |ex: *5Q9<cr>|9: Blocked|Similar to stuck, but the motor is at maximum duty and still cannot move (i.e.: stalled)
527 -|ex: *5Q10<cr>|10: Safe Mode|(((
528 -A safety limit has been exceeded (temperature, peak current or extended high current draw).
526 +|ex: *5Q10<cr>|10: Safe Mode|A safety limit has been exceeded (temperature, peak current or extended high current draw).
529 529  
530 -Send a Q1 command to know which limit has been reached (described below).
531 -)))
532 -
533 533  (% class="wikigeneratedid" %)
534 -If a safety limit has been reached and exceeded, the LED will flash red and the servo will stop providing torque (no longer react to commands which cause the motor to rotate). In order to determine which limit has been reached, send a Q1 command. The servo must be RESET in order to return to normal operation, though if a limit is still detected (for example the servo is still too hot), it will revert back to Safe Mode.
529 +If a safety limit has been reached, the LED will flash red and the servo will stop providing torque (no longer react to commands which cause the motor to rotate). In order to determine which limit has been reached, send a Q1 command. The servo must be RESET in order to return to normal operation, though if a limit is still detected (for example the servo is still too hot), it will revert back to Safe Mode.
535 535  
536 536  |***Value returned (Q1)**|**Status**|**Detailed description**
537 -|ex: *5Q0<cr>|No limits have been passed|Nothing is wrong
538 538  |ex: *5Q1<cr>|Current limit has been passed|Something cause the current to either spike, or remain too high for too long
539 -|ex: *5Q2<cr>|Input voltage detected is below or above acceptable range|Check the voltage of your batteries or power source
533 +|ex: *5Q2<cr>|Input voltage detected is below or above acceptable range|Check the voltage of your batteries
540 540  |ex: *5Q3<cr>|Temperature limit has been reached|The servo is too hot to continue operating safely.
541 541  
542 542  ====== __24. Query Voltage (**QV**)__ ======
... ... @@ -570,7 +570,7 @@
570 570  
571 571  This command would place the servo in RC wheel mode after a RESET or power cycle. Note that after a RESET or power cycle, the servo will be in RC mode and will not reply to serial commands. Using the command #5CRC<cr> or #5CRC3<cr> which requests that the servo remain in serial mode still requires a RESET command.
572 572  
573 -Important note:** **To revert from RC mode back to serial mode, the [[LSS - Button Menu>>doc:lynxmotion-smart-servo.lss-button-menu.WebHome]] is required. Should the button be inaccessible (or broken) when the servo is in RC mode and the user needs to change to serial mode, a 5V constant HIGH needs to be sent to the servo's Rx pin (RC PWM pin), ensuring a common GND and wait for 30 seconds. Normal RC PWM pulses should not exceed 2500 milliseconds. After 30 seconds, the servo will interpret this as a desired mode change and change to serial mode. This has been implemented as a fail safe.
567 +Important note:** **To revert from RC mode back to serial mode, the [[LSS - Button Menu>>doc:Lynxmotion Smart Servo (LSS).LSS - Button Menu.WebHome]] is required. Should the button be inaccessible (or broken) when the servo is in RC mode and the user needs to change to serial mode, a 5V constant HIGH needs to be sent to the servo's Rx pin (RC PWM pin), ensuring a common GND and wait for 30 seconds. Normal RC PWM pulses should not exceed 2500 milliseconds. After 30 seconds, the servo will interpret this as a desired mode change and change to serial mode. This has been implemented as a fail safe.
574 574  
575 575  ====== __28. **RESET**__ ======
576 576  
... ... @@ -577,7 +577,6 @@
577 577  Ex: #5RESET<cr> or #5RS<cr>
578 578  
579 579  This command does a "soft reset" (no power cycle required) and reverts all commands to those stored in EEPROM (i.e. configuration commands).
580 -Note: after a RESET command is received the LSS will restart and perform initilization again, making it unavailable on the bus for a bit. See [[Session>>||anchor="HSession"]], note #2 for more details.
581 581  
582 582  ====== __29. **DEFAULT** & CONFIRM__ ======
583 583  
... ... @@ -603,10 +603,8 @@
603 603  
604 604  Note that after the CONFIRM command is sent, the servo will automatically perform a RESET.
605 605  
606 -== Details - Advanced ==
599 += Advanced =
607 607  
608 -The motion controller used in serial mode is not the same as the motion controller use in RC mode. RC mode is intended to add functionality to what would be considered "normal" RC behavior based on PWM input.
609 -
610 610  ====== __A1. Angular Stiffness (**AS**)__ ======
611 611  
612 612  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. There are no units.
... ... @@ -637,7 +637,7 @@
637 637  
638 638  ====== __A2. Angular Holding Stiffness (**AH**)__ ======
639 639  
640 -The angular holding stiffness determines the servo's ability to hold a desired position under load. The default value for stiffness depending on the firmware may be 0 or 1. Greater values produce increasingly erratic behavior and the effect becomes extreme below -4 and above +4. Maximum values are -10 to +10. Note that when  considering altering a stiffness value, the end effect depends on the mode being tested.
631 +The angular holding stiffness determines the servo's ability to hold a desired position under load. The default value for stiffness depending on the firmware may be 0 or 1. Greater values produce increasingly erratic behavior and the effect becomes extreme below -4 and above +4. Maximum values are -10 to +10.
641 641  
642 642  Ex: #5AH3<cr>
643 643  
... ... @@ -653,42 +653,20 @@
653 653  
654 654  Ex: #5CAH2<cr>
655 655  
656 -This writes the angular holding stiffness of servo #5 to 2 to EEPROM. Note that when  considering altering a stiffness value, the end effect depends on the mode being tested.
647 +This writes the angular holding stiffness of servo #5 to 2 to EEPROM
657 657  
658 658  ====== __A3: Angular Acceleration (**AA**)__ ======
659 659  
660 -The default value for angular acceleration is 100, which is the same as the maximum deceleration. Accepts values of between 1 and 100. Increments of 10 degrees per second squared.
651 +{More details to come}
661 661  
662 -Ex: #5AA30<cr>
663 -
664 -Query Angular Acceleration (**QAD**)
665 -
666 -Ex: #5QA<cr> might return *5QA30<cr>
667 -
668 -Configure Angular Acceleration (**CAD**)
669 -
670 -Ex: #5CA30<cr>
671 -
672 672  ====== __A4: Angular Deceleration (**AD**)__ ======
673 673  
674 -The default value for angular deceleration is 100, which is the same as the maximum acceleration. Values between 1 and 15 have the greatest impact.
655 +{More details to come}
675 675  
676 -Ex: #5AD8<cr>
677 -
678 -Query Angular Deceleration (**QAD**)
679 -
680 -Ex: #5QD<cr> might return *5QD8<cr>
681 -
682 -Configure Angular Deceleration (**CAD**)
683 -
684 -Ex: #5CD8<cr>
685 -
686 686  ====== __A5: Motion Control (**EM**)__ ======
687 687  
688 -The command EM0 disables use of the motion controller (acceleration, velocity / travel, deceleration). As such, the servo will move at full speed for all motion commands. The command EM1 enables use of the motion controller.
659 +{More details to come}
689 689  
690 -Note that if the modifiers S or T are used, it is assumed that motion control is desired, and for that command, EM1 will be used.
691 -
692 692  ====== __A6. Configure LED Blinking (**CLB**)__ ======
693 693  
694 694  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). This is very useful when visually seeing what the servo is doing. You can turn on or off blinking for various LSS status. The command requires that the servo be RESET. Here is the list and their associated value:
... ... @@ -714,25 +714,3 @@
714 714  Ex: #5CLB63<cr> blink in all status (1 + 2 + 4 + 8 + 16 + 32)
715 715  
716 716  RESETTING the servo is needed.
717 -
718 -====== __A7. Current Halt & Hold (**CH**)__ ======
719 -
720 -This modifier, released in firmware v367, can be added to the following actions: D; MD; WD; WR.
721 -
722 -Ex: #5D1423CH400<cr>
723 -
724 -This has servo with ID 5 move to 142.3 degrees but, should it detect a current of 400mA or higher before it reaches the desired position, will immediately halt and hold position.
725 -
726 -====== __A8. Current Limp (**CL**)__ ======
727 -
728 -This modifier, released in firmware v367, can be added to the following actions: D; MD; WD; WR.
729 -
730 -Ex: #5D1423CH400<cr>
731 -
732 -This has servo with ID 5 move to 142.3 degrees but, should it detect a current of 400mA or higher before it reaches the desired position, will immediately go limp.
733 -
734 -= RGB LED Patterns =
735 -
736 -The LED patterns below do not include those which are part of the button menu, which can be found here: [[LSS Button Menu>>doc:lynxmotion-smart-servo.lss-button-menu.WebHome]]
737 -
738 -[[image:LSS - LED Patterns.png]]
LSS - LED Patterns.png
Author
... ... @@ -1,1 +1,0 @@
1 -xwiki:XWiki.RB1
Size
... ... @@ -1,1 +1,0 @@
1 -116.3 KB
Content
XWiki.XWikiRights[0]
Allow/Deny
... ... @@ -1,0 +1,1 @@
1 +Allow
Groups
... ... @@ -1,0 +1,1 @@
1 +xwiki:XWiki.XWikiAdminGroup
Levels
... ... @@ -1,0 +1,1 @@
1 +view
XWiki.XWikiRights[1]
Allow/Deny
... ... @@ -1,0 +1,1 @@
1 +Allow
Groups
... ... @@ -1,0 +1,1 @@
1 +XWiki.XWikiAdminGroup
Levels
... ... @@ -1,0 +1,1 @@
1 +view
XWiki.XWikiRights[2]
Allow/Deny
... ... @@ -1,0 +1,1 @@
1 +Allow
Groups
... ... @@ -1,0 +1,1 @@
1 +XWiki.Profiles (Lynxmotion).BETA Testers
Levels
... ... @@ -1,0 +1,1 @@
1 +view
Copyright RobotShop 2018