Introduction: Controlling Dynamixel 12A by Sending Packets Serially

DYNAMIXEL 12A

Step 1: Components Required

HARDWARE:

1.Dynamixel 12A or any Dynamixel motor

2.USB to Dynamixel.

SOFTWARE:

1.Robotis Dynamixel wizard.

2.Python ---Serial package installed

Step 2: Introduction to Dynamixel 12A

Dynamixel motors are highly precise and mostly used in Robotics. Every Dynamixel motor has STM microcontroller inside. You can read current torque, voltage, current draw, temperature, position, etc.., from Dynamixels Motors.

Specifications of Dynamixel 12A:

Operating Voltage --12v

Weight--55g

Max current --900mA

Stall Torque--15.3 Kg.cm

Step 3: Communicating/controlling Dynamixel 12A

  • Dynamixel 12A isn't like normal servo motors that have 3pin GND, PWM, VCC, give power supply and PWM signal and control the motor.
  • We can control Dynamixel motors using Half Duplex UART communication protocol.

What is Half Duplex Communication Protocol?

Half-duplex data transmission means that data can be transmitted in both directions on a signal carrier, but not at the same time.

Now we learn about Protocol 1.0 for Dynamixels from Robotis to control Dynamixel motors.

  • You can communicate with Dynamixel motors by sending packets from your laptop/microcontroller like Arduino,r-pi, etc.., to the microcontroller that is present inside the Dynamixel motors.
  • Every Dynamixels have ID's that can be modified.
  • A packet is nothing but Set of bytes.

Incase of Dynamixel protocol 1.0 you will have two types of packets

  • Instruction packets
  • Status packets

Instruction Packet is the command data sent to the Device.

Instruction packet look like this:

Header1,Header2,ID,Length,Instruction,Param 1…Param ,NChecksum

0xFF , 0xFF ,ID ,Length ,Instruction Param 1…Param, NCHKSUM

Instruction byte tells what to do, whether to read data or write to the Dynamixel motor.

CONTROL TABLE OF A DYNAMIXEL MOTOR.-The Control Table is a structure that consists of multiple Data fields to store status or to control the device.

Read more about Control table HereControl Table Robotis.

We can access data in the control table from its address and also we can write.

Step 4: Writing Goal Position to Dynamixel Motor

Instruction Packet to Write Goal position

every packet starts with a header

H1 H2 ID LEN INST P1 P2 P3 CKSM

0xFF, 0xFF, 0x01, 0x05, 0x04, 0x1E, 0xF4 ,0x01, 0xE2

LEN-instruction byte+p1+p2+p3+chk sum=5 bytes

ID=Dynamixel motor ID 1-you can set dynamixel id using robotis dynamixel wizard software

INST=reg write-specifying that your'e writing to the motor.

P1=Starting address of the Data-In the control table Goal position is having an address 30(0x1E in hexadecimal).

P2=lower byte of data

P3=higher byte of data

Checksum calculation will be explained shortly......................

If you send the above packet to Dynamixel Serially using USB2Dynamixel, Dynamixel motor goal position will be set to 500.

Step 5: PYTHON CODE

#Developed by Madhu. Last update on 19/07/2019

import Serial

import time

ser=serial.Serial('com36','57142')

#change com port accordingly,my dynamixel motors baud rate is 57142,you can set it using Dynamixel wizard software.

while(1):

gp1=input('enter ID1 goal position(0-1023)')

l=gp1&255 #low byte

h=(gp1>>8)&255 #high byte

li=[0xff,0xff,0x01,0x05,0x04,0x1e,l1,h1]

#check sum calculation

crc=sum(li[2:])

low1=crc & 255

chksum=255-low1

li.append(chksum) #adding check sum

a=bytearray(li) #converting list into bytearray

ser.write(a) #Serially send using usb2dynamixels.

time.sleep(0.5)

#Copy the code paste in python IDE. Install pyserial package. connect usb2dynamixel's USB side to laptop's USB port and another end to Dynamixel motor. Give an external 12v supply to USB2DYNAMIXEL.

RUN the code, enter the goal position value. See motor running.