Moin zusammen,
um unseren Keller zu belüften, möchte gerne diesen Lüfter Papst 4412FGPR https://de.farnell.com/ebm-papst/4412…-16a/dp/2914153 mit einem Pi ansteuern und die Drehzahl und Drehrichtung in Abhängigkeit bestimmter Parameter regeln.
Der Lüfter hat 3 Anschlüsse: +12V , Gnd,PWM.
Lege ich den Motor an 12 Volt und den PWM-Anschluss an Ground läuft der Motor in Max-Geschwindigkeit vorwärts, lege ich den PWM-Anschluss auf 12 V läuft der Motor in Max-Geschwindigkeit rückwärts. So soll es sein, aber nun kommt der Pi ins Spiel, denn ich würde auch gerne die Drehzahl mittels Pi regeln.
Die einfache Variante, das PWM-Signal des Pi auf den entsprechenden Motor-Anschluss legen und dann das u.a. Programm (Hoch-und Runterfahren des Dutycycles) starten, funktioniert nicht.
Zu beobachten ist beim Programmstart zunächst ein Start bei DC= 0 bei voller Drehzahl.
Bei 50 % DC beträgt die Drehzahl auch noch geschätzte 20-30%. Erst bei ca. 80% DC stoppt der Lüfter, ändert dann die Drehrichtung und kommt bis 100% DC nur auf eine geschätzte Drehzahl von höchstens 20-30%. Beim Rücklauf des DutyCycles von 100 auf 0 verhält sich der Lüfter analog zum Hochlauf.
Ich nehme mal stark an, dass der geringe PWM-Pegel der GPIO für dieses nicht gewünschte Verhalten verantwortlich ist.
Nun ist meine Frage, wie schaffe ich es, das PWM-Signal vom PI auf 12 Volt zu verstärken?
Hat jemand da vielleicht schon eine Lösung in der Schublade? Ich habe bereits mit einer Transitor-Schaltung rumexperimentiert, aber meine Schaltung hatte keine Verbesserung gebracht, der Motor zeigte das gleiche Verhalten wie ohne Transistor.
Macht es überhaupt Sinn, in die Richtung PWM-Signal-Verstärung weiter zu forschen, oder liege ich hier vielleicht komplett falsch, um diesen Motor zu steuern?
Über eine Einschätzung wäre ich dankbar.
Danke im Voraus und viele Grüße
Rene
Programmcode Drehzahl Papst-Lüfter
import RPi.GPIO as GPIO
import time
ledPin = 32
def setup():
global pwm
GPIO.setmode(GPIO.BOARD)
GPIO.setup(ledPin, GPIO.OUT)
GPIO.output(ledPin, GPIO.LOW)
pwm = GPIO.PWM(ledPin,1500) # Set Frequency to xxxx Hz
pwm.start(0) # Set the starting Duty Cycle
def loop():
while True:
pwm.ChangeDutyCycle(0)
time.sleep(1)
for dc in range(0, 99,1):
pwm.ChangeDutyCycle(dc)
time.sleep(1)
print (dc)
time.sleep(2)
for dc in range(100, 1, -1):
pwm.ChangeDutyCycle(dc)
time.sleep(1)
print (dc)
time.sleep(2)
def destroy():
pwm.stop()
GPIO.output(ledPin, GPIO.LOW)
GPIO.cleanup()
if __name__ == '__main__':
setup()
try:
loop()
except KeyboardInterrupt:
destroy()
Alles anzeigen