ich habe einen Ruck Etamaster Lüfter mit EC Motor und Eingang für PWM+GND, wahrscheinlich den gleichen den dieser Herr hier hat: EC PWM Steuerung
Ich will auch eine PWM für diesen Motor erzeugen, allerdings mit einem MEGA2560, und der Möglichkeit später noch z.b. Feuchtigkeitssensoren abzufragen um den Lüfter situationsbedingt besser ansteuern zu können.
Frage: Brauche ich, wie in diesem Bild: EC PWM Steuerung - #31 by Falke07 den NPN Transistor und die Einspeisung in die PWM Leitung oder kann ich PWM von einem MEGA output und GND direkt zum Motor geben?
Wenn ich richtig verstehe braucht der TO des verlinkten Threads den Trans. nur wegen der 3m Kabellänge - welche limitierung habe ich ohne Trans.?
Wenn ich in die PWM einspeisen muss und nicht mit den 5V des MEGA auskomme, habe ich ein Problem.
Ich habe 5V(zu wenig für MEGA) und 12V(zu viel für Motor?) Meanwell Schaltnetzteile hier...
Was wäre hier die bessere Wahl? 12V + stepdown oder 5V mit stepup (eins von beiden modulen hätte ich glaube ich hier) oder direkt ein 10V Netzteil bestellen?
Wenn das Netzteil wirklich 5V ausgibt kannst auf 5V Pin drauf gehen, aber Achtung bei USB Versorgung immer abklemmen, oder dein USB Kabel so präparieren das du die 5V durchtrennst, sonst kann passieren das man den USB Port am PC defekt macht wegen Stromausgleich.
Im dem gezeigtem Link hat der Jenninger ein ESP der hat an den Pins nur 3,3V.
Du kannst den Mega mit Deinem Netzteil über den 5V Pin bestromen. Da für die PWM Spannung 5-10 V angegeben sind, könnte es ohne Transistor funktionieren. Ist halt die untere Grenze. Musst Du ausprobieren.
Außerdem ist zu überlegen, wie Du die PWM erzeugen willst. Mit Hilfe von analogWrite (ohne auf die entsprechenden Register zuzugreifen) ist 980Hz an den Pins 4 und 13 das Maximum. Halt nicht ganz 1kHz.
Wie willst Du denn das PWM-Signal erzeugen? Mit analogWrite ist, wie gesagt, bei 980 Hz an den genannten Pins Schluss. Um irgendwas zwischen 1kHz und 5kHz zu erzeugen (wird laut Datenblatt für Deinen Lüfter benötigt), wirst du auf bestimmte Register eine Timers zugreifen müssen. Wie das geht, ist im Datenblatt zum ATMega2560 beschrieben….
const int pwmPin = 9; // Das Pin für die PWM-Ausgabe
const int potPin = A0; // Das Pin für den Potentiometer-Anschluss
int potValue = 0; // Variable zur Speicherung des Potentiometer-Werts
int pwmValue = 0; // Variable zur Speicherung des PWM-Werts
void setup() {
// Setze das PWM-Pin als Ausgang
pinMode(pwmPin, OUTPUT);
// Konfiguriere Timer 1 für die PWM
TCCR1A = _BV(COM1A1) | _BV(WGM11); // Non-inverting PWM, Mode 14 (Fast PWM)
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS11); // Mode 14, Prescaler 8
}
void loop() {
// Lese den Wert des Potentiometers
potValue = analogRead(potPin);
// Konvertiere den Potentiometer-Wert in einen PWM-Wert
// Der Potentiometer-Wert liegt zwischen 0 und 1023, der PWM-Wert sollte zwischen 0 und 65535 liegen
pwmValue = map(potValue, 0, 1023, 0, 65535);
// Setze den PWM-Wert
OCR1A = pwmValue;
// Warte eine kurze Zeit, um Schwankungen zu vermeiden
delay(10);
}
const uint8_t pinPWM5 = 5; // PWM output pin
const uint8_t potPin = A0; // Potentiometer input pin
void setup()
{
//timer 3 is connected to pin 5 as OC3A
pinMode( pinPWM5, OUTPUT ); //OC3A
//output compare clear on bottom, set on compare
//WGM = 7 (10-bit fast PWM)
//prescaler /8 (gives PWM frequency of ~1953Hz
TCCR3A = (1<<COM3A1) | (1<<WGM31) | (1<<WGM30);
TCCR3B = (1<<WGM32) | (1<<CS31);
OCR3A = 0;
}
void loop()
{
// Read potentiometer value
int potValue = analogRead(potPin);
// Map potentiometer value to PWM duty cycle (0 to 1023 -> 0 to 1023)
int pwmValue = map(potValue, 0, 1023, 0, 1023);
// Update PWM duty cycle for pin 5
OCR3A = pwmValue;
delay(100);
}
leider gibt der lüfter ein schrilles gleichmäßiges geräusch/fiepen von sich, und ich habe das gefühl dass er unregelmäßig läuft als würde sich die geschwindigkeit alle 1-2sekunden "normalisieren" (ist das normal?)
Naja .. die map Anweisung ist ziemlich sinnbefreit, weil da gar nicht gemappt wird (identischer Wertebereich). Außerdem ist OCR3A ein 16Bit wert der zwei Schreibzyklen braucht um beschrieben zu werden. Darum sollte man vor dem Beschreiben die Interrupts ausschalten.
Ich habe leider keinen ATMega2560. So wie es aussieht, sind die Registerbelegungen aber wie beim Timer1 vom Atmega328. Darum habe ich mal das hier zusammen gebaut:
achja, reicht es in deinem script die HERTZ variable zu ändern? passt das noch mit dem prescaler bei 1000-5000 Hz ? würde mich gerne durchprobieren und schauen wie sich das fiepen verhält...