Управление большим количеством вентиляторов с помощью платы RAMPS
Я использую RAMPS 1.4 с Марлином. С помощью Marlin можно управлять большим количеством вентиляторов с помощью команды M106 P<индекс вентилятора><индекс вентилятора>
. Я бы хотел, чтобы RAMPS управляли некоторыми дополнительными вентиляторами, независимо от вентилятора слоя. Есть ли для этого свободные контакты на RAMPS 1.4? В противном случае, могу ли я настроить плату RAMPS для отправки команды на отдельный Arduino? У меня также есть Октопринт, если это облегчает задачу.
@vega, 👍8
Обсуждение1 ответ
Лучший ответ:
Из источников Marlin вы можете узнать, как можно использовать вентиляторы may, даже если вы не программист, это должно быть выполнимо. Оттуда вы можете узнать, как установить контакты для вентиляторов, при условии, что они свободны и не используются (чтобы вам не приходилось так припаивать непосредственно к микропроцессору). Сначала выясните, сколько вентиляторов возможно.
Начиная с Marlin_main.cpp и поиск 106
(или 106
на сайте Marlin GitHub) приведет вас к источникам выполнения команды M106. Ниже показан фрагмент
M106
и M107
. Причина, по которой там оказался M107
, станет ясна позже.
#if FAN_COUNT > 0 /** * M106: Set Fan Speed * * S<int> Speed between 0-255 * P<index> Fan index, if more than one fan * * With EXTRA_FAN_SPEED enabled: * * T<int> Restore/Use/Set Temporary Speed: * 1 = Restore previous speed after T2 * 2 = Use temporary speed set with T3-255 * 3-255 = Set the speed for use with T2 */ inline void gcode_M106() { const uint8_t p = parser.byteval('P'); if (p < FAN_COUNT) { #if ENABLED(EXTRA_FAN_SPEED) const int16_t t = parser.intval('T'); if (t > 0) { switch (t) { case 1: fanSpeeds[p] = old_fanSpeeds[p]; break; case 2: old_fanSpeeds[p] = fanSpeeds[p]; fanSpeeds[p] = new_fanSpeeds[p]; break; default: new_fanSpeeds[p] = MIN(t, 255); break; } return; } #endif // EXTRA_FAN_SPEED const uint16_t s = parser.ushortval('S', 255); fanSpeeds[p] = MIN(s, 255U); } } /** * M107: Fan Off */ inline void gcode_M107() { const uint16_t p = parser.ushortval('P'); if (p < FAN_COUNT) fanSpeeds[p] = 0; } #endif // FAN_COUNT > 0
Глядя на этот код, первое (на самом деле первая строка, #if FAN_COUNT > 0>
, уже намекает на это), что привлекает ваше внимание, - это постоянный FAN_COUNT
. Очевидно, программное обеспечение знает, сколько вентиляторов определено! Интересно! Откуда он это знает! Этот фрагмент кода заканчивается сразу после обработки команды M107
(строка #endif // FAN_COUNT > 0>
), поэтому он отображается здесь.
Продолжение поиска путем определения того, как установлен FAN_COUNT (используя поиск на GitHub для репозитория Marlin), приводит к файлу Conditionals_post.h. Интересная часть заключается в следующем:
/** * До 3 ШИМ-вентиляторов */ #if HAS_FAN2 #define FAN_COUNT 3 #elif HAS_FAN1 #define FAN_COUNT 2 #elif HAS_FAN0 #define FAN_COUNT 1 #else #define FAN_COUNT 0 #endif
Таким образом, в зависимости от HAS_FANx
(где x обозначает 0, 1 или 2) у вас может быть несколько вентиляторов, всего до 3! Круто, кое - чему научился в процессе. :)
Давайте теперь поищем HAS_FANx
; в том же файле вы найдете:
// Другие вентиляторы #define HAS_FAN0 (PIN_EXISTS(FAN)) #define HAS_FAN1 (PIN_EXISTS(FAN1) && CONTROLLER_FAN_PIN != FAN1_PIN && E0_AUTO_FAN_PIN != FAN1_PIN && E1_AUTO_FAN_PIN != FAN1_PIN && E2_AUTO_FAN_PIN != FAN1_PIN && E3_AUTO_FAN_PIN != FAN1_PIN) #define HAS_FAN2 (PIN_EXISTS(FAN2) && CONTROLLER_FAN_PIN != FAN2_PIN && E0_AUTO_FAN_PIN != FAN2_PIN && E1_AUTO_FAN_PIN != FAN2_PIN && E2_AUTO_FAN_PIN != FAN2_PIN && E3_AUTO_FAN_PIN != FAN2_PIN)
Теперь мы входим в чистую воду! Этот код указывает на FAN1_PIN
и FAN2_PIN
. Если вы посмотрите в файл макета контактов, например, pins_RAMPS.h, вы увидите, что это константы контактов, которые необходимо определить, на самом деле FAN1_PIN,
например, устанавливается, если вы выбираете конфигурацию "EFF" (Hotend, Fan0, Fan1), например #define FAN1_PIN RAMPS_D8_PIN
.
Вам остается только найти неиспользуемый пин вашего микроконтроллера и установить FAN2_PIN
с помощью #define FAN2_PIN <свободный контакт><свободный контакт>
.
Например, вывод 4 не является используемым номером вывода (и выводом аналогового выхода). Не забывайте, что выбранный вами контакт не может напрямую запускать вентилятор, его следует использовать для планирования МОП-транзистора.
Обратите внимание, что существует двойной внешний коллектор вентилятора "Reprap Ramps1.4 RRD Удлинитель вентилятора", это описывает использование контактов D6 и D11. Дальнейшее расследование привело к 3D.SE публикация с использованием этого заголовка вентилятора: "Как настроить Marlin для включения автоматических вентиляторов с двойным экструдером".
Очень интересно! Спасибо, что научили ловить рыбу! Я также вижу в pins_RAMPS.h, что вывод 4 доступен для датчика биения нити или лазера, который я не использую. Так что я мог бы также использовать это, я думаю, для вентилятора (через MOSFET)., @vega
@vega Добро пожаловать, отлично, что вы использовали сообщение, чтобы найти неиспользуемый вывод (отсюда я не знаю, как выглядит ваша настройка и что используется или нет), просто настройте вывод на "#define FAN1_PIN", если у вас всего 2 вентилятора и вы используете MOSFET, и все готово!, @0scar
- Как настроить Marlin для включения автоматических вентиляторов с двойным экструдером
- Перепрофилировать штифт(ы) экструдера для вентилятора охлаждения деталей?
- Настройка BLTouch с прошивкой Marlin
- Можно ли регулировать скорость печати на лету?
- Шаговый двигатель нагревается через некоторое время
- Эндстопы не будут срабатывать при использовании прошивки Marlin
- Драйверы TMC2208 - Микропереходы настроены неправильно
- Шаговые двигатели не работают при подключении к RAMPS 1.4
Вы смотрели на https://reprap.org/wiki/File:Arduinomegapololushieldschematic.png?, @OyaMist
Вы можете управлять до 3 вентиляторами с помощью "M106 P<fan index>", см. Мой ответ ниже., @0scar