XC330-T288 - High Idle Temperatures

  1. What model of servo are you using?
    8x XC330-T288 and 8x XL330-M288 split across two arms. They in the following configuration for each arm:
  • XC330-T288: Shoulder (in/out), Shoulder (forwards/backwards), Shoulder (rotation), elbow
  • XL330-M288: wrist rotation, wrist (up/down), wrist (left/right), hand
  1. Describe your control environment. This includes the controller or interface, and any power source.
    This is a two armed robot, it has a 16v battery with regulators for 11.1v and 5v for the two servo types. I am controlling them using an U2D2 from a PC for development and a Raspberry Pi onboard the robot.

  2. Specify the operating mode for applicable models, and any firmware settings you are using.
    All servos are currently in extended position mode, IDs have been set but otherwise all at factory settings.

  3. Include pictures if possible.
    Rear of the robot, the circuit board is a simple circuit that takes the TTL signal and combines it in to a wiring loom of ground, data, 11.1v, and 5v. The four servos from shoulder to elbow are 11.1v, from there the other four are 5v.

I made a custom loom for the arms, this passes through ground and data and 11.1v from the start until (and including) the elbow. Then injects 5v for the rest. This is the same on both arms.

This shows the other arm with the original wiring for testing.

Full photo of the robot, the head is a work in progress as I’m redesigning to use a new set of cameras.

  1. Include a full description of the issue.
    At idle the XC330-T288 servos run a lot warmer than I would expect. Most are in the 45-55c range and one slowly approaches 70c at idle and quickly enters over-temperature mode.
    What are the expected temperatures for these servos at idle? For comparison, the XL330-M288 servos all sit at around 17-23c at idle so I’m not in a very warm environment. Are these all faulty or is the 45-55c range to be expected?
1 Like

@kneave - Very cool robot! Good job on all the 3-D printed parts!

Your XC DXLs are in Position Control mode and they make up the shoulders which then support long and possibly “heavy” arms. So even though they may be “still”, the XC DXLs are still powered to keep the whole arms “steady”.

Can you use Dynamixel Wizard and U2D2 to access your robot, and then TORQUE-OFF all your XC DXLs (the robot’s shoulders will go “limp” and so be careful to put your robot on a “safe” support work space). Then watch to see if the XC’s temperatures go up or get themselves into the “over-temperature” mode or not.

Next TORQUE-ON all XC DXLs and watch how the DXL temperatures go up into the “high” zone or not. Probably the XCs closest to the “body” will get “hot” first.

Hi Roboteer,

Thanks! I’ve been working on him for a long time now, slowly getting to the point where I’m happy with him and the new servos are a big part of that!

The temperatures I mentioned are from switching the robot on and providing power to the servos, these are without torque enabled at all and the arms just hanging limp.

I’ll hook the servos back up and put them in to home mode and let you know what the temperatures do, the shoulder servo that hits 70 at idle will almost certainly immediately shut off so the temperatures for the left arm may not be a valid test. The right arm should be ok though, that one seems fine.

I have an Hexapod which has a similar issue with its hip/knee servo. Robotis included some white grease in their Engineer kits to put on all rubbing surfaces and that helped. Don’t know what kind of white grease though, it seemed to be safe enough on plastics parts so far.

Lithium grease maybe? I have a pot of that for other projects and it’s white. I didn’t get any with mine though and the only mention I found on here was from your post :rofl:

Good to know though, will look in to it for sure

I updated my script to do a bulk read of temperatures:

IDs as follows:
XC330-T288 (11.1v): 100 - 103, 108 - 111
XL330-M288 (5.0v): 104 - 107, 112 - 115

I can’t upload a text file so here are the first and last temperatures

[22:33:34] : {100: 26, 101: 26, 102: 29, 103: 24, 104: 19, 105: 20, 106: 20, 107: 20, 108: 26, 109: 26, 110: 26, 111: 25, 112: 19, 113: 19, 114: 19, 115: 19}

[22:47:11] : {100: 52, 101: 59, 102: 70, 103: 51, 104: 22, 105: 22, 106: 23, 107: 24, 108: 54, 109: 60, 110: 59, 111: 52, 112: 22, 113: 22, 114: 22, 115: 22}

