Манипулятор Moveo - работа первых двух звеньев


Сборка манипулятора постепенно подходит финалу. На текущей стадии полностью собраны два первых звена, включая платформу. 


Эти звенья содержат наиболее мощные двигатели, особенно первое звено - "плечо": два трехамперных Nema23. Для управления ими я выбрал драйверы TB6600. До этого приходилось работать с TB6560, по сравнению с ними эти драйверы мощнее (до 3,5 А) и у них, на мой взгляд, намного лучше сделана компоновка: радиатор не только большей площади, но и объединен с крепежным основанием, все закрыто пластиковым кожухом. Три таких драйвера установлены на платформе с помощью крепежного уголка, который позволяет разместить их так, чтобы их не задевания двигатели первого звена.


В качестве коммутационного блока очень удобно использовать плату Ramps. В этом проекте я поставил Ramps 1.6: на нее непосредственно можно устанавливать драйвера типа TMC2208 для звеньев 3, 4, 5. Большое количество доступных пинов позволяет подключать внешние драйверы типа TB6600, а также сервопривод захвата и прочие устройства типа джойстика и т.д.

Для управления шаговыми двигателями в качестве пробы решил использовать библиотеку AccelStepper. Начал писать свой класс ШД с использованием таймеров, но пока отложил - м.б. функционала этой библиотеки хватит. Скетч, который используется в примере на видео:

****************************************************************************
// Использование класса MultiStepper для управления тремя шаговыми двигателями

#include <AccelStepper.h>
#include <MultiStepper.h>

//
// Steppers
//
#define X_STEP_PIN         54
#define X_DIR_PIN          55

#define Y_STEP_PIN         60
#define Y_DIR_PIN          61

#define Z_STEP_PIN         46
#define Z_DIR_PIN          48

#define E0_STEP_PIN        26
#define E0_DIR_PIN         28

#define E1_STEP_PIN        36
#define E1_DIR_PIN         34

AccelStepper stepper_Y(AccelStepper::DRIVER, Y_STEP_PIN, Y_DIR_PIN);
AccelStepper stepper_Z(AccelStepper::DRIVER, Z_STEP_PIN, Z_DIR_PIN);
AccelStepper stepper_E0(AccelStepper::DRIVER, E0_STEP_PIN, E0_DIR_PIN);

void setup() {

  delay(1000);  // задержка на перезагрузку и установку в ноль
  
  Serial.begin(9600);

  // Configure each stepper
  stepper_Y.setMaxSpeed(1500);
  stepper_Z.setMaxSpeed(1500);
  stepper_E0.setMaxSpeed(1500);

  // Then give them to MultiStepper to manage
  steppers.addStepper(stepper_Y);
  steppers.addStepper(stepper_Z);
  steppers.addStepper(stepper_E0);
}

long end_1_joint = 4000;  // максимальная дистанция для второго сустава: плечо, 2 мотора
long end_2_joint = 1600;  // максимальная дистанция для второго сустава: плечо, 2 мотора

void loop() {
  
  long positions[3]; // Array of desired stepper positions
  
  positions[0] = end_2_joint;
  positions[1] = end_2_joint;
  positions[2] = end_1_joint;
  steppers.moveTo(positions);
  steppers.runSpeedToPosition(); // Blocks until all are in position
  
  end_2_joint = -end_2_joint;
  end_1_joint = -end_1_joint;

  delay(1000);
}

****************************************************************************

Это доработанный пример MultiStepper из библиотеки. Информацию по распиновке платы Ramps можно взять либо с ее схемы, либо из прошивки Marlin (файл pin_RAMPS.h).

Спасибо за внимание! Let`s go design!

Комментарии