Адаптируйте библиотеку Dynamixel к различным шилдам

Я играюсь с этим щитом уже пару дней и должен согласиться с некоторыми утверждениями, сделанными в комментариях, что в «библиотеке» не хватает многих функций.

Однако я обнаружил следующую библиотеку, созданную для щита Dynamixel: https://github.com/zcshiner/Dynamixel_Serial

Я хотел бы знать, поскольку я использую Arduino Uno, какие параметры мне нужно изменить, чтобы заставить его работать.

Извините, я не очень хорошо разбираюсь в C++. Я попытался просто изменить метку направления на 10, но этого явно недостаточно.

Щит, с которым нужно работать: https://dfrobot.com/index.php?route. =продукт/продукт&product_id=958

После этого должен работать следующий код:

#include <dynamixel_serial.h> // Библиотека, необходимая для управления сервоприводом Dynamixel

#define SERVO_ID 0x01 // ID, на который мы установим Dynamixel
#define SERVO_ControlPin 0x0A // Управляющий вывод микросхемы буфера. ПРИМЕЧАНИЕ: это не имеет значения, поскольку мы не используем половинный или полный управляющий буфер.
#define SERVO_SET_Baudrate 57600 // Скорость передачи данных, на которую будет установлен Dynamixel (57600)
#define CW_LIMIT_ANGLE 0x001 // самый низкий угол по часовой стрелке равен 1, так как при значении 0 сервопривод переходит в режим колеса
#define CCW_LIMIT_ANGLE 0xFFF // Максимальный угол против часовой стрелки равен 0XFFF, так как при значении 0 сервопривод переходит в режим колеса

void setup() {
  delay(1000); // Даем время Dynamixel запуститься при включении питания
  Dynamixel.begin(SERVO_SET_Baudrate); // Теперь нам нужно настроить Arduino на новую скорость передачи данных
  Dynamixel.setDirectionPin(SERVO_ControlPin); // Необязательный. Установить штифт управления направлением
  Dynamixel.setMode(SERVO_ID, SERVO, CW_LIMIT_ANGLE, CCW_LIMIT_ANGLE); // установить режим SERVO и установить пределы угла
  Serial.begin(115200);
  Serial.println("Setup Done!");
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  Dynamixel.servo(SERVO_ID,0x001,0x100); // Переместите сервопривод на угол 1 (0,088 градуса) со скоростью 100
  delay(4000);
  Dynamixel.servo(SERVO_ID,0xFFF,0x3FF); // Переместить сервопривод на максимальный угол на максимальной скорости (1023)
  delay(4000);
}

, 👍1


1 ответ


1

Вы устанавливаете скорость передачи данных на 57,6 КБ, однако вам необходимо обмениваться данными с Dynamixel на установленной скорости передачи данных. Я считаю, что Dynamixel поставляется с предустановленной скоростью передачи данных 1 Мбит/с. Первое, что я бы сделал, это изменил ваши 57,6 КБ на 1 Мбит и попробовал бы это. Это предполагает, что идентификатор на самом деле равен 1 (также по умолчанию)

Вот две ссылки для получения информации о скорости передачи данных Arduino и последовательной связи Dynamixel.

Управление сервоприводами AX-12

Какую скорость передачи данных я могу использовать (без ошибок)?

,

Спасибо большое попробую как только появится возможность, @Schaschi