Использование двух шаговых драйверов Y на Marlin / RAMPS 1.4
Я собираю DIY 3D-принтер, и мои требования к оборудованию: шаговые двигатели X, Y1, Y2, Z и E0. Все они должны быть A4988. Один нагреватель hotend, нагревательного стола нет (пока). Моя плата — Arduino Mega 2560, и я пытаюсь использовать последнюю доступную версию Marlin (т. е. 2.1.2.2). Проблема в том, что я не могу добиться никакого движения на двигателе Y2. Я ползал вокруг, и, по-моему, у меня должно быть следующее:
в Configuration.h,
#define MOTHERBOARD BOARD_RAMPS_14_EFF
#define EXTRUDERS 1
#define Y2_DRIVER_TYPE A4988 //uncommented
в Configuration_adv.h
//#define Y_DUAL_STEPPER_DRIVERS
#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
#define INVERT_Y2_VS_Y_DIR true // Установите «true», если двигатели Y должны вращаться в противоположных направлениях
//#define Y_DUAL_ENDSTOPS
#if ENABLED(Y_DUAL_ENDSTOPS)
#define Y2_USE_ENDSTOP _YMAX_
#define Y_DUAL_ENDSTOPS_ADJUSTMENT 0
#endif
#endif
Примечание: оператор #define Y_DUAL_STEPPER_DRIVERS
должен быть закомментирован, в противном случае возникнет ошибка компиляции.
Вот такая ситуация. Конечно, я проверил кабели/двигатели, и все они работают.
Другие посты в разных блогах побудили меня подправить файл pins_RAMPS.h
, но я понял, что это пустая трата времени.
Можете подсказать? Иначе мне придется сделать дополнительную нанокарту с парой драйверов A4988, но места на шилде RAMPS так мало. И я не рискну управлять двумя моторами с помощью одного A4988, я никогда не пробовал, но я знаю, что A4988 — сложные ребята.
@RCecinati, 👍3
Обсуждение1 ответ
Я вернулся к версии 2.1.2.2, чтобы быть совместимым с версией, использованной в вопросе. Анализ основан на этой версии.
Погружение в код
При просмотре исходников (2.1.2.2) вы увидите, что нет никаких упоминаний о Y_DUAL_STEPPER_DRIVERS
, кроме как в файле Changes.h
.
Фрагмент:
...
#elif defined(Y_DUAL_STEPPER_DRIVERS)
#error "Y_DUAL_STEPPER_DRIVERS is no longer needed and should be removed."
...
Этот файл проверяет совместимость настроек конфигурации с текущей версией Marlin, которая должна быть скомпилирована, на основе ваших исходников. При компиляции вы получаете указанное выше сообщение при использовании оператора определения Y_DUAL_STEPPER_DRIVERS
. Таким образом, фрагмент из вашего вопроса о вашем Configuration_adv.h
неверен, вы используете другой файл конфигурации (или используете старый файл конфигурации из предыдущей версии Marlin), чем следует использовать для этой версии Marlin; поэтому вам нужно оставить //#define Y_DUAL_STEPPER_DRIVERS
в комментариях!
Перейдем к сути!
Определение дополнительного шагового двигателя, например, Y (далее он будет называться Y2), настраивается через файл Configuration.h
:
Измените, раскомментировав эту строку
//#define Y2_DRIVER_TYPE A4988
к
#define Y2_DRIVER_TYPE A4988
Эта настройка конфигурации определит, что у вас есть несколько (т. е. два) шаговых двигателей Y на отдельных шаговых драйверах, установив HAS_Y2_STEPPER
на 1 (эквивалентно TRUE
) в Conditionals_LCD.h
:
#ifdef Y2_DRIVER_TYPE
#define HAS_Y2_STEPPER 1
Это определение очень подозрительно, так как HAS_Y2_STEPPER
нигде в коде не используется... На самом деле это ошибка в Marlin 2.1.2.2! Это должно было выглядеть так:
#ifdef Y2_DRIVER_TYPE
#define HAS_DUAL_Y_STEPPERS 1
Продолжаем с этой версией Marlin находить проверку существования определения выводов Y2, из SanityCheck.h
читаем:
/**
* Multiple Stepper Drivers Per Axis
*/
...
#if HAS_DUAL_Y_STEPPERS && !GOOD_AXIS_PINS(Y2)
#error "If Y2_DRIVER_TYPE is defined, then Y2 ENABLE/STEP/DIR pins are also needed."
#endif
...
Поскольку HAS_DUAL_Y_STEPPERS
никогда не был установлен в исходниках 2.1.2.2, ваша сборка не проверяет, определены ли контакты для этого шагового двигателя Y2 в вашем файле pins_RAMPS.h
, и, следовательно, не компилируется.
Как это скомпилировать
Исправьте ошибки 2.1.2.2, как предложено выше (замените HAS_Y2_STEPPER
на HAS_DUAL_Y_STEPPERS
в Conditionals_LCD.h
) и установите контакты шагового двигателя Y2 (см. другое решение ниже: использование последней ветки исправления ошибок). Обратите внимание, что HAS_Y2_STEPPER
— это имя константы, которое используется в последней версии Marlin. Вы увидите, что это будет нормально компилироваться:
Другое решение, и предпочтительное, — перейти к последней версии Marlin, т. е. Bugfix 2.1.x (где эти проблемы исправлены) и определить выводы Y2 в файле pins_RAMPS.h
:
Изменить:
#ifndef E1_STEP_PIN
#define E1_STEP_PIN 36
#endif
#ifndef E1_DIR_PIN
#define E1_DIR_PIN 34
#endif
#ifndef E1_ENABLE_PIN
#define E1_ENABLE_PIN 30
#endif
#ifndef E1_CS_PIN
#define E1_CS_PIN AUX2_07
#endif
к
#ifndef Y2_STEP_PIN
#define Y2_STEP_PIN 36
#endif
#ifndef Y2_DIR_PIN
#define Y2_DIR_PIN 34
#endif
#ifndef Y2_ENABLE_PIN
#define Y2_ENABLE_PIN 30
#endif
#ifndef Y2_CS_PIN
#define Y2_CS_PIN AUX2_07
#endif
Разное
Другие посты в разных блогах побудили меня подправить файл pins_RAMPS.h, но я понял, что это пустая трата времени.
Нет, это не пустая трата времени, это необходимо, как видно выше. Поскольку вы меняете использование платы (стандартное: X, Y, Z, E0 и E1) на двойное решение Y (X, Y, Z, E0 и Y2), вам нужно назначить пины со стандартного E1 на Y2, этот процесс нельзя пропустить.
Мне придется создать дополнительную нанокарту, в которой будут размещены два драйвера A4988, но места на плате RAMPS так мало.
Нет, в этом нет необходимости.
дорогой Оскар, спасибо за подробное объяснение. Итак, я снова распаковал релиз 2.1.2.2 в своей среде Arduino IDE (2.3.2), в Configuration.h я определил Y2_DRIVER_TYPE A4988, в src\inc\Conditionals_LCD.h у меня есть #define HAS_DUAL_Y_STEPPERS 1, в src\pins\ramps\pins_RAMPS.h я определил пины, как вы сказали. Перекомпилировал, перезагрузил, не хочу говорить, что это не работает (вращается только 1 двигатель, Y). То же самое и с релизом Bugfix 2.1.x. Думаю, я просто подключу пины DIR /STEP/EN разъема драйвера E1 к тем же пинам разъема драйвера Y., @RCecinati
@RCecinati Вы меняли местами драйверы (поместите Z или Y, stepstick в E1 или теперь Y2), возможно, у вас сломался один или неправильный Vref. Также попробуйте это в позиции Z, поэтому поменяйте местами контакты для Z и Y2 в файле контактов. Вам нужно немного больше устранять неполадки. С физической стороной вам трудно помочь, с программной стороной теперь все должно быть в порядке. Пожалуйста, используйте плагины VSCode и PlatformIO и Auto Build Marlin вместо Arduino IDE, это работает намного лучше. Надеюсь, у вас все получится! Если все не получится, вы всегда можете разделить контакты DIR/STEP и EN на новый драйвер, сначала проверьте, работают ли они на других осях., @0scar
дорогой Оскар, да, я поменял кабель E1+двигатель на Y, и кабель E1/двигатель работает гладко, так что проблема в драйвере. Все драйверы были проверены на Vref. У меня возникли проблемы с миграцией на другую IDE, для меня гораздо проще : 1) поднять гнезда Y и E1 через 8-контактные планки «папа/мама» 2) перенаправить штырьковые контакты Enable, DIR и STEP 3) привязать их к тем же контактам гнезда Y с помощью провода для накрутки. Я пробовал с мезонином, но там нет места. В любом случае спасибо, @RCecinati
Старый добрый [wire wrap](https://www.aliexpress.com/w/wholesale-Wire-Wrap-Strip-Unwrap-Tool.html?spm=a2g0o.detail.search.0)! Я чинил им дисплеи принтеров!, очень удобно., @0scar
- Шаговые двигатели не работают при подключении к RAMPS 1.4
- Ось Z при печати ниже, чем когда дома
- Как удлинить Марлина, чтобы поддержать дополнительную ось движения?
- Медленная навигация по меню Marlin при печати
- Марлин на Arduino Mega 2650 и RAMPS 1.4
- Почему блок питания включается и выключается автоматически?
- Настройка BLTouch с прошивкой Marlin
- Шаговый двигатель нагревается через некоторое время
Нет, вы не должны (читай *не можете*) управлять двумя двигателями с помощью одного A4988. Кстати, это, похоже, связано с (теперь удаленным) вопросом, [Могу ли я добавить TMC stepsticks параллельно с существующим A4988?](https://3d-printery.ru/topics/23074/4762), который я активно комментировал. Тот же вопрос теперь задали на SE.Electronics, [Могу ли я добавить TMC stepsticks параллельно с существующим A4988?](https://electronics.stackexchange.com/q/702418/64015). См. meta Q, [Следует ли мне удалить и перепостить в другом сообществе?](https://3dprinting.meta.stackexchange.com/q/604/4762) для получения более подробной информации., @Greenonline
Я могу опубликовать свои комментарии под удаленным вопросом как ответ на этот вопрос, хотя они, по сути, не являются решением., @Greenonline
Спасибо #Greenonline. Я не буду ставить параллельные двигатели, я лучше построю "близнец" A4988, если только какой-нибудь добрый человек не покажет мне, как использовать имеющийся драйвер поверх щита RAMPS., @RCecinati
E1 на шилде RAMPS можно использовать для Y2, но вам нужно настроить это! Обратите внимание, что Marlin 2.1.2.2 имеет недостатки для двойных настроек Y, см. ответ ниже., @0scar
Не могли бы вы опубликовать ответ, расширяющий вашу концепцию «близнеца» (проект печатной платы, схема и т. д.) на этот вопрос, [Что такое «близнец» A4988?](https://3d-printery.ru/topics/23194/4762) Спасибо., @Greenonline