PWM Servo Feedback (ADC) icon PWM Servo Feedback (ADC) — Add ADC positional feedback to hobby PWM servos via minor mod to EZ-B/Arduino; enables real-time position readout, calibration and puppet mirroring Try it →
 
Feetech Serial Bus Servo Robot Skill

Feetech Serial Bus Servo

by FeeTech

Control Feetech SC serial bus smart servos via EZB UART or PC COM port with ARC virtual ports, speed, position, release, and acceleration.

Compatible with: Compatible with Microsoft Windows 10 or 11 Windows

How to add the Feetech Serial Bus Servo robot skill

  1. Load the most recent release of ARC (Get ARC).
  2. Press the Project tab from the top menu bar in ARC.
  3. Press Add Robot Skill from the button ribbon bar in ARC.
  4. Choose the Servo category tab.
  5. Press the Feetech Serial Bus Servo icon to add the robot skill to your project.

Don't have a robot yet?

Follow the Getting Started Guide to build a robot and use the Feetech Serial Bus Servo robot skill.


How to use the Feetech Serial Bus Servo robot skill

Control Feetech serial bus smart servos over EZB UART or PC COM port. The selected ARC’s Vx virtual ports must match the servo IDs in the config screen - and voila, you're off to the robot races!

A Bus servo from Feetech has a model number starting with SC, such as SC215.

Main Window

The main window on the project workspace displays information about active connections and errors. To configure the servos, press the ... configuration in the title bar.

User-inserted image

Configuration Screen

The configuration allows selecting the virtual servo ports that represent the ID's of the Freetech servos. For example, if the servo ID is #1, V1 will be used. Also, the communication type must be specified (EZB UART or PC COM Port).

User-inserted image

Baudrate This skill's baud rate is 1,000,000 bps, which is also the default baud rate for Feetech servos.

ID All new Feetech servos will have a factory default ID of #1, V1 in ARC. Select the Vx ID that matches the servo's ID.

Changing servo ID

If you want to reprogram the servo ID, you need to use the SCS15 software V1.6. Download it HERE. The software requires connecting the servo to a USB device or an Arduino.

ARC Capabilities

ARC has many parameters that can be assigned to servo movements. When selecting a servo, these parameters are specified by script commands or in the Advanced menu of robot skills. This skill supports the following ARC parameters...

  • Servo position
  • Speed
  • Release
  • Acceleration

User-inserted image

User-inserted image

How To Use

These steps will demonstrate how to add the Feetech serial bus skill to a project and use a standard servo skill control to move it. All skill controls that use servos can now move the servo, including the camera, joystick, scripting, and more. Select the virtual servo port, and any skill can move the servo.

In this example, we'll be using a USB Feetech servo controller. These controllers will create a COM port on the PC we will select. The SCPC-2 or URT-1 works great for this application. Alternatively, if you wish to wire the servos directly to a custom hardware UART, it will require the option to be selected in the config menu in the steps below and additional hardware.

Step 1 Load the latest version of ARC on your Windows-based PC.

Step 2 In ARC, press Project -> Robot Skills -> Add from the top menu

User-inserted image

Step 3 Select Servos and locate the Feetech Serial Bus skill when the skills window is displayed. Press the Download icon to download and install the skill to your project.

User-inserted image

Step 4 Locate the Feetech Serial Bus skill on your project workspace. Press the Config button in the title bar to access the configuration menu.

User-inserted image

Step 5 In this example, we will use the USB COM Port to control the servos. Select the Use COM Port option and select the COM port for the USB controller.

Additionally, the default ID of a new servo will be #1, which is V1 in ARC. A servo ID of #2 will be V2 in ARC, and so on. Select the V1 so ARC will now map all references of servo V1 to the Feetech servo with ID #1.

Press SAVE

User-inserted image

Step 6 Now we will add a basic servo control to test the Feetech servo. Press Project -> Robot Skills -> Add from the top menu. Locate the Servo tab and click the Horizontal Servo to add it to the workspace.

