如何配置 Marlin 以使用双挤出机启用自动风扇

3D打印 马林鱼 坡道-1.4 双喷嘴 打印风扇
2021-05-18 04:24:41

我已经成功组装了我的定制 3D 打印机,并为两台挤出机和一张加热床配置了 Marlin。这是打印机的图片。

在此处输入图片说明

我的加热床在带有滚珠轴承的线性轴上运行。当打印机运行一个小时左右时,这些部件会变得非常热,如果我继续打印或在更高的温度下打印,我担心塑料部件会熔化。因此,我决定在加热床下方添加风扇以保持凉爽。

使用两个挤出机和加热床时的一个已知问题是,所有三个功率输出 D8、D9、D10 都在使用中(在我的设置中,D8 属于第一个挤出机,D9 属于床,D10 属于第二个挤出机)。如果您想在此之上拥有软件控制的风扇,则需要使用一种解决方法。我购买了RRD 风扇扩展器,它完全满足我的需求。您将其插入 RAMPS 1.4 板并获得两个新输出 D6 和 D11。

RRD 风扇扩展器的图片

目前我已将固件配置如下:

#define E0_AUTO_FAN_PIN 11
#define E1_AUTO_FAN_PIN 6

这会在左侧挤出机 E0 的热端超过 50 °C 时自动启用风扇。右侧挤出机 E1 也是如此。风扇插入风扇扩展器的输出 D6 和 D11。一切正常。

现在要在加热床上添加风扇,我修改了固件,以便 D11 控制两个挤出机风扇。只要至少一台挤出机是热的,两台风扇都在运行。为此,我将两个挤出机风扇并联连接到 D11 并按如下方式修改固件:

#define E0_AUTO_FAN_PIN 11
#define E1_AUTO_FAN_PIN 11

这部分工作正常,很容易实现。我接下来要做的是将另一个引脚 D6 连接到加热床的温度传感器,以便当床处于 50 °C 或更高温度时,床下的风扇会启动。

我多次尝试欺骗固件,让其相信有三个热端,将加热床注册为 E2。

#define E2_AUTO_FAN_PIN 6

我为 E2 手动定义了床的温度传感器,并注释掉了一些健全性检查和条件,以启用控制自动风扇的固件的某些部分。当我编译代码时,打印机通常在打开后立即停止,或者在挤出机或床被激活后立即停止。错误消息不是很有帮助(“已终止,请重新启动”等)。

有人知道如何实现我的目标的好方法吗?任何帮助,将不胜感激。先感谢您。

1个回答

在尝试了很多不同的事情之后,我发现解决方案非常简单,只需要几行代码。我会回答我自己的问题,希望这会对某人有所帮助。

首先,我定义了一些常量(实际上是宏)。为了保持我自己的东西分开,我为他们创建了一个名为myconfig.h的新文件

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

引脚常数对应于 D6,它是 RRD 风扇扩展器的绿色标记输出,我在床下连接风扇。

在此处输入图片说明

其次,在Marlin 固件的文件temperature.cpp中,我包含了我的文件并添加了四行代码:

#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 时,我的风扇会自动打开,并在床冷却到一定程度后再次关闭。