In only 14 minutes while idle, the worst of the XC330s goes from 29c to 70c, the others are already at the top end of the working temperatures too looking at it closer. I’ve removed the XL330-M288s that are all happily sitting at 22-24c and left only the XC330-T288s.

{100: 52, 101: 59, 102: 70, 103: 52, 108: 54, 109: 60, 110: 60, 111: 52 }

I just realised I left them powered on and had another look as I noticed the LED flashing on one of them:

[23:1:31] : {100: 54, 101: 62, 102: 73, 103: 53, 104: 23, 105: 22, 106: 23, 107: 24, 108: 55, 109: 63, 110: 61, 111: 53, 112: 22, 113: 22, 114: 22, 115: 22}

Four of the eight XC330s are above the recommended temperature range and the worst has raised to 73c! After being idle for 29 minutes this seems really excessive.

These temperatures seem awfully close to the upper limit for this model, remember these values are all at idle with torque disabled for all of them. They were literally just given power and asked to report their temperatures so performing no operations.

Is this expected behaviour or are they all showing signs of a fault? I’ve barely used these too, maybe 15 minutes of working life on them all, and that life was just “raise your arm”. With all the default current and temperature protections in place I don’t see how they could have damaged themselves either.

If anyone can shed light on this I’d appreciate it, I’ve several hundred pounds of servos that it seems I can’t use at the minute and if they are faulty, I’d love to get them replaced sooner than later.

===== Below the code that let me generate the temperature log in case it’s useful to others =====

Code snippets to do it follow, this isn’t a full script but should give you enough to add the same functionality to your own if needed.

Definitions for various addresses

# Control table address
ADDR_HOMING_OFFSET          = 20
ADDR_TORQUE_ENABLE          = 64
ADDR_LED_RED                = 65
ADDR_GOAL_POSITION          = 116
BAUDRATE                    = 1000000

Method that reads all the temperatures and returns them in a map:

def readAllTemperatures():
    groupSyncRead = GroupSyncRead(portHandler, packetHandler, ADDR_PRESENT_TEMPERATURE, 1)
    for servo_name, servo_id in servos.items():
        dxl_addparam_result = groupSyncRead.addParam(servo_id)

    dxl_comm_result = groupSyncRead.txRxPacket()
    if dxl_comm_result != COMM_SUCCESS:
        print("%s" % packetHandler.getTxRxResult(dxl_comm_result))

    present_temperature = {}
    for servo_name, servo_id in servos.items():
        dxl_getdata_result = groupSyncRead.isAvailable(servo_id, ADDR_PRESENT_TEMPERATURE, 1)
        if dxl_getdata_result != True:
            print("[ID:%03d] groupSyncRead getdata failed" % servo_id)
            present_temperature[servo_id] = None
            present_temperature[servo_id] = int(groupSyncRead.getData(servo_id, ADDR_PRESENT_TEMPERATURE, 1))

    return present_temperature

For reference, all my servos are defined in a map. This makes them easy to iterate over but also means I can get the friendly name for the ID in case there’s an error. It makes troubleshooting a lot easier as I don’t have to remember them:

