Сборка манипулятора постепенно подходит финалу. На текущей стадии полностью собраны два первых звена, включая платформу.
Эти звенья содержат наиболее мощные двигатели, особенно первое звено - "плечо": два трехамперных 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!


Комментарии
Отправить комментарий