User-inserted image

Step 7 Configure the Horizontal Servo skill by pressing the config button in the title bar.

User-inserted image

Step 8 Selecting the port for this control. Press the Port button to choose the servo port.

User-inserted image

Step 9 The dialog popup for port selection will display. Select V1 from the Virtual Port drop-down list. Press SAVE

User-inserted image

Step 10 The servo's Min and Max range can be selected. Each control that uses servos will have its own custom range. Click in the Min and Max value and drag the mouse UP or DOWN to select the range. Alternatively, you may right-click to enter a range with the keyboard. Keep in mind that the servo will move into each range as you change the value. Press SAVE once the range has been adjusted to return to the workspace.

User-inserted image

Finished You may now click on the servo value to drag the mouse Left or Right to move the position. If you right-click, you can enter a numeric value on the keyboard. The servo will only move within the range you specify.

Try other robot skill controls, such as the Auto Position or Joystick, with this servo. All robot skills that use servos can now reference this servo using the virtual port ID.

User-inserted image


Control Commands for the Feetech Serial Bus Servo robot skill

There are Control Commands available for this robot skill which allows the skill to be controlled programmatically from scripts or other robot skills. These commands enable you to automate actions, respond to sensor inputs, and integrate the robot skill with other systems or custom interfaces. If you're new to the concept of Control Commands, we have a comprehensive manual available here that explains how to use them, provides examples to get you started and make the most of this powerful feature.

Control Command Manual

SetPositionRaw

Move the servo to the raw position of the servo, rather than the ARC servo position

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Raw position (0 to 1023) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetPositionRaw", "Virtual servo port (v1, v2, v3 ...) as a string", Raw position (0 to 1023) as a number)

SetPositionRawTimed

Move the servo to the raw position using the specified time and speed. The servo uses the speed when both are given

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Raw position (0 to 1023) as Number (required)
  • Parameter 5: Time in ms (0 to ignore) as Number (required)
  • Parameter 6: Speed, 0.19 degrees/s per unit (0 for maximum) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetPositionRawTimed", "Virtual servo port (v1, v2, v3 ...) as a string", Raw position (0 to 1023) as a number, Time in ms (0 to ignore) as a number, Speed, 0.19 degrees/s per unit (0 for maximum) as a number)

SetTorqueEnable

