Hallo liebe Elektronikgemeinde,
als Programmierer habe ich ein Elektronik-Programmierprojekt begonnen,
bei dem ich mir mittlerweile eingestehen muss, dass meine Fähigkeiten im
Bereich Elektrotechnik absolut ungenügend dafür sind. Ein Raspberry Pi
hat das bereits nicht überlebt.
Was ist das Ziel?
Ich möchte mit dem Raspberry Pi GPIO einen handelsüblichen PC Lüfter mit
4 Pins (12V) kontrollieren. Neben einem 3.3V und einem GND Pin sind drei
Pins dafür vorgesehen:
- OUT für PWM
- IN für Tach
- OUT für die Kontrolle eines MOSFET (zum An- und Ausschalten des
Lüfters)
Was funktioniert bereits?
Jede der drei genannten Funktionen separat auf einem Breadboard
zusammengesteckt funktioniert und kann programmatisch weiterverwendet
werden.
Was ist die Herausforderung?
Alle drei Funktionen gleichzeitig so zu zusammen zu schalten, dass sie
sich nicht gegenseitig beeinflussen oder, dass der Raspberry Pi
verbrennt … :(.
Was sind die Randbedingungen?
- PC-FAN: „be quiet! SHADOW WINGS 2“ (14025-LR-PWM).
- Der MOSFET (IRF 520N) befindet sich auf einem separaten Board „MOS
MODULE 2035“
Sowohl Lüfter als auch das MOS MODULE haben eigene elektronische
Schaltungen, die ich nicht im Detail verstehe und daher als „Black Box“
mit Schnittstellen nach außen betrachtet habe.
Den Quellcode (Python) stelle ich nach Fertigstellung gern mit zur
Verfügung.
Eine initiale schematische Darstellung habe ich mit der Datei
RaspiFanController.jpg angehängt. Die Darstellung der Schaltung im MOS
MODUL 2035 ist unvollständig.
(Der Eintrag Beitrag "Raspberry 4Pin PWM FAN" scheint
ähnlich gelagert zu seine, löst aber das Problem leider nicht.)
Vielen Dank schon einmal für's Lesen und natürlich allen, die eine Tipp
für mich haben.
Viele Grüße,
Hannes
Moin,
Alle GNDs werden verbunden. 12V- = GND?!
zum MOS-Module:
links: An SIG kommt GPIO_OUT_PWM, An VCC kommt 3,3V, GND = GND
rechts: Vin = 12V, V- = GND, V+ = PWM(FAN), GND wird über nen
zusätzlichen N-MOSFET vom Raspi geschalten. Der Zusätzliche N-MOS:
Source an GND, Drain an GND vom MOS-Modul, Gate über 100 Ohm an
GPIO_OUT_MOS(Raspi)
zum FAN:
12v = 12V
GND = GND
PWM = V+(MOS-Modul)
zum Raspi:
Hier brauchen wir jetzt nen NPN-Transistor oder N-MOS
GND = GND(Raspi) = Source(N-MOS)/Emitter(NPN)
TACH(FAN) = 1kOhm zu Gate(N-MOS)/Basis(NPN)
Drain(N-MOS)/Kollektor(NPN) = 1kOhm zu 3,3V + Drain zu
GPIO_W_TACH/Kollektor zu GPIO_W_TACH
Durch die Transistoren werden logische Signale invertiert.
Grüße (:
In einem Schaltplan kommen normalerweise auch Verbindungen zwischen den
Modulen vor!
Mein Glaskugel sagt mir, Deine Mosfetmodule sind unbrauchbar, da sie GND
Schalten. Du brauchst welche die die +12V Schalten, den wenn du die
Lüfter per Mosfet an GND trennst, dann liegen am Tacho/PWM Pin 12V an ->
Raspi tot.
Daneben brauchen 4Pin Lüfter keinen Mosfet, einfach die PWM auf 0% Duty
stellen -> Aus.
- Für die Tachoeingänge brauchst Du einen Pull-Up
- Der PWM Ausgang kann vom Lüfter auf bis zu 5.5V gezogen, das mag ein
Raspi gar nicht.
- der PWM Ausgang muss außerdem als Open-Drain konfiguriert werden
- Es fehlt generell die Schutzbeschaltung für solche steckbaren
Anschlüsse. Der Raspi ist da sehr empfindlich
Warum ausgerechnet einen Raspi? Das ganze wäre mit einem Arduino
günstiger, einfacher und robuster. Der bedient Dir ohne mit der wimper
zu zucken 8 Lüfter gleichzeitig, wenn sein muss auch mit Mehrzonen
Temperaturregelung.
Hallo zusammen,
zuerst einmal VIELEN DANK für die Tipps und Vorschläge. Ich habe mir
eine Reihe verschiedener Transistoren bestellt um die Vorschläge
nachzubauen.
Timo: Der mittlere Link ließ sich gut nachbauen und funktioniert. Das
PWM-Signal scheint invertiert zu sein (oder ich habe etwas falsch
gesteckt) aber das konnte ich programmatisch auflösen.
Andreas: leider ist Duty 0% bei dem Ventilator scheinbar nur die
niedrigste RPM die geht aber er dreht sich weiter. Das Oszi zeigt auch
wirklich eine Null-Linie. D.h. ich brauche diesen „Hauptschalter“ oder?
Micha, das versuche ich mal umzusetzen, wenn die Transistoren da sind.
Ich werde es vermutlich aber niemals verstehen. Meinen Respekt allen,
die so etwas können. :D
Ist es aber statt dessen nicht leichter das MOS MODULE einfach
rauszuschmeißen und statt dessen mit geeigneten Transistoren V+ zu
schalten?
Ziel der Aktion ist es ein Raspi-OMV-NAS-Gehäuse zu kühlen – darum der
Raspi und kein Arduino. Als Input soll ein DHT-22 und die
Raspi-CPU-Temp. Dienen.
VG, Hannes
Aha, jetzt kommen wir also langsam zum Thema.
Dann brauchst Du auf jeden Fall High-Side Schalter. Transistoren machen
bei den Strömen keinen Sinn mehr. Entweder P-Channel Mosfet + ein
Transistor als Inverter oder gleich ein fertiger High-Side Switch. Bei
den PWM Tacholüftern gibt es nach Norm drei Profile. Bei einem läuft der
Lüfter mit 0% Duty bei Mindestdrehzahl, bei den anderen bleibt er
stehen. Dein Tachoeingang braucht trotzdem eine Schutzbeschaltung, also
wenigstens ein Widerstand mit 10k davor + Pull up auf 3.3V. Für das PWM
Signal reicht ein Transistor, invertiert das Signal, muss Du dann bei
der Duty berücksichtigen.
Fertiger Highside-Switch (z.B. aus der ProFET-Serie BTSxxx) wäre sicher
die bessere Wahl, weil nahezu trivial anzusteuern. Mit den Teilen kann
man fast nichts falsch machen.
Hallo zusammen,
noch einmal herzlichsten Dank für die super Unterstützung. Mit den
letzten Hinweisen haben ich das Ziel nun vollständig erreichen können.
Das MOS-Modul ist rausgeflogen und statt dessen ein BTS 432 E2
dazugekommen. Ich kann nun vom Raspi aus den Ventilator sauber ein und
ausschalten, über die PWM regulieren sowie die RPM permanent ausgeben
lassen.
Wenn ich das Datenblatt des BTS 432 E2 richtig interpretiere braucht man
eigentlich eine Steuerspannung von mind. 5V. Es funktioniert hier
allerdings auch mit den 3.3V des Raspi. Im Zweifel könnte man vermutlich
aber auch einen 3.3 -> 5V Logiklevelkonverter dazwischen klemmen.
Jetzt werde ich die Schaltung noch einmal komplett aufzeichnen und den
Python-Code bereitstellen.
VG, Hannes
Hallo zusammen,
Hier nun die Ergebnisse:
1. Schaltung
angehängt ist die Schaltung als PNG. So weit funktioniert das bei mir
mit einem Raspi 2. Alle Grounds sind verbunden. Die Schaltung basiert
weitestgehend auf dem zweiten Link von Timo N. In wie weit meine
Modifikationen und die Schaltung als ganzes elektrotechnisch korrekt
ist, kann ich leider mangels Wissen nicht einschätzen.
Anpassungsvorschläge nehme ich natürlich gern an. Nachbauen bitte auf
eigene Gefahr.
In meinem vorangegangenem Post habe ich geschrieben, dass der BTS 432 E2
laut Spec keine 3,3V Logik verarbeiten kann. Ich glaube da habe ich mich
geirrt und die Praxis zeigt das auch.
Wie auch erwähnt ist das PWM Signal invertiert. Ich vermute das liegt an
dem Transistor S9014. Oder?
Ggf. ist das sogar das, was Andreas M. In seinem zweiten Post
beschreibt.
2. Code
angehängt ist der Code als Fan.py. Er ist für den Ventilator mit dem
Profil 0% Duty bei Mindestdrehzahl ausgelegt. Siehe hierzu auch der
zweite Post von Andreas M. Die Pin-Nummern müssen natürlich immer an das
entsprechend verwendete Setup angepasst werden.
Vielen Dank und VG, Hannes