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.
1 2 3 4 | from pyax12.connection import Connection sc = Connection(port="/dev/ttyS4", baudrate=1000000) id = 3 |
The pretty_print_control_table() function is excellent for debugging. It shows every value that the servo stores in its EEPROM.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | model_number................. Unknown (300) firmware_version............. 28 id........................... 3 baud_rate.................... 1000000.0 bps return_delay_time............ 500 µs cw_angle_limit............... -150.0° (0) ccw_angle_limit.............. -150.0° (0) max_temperature.............. 80°C min_voltage.................. 6.0V max_voltage.................. 14.0V max_torque................... 1023 status_return_level.......... 2 (respond to all instructions) input_voltage_alarm_led...... off angle_limit_alarm_led........ off overheating_alarm_led........ on range_alarm_led.............. off checksum_alarm_led........... off overload_alarm_led........... on instruction_alarm_led........ off input_voltage_alarm_shutdown. off angle_limit_alarm_shutdown... off overheating_alarm_shutdown... on range_alarm_shutdown......... off checksum_alarm_shutdown...... off overload_alarm_shutdown...... on instruction_alarm_shutdown... off down_calibration............. 42 up_calibration............... 971 torque_enabled............... no led.......................... off cw_compliance_margin......... 1.2° (4) ccw_compliance_margin........ 1.2° (4) cw_compliance_slope.......... 18.8° (64) ccw_compliance_slope......... 18.8° (64) goal_position................ -149.7° (1) moving_speed................. 0 torque_limit................. 1023 present_position............. -150.0° (0) present_speed................ 0 present_load................. 0 present_voltage.............. 12.1V present_temperature.......... 27°C registred_instruction........ no moving....................... no locked....................... no punch........................ 32 |
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.
1 2 3 4 5 | // enable torque sc.write_data(id, 24, 0) // enable wheel mode (allows full rotation) sc.set_cw_angle_limit(id, 0, degrees=False) sc.set_ccw_angle_limit(id, 0, degrees=False) |
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:
1 | max_torque................... 80 |
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:
1 | sc.write_data(id, 0x0E, [0xFF, 0x03]) |
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.

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!
Thanks Jack! I think we now have enough functioning servos to put together a second robot, which should be great for testing!
Gгeat article. I’m dealing with a few of these issսes as well..