Enable or disable the torque of the servo. Disabling the torque releases the servo

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: true = hold position, false = release as Boolean (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetTorqueEnable", "Virtual servo port (v1, v2, v3 ...) as a string", true = hold position, false = release as true or false)

SetSpeed

Set the goal speed which the servo uses to move to a position

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Goal speed, 0.19 degrees/s per unit (0 for maximum) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetSpeed", "Virtual servo port (v1, v2, v3 ...) as a string", Goal speed, 0.19 degrees/s per unit (0 for maximum) as a number)

SetWheelMode

Put the servo into the continuous rotation (motor) mode by setting both angle limits to zero

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetWheelMode", "Virtual servo port (v1, v2, v3 ...) as a string")

SetJointMode

Put the servo back into the position (joint) mode by setting the angle limits

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Minimum raw position (0 to 1023) as Number (required)
  • Parameter 5: Maximum raw position (0 to 1023) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetJointMode", "Virtual servo port (v1, v2, v3 ...) as a string", Minimum raw position (0 to 1023) as a number, Maximum raw position (0 to 1023) as a number)

SetWheelSpeed

Set the speed and direction of the servo while it is in the continuous rotation (motor) mode

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Speed (-1023 to 1023) where a negative value is clockwise as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetWheelSpeed", "Virtual servo port (v1, v2, v3 ...) as a string", Speed (-1023 to 1023) where a negative value is clockwise as a number)

SetMaxTorque

Set the maximum output torque of the servo. This is saved in the eprom of the servo

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Max torque (0 to 1023) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetMaxTorque", "Virtual servo port (v1, v2, v3 ...) as a string", Max torque (0 to 1023) as a number)

SetMinimumPWM

Set the minimum pwm (punch) of the servo, which is the smallest output that it will drive the motor with

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Minimum pwm (0 to 1023) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetMinimumPWM", "Virtual servo port (v1, v2, v3 ...) as a string", Minimum pwm (0 to 1023) as a number)

SetPositionPID

Set the position loop pid of the servo, which is how strongly the servo reacts to a position error

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: P proportional coefficient (0 to 254) as Number (required)
  • Parameter 5: D differential coefficient (0 to 254) as Number (required)
  • Parameter 6: I integral coefficient (0 to 254) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetPositionPID", "Virtual servo port (v1, v2, v3 ...) as a string", P proportional coefficient (0 to 254) as a number, D differential coefficient (0 to 254) as a number, I integral coefficient (0 to 254) as a number)

SetIntegralLimit

Set the limit of the integral term of the position loop

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Integral limit (0 to 1023) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetIntegralLimit", "Virtual servo port (v1, v2, v3 ...) as a string", Integral limit (0 to 1023) as a number)

SetDifferentialSampling

Set the differential sampling coefficient of the position loop

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Sampling coefficient (0 to 254) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetDifferentialSampling", "Virtual servo port (v1, v2, v3 ...) as a string", Sampling coefficient (0 to 254) as a number)

SetDeadBand

Set the dead band of the servo. A larger value is less sensitive and jitters less

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Clockwise dead band (1 unit is about 0.38 degrees) as Number (required)
  • Parameter 5: Counter clockwise dead band (1 unit is about 0.38 degrees) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetDeadBand", "Virtual servo port (v1, v2, v3 ...) as a string", Clockwise dead band (1 unit is about 0.38 degrees) as a number, Counter clockwise dead band (1 unit is about 0.38 degrees) as a number)

SetPositionLimits

Set the angle limits of the servo. Setting both to zero puts the servo into the continuous rotation mode

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Minimum raw position (0 to 1023) as Number (required)
  • Parameter 5: Maximum raw position (0 to 1023) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetPositionLimits", "Virtual servo port (v1, v2, v3 ...) as a string", Minimum raw position (0 to 1023) as a number, Maximum raw position (0 to 1023) as a number)

SetTemperatureLimit

Set the maximum operating temperature of the servo

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Temperature in celsius (0 to 100) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetTemperatureLimit", "Virtual servo port (v1, v2, v3 ...) as a string", Temperature in celsius (0 to 100) as a number)

SetVoltageLimits

Set the operating voltage window of the servo

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Minimum voltage (i.e. 4.5) as Number (required)
  • Parameter 5: Maximum voltage (i.e. 8.5) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetVoltageLimits", "Virtual servo port (v1, v2, v3 ...) as a string", Minimum voltage (i.e. 4.5) as a number, Maximum voltage (i.e. 8.5) as a number)

SetUnloadingCondition

Set which protections will release the servo

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Bit flags. 1 voltage, 4 overheat, 32 overload as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetUnloadingCondition", "Virtual servo port (v1, v2, v3 ...) as a string", Bit flags. 1 voltage, 4 overheat, 32 overload as a number)

SetLedAlarmCondition

Set which protections will flash the led of the servo

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Bit flags. 1 voltage, 4 overheat, 32 overload, 0 turns the led off as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetLedAlarmCondition", "Virtual servo port (v1, v2, v3 ...) as a string", Bit flags. 1 voltage, 4 overheat, 32 overload, 0 turns the led off as a number)

SetId

Change the bus id of the servo. Only have one servo on the bus when you do this

  • Parameter 3: Virtual servo port of the servo today (v1, v2, v3 ...) as String (required)
  • Parameter 4: The new id (0 to 253) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetId", "Virtual servo port of the servo today (v1, v2, v3 ...) as a string", The new id (0 to 253) as a number)

SetBaudRate

Change the baud rate of the servo. The plugin baud rate must be changed to match after this

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: 0=1000000, 1=500000, 2=250000, 3=128000, 4=115200, 5=76800, 6=57600, 7=38400 as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetBaudRate", "Virtual servo port (v1, v2, v3 ...) as a string", 0=1000000, 1=500000, 2=250000, 3=128000, 4=115200, 5=76800, 6=57600, 7=38400 as a number)

SetReturnDelayTime

Set how long the servo waits before it responds to an instruction

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Delay, 2us per unit (0 to 254) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetReturnDelayTime", "Virtual servo port (v1, v2, v3 ...) as a string", Delay, 2us per unit (0 to 254) as a number)

SetStatusReturnLevel

Set which instructions the servo will answer. Answering everything will slow the bus down

  • Parameter 3: Virtual servo port, or ALL for every servo on the bus as String (required)
  • Parameter 4: true = only answer read and ping, false = answer everything as Boolean (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetStatusReturnLevel", "Virtual servo port, or ALL for every servo on the bus as a string", true = only answer read and ping, false = answer everything as true or false)

SetLock

Lock or unlock the eprom of the servo. The lock must be off to permanently change an eprom value

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: true = eprom writes are not saved, false = eprom writes are saved as Boolean (required)

Example:

controlCommand("Feetech Serial Bus Servo", "SetLock", "Virtual servo port (v1, v2, v3 ...) as a string", true = eprom writes are not saved, false = eprom writes are saved as true or false)

FactoryReset

Reset the servo to the factory defaults. This also changes the id of the servo back to 1

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)

Example:

controlCommand("Feetech Serial Bus Servo", "FactoryReset", "Virtual servo port (v1, v2, v3 ...) as a string")

WriteRegisterByte

Write a single byte to the specified register address of the servo

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Register address as Number (required)
  • Parameter 5: Value (0 to 255) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "WriteRegisterByte", "Virtual servo port (v1, v2, v3 ...) as a string", Register address as a number, Value (0 to 255) as a number)

WriteRegisterWord

Write a 16 bit value (high byte first) to the specified register address of the servo

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Register address as Number (required)
  • Parameter 5: Value (0 to 65535) as Number (required)

Example:

controlCommand("Feetech Serial Bus Servo", "WriteRegisterWord", "Virtual servo port (v1, v2, v3 ...) as a string", Register address as a number, Value (0 to 65535) as a number)

ReadRegisterByte

Returns a single byte from the specified register address of the servo

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Register address as Number (required)
  • Returns: Integer [-2,147,483,648 to 2,147,483,647]

Example:

controlCommand("Feetech Serial Bus Servo", "ReadRegisterByte", "Virtual servo port (v1, v2, v3 ...) as a string", Register address as a number)

ReadRegisterWord

Returns a 16 bit value (high byte first) from the specified register address of the servo

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Parameter 4: Register address as Number (required)
  • Returns: Integer [-2,147,483,648 to 2,147,483,647]

Example:

controlCommand("Feetech Serial Bus Servo", "ReadRegisterWord", "Virtual servo port (v1, v2, v3 ...) as a string", Register address as a number)

GetPosition

Returns the raw position of the servo (0 to 1023)

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Returns: Integer [-2,147,483,648 to 2,147,483,647]

Example:

controlCommand("Feetech Serial Bus Servo", "GetPosition", "Virtual servo port (v1, v2, v3 ...) as a string")

GetGoalPosition

Returns the raw position which the servo has been told to move to (0 to 1023)

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Returns: Integer [-2,147,483,648 to 2,147,483,647]

Example:

controlCommand("Feetech Serial Bus Servo", "GetGoalPosition", "Virtual servo port (v1, v2, v3 ...) as a string")

GetSpeed

Returns the speed of the servo where a negative value is the other direction

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Returns: Integer [-2,147,483,648 to 2,147,483,647]

Example:

