我在 Marlin 上使用 RAMPS 1.4。使用Marlin,您可以通过M106 P<fan index>
命令控制大量粉丝。我想要 RAMPS 控制一些额外的风扇,独立于层风扇。RAMPS 1.4 上是否有可用的引脚来做到这一点?否则,我可以设置 RAMPS 板以向单独的 Arduino 发送命令吗?如果这样更容易的话,我也有 Octoprint。
使用 RAMPS 板控制更多风扇
从Marlin的来源中,您可以找到可以使用的风扇,即使您不是编码员,它也应该是可行的。从那里您可以找到如何设置风扇的引脚,前提是有空闲的未使用和暴露的引脚(这样您就不会直接焊接到微处理器上)。首先找出可能有多少粉丝。
从Marlin_main.cpp开始并搜索106
(或106
在 Marlin GitHub 网站上)将引导您找到M106
命令执行的来源。下面显示了M106
和的片段M107
。M107
到那里的原因稍后会变得清楚。
#if FAN_COUNT > 0 /** * M106:设置风扇速度 * * S<int> 速度在 0-255 之间 * P<index> 风扇索引,如果有多个风扇 * * 启用 EXTRA_FAN_SPEED: * * T<int> 恢复/使用/设置临时速度: * 1 = T2 后恢复原速度 * 2 = 使用 T3-255 设置的临时速度 * 3-255 = 设置与 T2 一起使用的速度 */ 内联无效 gcode_M106() { const uint8_t p = parser.byteval('P'); 如果 (p < FAN_COUNT) { #如果启用(EXTRA_FAN_SPEED) const int16_t t = parser.intval('T'); 如果 (t > 0) { 开关 (t) { 情况1: fanSpeeds[p] = old_fanSpeeds[p]; 休息; 案例2: old_fanSpeeds[p] = fanSpeeds[p]; fanSpeeds[p] = new_fanSpeeds[p]; 休息; 默认: new_fanSpeeds[p] = MIN(t, 255); 休息; } 返回; } #endif // EXTRA_FAN_SPEED const uint16_t s = parser.ushortval('S', 255); fanSpeeds[p] = MIN(s, 255U); } } /** * M107:风扇关闭 */ 内联无效 gcode_M107() { const uint16_t p = parser.ushortval('P'); 如果 (p < FAN_COUNT) fanSpeeds[p] = 0; } #endif // FAN_COUNT > 0
查看这段代码,#if FAN_COUNT > 0
引起您注意的第一件事(实际上是第一行,已经暗示了这一点)是 constant FAN_COUNT
。显然,该软件知道定义了多少粉丝!有趣的!它怎么知道!这段代码在处理M107
命令(行#endif // FAN_COUNT > 0
)后结束,因此显示在此处。
通过查找如何FAN_COUNT
设置(使用在 GitHub 上搜索 Marlin 存储库)继续搜索会找到文件Conditionals_post.h。一个有趣的部分是:
/** * 多达 3 个 PWM 风扇 */ #if HAS_FAN2 #define FAN_COUNT 3 #elif HAS_FAN1 #define FAN_COUNT 2 #elif HAS_FAN0 #define FAN_COUNT 1 #别的 #define FAN_COUNT 0 #万一
因此,根据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 && E3PIN_AUTO_F= FAN1_PIN && E3PIN_AUTO_F= #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 && E3PIN_AUTO_F= FAN2_PIN && E3PIN_AUTO!_F=
现在我们正在进入清澈的水中!此代码提示FAN1_PIN
和FAN2_PIN
。如果您查看引脚布局文件,例如,pins_RAMPS.h,您会发现这是需要定义的引脚常量,FAN1_PIN
如果您选择“EFF”配置(Hotend、Fan0、Fan1),例如#define FAN1_PIN RAMPS_D8_PIN
.
什么是留给你做的是找到你的微控制器的未使用引脚并设置FAN2_PIN
有#define FAN2_PIN <a free pin number>
。
例如,引脚 4 不是使用的引脚编号(和模拟输出引脚)。不要忘记您选择的引脚不能直接运行风扇,它应该用于调度 MOSFET。
请注意,存在双外部风扇接头“Reprap Ramps1.4 RRD Fan Extender”,这描述了使用 D6 和 D11 引脚。进一步调查导致 3D.SE 发布使用此风扇标题:“如何配置 Marlin 以启用带有双挤出机的自动风扇”。