Changes for page LSS Communication Protocol
Last modified by Eric Nantel on 2025/06/06 07:47
Change comment: There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 1 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -3,7 +3,7 @@ 3 3 4 4 {{toc depth="3"/}} 5 5 6 -= Serial Protocol Concept=6 += Serial Protocol = 7 7 8 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 ... ... @@ -130,55 +130,55 @@ 130 130 131 131 == Regular == 132 132 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"]]| 137 -| 4|[[**S**peed>>||anchor="H4.Speed28S29modifier"]]| 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" %)((( 133 +|= #|=Description|=Mod|= 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}. Time is estimated and can change based on load|(% style="text-align:center; width:113px" %) 137 +| 4|[[**S**peed>>||anchor="H4.Speed28S29modifier"]]|S| |QS| | | | ✓|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" %)((( 140 140 0 141 141 ))) 142 -| 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" %)((( 143 143 1800 144 144 ))) 145 -| 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" %)((( 146 146 Inherited from SSC-32 serial protocol 147 147 )))|(% style="text-align:center; width:113px" %) 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" %)((( 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" %)((( 152 152 QSD: Add modifier "2" for instantaneous speed. 153 153 154 154 SD overwrites SR / CSD overwrites CSR and vice-versa. 155 155 )))|(% style="text-align:center; width:113px" %)Max per servo 156 -| 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" %)((( 157 157 QSR: Add modifier "2" for instantaneous speed 158 158 159 159 SR overwrites SD / CSR overwrites CSD and vice-versa. 160 160 )))|(% style="text-align:center; width:113px" %)Max per servo 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" %) 7162 -| 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" %) 9600165 -| 18|//{coming soon}//| | | | | | | |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)((( 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" %)0 (OFF) 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" %)115200 165 +| 18|//{coming soon}//| | | | | | | | |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)((( 166 166 167 167 ))) 168 -| 19|[[**F**irst Position (**D**eg)>>||anchor="H19.FirstPosition28Degrees29 28FD29"]]| | QFD|CFD|X| ✓| ✓|none |(% style="width:510px" %)CFDoverwrites CFP and vice-versa|(% style="text-align:center; width:113px" %)Limp169 -| 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" %)((( 168 +| 19|[[**F**irst Position (**D**eg)>>||anchor="H19.FirstA0Position28Degrees29"]]| | | QFD|CFD|X| ✓| ✓|none |(% style="width:510px" %) |(% style="text-align:center; width:113px" %)No Value 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" %)((( 177 177 Change to RC mode 1 (position) or 2 (wheel). 178 178 )))|(% style="text-align:center; width:113px" %)Serial 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" %) 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" %) 182 182 183 183 == Advanced == 184 184 ... ... @@ -194,7 +194,7 @@ 194 194 Blink while: 1=Limp; 2=Holding; 4=Accel; 8=Decel; 16=Free 32=Travel; 195 195 ))) 196 196 197 -== Details == 197 +== Details - Basic == 198 198 199 199 ====== __1. Limp (**L**)__ ====== 200 200 ... ... @@ -297,7 +297,7 @@ 297 297 298 298 ====== __9. Position in Degrees (**D**)__ ====== 299 299 300 -Example: #5 PD1456<cr>300 +Example: #5D1456<cr> 301 301 302 302 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. 303 303 ... ... @@ -396,7 +396,7 @@ 396 396 397 397 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. 398 398 399 -0=O FF1=RED2=GREEN3=LUE4=YELLOW5=CYAN6= 7=MAGENTA, 8=WHITE399 +0=Off (black); 1=Red 2=Green; 3=Blue; 4=Yellow; 5=Cyan; 6=Magenta; 7=White; 400 400 401 401 Query LED Color (**QLED**) 402 402 ... ... @@ -446,7 +446,7 @@ 446 446 447 447 ====== __17. Baud Rate__ ====== 448 448 449 -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.449 +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 9600. The baud rates are currently restricted to those above. 450 450 451 451 Query Baud Rate (**QB**) 452 452 ... ... @@ -466,21 +466,21 @@ 466 466 467 467 Command coming soon.... 468 468 469 -====== __19. First Position (Degrees) (**FD**)__ ======469 +====== __19. First Position (Degrees)__ ====== 470 470 471 -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. FPandFDare differentnthat FP is usedfor RC mode only,whereasFDisusedfor smartmodeonly.471 +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. 472 472 473 473 Query First Position in Degrees (**QFD**) 474 474 475 475 Ex: #5QFD<cr> might return *5QFD64<cr> 476 476 477 -The reply above indicates that servo with ID 5 has a first position pulse of 1550 microseconds. 477 +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 478 478 479 479 Configure First Position in Degrees (**CFD**) 480 480 481 481 Ex: #5CD64<cr> 482 482 483 -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. 483 +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> 484 484 485 485 ====== __20. Query Model String (**QMS**)__ ====== 486 486 ... ... @@ -595,7 +595,7 @@ 595 595 596 596 Note that after the CONFIRM command is sent, the servo will automatically perform a RESET. 597 597 598 -= Advanced = 598 +== Details - Advanced == 599 599 600 600 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. 601 601 ... ... @@ -706,3 +706,9 @@ 706 706 Ex: #5CLB63<cr> blink in all status (1 + 2 + 4 + 8 + 16 + 32) 707 707 708 708 RESETTING the servo is needed. 709 + 710 += RGB LED Patterns = 711 + 712 +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]] 713 + 714 +[[image:LSS - LED Patterns.png]]
- LSS - LED Patterns.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +xwiki:XWiki.RB1 - Size
-
... ... @@ -1,0 +1,1 @@ 1 +116.3 KB - Content