controlCommand("Feetech Serial Bus Servo", "GetSpeed", "Virtual servo port (v1, v2, v3 ...) as a string")

GetLoad

Returns the load of the servo (-1023 to 1023) where the sign is the direction of the load

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Returns: Integer [-2,147,483,648 to 2,147,483,647]

Example:

controlCommand("Feetech Serial Bus Servo", "GetLoad", "Virtual servo port (v1, v2, v3 ...) as a string")

GetVoltage

Returns the voltage of the servo in volts

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Returns: Double [5.0e324 to 1.7e308]

Example:

controlCommand("Feetech Serial Bus Servo", "GetVoltage", "Virtual servo port (v1, v2, v3 ...) as a string")

GetTemperature

Returns the temperature of the servo in celsius

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Returns: Integer [-2,147,483,648 to 2,147,483,647]

Example:

controlCommand("Feetech Serial Bus Servo", "GetTemperature", "Virtual servo port (v1, v2, v3 ...) as a string")

GetIsMoving

Returns true while the servo is moving. Not every SCS model has this register

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Returns: Boolean [true or false]

Example:

controlCommand("Feetech Serial Bus Servo", "GetIsMoving", "Virtual servo port (v1, v2, v3 ...) as a string")

GetTorqueEnabled

Returns true when the torque of the servo is enabled

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Returns: Boolean [true or false]

Example:

controlCommand("Feetech Serial Bus Servo", "GetTorqueEnabled", "Virtual servo port (v1, v2, v3 ...) as a string")

GetPing

Returns true when the servo answers on the bus

  • Parameter 3: Virtual servo port (v1, v2, v3 ...) as String (required)
  • Returns: Boolean [true or false]

Example:

controlCommand("Feetech Serial Bus Servo", "GetPing", "Virtual servo port (v1, v2, v3 ...) as a string")

ARC Pro

Upgrade to ARC Pro

Become a Synthiam ARC Pro subscriber to unleash the power of easy and powerful robot programming

Author Avatar
PRO
USA
LinkedIn Twitter Google+ YouTube
#1  

2 questions. Can this be used on the EZ-B using uart D5 D6? 

When might this be updated  be to include changing servo ID as described above?

Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#2  
  1. it can use all ezb uart or pc com

  2. I do not have a date for adding the utility to change ids. Right now we use the software provided by the servo manufacturer

Author Avatar
PRO
USA
LinkedIn Twitter Google+ YouTube
#3  

Ok thank you for the info.

Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#4  

No prob:D 

They're utility software is really great and has a number of features that would be duplicate effort for us to implement. Makes sense to use the features implemented by their team.

Author Avatar
PRO
Canada
Twitter
#5  

Interesting.  The SCS15 SCS20 and SCS25 etc look size and bracket compatible with the HDD servo's. Maybe time to give my old JD robot an overhaul and cut down the wires (especially after the potentiometer hack). Anyone tested these servo's?  Do they fit in JD or other ez-robot brackets?   The Micro HDD is pretty small 10cm and I can't find a size compatible. SCS009 is 22cm so huge difference.  I guess I would need to keep the original HDD servo in the head, neck and hands (or do a redesign).

Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#6  

Why would you want to swap the hdd servos out? Nothing competes in that form factor

Author Avatar
PRO
Canada
Twitter
#7  

Position Feedback, Higher Torque (25kg, 30kg, 35kg), Less Wires ...  If you spent some time redesigning the servo brackets / connectors you could also remove wiring all together.  I love the Clicbots, they use TTL servo's  and no wires.

Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#8  

That clickbot was one of the worst experiences I’ve had with a product. There’s not enough power because the servos connect inline with high resistance of each connection. 

I misunderstood your original post about switching the hdd servos because you mentioned potentiometer hack. But I think what you were trying to say is swapping the servos doesn’t mean you have to do the hack. 

I haven’t had great experience with these servos coming close to the advertised specs. But they should be ok - maybe not great for a jd but I’d like you to find out:) worth the trial!