ESP 32 PWM und Tachosignal auslesen / steuern

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo an alle,

    ich bin umgestiegen auf ESP32 also weg von ESP 8266. Jetzt versuche ich mich daran RGB Lüfter zu steuern. Es handelt sich um Corsair QL120 RGB.

    Diese können mit max 1500 RPM drehen und verfügen natürlich über den 4 Pin Stecker.

    Somit war es für mich naheliegend das gute Stück per PWM zu steuern.

    Ein altes Tutorial rausgesucht und auf ESP 32 "umgeschrieben".


    Nur leider habe ich das Phänomen das mein Pin 14 ein für mich nicht immer plausibles Tachosignal liefert. Senke ich Drehzahl des Lüfters per PWM ist die Ausgabe im Serialmonitor gegen Null. Frequenz 0 Hz und RPM: 0 manchmal sehe ich aber auch eine Frequenz von 71 Hz und eine RPM von 2200 UMin <- was ja keinen Sinn macht da der Lüfter nur max 1500 schafft.

    Ich nehme an das der Lüfter mehr als nur 2 Impulse pro Umdrehung liefert. Aber die kann ich das messen ohne Oszilloskop? Oder habe ich noch einen Fehler im Sourcecode?

    Bitte helft mir - danke schon mal vora.


    Anbei noch mein Sourcecode:


  • Moinsen,

    Tja, das ist so ein Problem, wenn man nicht das Datenblatt des Lüfters liest.
    Grundsätzlich sollte man kein Default PWM-Signal aus einem µC an den Lüfter senden.
    Wie man eigentlich erahnen könnte, besteht ein PWM Signal aus 2 Komponenten, oder maßgebenden Parametern. Das ist einmal die Basisfrequenz aus welcher sich die Periodendauer ergibt, und dann ist das Tastverhältnis welches den prozentualen Anteil innerhalb der Periode aus einen LOW zu High Anteil bestimmt. Das ist das was du über analogWrite() ausgibst.
    Nun werde ich mir nicht die Mühe machen nach einen Datasheet zu suchen um zu erfahren welche Betriebsparameter dieser Lüfter hat.
    Ich kann dir aus eigener Erfahrung mit einem anderen Lüfterhersteller sagen, das dieser eine Basisfrequenz im zweistelligen kHz Bereich vorschreibt. Nun habe ich keine Ahnung was deine IDE / Compiler als PWM -Basisfrequenz verwendet, denn dein Programm gibt keinerlei Rückschlüsse auf diesen doch so wichtigen Parameter.

    Der nächste Fehler ist dein Interrupt Handling Routine.
    Jeder ausgelöste Interrupt führt dazu das in diese Routine gesprungen wird, was aber bei dir in der Abarbeitung durch einen Read-Write Kombination in der Ausführung Zeile 41 stark behindert wird.

    Was soll das werden, wenn du zu einem statische ohne Frequenzangabe ein PWM mit einem > 50 % Tastverhältnis ausgibst, aber gleichzeitig versuchst in diesen Lauf einzugreifen um den Ausgangspegel zu invertieren ? So wäre eine 50%iges LOW/HIGH Verhältnis in der Zeile mit analogWrite(<Pin> , 127).

    Ich habe absolut keine Ahnung welcher Sinn hinter diesem Programm steht und sehe auch keine Sinn in dieser Art der Programmgestaltung.

    Wenn du die Tacho-Impulse auf steigend Flanke RISING zählen und erfassen willst dann ist diese Interruptauslösung schon einmal der Richtig Weg. Aber um auf eine Drehzahl je Zeiteinheit zu schließen. benötigst du noch einen Timer, welcher aller von dir festgelegter Zeiteinheit diesen Counter wieder auf Null setzt. Das heißt nichts anderes das die Timer Routine nicht nur den Counter aller einer bestimmten Zeiteinheit 1 Sek, oder 5 Sek oder was auch immer wieder auf Null zurücksetzt, damit der eigentlich Zählimpuls ausgewertet werden kann, sondern dieser Momentan-Maximal Wert muss vor der Null-Setzung als Inhaltskopie in eine globale Variable, welche vor der void setup() definiert und initiiert wurde, gespeichert werden, damit innerhalb deiner void loop() Routine mathematisch auf eine Drehzahl umgerechnet werden kann.

    Franky

    Edited once, last by Franky07 (May 1, 2024 at 4:17 AM).

  • Vielleicht hast Du einen Fehler in deiner Schaltung. Bei den meisten Lüftern wird i.d.R. das Tachosignal über einen Open-Collector Ausgang ausgegeben, d.h. an diesem Ausgang sollte ein Pull-Up Widerstand angeschlossen sein.

    Das Tachosignal könntest Du auch mit einer LED + Vorwidestand am Tachosignalausgang visualisieren. Die LED sollte dann je nach Drehzahl, heller bzw. dunkler leuchten.

    Edited once, last by Fliegenhals (May 1, 2024 at 10:08 AM).

  • Hallo Franky07 erstmal danke für deine Antwort. Ehrlich gesagt habe ich mir das Thema nicht so schwer vorgestellt und zugegeben ich verstehe fast garnichts von dem was du mir sagen willst.

    Zu der Frequenz vom Lüfter. Nach diversen Internetrechercheversuchen habe ich nichts zu dem Lüfter finden können. Kann man die Frequenz denn nun noch irgendwie anders ermitteln?


    Bei deinem Skript habe ich hoffentlich richtig verstanden kann ich das Delay ja selber bestimmen. Doch ohne die Frequenz vom Lüfter komme ich doch hier nicht weiter oder?

  • Nachtrag: Für mich unbegreiflich warum meine RPM Zahlen so stark von der Herstellerangabe abweichen. Laut Hersteller kann der Lüfter max 1500 RPM.

    Daraufhin habe ich mal 60Sek gemessen und Aberwahnwitzig Werte erhalten.

    Hierzu habe ich einfach gemessen was in 60 Sek. so ankommt. Dafür habe 55000 Messungen erhalten und somit auch eine "RPM" von 55000. Da ich weiß das der Lüfter aktuell auf Volllast läuft und max aber nur 1500 U/min also 1500 RPM hat. Komme ich auf 55000 / 1500 = 36 Wechsel von Flankenwechseln also 36 Hallsensoren (ich hoffe die werden so genannt).



    Aus meiner Sicht macht das Sinn aber 36?! finde ich doch ziemlich hoch. Stimmt meine Überlegung?

  • Nachtrag2: das mit der Frequenz habe ich auch noch nicht gerafft. Ist diese Wirklich relevant? Ich habe Youtube Videos gesehen in welchen man eine höhere Frequenz für das PWM Signal nutzt. Mir erschließt sich aber nicht der Mehrwert!


    Link

  • Moinsen,

    wo ist es ein Problem, wenn man auf der Herstellerseite nicht fündig wird, den Hersteller über die Support Webseite direkt anzuschreiben, das Problem zu schildern, und nach den benötigten Angaben zu Fragen.

    Warum ist dieser PWM Frequenz so wichtig, damit der Lüfter optimal angesteuert werden kann, und keine Spulengeräusche von sich gibt. Das s.g. Spulenfiepen.
    Andere Hersteller, ohne jetzt Werbung machen zu wollen, wie Noctua, liefern solche Informationen frei zugänglich.

    Ja diese Frequenz ist wirklich relevant ! Weil Frequenzabhängig sich auch die Anlaufdrehzahl ändert. Das heist du verlierst wahrscheinlich einen Teil des Stellbereiches.
    Bei anderen Herstellern ( und ich weiss warum ich nicht diese "RGB - Blasen" Gurken kaufe ) gehören folgende Parameter zu den Standard Angaben. Da kein E-Motor bei Duty 1% anläuft sondern es einen Start-Duty gibt, geben die meisten Hersteller neben der PWM Basisfrequenz auch noch das Tastverhältnis an ab welcher sich der Lüfter zu drehen beginnt. Das heißt in der Umsetzung ( Programm ) nichts anderes, also das dieser Bereich Start-Duty ( Tastverhältnis ) bis 100% schlussendlich gemapt werden muss.
    analogWrite(map(<Solldrehgeschwindigkeit>, 0, 99, <Start-PWM>, 255)); siehe map

    Hier muss man diesen 8 Bit Wertebereich 0-255 als Eingabegröße für das Tastverhältnis von analogWrite() entsprechend so anpassen, damit der Lüfter wirklich bei eine Wertzuweisung von 1% beginnt zu drehen.

    Zu deinem Verlinkten Video, das ist soweit schön und gut, aber damit würde der µC sich in einer Schleife befinden, und nicht viel anderes machen können als diesen Lüfter zu steuern. Also könnte man auch den kleinsten Vertreter der AVR Serie nehmen, einen Attiny 25/48/85 dort ein Stellerwert via ADC einspeisen, das PWM Signal erzeugen, den Tachowert erfassen, und das ganze auch noch auf einem I²C Dispaly ausgeben. Dafür muss man nicht zwingend ein ESP als Hardware Ressource mit einem nicht unerheblichen Eigenstrombedarf mißbrauchen.

    Drehzahl ist das eine ! Das wird durch das Tastverhältnis schlußendlich durch die elektromechanische Umsetzung bestimmt, welche Drehzahl der Lüfter bei welchem Tastverhältnis erreicht. Die PWM Frequenz selber ist nur die Wiederholrate wie oft pro Sekunde dieses Steller Signal -> analogWrite() zu dem Lüfter gesendet wird, und bestimmt damit auch das Ansprechverhalten, eine mögliche Geräuschentwicklung durch / über die Motorspulen, und in erster Linie, ab welchen kleinsten analogWrite() - Wert der Lüfter beginnt zu drehen. Durch eine falsche Parametierung büßt man einige Prozente des technisch zur Verfügung stehenden Regelbereiches ein, und es kommt zu Fehlmessungen bei der Tachosignalauswertung.

    Franky

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!