아두이노에 mx모터 인식이 되지 않습니다

Issue:

다이나믹셀 예제 중 Dynamixel2Arduino → Basic → Ping 예제를 실행시켜 보았더니 연결이 실패했다고 뜹니다. 보드레이트 57600bps , 프로토콜 2.0 , 모터 아이디 1 , 외부전원 12V인가 전부 위자드를 통해서 확인을 하였습니다. 위자드에서는 스캔이 되고 액추에이터 제어또한 수동으로 가능합니다. 하지만 아두이노에서 컴파일을 해보니 인식이 안된다고 뜹니다. 당연히 아두이노 실행할 때 위자드를 끄고 실행을하였습니다. Ping 예제 안되니 당연히 Position Mode 업로딩 또한 되지 않습니다. 계속 0을 출력합니다. MX-64, MX-28 둘 다 업로딩이 되지 않습니다. 하지만 위자드에서는 잘 돌아갑니다.
XL 모터는 아두이노 업로딩이 잘 됩니다.


DYNAMIXEL Servo:

MX-64, MX-28


DYNAMIXEL Controller:

Openrb-150, Power supply , pc , RS485


Software Interface:
ㅇㅇ

핑문제

For a couple of years now, PING has not worked well, so I just ignored it and just programmed the DXL directly. And that big chunk of “IF DEFINED” code is not very useful also.

The code below should work for the OpenRB-150 (I used 1 Mbps for all my DXLs and 115 Kbps for the Serial Monitor.

#include <Dynamixel2Arduino.h>
#define DXL_SERIAL Serial1
#define DEBUG_SERIAL Serial
const int DXL_DIR_PIN = -1;
const uint8_t DXL_ID = 1;
const float DXL_PROTOCOL_VERSION = 2.0;

Dynamixel2Arduino dxl(DXL_SERIAL, DXL_DIR_PIN);

//This namespace is required to use Control table item names
using namespace ControlTableItem;

void setup() {
  // put your setup code here, to run once:
  
  // Use UART port of DYNAMIXEL Shield to debug.
  DEBUG_SERIAL.begin(115200);
  while(!DEBUG_SERIAL);

  // Set Port baudrate to 1000000 bps. This has to match with DYNAMIXEL baudrate.
  dxl.begin(1000000);
  // Set Port Protocol Version. This has to match with DYNAMIXEL protocol version.
  dxl.setPortProtocolVersion(DXL_PROTOCOL_VERSION);
  // Get DYNAMIXEL information
  // dxl.ping(DXL_ID);

  // Turn off torque when configuring items in EEPROM area
  dxl.torqueOff(DXL_ID);
  dxl.setOperatingMode(DXL_ID, OP_POSITION);
  dxl.torqueOn(DXL_ID);

  // Limit the maximum velocity in Position Control Mode. Use 0 for Max speed
  dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 100);
}

void loop() {
  // put your main code here, to run repeatedly:
  
  // Please refer to e-Manual(http://emanual.robotis.com/docs/en/parts/interface/dynamixel_shield/) for available range of value. 
  // Set Goal Position in RAW value
  dxl.setGoalPosition(DXL_ID, 1000);

  int i_present_position = 0;
  float f_present_position = 0.0;

  while (abs(1000 - i_present_position) > 10)
  {
    i_present_position = dxl.getPresentPosition(DXL_ID);
    DEBUG_SERIAL.print("Present_Position(raw) : ");
    DEBUG_SERIAL.println(i_present_position);
  }
  delay(1000);

  // Set Goal Position in DEGREE value
  dxl.setGoalPosition(DXL_ID, 6.0, UNIT_DEGREE);
  
  while (abs(6.0 - f_present_position) > 2.0)
  {
    f_present_position = dxl.getPresentPosition(DXL_ID, UNIT_DEGREE);
    DEBUG_SERIAL.print("Present_Position(degree) : ");
    DEBUG_SERIAL.println(f_present_position);
  }
  delay(1000);
}

If you need more help you can try the free Kindle sample of my book at this link

https://www.amazon.com/Using-ARDUINO-ROBOTIS-Systems-Ngoc-ebook/dp/B0BPXGQ6YX