OpenCM 9.04 controller and XL-320 servos

Hello you all,

I bought an OpenCM 9.04C controller, along with a bunch of XL-320 servos. Here’s my setup:

  • 1 XL-320 plugged into the OpenCM
  • A 7.4V battery plugged into the OpenCM controller.
  • The OpenCM controller is plugged into my Windows machine via the microUSB port.

I want to control the servo with this setup and if all goes well, change the ID of the other servos to be able to controller them all individuallt once daisy chained.

However, I tried the Easy Dynamixel samples to get the ID of the servo with no luck. The servo is not recognized. What am I doing wrong?

Thanks for your hints!

Kadersin

Hi,

What kind of problem are you having ?

Can you detect the OpenCM controller is detected in Windows’s peripheral Manager ? If not, maybe there is a driver issue. You should be able to find them here: support.robotis.com/en/techsupport_eng.htm#product/controller/opencm9.04.htm

Please give us as much information as possible on your problem to help us investigate.

Best regards,

Hello,

I have succeed in uploading the Blink program onto the OpenCM. I saw the led blink as expected. Now, I have connected the XL-320 servo and the battery to the OpenCM.

I opened the Easy Dynamixel getID sample into the arduino-like editor and uploaded it onto the OpenCM. The upload it successful. I launch the Serial Monitor to see the output and I don’t have the expected output (which should give me the ID of the servo attached). The program outputs is correct, but it has not detected the servo.

Kadersin

Here is the sample name: “a_getModelNumber”

The code (the output follows):

[code]/* Dynamixel Model Scan

Searches through all valid IDs to find all dynamixel devices currently on
the bus, and uses the Model Number to identify the device by name
ported from Dxl_Model_Scan by ROBOTIS CO,.LTD.
/
/
Serial device defines for dxl bus */
#define DXL_BUS_SERIAL1 1 //Dynamixel on Serial1(USART1) <-OpenCM9.04
#define DXL_BUS_SERIAL2 2 //Dynamixel on Serial2(USART2) <-LN101,BT210
#define DXL_BUS_SERIAL3 3 //Dynamixel on Serial3(USART3) <-OpenCM 485EXP

Dynamixel Dxl(DXL_BUS_SERIAL1);
void setup() {
// put your setup code here, to run once:

// Dynamixel 2.0 Baudrate -> 0: 9600, 1: 57600, 2: 115200, 3: 1Mbps
Dxl.begin(3);

pinMode(BOARD_LED_PIN, OUTPUT);

// Waits 5 seconds for you to open the console
//(open too quickly after downloading new code, and you will get errors
delay(5000);
SerialUSB.print(“Send any value to continue…\n”);
while(!SerialUSB.available())
{
delay(1000);
digitalWrite(BOARD_LED_PIN, LOW);
SerialUSB.print(“Send any value to continue…\n”);
delay(1000);
digitalWrite(BOARD_LED_PIN, HIGH);
}
}
int model;
void loop() {
// put your main code here, to run repeatedly:
for (int i=1; i<50; i++){
SerialUSB.print(i);
delay(10);

model = Dxl.getModelNumber(i);

if(model == 12)
SerialUSB.println(": AX-12A");

else if(model == 300)
SerialUSB.println(": AX-12W");

else if(model == 1)
SerialUSB.println(": AX-18A");

else if(model == 29)
SerialUSB.println(": MX-28");

else if(model == 54)
SerialUSB.println(": MX-64");

else if(model == 64)
SerialUSB.println(": MX-106");

else if(model == 350)
SerialUSB.println(": XL-320");

else{
if(model == 65535) model = 0;
SerialUSB.print(": Unknown : ");
SerialUSB.println(model);
}

}

while(1){
digitalWrite(BOARD_LED_PIN, LOW);
delay(100);
digitalWrite(BOARD_LED_PIN, HIGH);
delay(100);
}
}
[/code]
And the output:

Send any value to continue…
1: Unknown : 0
2: Unknown : 0
3: Unknown : 0
4: Unknown : 0
5: Unknown : 0
6: Unknown : 0
7: Unknown : 0
8: Unknown : 0
9: Unknown : 0
10: Unknown : 0
11: Unknown : 0
12: Unknown : 0
13: Unknown : 0
14: Unknown : 0
15: Unknown : 0
16: Unknown : 0
17: Unknown : 0
18: Unknown : 0
19: Unknown : 0
20: Unknown : 0
21: Unknown : 0
22: Unknown : 0
23: Unknown : 0
24: Unknown : 0
25: Unknown : 0
26: Unknown : 0
27: Unknown : 0
28: Unknown : 0
29: Unknown : 0
30: Unknown : 0
31: Unknown : 0
32: Unknown : 0
33: Unknown : 0
34: Unknown : 0
35: Unknown : 0
36: Unknown : 0
37: Unknown : 0
38: Unknown : 0
39: Unknown : 0
40: Unknown : 0
41: Unknown : 0
42: Unknown : 0
43: Unknown : 0
44: Unknown : 0
45: Unknown : 0
46: Unknown : 0
47: Unknown : 0
48: Unknown : 0
49: Unknown : 0

Hi,

Is it possible that the Actuator ID has already been changed ? Maybe try looping to 252 to test all possible IDs.

Best regards,

I tried to loop to 255 and nothing works. I tried with two servos (both XL-320) with the same result.

When I power up the controller with the servo plugged in, a red led light up for 1 second then turns off. I don’t know if it is normal or not.

Kadersin

Hi,

You seem to be doing everything according to the provided examples and your power supply seems good. Maybe you should contact Dynamixel directly ([email protected]) to see if they have an Idea of the problem.

Let us know if you find out anything.

Sincerely,

Update:

After contacting Robotis, they made me upgrade the IDE to v1.04 (I had 1.03). It now works as expected!

Regards,

Kad

Hi,

This is good news.

Thank you for sharing the information.

Best regards,

how to join ax12 and xl 320 servo’s with 12v?

The Dynamixel AX-12 may work with 12 volts (11.1 volts is better), but the XL320 definitely will not. They work at 7.4 volts.

You will have to feed 12 volts to the AX-12 and use a buck switching regulator to give 7.4 volts to the XL-320. Google “buck switching regulator” to know what it is and how to get one.