standalone arduino - MOSFET PWM für Lüfterregelung

Ich würde auch eher von Nanofarrad auf Mikrofarrad umschwenken...

Ok.
Aufgrund des Schaltplans des Arduino Uno Boards habe ich mich bisher im nF Bereich bewegt, dort sind ja 100nF verbaut. Ich werde gleich mal noch einen Elko dranhängen.

Gerade habe ich mal noch ein bisschen mit den PWM Frequenzen gespielt. Bis etwa 5000Hz läuft er, danach gibt es Probleme.

Der Spannungswandler ist im Schaltplan oben rechts, da findet man am Ein- und Ausgang jeweils einen Elko mit 47µF. Etwas mehr schadet in der Regel auch nicht... :wink:

Ja, da habe ich mittlerweile schon einen 220µF dran :wink:

In unmittelbarer Nähe des Vcc Pins meinte ich die 100nF.
Ich versuche gerade dort mal noch einen zusätzlichen Elko unterzubringen, also recht nah an dem Vcc Eingang.

So, hänge noch einmal den aktuellen Schaltplan an. Neu sind im Wesentlichen die Kondensatoren C9, C10, C11.
Jedoch komme ich leider nicht über eine Frequenz von etwa 5kHz. Sobald ich dann einen PWM Wert über ca. 200 schreibe, bleibt das Programm hängen. Ein automatischer Neustart findet meistens allerdings nicht mehr statt.
Dabei ist alles sehr unzuverlässig, manchmal läuft es noch einigermaßen durch, manchmal bleibt er schon früher hängen, usw.

Das ist das Programm, das ich laufen lasse:

/*

 Mimics the fade example but with an extra parameter for frequency. It should dim but with a flicker 
 because the frequency has been set low enough for the human eye to detect. This flicker is easiest to see when 
 the LED is moving with respect to the eye and when it is between about 20% - 60% brighness. The library 
 allows for a frequency range from 1Hz - 2MHz on 16 bit timers and 31Hz - 2 MHz on 8 bit timers. When 
 SetPinFrequency()/SetPinFrequencySafe() is called, a bool is returned which can be tested to verify the 
 frequency was actually changed.
 
 This example runs on mega and uno.
 */

#include <PWM.h>

//use pin 11 on the Mega instead, otherwise there is a frequency cap at 31 Hz
int FAN = 9;                // the pin that the LED is attached to
int brightness = 0;         // how bright the LED is
int fadeAmount = 2;         // how many points to fade the LED by
int32_t frequency = 7000; //frequency (in Hz)

void setup()
{
  //initialize all timers except for 0, to save time keeping functions
  InitTimersSafe(); 

  //sets the frequency for the specified pin
  bool success = SetPinFrequencySafe(FAN, frequency);
  
  //if the pin frequency was set successfully, turn pin 13 on
  if(success) {
    pinMode(11, OUTPUT);
    digitalWrite(11, HIGH);
    delay(1000);
    digitalWrite(11, LOW);    
  }
  Serial.begin(9600);
}

void loop()
{
  //use this functions instead of analogWrite on 'initialized' pins
  pwmWrite(FAN, brightness);

  brightness = brightness + fadeAmount;

  if (brightness < 1 || brightness > 250) {
    fadeAmount = -fadeAmount ; 
  }     
  
  Serial.println(brightness);
  delay(50);      
}

Leider verstehe ich bisher noch nicht, warum es bei höheren Frequenzen Probleme gibt. Scheinbar gibt es da ja an den Transistoren einen Effekt?

Wieso steuerst Du den MOSFET nicht direkt an? Die IRF540 schalten spätestens bei 4V voll durch. Wenn Du den Transistor davor drin lassen willst, solltest Du versuchen, den Basis-Widerstand etwas zu verkleinern, damit er schneller durchschaltet. Obwohl 5kHz etwas gar wenig ist, ich hatte erst bei einigen MHz Problem in dieser Hinsicht.

Was heisst "bleibt das Programm hängen" genau? Wie weit kommt es? Wird überhaupt noch etwas ausgegeben? Falls nein, mache mal etwas mehr Debug-Output rein.

