In de bronnen van Marlin kun je vinden hoeveel fans je kunt gebruiken, zelfs als je geen programmeur bent, zou dat mogelijk moeten zijn. Van daaruit kunt u vinden hoe u de pinnen voor de ventilatoren instelt, op voorwaarde dat deze gratis ongebruikt en zichtbaar zijn (zodat u niet zo direct op de microprocessor soldeer). Zoek eerst hoeveel fans er mogelijk zijn.
Begin in Marlin_main.cpp en zoek naar 106
(of 106
op de Marlin GitHub-website) leidt u naar de bronnen van de uitvoering van het M106
-commando. Hieronder wordt een fragment van M106
en M107
getoond. De reden waarom M107
daar is, wordt later duidelijk.
#if FAN_COUNT > 0 / ** * M106: Stel ventilatorsnelheid in * * S<int> Snelheid tussen 0-255 * P<index> Fan index, indien meer dan één ventilator * * Met EXTRA_FAN_SPEED ingeschakeld: * * T<int> Tijdelijke snelheid herstellen / gebruiken / instellen: * 1 = Vorige snelheid herstellen na T2 * 2 = Tijdelijke snelheid gebruiken die is ingesteld met T3-255 * 3-255 = Stel de snelheid voor gebruik met T2 * / inline void gcode_M106 () {const uint8_t p = parser.byteval ('P'); if (p < FAN_COUNT) {#if INGESCHAKELD (EXTRA_FAN_SPEED) const int16_t t = parser.intval ('T'); if (t > 0) {switch (t) {case 1: fanSpeeds [p] = old_fanSpeeds [p]; breken; geval 2: old_fanSpeeds [p] = fanSpeeds [p]; fanSpeeds [p] = new_fanSpeeds [p]; breken; standaard: new_fanSpeeds [p] = MIN (t, 255); breken; } terugkeer; } #endif // EXTRA_FAN_SPEED const uint16_t s = parser.ushortval ('S', 255); fanSpeeds [p] = MIN (s, 255U); }} / ** * M107: ventilator uit * / inline void gcode_M107 () {const uint16_t p = parser.ushortval ('P');
if (p < FAN_COUNT) fanSpeeds [p] = 0; } #endif // FAN_COUNT > 0
Als je naar deze code kijkt, is het eerste (eigenlijk de eerste regel, #if FAN_COUNT > 0
, daar al een hint naar) dat jouw aandacht is constant FAN_COUNT
. Blijkbaar weet de software hoeveel fans er gedefinieerd zijn! Interessant! Hoe weet het dat! Dit stuk code eindigt net na het afhandelen van het M107
-commando (regel #endif // FAN_COUNT > 0
), daarom wordt het hier weergegeven.
de zoekopdracht door te vinden hoe FAN_COUNT
is ingesteld (met behulp van de zoekopdracht op GitHub voor de Marlin-repository) leidt naar het bestand Conditionals_post.h. Een interessant onderdeel is:
/ ** * Tot 3 PWM-fans * / # 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
Dus afhankelijk van HAS_FANx
(waarbij x staat voor 0, 1 of 2) kun je meerdere fans hebben, tot 3 in totaal! Cool, heb iets geleerd in het proces. :)
Laten we nu zoeken naar HAS_FANx
; in hetzelfde bestand vind je:
// Andere fans # definieer HAS_FAN0 (PIN_EXISTS (FAN)) # definieer HAS_FAN1 (PIN_EXISTS (FAN1) && CONTROLLER_FAN_PIN! = FAN1_PIN && E0_AUTO_FAN_PIN! = FAN1_PIN! = FAN1_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)
Nu komen we in helder water! Deze codes verwijzen naar FAN1_PIN
en FAN2_PIN
. Als je je pin-layoutbestand bekijkt, bijv. pins_RAMPS.h je ziet dat dat de pinconstanten zijn die gedefinieerd moeten worden, eigenlijk is FAN1_PIN
bijv. instellen als u een "EFF" -configuratie kiest (Hotend, Fan0, Fan1), bijv. #define FAN1_PIN RAMPS_D8_PIN
.
Wat u nog moet doen, is een ongebruikte pin van uw microcontroller zoeken en de FAN2_PIN
instellen met #define FAN2_PIN <a gratis pincode>
.
Bijv pin 4 is geen gebruikt pinnummer (en een analoge outputpin). Vergeet niet dat de pin die je kiest niet direct een ventilator kan laten draaien, hij moet worden gebruikt om een MOSFET te plannen.
Merk op dat een dubbele externe ventilator header "Reprap Ramps1.4 RRD Fan Extender" bestaat, dit beschrijft het gebruik van de D6- en D11-pinnen. Verder onderzoek leidde tot een 3D.SE-bericht met behulp van deze fan-header: "Hoe Marlin te configureren om automatische ventilatoren met dubbele extruder in te schakelen".