Как настроить Marlin для включения автоматических вентиляторов с двойным экструдером

Я успешно собрал свой заказной 3D-принтер и настроил Marlin для двух экструдеров и одного нагреваемого слоя. Вот фотография принтера.

Мой обогреваемый стол работает на линейной оси с шарикоподшипниками. Когда принтер работает около часа или около того, эти детали сильно нагреваются, и я боюсь, что пластиковые детали расплавятся, если я буду печатать дольше или при более высоких температурах. Поэтому я решил добавить вентиляторы под обогреваемым столом, чтобы они оставались прохладными.

Известная проблема при использовании двух экструдеров и нагретого слоя заключается в том, что используются все три выхода мощности D8, D9, D10 (в моей установке D8 принадлежит первому экструдеру, D9-слою, а D10 - второму экструдеру). Если вы хотите иметь вентиляторы с программным управлением, вам нужно использовать обходной путь. Я купил расширитель вентилятора RRD, который делает именно то, что мне нужно. Вы подключаете его к плате RAMPS 1.4 и получаете два новых выхода D6 и D11.

Picture of the RRD fan extender

В настоящее время я настроил прошивку следующим образом:

#define E0_AUTO_FAN_PIN 11
#define E1_AUTO_FAN_PIN 6

Это автоматически включает вентилятор левого экструдера E0 когда его температура превышает 50 °C. То же самое касается и правого экструдера Е1. Вентиляторы подключаются к выходам расширителя вентилятора D6 и D11. Все это прекрасно работает.

Теперь, чтобы добавить вентиляторы к нагреваемому слою, я изменил прошивку так, чтобы D11 управлял обоими вентиляторами экструдера. Пока хотя бы один экструдер горячий, оба вентилятора работают. Для этого я подключил оба вентилятора экструдера параллельно к D11 и изменил прошивку следующим образом:

#define E0_AUTO_FAN_PIN 11
#define E1_AUTO_FAN_PIN 11

Эта часть прекрасно работает, и ее довольно легко достичь. Что я хотел бы сделать дальше, это подключить другой штырь, D6, к датчику температуры нагреваемого стола, чтобы вентиляторы под столом стали активными, когда стол находится при температуре 50 °C или более.

Я сделал несколько попыток обмануть прошивку, заставив ее поверить, что существует три хотенда, и зарегистрировал нагреваемый стол как Е2.

#define E2_AUTO_FAN_PIN 6

Я вручную определил датчик температуры стола для E2 и прокомментировал некоторые проверки здравомыслия и условные обозначения, чтобы включить некоторые части прошивки, управляющие автоматическими вентиляторами. В то время как я получаю код для компиляции, принтер обычно останавливается сразу после включения или как только экструдер или стол активируются. Сообщения об ошибках не очень полезны ("убит, пожалуйста, перезагрузите компьютер" и т. Д.).

Кто-нибудь знает хороший способ, как достичь моей цели? Любая помощь будет оценена по достоинству. Заранее спасибо.

, 👍9


1 ответ


Лучший ответ:

8

Попробовав много разных вещей, я обнаружил, что решение действительно простое и требует всего нескольких строк кода. Я отвечу на свой собственный вопрос в надежде, что это кому-то поможет.

Сначала я определил несколько констант. Чтобы сохранить свои собственные вещи как можно более отдельными, я создал новый файл, который назвал myconfig.h:

#define MY_BED_TEMP_THRESHOLD 50
#define MY_BED_AUTO_FAN_PIN 6
#define MY_BED_AUTO_FAN_SPEED 255

Константа штыря соответствует D6, который является зеленым маркированным выходом расширителя вентилятора RRD, к которому я подключил вентиляторы под своим столом.

Во-вторых, в файле temperature.cpp из прошивки Marlin я включил свой файл и добавил четыре строки кода:

#include "myconfig.h"

... 

#if HAS_AUTO_FAN

  void Temperature::checkExtruderAutoFans() {
  
    ...

    HOTEND_LOOP() {
      if (current_temperature[e] > EXTRUDER_AUTO_FAN_TEMPERATURE)
        SBI(fanState, fanBit[e]);
    }


    // --- start of my code ----------
    if (current_temperature_bed > MY_BED_TEMP_THRESHOLD)
      digitalWrite(MY_BED_AUTO_FAN_PIN, MY_BED_AUTO_FAN_SPEED);
    else
      digitalWrite(MY_BED_AUTO_FAN_PIN, 0); 
    // --- end of my code ------------

    ...

#endif // HAS_AUTO_FAN    
...

Теперь мои вентиляторы автоматически включаются, когда температура стола выше 50 °C, и выключаются снова после того, как стол остыл достаточно далеко.


,