Mir sind noch zwei Sachen aufgefallen:

a) die 12V scheint garnicht gepuffert? hier könnte ein Elko nicht schade.
Ein Elko an der Prozessorversorgung hingegen ist überflüssig, da würde ich wenn dann eher auf 1n parallel zum 220nF gehen, aber das sollte bei den Frequenzen nicht nötig sein.

b) Du solltest unbedingt einen Gate-Vorwiderstand verbauen (ca. 220R bis 470R) das reduziert die Stromspitzen beim Abschalten des FETS. Zum Verständnis: du entlädst die Gate-Kapazität des Fet direkt über Transistor. Das verursacht im Abschaltfall extrem schnelle (ns) Spikes (kann auch 1A sein), die auf der Induktivität der Zuleitungen (in dem Frequnezbereich ist ein Draht kein Draht mehr, sondern Spule, Kondensator, Widerstand, Antenne....) Spannungsspitzen von mehreren Volt erzeugen können.

Ausserdem: ich kenne deinen Aufbau nicht, aber es könnte auch ein Problem der Masseführung sein. Versuche mal deine Masseleitungen dick, kurz, und am besten sternförmig zu halten. (eine Massefläche wäre noch besser).

Ansonsten das Problem langsam einkreisen:

  • ohne Lüfter betreiben. Wenns noch geht, eine andere Last (weniger Strom) probieren, wenns nicht geht, dann ohne FET betreiben etc.
    so lange weiter machen, bis man weiss welche Komponente die Störungen verursacht.

Und, so wie Pylon schon anmerkte: mit "Debug-Serial.print" die Stelle finden, an der die SW aussteigt. auch das kann ein Hinweis sein. Aber ich tippe am ehesten auf die Masseführung.

Gunther

pylon:
Wieso steuerst Du den MOSFET nicht direkt an? Die IRF540 schalten spätestens bei 4V voll durch.

Das stimmt so nicht.
Bei 4V ist der IRF540 noch voll im linearen Modus! Deshalb empfehle ich immer einen Logic Level FET, z.B. den IRLZ44N, der ist bei 4V schon fast, bei 5V ganz gesättigt.

Danke für eure Antworten!

pylon:
Wieso steuerst Du den MOSFET nicht direkt an? Die IRF540 schalten spätestens bei 4V voll durch. Wenn Du den Transistor davor drin lassen willst, solltest Du versuchen, den Basis-Widerstand etwas zu verkleinern, damit er schneller durchschaltet. Obwohl 5kHz etwas gar wenig ist, ich hatte erst bei einigen MHz Problem in dieser Hinsicht.

Ich wollte damit ein "selbstleitendes" Verhalten erzeugen, damit im Fehlerfall der Lüfter auf maximaler Drehzahl läuft.
Ob das so sinnvoll ist, lässt sich vielleicht drüber streiten. Aber es sollte doch so generell möglich sein, oder?

pylon:
Was heisst "bleibt das Programm hängen" genau? Wie weit kommt es? Wird überhaupt noch etwas ausgegeben? Falls nein, mache mal etwas mehr Debug-Output rein.

Ja, das ist was schwammig, allerdings weiß ich nicht wirklich, wo ich mehr Debug-Output unterbringen soll.
In der Setup-Funktion lasse ich ja den Summer piepsen. Damit bekomme ich mit, wenn der Prozessor neustartet.
In jedem Programmdurchlauf gebe ich den PWM-Wert aus. Ich sehe dann, dass der Wert stetig zunimmt, bis etwa 200 (sprich 100 Programmdurchläufen), mal ist es etwas mehr, mal etwas weniger. Dann kommt per Serial-Output nichts mehr und der Lüfter dreht mit konstanter Drehzahl.
Wenn ich das Programm mit höheren PWM-Frequenzen laufen lasse, ist die Tendenz größer, dass der Prozessor neustartet. Außerdem findet das dann schon früher statt (<200).
Ich hoffe, dass das einigermaßen verständlich ist.

guntherb:
a) die 12V scheint garnicht gepuffert? hier könnte ein Elko nicht schade.
Ein Elko an der Prozessorversorgung hingegen ist überflüssig, da würde ich wenn dann eher auf 1n parallel zum 220nF gehen, aber das sollte bei den Frequenzen nicht nötig sein.

Die 12V kommen von einem Steckernetzteil. Ich dachte mir, dass dieses entsprechende Pufferkondensatoren verbaut hat.
Gerade habe ich mal noch mit einem 100µF Kondensator die 12V gepuffert, das hat das Problem nicht behoben.

guntherb:
b) Du solltest unbedingt einen Gate-Vorwiderstand verbauen (ca. 220R bis 470R) das reduziert die Stromspitzen beim Abschalten des FETS. Zum Verständnis: du entlädst die Gate-Kapazität des Fet direkt über Transistor. Das verursacht im Abschaltfall extrem schnelle (ns) Spikes (kann auch 1A sein), die auf der Induktivität der Zuleitungen (in dem Frequnezbereich ist ein Draht kein Draht mehr, sondern Spule, Kondensator, Widerstand, Antenne....) Spannungsspitzen von mehreren Volt erzeugen können.

Das war ein guten Tipp. Danke vor allem auch für die Erklärung!
Ich habe nun einen 390R zwischen Gate und den Collector gelötet. Damit komme ich nun auf etwa 15kHz. Das sind zwar noch nicht die 25kHz, die ich eigentlich angepeilt hatte, aber damit könnte ich leben, die Ansteuerung ist nicht mehr zu hören.

guntherb:
Ausserdem: ich kenne deinen Aufbau nicht, aber es könnte auch ein Problem der Masseführung sein. Versuche mal deine Masseleitungen dick, kurz, und am besten sternförmig zu halten. (eine Massefläche wäre noch besser).

Hmm, das klingt für mich plausibel, warum der Aufbau auf dem Steckbrett funktioniert und in meiner zusammengelöteten Schaltung auf der Lochrasterplatine nicht.
Ehrlich gesagt, habe ich mir bei dem Zusammenbau keine Gedanken über die Massenführung gemacht. Das ist meine erste Schaltung die mit "höheren Frequenzen" (>500Hz) arbeitet. Deswegen habe ich da leider keinerlei Erfahrung.
So wie ich das sehe, könnten meine Masseleitungen durchaus ungünstig gelegt sein. Ich kann morgen mal noch ein Bild machen, ich vermute allerdings, dass es schwierig wird da einen Überblick zu gewinnen.
Bevor ich allerdings die Schaltung komplett neu aufbaue, lebe ich dann doch lieber mit den 15kHz, das Löten war einiges an Arbeit...

guntherb:
Ansonsten das Problem langsam einkreisen:

  • ohne Lüfter betreiben. Wenns noch geht, eine andere Last (weniger Strom) probieren, wenns nicht geht, dann ohne FET betreiben etc.
    so lange weiter machen, bis man weiss welche Komponente die Störungen verursacht.

Ohne Lüfter läuft es auf jeden Fall. Ich werde morgen mal eine LED anstelle des Lüfters hängen. Mal schauen, ob ich dann über 15kHz komme.

Nochmals vielen Dank für die klasse Hilfe,
Dominik

So, nun habe ich noch ein paar Sachen probiert.

Zum einen habe ich mal anstatt des Lüfters nur eine LED als Last betrieben. Damit läuft es einwandfrei, auch bei 25kHz.

Als Gate Widerstand habe ich mal noch anstelle der 390 Ohm 470 Ohm eingelötet.

Mittlerweile kann ich jetzt die Schaltung auch mit 20-25 kHz und angeschlossenem Lüfter betreiben, allerdings noch nicht wirklich zuverlässig. Aber immerhin gibt es nicht mehr jedes mal Probleme, wenn ein hoher PWM Wert erreicht wird. Das zeigt ja, dass es in die Richtige Richtung geht :slight_smile:

Ich habe mal noch ein Bild von der Unterseite meiner Platine gemacht. Schön ist sicherlich was anderes :blush:
Die rot markierten Leiter sind die Masse Bahnen. Auf der Oberseite habe ich auch noch eine Masse-Käbelchen verlegt, allerdings bekommt man da von einem Foto wohl keinen Überblick, da dort auch noch einige andere Kabel laufen...
Die gelbe Bahn ist eine 5V Leitung (Versorgungsspannung der Schieberegister). Ich hoffe, dass die beiden Leitungen nebeneinander keine Probleme machen. Allerdings liegt da ja keine dynamische Spannung drauf.
Außerdem habe ich mal noch die Pins des MOSFETs und des Bipolartransistors mit Grün markiert.
Hoffentlich ist das Bild kein Musterbeispiel wie man es nicht machen sollte... :roll_eyes:

Wenn es also mit kleineren Maßnahmen noch möglich ist die Masseführung zu verbessern, dann würde ich das mal noch probieren.

Wie gesagt, eigentlich könnte ich jetzt auch mit ~15kHz leben, damit scheint der Aufbau nun einigermaßen stabil zu funktionieren. Da ich aber gerne aus meinen Fehlern lerne und 25kHz eigentlich auch nicht gerade Hochfrequenztechnik sein sollte, würde ich auch noch Verbesserungsmaßnahmen durchführen (wenn ich nicht die Platine komplett neu aufbauen muss).

EDIT: Sorry, das Bild zu verkleinern habe ich im Eifer des Gefechts vergessen :blush:. Ich bin sonst auch kein Fan von solchen "Postern".
Habe einen neuen Anhang beigefügt.

Kann mir mal einer erklären warum hier immer Bilder mit 3000x2000 Pixeln Auflösung hochgeladen werden? Das viele Scrollen macht es schwieriger den Überblick über eine Schaltung zu bekommen, als wenn man ein Bild mit 1280x1024 oder so ähnlich hat. Mehr Details bekommt man mit der hohen Auflösung eh nicht, die meisten Bilder wirken dann eh schon verschwommen.

Ist eigentlich ein Problem der Forum-Webseite, die sollte die Bilder nicht nur als Daumennagel und volle Pixelgröße, sondern auch/besser mit "width=100%" oder so bereitstellen können. Das würde normalen Browsern viel helfen.

Meine Freunde gucken immer blöd, wenn ich mich über gemailte Bilder von xMB Größe mit dem Hinweis beschwere, ich wolle sie mir nur auf dem Bildschirm anschauen. (Schaff dir doch schnelleres Internet an)

michael_x:
Ist eigentlich ein Problem der Forum-Webseite, die sollte die Bilder nicht nur als Daumennagel und volle Pixelgröße, sondern auch/besser mit "width=100%" oder so bereitstellen können. Das würde normalen Browsern viel helfen.

Nicht ganz. Denn die width=100% ändern leider nix an der Größe der Bildatei. Wer z.B. mobil, weil unterwegs oder auf Arbeit im Forum mitliest, der hat dann ein Problem.
Ich betreue ehrenamtlich die IT eines größeren Tierschutzvereins. Dort kommen teilweise mehrere Mails pro Tag zu vermissten Tieren an. Viele der Leute scheinen da auch zu glauben das die Größe des Bildes direkt proportional zur Chance ist, das Tier wieder zu finden. Daher kenne ich die Mailproblematik auch recht gut :slight_smile:

dominikdh:
Mittlerweile kann ich jetzt die Schaltung auch mit 20-25 kHz und angeschlossenem Lüfter betreiben ....

Glückwunsch!

dominikdh:
Wenn es also mit kleineren Maßnahmen noch möglich ist die Masseführung zu verbessern, dann würde ich das mal noch probieren.

Das ist nicht so einfach zu beantworten, weil eine wichtige Info fehlt: Wo ist die Spannungsversorgung angeschlossen, wo sitzt der Spannungsregler?

Was mir auf alle Fälle sehr ungünstig erscheint, dass die Masse des MosFet von der Source über den Prozessor führt.
Hier würde ich versuchen einen direkte Masseverbindung der Source nach rechts auf den Massering zu ziehen.

Generell gilt: Vom Leistungsteil (MOSFET, Spannungsregler möglichst kurz und dick zur Masseklemme der Versorgung (bzw. des Elkos dort), vom Prozessor möglichst kurz zum Massefußpunkt des 5V Reglers.

Gunther

So, sieht gut aus :slight_smile:
Ich habe mal die Masse von der Source direkt nach rechts weg verlegt, nun läuft es absolut fehlerfrei :slight_smile:
Gerade lasse ich das Programm mal zu Testzwecken mit 50kHz laufen, bisher ohne Fehler!

Ich habe trotzdem mal noch in das Bild die Anschlussklemme der Spannungsversorgung (GND/+12v) und die Positionen der Spannungsregler (7808/7805) eingetragen. Da ich kein neues Bild gemacht habe, ist die Masseleitung vom MOSFET natürlich noch die Alte.
Wenn du also noch einen kurzen Kommentar zu der Masseführung hast, würde mich das schon interessieren. Wie gesagt, ich lerne gerne dazu :wink:

Die Anbindung der Spannungsregler an die Masse ist perfekt.

Idealerweise wäre der Mosfet auch links unter den Spannungsreglern.

Also alle Leistungsführenden Bauteile zusammen in eine Ecke, alle signalführenden Bauteile in die andere.
Damit vermeidet auch, dass hohe Ströme, oder schnelle, Störungen verursachende PWM, quer über die Platte laufen.

Etwas verbessern kannst du die Sache, wenn du den Masserahmen aus dickem Draht ausführst, z.B. 1.5mm² massiv, was aber beim Löten eher Probleme verursacht.

Am besten ist es immer die großen Ströme an einer Stelle zu konzentrieren, damit sie garnicht erst in den Aufbau reinkommen.

Grüße

Gunther

Ok, das macht Sinn.

Wenn ich das nächste mal etwas mit Frequezen > 60Hz mache, werde ich mir wohl erstmal noch etwas Theorie aneignen müssen. Habe doch gemerkt, dass mir da noch einiges an Wissen fehlte. Bin halt Maschinenbauer und kein E-Techniker ;).
Da wäre ich ohne deine Hilfe doch aufgeschmissen gewesen.
Also nochmals vielen herzlichen Dank!

Immer gerne.

vom programmieren verstehe ich leider nicht soviel wie von Hardware... :blush:

Und da mir hier auch schon oft geholfen wurde, gebe ich gerne was zurück.

Gunther

dominikdh:
Da Lüfter allerdings bei der relativ niedrigen PWM-Frequenz des Arduinos hörbare Pips-Geräusche von sich geben, will ich die Frequenz mit der PWM frequency library auf 25kHz hochsetzten. Damit klappt das feaden jedoch noch nicht, ab einem bestimmten PWM Wert bricht die Spannung wohl wieder zu weit ein, sodass der Atmega irgendwie hängen bleibt (jedoch nicht neu startet)...

Hier liegt vielleicht auch ein Problem begründet. 500Hz PWM Frequenz ist nicht zu wenig. Sondern schon zu viel für eine Lüftersteuerung. Du müßtest runter statt hoch. So um die 150Hz, dann sollte kein Lüfter mehr fieben. Zur größten Not kann man noch einen kleinen RC an den PWM Ausgang setzen um die Kanten zu glätten. Spätestens dann fiebt nichts mehr. Die feine Steuerung per PWM bleibt voll erhalten.

Hmm, ok.

Auf die 25kHz bin ich auf diversen Seiten gestoßen, u.a. auf der englischen Wikipedia.

Wenn ich mit der PWM Frequenz runter gehe und ein RC-Glied dahinter schalte, wäre es ja im Prinzip eine Drehzahlanpassung des Gleichstrommotors durch die Variation der Betriebsspannung, oder?
Dann wäre es ja ein anderer "physikalischer Ansatz", wenn ich das richtig verstehe...

Spricht denn etwas dagegen den Lüfter direkt mit einer höheren PWM Frequenz zu regeln? Leidet darunter auf Dauer der Lüftermotor?