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