servos = {
    "LEFT_SHOULDER_INOUT":       100,
    "LEFT_UPPERARM_ROTATE":      102,
    "LEFT_ELBOW":                103,
    "LEFT_WRIST_ROTATE":         104,
    "LEFT_WRIST_LEFTRIGHT":      105,
    "LEFT_WRIST_UPDOWN":         106,
    "LEFT_HAND":                 107,
    "RIGHT_SHOULDER_INOUT":      108,
    "RIGHT_ELBOW":               111,
    "RIGHT_WRIST_ROTATE":        112,
    "RIGHT_WRIST_UPDOWN":        114,
    "RIGHT_HAND":                115

To create a log file and call the readAllTemperatures() method:

log_file = open("temp_log.txt", "at")

# Just print all the positions/temperatures
while 1:
    current_time = datetime.now()
    line = "[{0}:{1}:{2}] : {3}\n".format(  current_time.hour,

    # print(readAllPositions())


I think that you need to have Robotis folks have a closer look at these XC-330 DXLs. These DXLs have metallic gears and metal bearings so they should have good heat dissipation.

1 Like

Hmm, in that case it makes the temperature issue look even worse I guess as they should be better at wicking the heat away.

This has just reminded me that when I was unboxing them a few of them were really greasy to the touch, the really hot one has a residue on the outer casing too. May be a red herring but worth noting I guess.

I’m in contact with the company I bought them from, I first asked about the one servo hitting 70c and they offered to replace that. I’m asking about the others too as they also seem too high now I’ve looked closer.

Fingers crossed, there’s ~£700 of servos I can’t afford to replace right now otherwise and I was finally getting momentum on the project too! :cry:

Glad that you can get some help to check them out. Ouch! ~£700!!! Sounds like that you got past the warranty period.

In my case, a couple of months ago, one XL-330 started to smoke on my CarBot, then knocked out my other 3 XL-330s and also an Arduino board too, but they were working fine for over a year - so past the warranty period!

Aye, eight at 80 quid each. I actually got them about five mo this ago and they sat in their boxes as I was too afraid to use them in case I broke them! Damn ironic…


This is Jonathon, the Technical Specialist for the US branch of ROBOTIS.

While it’s normal for DYNAMIXELs to experience some amount of heat buildup during use, the 70C you are reporting at idle for servo 102 does seem excessive.

My first instinct here is that this heat buildup is the result of restricted airflow to the servos. By any chance are the servos reporting this heat buildup the ones circled in this photo?

If so, the high temperatures are due to both of the servos being pressed together with minimal room to vent heat into the air due to the thick black frame of the robot absorbing and holding heat.

In this case, I would recommend adding some clearance between the servos and possibly some additional ventilation holes to the frame to maximize the opportunity for passive cooling, or adding another small fan like the one shown in the photo to the outside of the frame.

If it’s not those servos that are overheating, would you be able to point out which DYNAMIXELs are overheating, and I’d be happy to do my best to provide further recommendations.

Hi Jonathon, it is that servo and that was one of the first things I tested. I removed the servos in question from the arms completely and they still get to the same temperatures. The one in the same position on the other arm does not get as warm either. It still reaches mid-50s however, and again this is inside or outside of the arm.

What temperatures would you expect these to sit at when idle? Should they match the ~22c that the 5v servos get to or should I expect them to run hotter?

Also, there are large holes on the other side of the upper-arm that are away from the camera. I designed them with the holes for cooling purposes. I will add clearance for a future version, as the issue occurs with the servos not mounted in the arms I think I have hardware issues to worry about first.

I had hoped that the solution would be as simple as just adding additional ventilation to your robot, but it’s good to hear that you have already tested and ruled that out.

The 11.1v servos will get a little hotter than the 5v units, but idle temperatures should still be under 30C-ish in either case. The 45-55C temperatures you reported in your initial post would be expected for heavy usage scenarios, but are quite elevated for having the torque off.

In this case, it seems like you may have received a bad batch of units. I’d recommend submitting your actuators for inspection and repair service, ROBOTIS offers a 1 year warranty for defects so they should still be covered if the inspections uncover a manufacturing issue.

1 Like

I was hoping there was some setting that would literally get them to chill out too, I was finally making progress on the robot and this is quite a setback for sure.

I bought these from a company in Europe, I’m guessing it would be the “step 3” in the link you shared. They said they have sent an email to someone at Robotis asking about this but I’ve no idea who they spoke to. As you’ve suggested this is there some way we could get you in touch with the person I’m talking to at the retailer to get them to agree to the RMA please? What’s the timescale for turnaround of the RMA process too please once it begins?

I need to understand so I can plan appropriately for this project, I was hoping to have the robot functional in a few weeks for a demo and may need to radically alter my plans.

I’ve sent them a link to your post at least, hopefully that will be enough to get things moving. :slight_smile:

Edit: Their website says that this model of servo is on backorder with a 4 week lead time. I’m guessing I’m going to have to change my plans. :frowning:

Unfortunately, I don’t have many details I can share with you regarding the RMA service policy for the EU. I’m from the US office, and our RMA procedure is handled differently than international service.

I have reached out to the team over at our HQ that handles RMA service in your region, and asked to see what they might be able to do about this situation though. I’ll update you with anything I hear back unless they reach out to you first.

1 Like

Amazing, thank you :slight_smile: