As I talked about in a previous post, half of our servos weren’t working. Of course, I was going to try to fix them before we spend anymore money on new ones, so that’s what I did today.

Some of them were broken for certain, they either didn’t show up at all when connected or gave a permanent overheating or voltage error/. However, some of them would function fine except they wouldn’t move.

So here’s how I got some of them working again. Using the pyax12 library.

The pretty_print_control_table() function is excellent for debugging. It shows every value that the servo stores in its EEPROM.

Some of the motors had their torque turned off, I believe this happens automatically after overheating. Also some of them had their rotation locked, which is useful for if you have an arm for example, with a limited range of movement, but less so if you’re testing them by making them continuously spin.

One of the stranger issues was one of our servos only moved at an excruciatingly slow speed. We assumed this was the gears, but looking at the control table revealed that:

How that happened, I have no idea. For this particular setting, the value for max_torque is stored in two bytes, the lowest byte in 0x0E and highest in 0x0F. Setting the two bytes individually, (to their default values of 0xFF and 0x03 respectively) didn’t work. I had to set them as followed:

The servo then needs to be powered off and on again to set the runtime torque limit to the value we just set.

I managed to fix three, maybe four of the servos which was great. This leaves five broken servos, which we’ll have to sort out later.

3 Responses
  1. Jack Williams

    Haha, we may have left some of the 12s in joint mode when we switched to the AX-18As on the S.A.R.T. Mk II – the original did have an arm. I’m glad some those servos were an easy fix, hope you have success with the rest too!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.