dynamixel protocal by Liews Wuttipat.
Dynamixel.h
- Committer:
- sweilz
- Date:
- 2017-12-08
- Revision:
- 0:e4ba03a21caa
File content as of revision 0:e4ba03a21caa:
#include <mbed.h> //------------------------------------------------------------------------------------------------------------------------------- // define - Dynamixel Hex code table //------------------------------------------------------------------------------------------------------------------------------- // EEPROM AREA #define EEPROM_MODEL_NUMBER_L 0x00 #define EEPROM_MODEL_NUMBER_H 0x01 #define EEPROM_VERSION 0x02 #define EEPROM_ID 0x03 #define EEPROM_BAUD_RATE 0x04 #define EEPROM_RETURN_DELAY_TIME 0x05 #define EEPROM_CW_ANGLE_LIMIT_L 0x06 #define EEPROM_CW_ANGLE_LIMIT_H 0x07 #define EEPROM_CCW_ANGLE_LIMIT_L 0x08 #define EEPROM_CCW_ANGLE_LIMIT_H 0x09 #define EEPROM_DRIVE_MODE 0x0A #define EEPROM_LIMIT_TEMPERATURE 0x0B #define EEPROM_LOW_LIMIT_VOLTAGE 0x0C #define EEPROM_HIGN_LIMIT_VOLTAGE 0x0D #define EEPROM_MAX_TORQUE_L 0x0E #define EEPROM_MAX_TORQUE_H 0x0F #define EEPROM_RETURN_LEVEL 0x10 #define EEPROM_ALARM_LED 0x11 #define EEPROM_ALARM_SHUTDOWN 0x12 #define EEPROM_MULTITURN_L 0x14 #define EEPROM_MULTITURN_H 0x15 #define EEPROM_RESOLUTION_DIV 0x16 // RAM AREA #define RAM_TORQUE_ENABLE 0x18 #define RAM_LED 0x19 #define RAM_DERIVATIVE_GAIN 0x1A #define RAM_INTERGRAL_GAIN 0x1B #define RAM_PROPORTIONAL_GAIN 0x1C #define RAM_GOAL_POSITION_L 0x1E #define RAM_GOAL_POSITION_H 0x1F #define RAM_GOAL_SPEED_L 0x20 #define RAM_GOAL_SPEED_H 0x21 #define RAM_TORQUE_LIMIT_L 0x22 #define RAM_TORQUE_LIMIT_H 0x23 #define RAM_PRESENT_POSITION_L 0x24 #define RAM_PRESENT_POSITION_H 0x25 #define RAM_PRESENT_SPEED_L 0x26 #define RAM_PRESENT_SPEED_H 0x27 #define RAM_PRESENT_LOAD_L 0x28 #define RAM_PRESENT_LOAD_H 0x29 #define RAM_PRESENT_VOLTAGE 0x2A #define RAM_PRESENT_TEMPERATURE 0x2B #define RAM_REGISTER 0x2C #define RAM_MOVING 0x2E #define RAM_LOCK 0x2F #define RAM_PUNCH_L 0x30 #define RAM_PUNCH_H 0x31 #define RAM_SENSED_CURRENT_L 0x38 #define RAM_SENSED_CURRENT_H 0x39 #define RAM_CURRENT_L 0x44 #define RAM_CURRENT_H 0x45 #define RAM_TORQUE_CONTROL_MODE_ENABLE 0x46 #define RAM_GOAL_TORQUE_L 0x47 #define RAM_GOAL_TORQUE_H 0x48 #define RAM_GOAL_ACCELERATION 0x49 //------------------------------------------------------------------------------------------------------------------------------- // Instruction commands Set //------------------------------------------------------------------------------------------------------------------------------- #define COMMAND_PING 0x01 #define COMMAND_READ_DATA 0x02 #define COMMAND_WRITE_DATA 0x03 #define COMMAND_REG_WRITE_DATA 0x04 #define COMMAND_ACTION 0x05 #define COMMAND_RESET 0x06 #define COMMAND_SYNC_WRITE 0x83 //------------------------------------------------------------------------------------------------------------------------------- //Instruction packet lengths #define READ_ONE_BYTE_LENGTH 0x01 #define READ_TWO_BYTE_LENGTH 0x02 #define RESET_LENGTH 0x02 #define PING_LENGTH 0x02 #define ACTION_LENGTH 0x02 #define SET_ID_LENGTH 0x04 #define SET_BD_LENGTH 0x04 #define SET_RETURN_LEVEL_LENGTH 0x04 #define READ_TEMP_LENGTH 0x04 #define READ_POS_LENGTH 0x04 #define READ_LOAD_LENGTH 0x04 #define READ_SPEED_LENGTH 0x04 #define READ_VOLT_LENGTH 0x04 #define READ_REGISTER_LENGTH 0x04 #define READ_MOVING_LENGTH 0x04 #define READ_LOCK_LENGTH 0x04 #define LED_LENGTH 0x04 #define SET_HOLDING_TORQUE_LENGTH 0x04 #define SET_MAX_TORQUE_LENGTH 0x05 #define SET_ALARM_LENGTH 0x04 #define READ_LOAD_LENGTH 0x04 #define SET_RETURN_LENGTH 0x04 #define WHEEL_LENGTH 0x05 #define SERVO_GOAL_LENGTH 0x07 #define SET_MODE_LENGTH 0x07 #define SET_PUNCH_LENGTH 0x04 #define SET_PID_LENGTH 0x06 #define SET_TEMP_LENGTH 0x04 #define SET_VOLT_LENGTH 0x05 #define SYNC_LOAD_LENGTH 0x0D #define SYNC_DATA_LENGTH 0x02 //------------------------------------------------------------------------------------------------------------------------------- // Specials //------------------------------------------------------------------------------------------------------------------------------- #define OFF 0x00 #define ON 0x01 #define SERVO 0x01 #define WHEEL 0x00 #define LEFT 0x00 #define RIGHT 0x01 #define NONE 0x00 #define READ 0x01 #define ALL 0x02 #define BROADCAST_ID 0xFE #define HEADER 0xFF #define STATUS_PACKET_TIMEOUT 50 // in millis() #define STATUS_FRAME_BUFFER 5 class Dynamixel { private: DigitalOut *dynamixelDi; Serial *dynamixelSerial; void writePacket(void); unsigned int readPacket(void); public: Dynamixel(PinName tx, PinName rx, int baud, PinName di); ~Dynamixel(void); void setMode(uint8_t ID, uint8_t Mode, uint16_t CW_limit = 0, uint16_t CCW_limit = 0); void setLed(uint8_t ID, bool State); void setPosition(uint8_t ID, uint16_t Position, uint16_t Speed); void setWheelSpeed(uint8_t ID, bool Direction, uint16_t Speed); void setWheel3Speed(uint8_t ID[], bool Direction[], uint16_t Speed[]); };