Использование двух шаговых драйверов 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 — сложные ребята.

, 👍3

Обсуждение

Нет, вы не должны (читай *не можете*) управлять двумя двигателями с помощью одного 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


1 ответ


2

Я вернулся к версии 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