Hi, does MX-64T need special library to make it can works together with OpenCM 9.04 + OpenCM 485 Expansion Board?
Because MX-64T can't move to goal position when i'm using programmed OpenCM 9.04 + OpenCM 485 Expansion Board, while AX-12 can working well in this case.
1. I've flashed "a_DXL_Position" sketch from OpenCM IDE to OpenCM 9.04.
2. I can move MX-64T to goal position when i'm using USB2Dynamixel (via R+ Manager GUI) but it doesnt't works on OpenCM 9.04 + OpenCM 485 Expansion Board
3. I've make sure that the servo ID match with the program that i wrote.
4. On program, I choose DXL_BUS_SERIAL3
Can you advise me about this? Thanks.
I know that @Will Son can/will probably give you some more definitive suggestions.
But If I were guessing, I would check to see if the Baud rate is correct. That is I believe the AX12 default to 1mbs where I think the MX-64T default baud is 57600.
Also wondering if your servo is Protocol 1 or Protocol 2? If protocol 2 than goal position registers would be different.
I assume you have external power connected?
Hi, thanks for your quick reply.
My servo ID is 001, and i set it correctly on my program.
I'm using MX-64T with 2.0 protocol.
I've tried your suggestion to change the baudrate from 1 Mbps to 57600 bps on OpenCM IDE sketch, but it still doesn't works. I got new error when changing the baudrate, the servo LED blinking continously. I've checked it on R+ manager, it indicate that MX-64T is getting over temperature.
It very unusual, because current temperature is about 30 degree celcius. Actually the default temperature limit of MX-64T is 80 degree celsius, but i dont know why every time i change the baudrate, temperature limit automatically switched to 0 degree celsius so it makes my servo send over temperature error.
Again I am probably missing some stuff, but:
As I mentioned, if it is using protocol 2, than the Goal Position
register (plus lots of other stuff) is different!. You should look at
the e-manual: http://emanual.robotis.com/docs/en/dxl/mx/mx-64-2/
Also you need to tell it that you are using Protocol 2. That is you need to use the protocol2 packet handler: I have test program that can read both:
So I have it do:
packetHandler1 = dynamixel::PacketHandler::getPacketHandler(PROTOCOL_VERSION);
packetHandler2 = dynamixel::PacketHandler::getPacketHandler(PROTOCOL_VERSION2);
also mention that OpenCM IDE is being replaced by installing Arduino
and their board stuff into it.. If you have not already install Arduino
I would do so:
if you look at the examples installed, you will see a Protocol 1
example for the Dynamixel SDK and there are some others for the
Dynamixel SDK for Protocol 2.
Take a look at those examples and see if any of them help you.
First of all, as Kurt mentioned, OpenCM IDE will not be updated anymore as we are moving onto Arduino IDE.
In order to use the latest Dynamixel SDK and support, please use Arduino IDE.
You can find the instruction in the eManual.
In the Arduino Example, please find read_write example as shown below and modify Control table address and Default settings for your Dynamixel setting based on the MX-64T protocol 2.0 control table.
You also need to modify the data size for Position as MX-64 protocol 2.0 use 4byte Position data as below
int32_t dxl_present_position = 0; // Present position
// Write goal position
dxl_comm_result = packetHandler->write4ByteTxRx(portHandler, DXL_ID, ADDR_PRO_GOAL_POSITION, dxl_goal_position[index], &dxl_error);
// Read present position
dxl_comm_result = packetHandler->read4ByteTxRx(portHandler, DXL_ID, ADDR_PRO_PRESENT_POSITION, (uint32_t*)&dxl_present_position, &dxl_error);
Hi, thank you for all of your advice. Now my MX-64T is working well.
Have a good day..