Results 1 to 4 of 4

Thread: Dynamixel AX-12a detected as UNKNOWN in Dynamixel Wizard

  1. Dynamixel AX-12a detected as UNKNOWN in Dynamixel Wizard

    I've got a bunch of AX-12a servos I'm using in a project. One of the servos can be detected using the Dynamixel Wizard software, and it even shows me the correct ID. However, it shows the device as 'UNKNOWN", and the Model Number value is 73, which is incorrect for AX-12a. How do I fix this? Can I somehow reset EEPROM?
    I tried firmware recovery, but the servo isn't detected in that.

  2. #2

    Re: Dynamixel AX-12a detected as UNKNOWN in Dynamixel Wizard

    Unless you are trying to use Trossen Robotics specific hardware (Arbotix) to talk to the servos, you might have a better chance getting answer up on the Robotis forums: http://en.robotis.com/service/forum.php

    My normal answer would be to use firmware recovery, but again don't know your hook up, to know if your controller supports it or not...

    You might also want to try their beta wizard 2...: https://community.robotsource.org/t/...ard-2-0/1608/2

  3. Re: Dynamixel AX-12a detected as UNKNOWN in Dynamixel Wizard

    Thanks for the reply! I'll make sure to ask this over at Robotis as well.

    I'm not using any controller, just connecting the Dynamixel to my PC using a combination of FTDI, Arduino and half-duplex/full-duplex circuitry in place of the USB2Dynamixel. That's been working well for me for 3 years, and I can detect all other functioning Dynamixels properly with it.

  4. #4

    Re: Dynamixel AX-12a detected as UNKNOWN in Dynamixel Wizard

    One interesting thing with setups to do the firmware recovery.

    The code will change baud rates at different times to do the recovery.

    So your code needs to be able to detect when FTDI has been asked to change baud rates and then change the rate you try to talk to the servos at that baud rate.

    I have done this in the past with simple program for OpenCM board and have done some code on Teensy 3.x, which also change baud rates.

    But in both of these cases the actual processor has the USB support built in and the firmware knows when the USB has asked for different baud.
    Example real simple Servo controller for OPenCM and OpenCR:
    Code:
    #include <DynamixelSDK.h>
    //====================================================================================================
    // Really basic Servo Controller...
    // This version for Robotis OpenCM9.04
    //====================================================================================================
    //=============================================================================
    // Options...
    //=============================================================================
    #define BAUDRATE                        1000000
    #define DEVICE 1
    #if DEVICE || defined(__OPENCR__)
    #define DEVICENAME                      "3"                 //DEVICENAME "1" -> Serial1(OpenCM9.04 DXL TTL Ports)
    #define DXLSerial Serial3
    #else
    #define DEVICENAME                      "1"                 //DEVICENAME "1" -> Serial1(OpenCM9.04 DXL TTL Ports)
    #define DXLSerial Serial1
    #endif
    
    #define BUFFER_SIZE   64
    //=============================================================================
    // Globals
    //=============================================================================
    dynamixel::PortHandler *portHandler = dynamixel::PortHandler::getPortHandler(DEVICENAME);
    uint8_t buffer[BUFFER_SIZE];
    int led_state = LOW;
    uint32_t g_baud_rate = BAUDRATE;
    
    //extern USBD_CDC_LineCodingTypeDef LineCoding;
    //====================================================================================================
    // Setup
    //====================================================================================================
    void setup() {
      pinMode(LED_BUILTIN, OUTPUT);
      Serial2.begin(115200);
      Serial.begin(BAUDRATE); // Init to actual default baud
      Serial2.println("Start Basic Servo Controller");
      // Open Port handler
      portHandler = dynamixel::PortHandler::getPortHandler(DEVICENAME);
      if (!portHandler->openPort()) signal_abort(1);
      if (!portHandler->setBaudRate(BAUDRATE)) signal_abort(2);
    
    }
    
    
    //====================================================================================================
    // loop
    //====================================================================================================
    void loop() {
      bool did_something = false;
      int cb;
      // First forward anything received from DXL
      cb = portHandler->readPort(buffer, BUFFER_SIZE);
      if (cb > 0) {
        Serial.write(buffer, cb);
        did_something = true;
      }
    
      // Now forward anything received on USB to DXL
      cb = 0;
      while (Serial.available()) {
        buffer[cb++] = Serial.read();
      }
      if (cb) {
        portHandler->writePort(buffer, cb);
        did_something = true;
      }
      if (did_something) {
        led_state = led_state ? LOW : HIGH;
        digitalWrite(LED_BUILTIN, led_state);
      }
    
      // lets see if USB baudrate changed?
      uint32_t new_baud_rate = Serial.getBaudRate();
      //uint32_t new_baud_rate = LineCoding.bitrate;
      if (new_baud_rate != g_baud_rate) {
        DXLSerial.begin(new_baud_rate);
        Serial2.print("New Baud Rate: ");
        Serial2.println(new_baud_rate, DEC);
        g_baud_rate = new_baud_rate;
      }
    }
    
    
    //====================================================================================================
    // Signal_Abort - Fatal error,  show blink pattern of error number...
    //====================================================================================================
    void signal_abort(uint8_t error) {
      for (;;) {
        for (uint8_t i = 0; i < error; i++) {
          digitalWrite(LED_BUILTIN, HIGH);
          delay(100);
          digitalWrite(LED_BUILTIN, LOW);
          delay(100);
        }
        delay(500);
      }
    }
    Don't remember if this one worked or not on OpenCM... But it shows how it changes baud rate...

    Personally I would suggest you might try to get something that is known to work for cases like this. For several years I simply used the USB2AX by Xevel to talk to servos from a PC.. Not sure if still available. Robotis would probably suggest U2D2.

    Or simply pick up an OpenCM9.04 board. $10 http://www.robotis.us/opencm9-04-a-n...ctors-onboard/
    And servo connection set $6 http://www.robotis.us/opencm9-04-con...accessory-set/
    And solder in the AX/MX style servos

    Or the OpenCM9.04 with connections plus the OpenCM 485 expansion board which has power and both TTL as well as RS485 AX/MX type servo connectors...

    Then you can simply reprogram the OpenCM board to default firmware and then it can recover servos...

Thread Information

Users Browsing this Thread

There are currently 2 users browsing this thread. (0 members and 2 guests)

Similar Threads

  1. Replies: 7
    Last Post: 01-10-2016, 03:14 AM
  2. Question(s) Not Able to Find AX-12A servo with Dynamixel Wizard
    By chenji28 in forum DYNAMIXEL & Robot Actuators
    Replies: 14
    Last Post: 12-30-2015, 11:31 PM
  3. Arduino Library for Dynamixel XL-320 (and Dynamixel PRO if modified).
    By LuisGIII in forum DYNAMIXEL & Robot Actuators
    Replies: 3
    Last Post: 06-07-2015, 11:00 PM
  4. 18 Dynamixel Ax-12A with ArbotiX/Arduino - How to connect the dynamixel?
    By Snuuq in forum Arbotix, Microcontrollers, Arduino
    Replies: 20
    Last Post: 02-14-2014, 11:29 AM

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •