Changes for page LSS Communication Protocol
Last modified by Eric Nantel on 2025/06/06 07:47
Change comment: Update document after refactoring.
Summary
-
Page properties (3 modified, 0 added, 0 removed)
Details
- Page properties
-
- Parent
-
... ... @@ -1,1 +1,1 @@ 1 - lynxmotion:LSS- Overview(DEV).WebHome1 +Lynxmotion Smart Servo (LSS)1.WebHome - Author
-
... ... @@ -1,1 +1,1 @@ 1 -xwiki:XWiki. CBenson1 +xwiki:XWiki.RB1 - Content
-
... ... @@ -1,6 +1,8 @@ 1 += Table of Contents = 2 + 1 1 {{toc depth="3"/}} 2 2 3 -= Protocol concepts =5 += Protocol Concepts = 4 4 5 5 The Lynxmotion Smart Servo (LSS) protocol was created in order to be as simple and straightforward as possible from a user perspective, while at the same time trying to stay compact and robust yet highly versatile. Almost everything one might expect to be able to configure for a smart servo motor is available. 6 6 ... ... @@ -48,7 +48,7 @@ 48 48 49 49 == Configuration Commands == 50 50 51 -Configuration commands affect the servo's current session* but unlike action commands, configuration commands are written to EEPROM and are retained even if the servo loses power (therefore NOT session specific). Not all action commands have a corresponding configuration and vice versa. Certain configurations are retained for when the servo is used in RC model. More information can be found on the [[LSS - RC PWM page>>doc:LS S- Overview(DEV).LSS - RC PWM.WebHome]].53 +Configuration commands affect the servo's current session* but unlike action commands, configuration commands are written to EEPROM and are retained even if the servo loses power (therefore NOT session specific). Not all action commands have a corresponding configuration and vice versa. Certain configurations are retained for when the servo is used in RC model. More information can be found on the [[LSS - RC PWM page>>doc:Lynxmotion Smart Servo (LSS).LSS - RC PWM.WebHome]]. 52 52 53 53 1. Start with a number sign # (U+0023) 54 54 1. Servo ID number as an integer ... ... @@ -134,41 +134,41 @@ 134 134 = Command List = 135 135 136 136 |= #|=Description|= Action|= Query|= Config|= RC|= Serial|= Units|= Notes 137 -| 1|[[**L**imp>>||anchor="H1.Limp28L29"]]| L| | | | ✓| 138 -| 2|[[**H**alt & Hold>>||anchor="H2.Halt26Hold28H29"]]| H| | | | ✓| 139 -| 3|[[**T**imed move>>||anchor="H3.Timedmove28T29"]]| T| | | | ✓| 140 -| 4|[[**S**peed>>||anchor="H4.Speed28S29"]]| S| | | | ✓| 141 -| 5|[[**M**ove in **D**egrees (relative)>>||anchor="H5.28Relative29MoveinDegrees28MD29"]]| MD| | | | ✓| 142 -| 6|[[**O**rigin Offset>>||anchor="H6.OriginOffsetAction28O29"]]| O| QO| CO| ✓| ✓| 143 -| 7|[[**A**ngular **R**ange>>||anchor="H7.AngularRange28AR29"]]| AR| QAR| CAR| ✓| ✓| 144 -| 8|[[Position in **P**ulse>>||anchor="H8.PositioninPulse28P29"]]| P| QP| | | ✓| 139 +| 1|[[**L**imp>>||anchor="H1.Limp28L29"]]| L| | | | ✓|none| 140 +| 2|[[**H**alt & Hold>>||anchor="H2.Halt26Hold28H29"]]| H| | | | ✓|none| 141 +| 3|[[**T**imed move>>||anchor="H3.Timedmove28T29"]]| T| | | | ✓|milliseconds| Modifier only (P, D, MD) 142 +| 4|[[**S**peed>>||anchor="H4.Speed28S29"]]| S| | | | ✓|microseconds / second| Modifier only (P) 143 +| 5|[[**M**ove in **D**egrees (relative)>>||anchor="H5.28Relative29MoveinDegrees28MD29"]]| MD| | | | ✓|tenths of degrees (ex 325 = 32.5 degrees; 91 = 9.1 degrees)| 144 +| 6|[[**O**rigin Offset>>||anchor="H6.OriginOffsetAction28O29"]]| O| QO| CO| ✓| ✓|tenths of degrees (ex 325 = 32.5 degrees; 91 = 9.1 degrees)| 145 +| 7|[[**A**ngular **R**ange>>||anchor="H7.AngularRange28AR29"]]| AR| QAR| CAR| ✓| ✓|tenths of degrees (ex 325 = 32.5 degrees; 91 = 9.1 degrees)| 146 +| 8|[[Position in **P**ulse>>||anchor="H8.PositioninPulse28P29"]]| P| QP| | | ✓|microseconds|((( 145 145 See details below 146 146 ))) 147 -| 9|[[Position in **D**egrees>>||anchor="H9.PositioninDegrees28D29"]]| D| QD| | | ✓| 148 -| 10|[[**W**heel mode in **D**egrees>>||anchor="H10.WheelModeinDegrees28WD29"]]| WD| QWD| | | ✓| 149 -| 11|[[**W**heel mode in **R**PM>>||anchor="H11.WheelModeinRPM28WR29"]]| WR| QWR| | | ✓| rpm| 150 -| 12|[[Max **S**peed in **D**egrees>>||anchor="H12.SpeedinDegrees28SD29"]]| SD| QSD| CSD| ✓| ✓| 151 -| 13|[[Max **S**peed in **R**PM>>||anchor="H13.SpeedinRPM28SR29"]]| SR| QSR| CSR| ✓| ✓| 149 +| 9|[[Position in **D**egrees>>||anchor="H9.PositioninDegrees28D29"]]| D| QD| | | ✓|tenths of degrees (ex 325 = 32.5 degrees; 91 = 9.1 degrees)| 150 +| 10|[[**W**heel mode in **D**egrees>>||anchor="H10.WheelModeinDegrees28WD29"]]| WD| QWD| | | ✓|tenths of degrees per second (ex 248 = 24.8 degrees per second)|A.K.A. "Speed mode" or "Continuous rotation" 151 +| 11|[[**W**heel mode in **R**PM>>||anchor="H11.WheelModeinRPM28WR29"]]| WR| QWR| | | ✓| rpm|A.K.A. "Speed mode" or "Continuous rotation" 152 +| 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)|QSD: Add modifier "2" for instantaneous speed 153 +| 13|[[Max **S**peed in **R**PM>>||anchor="H13.SpeedinRPM28SR29"]]| SR| QSR| CSR| ✓| ✓|rpm|QSR: Add modifier "2" for instantaneous speed 152 152 | 14|[[**A**ngular **S**tiffness>>||anchor="H14.AngularStiffness28AS29"]]| AS| QAS| CAS| ✓| ✓|none|-4 to +4, but suggested values are between 0 to +4 153 153 | 15|[[**A**ngular **H**olding Stiffness>>||anchor="H15.AngularHoldStiffness28AH29"]]|AH|QAH|CAH| | ✓|none|-10 to +10, with default as 0. 154 154 |15b|[[**A**ngular **A**cceleration>>||anchor="H15b:AngularAcceleration28AA29"]]|AA|QAA|CAA| | ✓|degrees per second squared|Increments of 10 degrees per second squared 155 155 |15c|[[**A**ngular **D**eceleration>>||anchor="H15c:AngularDeceleration28AD29"]]|AD|QAD|CAD| | ✓|degrees per second squared|Increments of 10 degrees per second squared 156 -|15d|[[**M**otion **C**ontrol>>||anchor="H15d:MotionControl28MC29"]]|MC|QMC| | | ✓|none|MC0 to disable motion control, MC1 to enable. Session specific157 -| 16|[[**LED** Color>>||anchor="H16.RGBLED28LED29"]]| LED| QLED| CLED| ✓| ✓| 158 -| 17|[[**ID** #>>||anchor="H17.IdentificationNumber"]]| | QID| CID| | ✓| 159 -| 18|[[**B**aud rate>>||anchor="H18.BaudRate"]]| B| QB| CB| | ✓| 160 -| 19|[[**G**yre direction (**G**)>>||anchor="H19.GyreRotationDirection"]]| G| QG| CG| ✓| ✓| 161 -| 20|[[**F**irst Position (**P**ulse)>>||anchor="H20.First2InitialPosition28pulse29"]]| | QFP|CFP | ✓| ✓| 162 -| 21|[[**F**irst Position (**D**egrees)>>||anchor="H21.First2InitialPosition28Degrees29"]]| | QFD|CFD| ✓| ✓| 163 -| 22|[[**T**arget (**D**egree) **P**osition>>||anchor="H22.QueryTargetPositioninDegrees28QDT29"]]| | QDT| | | ✓| 164 -| 23|[[**M**odel **String **>>||anchor="H23.QueryModelString28QMS29"]]| | QMS| | | |165 -| 23b|[[**M**odel>>||anchor="H23b.QueryModel28QM29"]]| | QM| | | | 166 -| 24|[[Serial **N**umber>>||anchor="H24.QuerySerialNumber28QN29"]]| | QN| | | | 167 -| 25|[[**F**irmware version>>||anchor="H25.QueryFirmware28QF29"]]| | QF| | | | 168 -| 26|[[**Q**uery (general status)>>||anchor="H26.QueryStatus28Q29"]]| | Q| | | ✓| 169 -| 27|[[**V**oltage>>||anchor="H27.QueryVoltage28QV29"]]| | QV| | | ✓| 170 -| 28|[[**T**emperature>>||anchor="H28.QueryTemperature28QT29"]]| | QT| | | ✓| 171 -| 29|[[**C**urrent>>||anchor="H29.QueryCurrent28QC29"]]| | QC| | | ✓| 158 +|15d|[[**E**nable **M**otion control>>||anchor="H15d:MotionControl28MC29"]]|EM|QEM| | | ✓|none|EM0 to disable motion control, EM1 to enable. Session specific / does not survive power cycles 159 +| 16|[[**LED** Color>>||anchor="H16.RGBLED28LED29"]]| LED| QLED| CLED| ✓| ✓|none (integer from 1 to 8)|0=OFF 1=RED 2=GREEN 3= BLUE 4=YELLOW 5=CYAN 6=MAGENTA, 7=WHITE 160 +| 17|[[**ID** #>>||anchor="H17.IdentificationNumber"]]| | QID| CID| | ✓|none (integer from 0 to 250)|Note: ID 254 is a "broadcast" which all servos respond to 161 +| 18|[[**B**aud rate>>||anchor="H18.BaudRate"]]| B| QB| CB| | ✓|none (integer)| 162 +| 19|[[**G**yre direction (**G**)>>||anchor="H19.GyreRotationDirection"]]| G| QG| CG| ✓| ✓|none | Gyre / rotation direction where 1= CW (clockwise) -1 = CCW (counter-clockwise) 163 +| 20|[[**F**irst Position (**P**ulse)>>||anchor="H20.First2InitialPosition28pulse29"]]| | QFP|CFP | ✓| ✓|none | 164 +| 21|[[**F**irst Position (**D**egrees)>>||anchor="H21.First2InitialPosition28Degrees29"]]| | QFD|CFD| ✓| ✓|none | 165 +| 22|[[**T**arget (**D**egree) **P**osition>>||anchor="H22.QueryTargetPositioninDegrees28QDT29"]]| | QDT| | | ✓|tenths of degrees (ex 325 = 32.5 degrees; 91 = 9.1 degrees)| 166 +| 23|[[**M**odel **S**tring>>||anchor="H23.QueryModelString28QMS29"]]| | QMS| | | |none (string)| Recommended to determine the model| 167 +| 23b|[[**M**odel>>||anchor="H23b.QueryModel28QM29"]]| | QM| | | |none (integer)| Returns a raw value representing the three model inputs (36 bit)| 168 +| 24|[[Serial **N**umber>>||anchor="H24.QuerySerialNumber28QN29"]]| | QN| | | |none (integer)| 169 +| 25|[[**F**irmware version>>||anchor="H25.QueryFirmware28QF29"]]| | QF| | | |none (integer)| 170 +| 26|[[**Q**uery (general status)>>||anchor="H26.QueryStatus28Q29"]]| | Q| | | ✓|none (integer from 1 to 8)| See command description for details 171 +| 27|[[**V**oltage>>||anchor="H27.QueryVoltage28QV29"]]| | QV| | | ✓|millivolts (ex 5936 = 5936mV = 5.936V)| 172 +| 28|[[**T**emperature>>||anchor="H28.QueryTemperature28QT29"]]| | QT| | | ✓|tenths of degrees Celsius|Max temp before error: 85°C (servo goes limp) 173 +| 29|[[**C**urrent>>||anchor="H29.QueryCurrent28QC29"]]| | QC| | | ✓|milliamps (ex 200 = 0.2A)| 172 172 | 30|[[**RC** Mode>>||anchor="H30.RCMode28CRC29"]]| | |CRC| |✓|none|((( 173 173 CRC: Add modifier "1" for RC-position mode. 174 174 CRC: Add modifier "2" for RC-wheel mode. ... ... @@ -199,6 +199,8 @@ 199 199 200 200 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. 201 201 204 +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. 205 + 202 202 ====== __4. Speed (**S**)__ ====== 203 203 204 204 Example: #5P1500S750<cr> ... ... @@ -416,7 +416,7 @@ 416 416 417 417 {More details to come} 418 418 419 -====== __15d: Motion Control (**M C**)__ ======423 +====== __15d: Motion Control (**EM**)__ ====== 420 420 421 421 {More details to come} 422 422 ... ... @@ -561,12 +561,12 @@ 561 561 |ex: *5Q2<cr>|Free moving|Motor driving circuit is not powered and horn can be moved freely 562 562 |ex: *5Q3<cr>|Accelerating|Increasing speed from rest (or previous speeD) towards travel speed 563 563 |ex: *5Q4<cr>|Traveling|Moving at a stable speed 564 -|ex: *5Q5<cr>|Dec celerating|Decreasingspeed towardstravel speed towardsrest568 +|ex: *5Q5<cr>|Decelerating|Decreasing from travel speed towards final position. 565 565 |ex: *5Q6<cr>|Holding|Keeping current position 566 566 |ex: *5Q7<cr>|Stepping|Special low speed mode to maintain torque 567 -|ex: *5Q8<cr>|Outside limits|More details coming soon 571 +|ex: *5Q8<cr>|Outside limits|{More details coming soon} 568 568 |ex: *5Q9<cr>|Stuck|Motor cannot perform request movement at current speed setting 569 -|ex: *5Q10<cr>|Blocked|Similar to stuck, but the motor is at maxi umum duty and still cannot move (i.e.: stalled)573 +|ex: *5Q10<cr>|Blocked|Similar to stuck, but the motor is at maximum duty and still cannot move (i.e.: stalled) 570 570 571 571 ====== __27. Query Voltage (**QV**)__ ====== 572 572