Vraag:
Meer ventilatoren aansturen met RAMPS-bord
vega
2018-08-02 17:25:21 UTC
view on stackexchange narkive permalink

Ik gebruik RAMPS 1.4 met Marlin. Met Marlin kun je een groot aantal ventilatoren besturen met de opdracht M106 P<fan index> . Ik zou willen dat RAMPS enkele extra ventilatoren aanstuurt, onafhankelijk van de laagventilator. Zijn er gratis pinnen op RAMPS 1.4 om dat te doen? Kan ik anders het RAMPS-bord instellen om een ​​commando naar een aparte Arduino te sturen? Ik heb ook Octoprint als dat het gemakkelijker maakt.

Heb je https://reprap.org/wiki/File:Arduinomegapololushieldschematic.png bekeken?
Je kunt tot 3 fans aansturen met `M106 P `, zie mijn antwoord hieronder.
Een antwoord:
0scar
2018-08-03 02:19:07 UTC
view on stackexchange narkive permalink

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".

Heel interessant! Bedankt voor het leren vissen! Ik zie ook in pins_RAMPS.h dat pin 4 beschikbaar is voor filament-uitloopsensor of laser, die ik niet gebruik. Dus ik zou dat ook kunnen gebruiken, denk ik voor een fan (via MOSFET).
@vega Graag gedaan, uitstekend dat je het bericht hebt gebruikt om een ​​ongebruikte pin te vinden (vanaf hier weet ik niet hoe je setup eruitziet en wat wordt gebruikt of niet), configureer gewoon de pin naar de `#define FAN1_PIN` als je hebt in totaal 2 fans en gebruikt een MOSFET en je bent klaar om te gaan!


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 4.0-licentie waaronder het wordt gedistribueerd.
Loading...