Motor über MOSFET und PWM ansteuern zu langsam

Hallo,
ich habe hier gerade folgendes vor mir liegen:
1x Motor
1x n-channel MOSFET (IRF620)
1x Potentiometer
1x Arduino Uno

Was möchte ich machen?
Über analogRead lese ich die Werte von dem Potentiometer ein (funktioniert).
Mit der Funktion map() bekomme ich Werte zwischen 0 und 255 (funktioniert).
Über analogWrite steuere ich den PWM-Ausgang, der zum MOSFET läuft (funktioniert).
Ergebnis: Motor dreht sich wie gewünscht in Abhängigkeit des Potentiometers.

Problem:

Schließe ich den Motor direkt an 3,3V und Masse an dreht er sich schön schnell. Über die MOSFET-Steuerung beträgt die Maximalgeschwindigkeit vielleicht lediglich 50-75%. Woran kann das liegen? Beim nachmessen kommen auch die gewünschten 3,3V an. Also muss es wohl am Strom liegen. Der MOSFET verträgt aber bis zu 6A laut Datenblatt.
Wisst ihr woran es liegen könnte und wie ich mein Problem löse?

Viele Grüße

Dominik

Nun, ich gehe mal nicht davon aus, dass du ein Oszi hast, demnach würde ich drauf tippen,
dass das Gate des FETs zu groß ist, als das der AVR es im Duty Cycle umladen kann.

Eine Lösung wäre eine diskrete Treiberstufe aus BD139 und BD140 Transistoren.

? :slight_smile:
Leider habe ich kein Oszi, nein.
Den Rest habe ich leider nicht verstanden (Anfänger).
Das waren halt die einzigen, die sie beim großen C gerade da hatten (bis 200V ausgelegt). Würde mir denn ein kleinerer MOSFET etwas bringen?
Z.B. ein MOSFET mit U_DS 20V und I_D 6.4A?
Brauche den MOSFET quasi nur als Schalter für die externe Spannungsquelle (3,3V).

Grüße

Dominik

Wichtiger ist, einen MOSFet zu suchen der bei 3,3V UDS überhaupt voll durchschaltet. Ein Transistor wäre bei so niedrigen Spannungen die bessere Wahl.
Wenn du 'Vollgas' gibst, mess mal die Spannung die am FET abfällt. Zur Not einen zusätzlichen Analogeingang zwischen FET und Motor anschliessen, falls kein Voltmeter zur Verfügung steht.

Welchen Strom zieht der Motor?

2 Probleme:
Gate Threshold Voltage VGS(th) ist etwas hoch um den MOSFET mit 5V sicher voll durchzusteuern.
RDS(on) = 0.55 Ohm ist etwas hoch um den Motor nicht als Vorwiderstand zu dienen.
Welche Spannung hast Du bei PWm 100% zwischen Gate uns Source des Transistors?

Grüße Uwe

Wie ist der Motor denn überhaupt am Mosfet angeschlossen? Ein simpler Schaltplan wäre nicht schlecht. Evtl. liegt da nämlich das Problem.

@o_lampe
Ich weiß nicht, ob ich dich richtig verstanden habe. Aber ich schließe Gate an einen PWM-Anschluss an. Dort schalte ich ja zwischen 0 und 5V. Ein Pol des Motors hängt an den 3.3V des Arduinos und der andere an Drain. Source hängt an Masse.

Der Motor dreht bei voller Leistung (direkt an 3.3V des Arduinos und an Masse) ca. 200mA.

Die Spannung zwischen Gate und Source beträgt 4,57V. Das entspricht auch meinen "5V" des Arduinos (betreibe ihn gerade über USB und da messe ich auch an 5V und Masse 4,57V).

@markbee
Gerade noch gesehen, dass jemand etwas geschrieben hat :slight_smile:

Also ich lasse den Potentiometer ersteinmal weg.

Ich habe Gate an Pin9 (PWM) angeschlossen.
Drain geht einmal an den Motor (der andere Anschluss des Motors geht an 3.3V des Arduinos).
Source geht an Masse des Arduinos.

Grüße und schonmal vielen Dank für euro Hilfe :slight_smile:

Ich habe jetzt nochmal einen Schaltplan angehängt (mit Fritzing erstellt, habe derzeit kein anderes Programm zur Hand).

@marybass
soweit dachte ich, dass ich alle gestellten Fragen beantwortet habe. Falls ihr noch mehr braucht stelle ich das natürlich auch zur Verfügung. :slight_smile:

moondryl:
@o_lampe
Ich weiß nicht, ob ich dich richtig verstanden habe. Aber ich schließe Gate an einen PWM-Anschluss an. Dort schalte ich ja zwischen 0 und 5V. Ein Pol des Motors hängt an den 3.3V des Arduinos und der andere an Drain. Source hängt an Masse.

Der Motor dreht bei voller Leistung (direkt an 3.3V des Arduinos und an Masse) ca. 200mA.

Die Spannung zwischen Gate und Source beträgt 4,57V. Das entspricht auch meinen "5V" des Arduinos (betreibe ihn gerade über USB und da messe ich auch an 5V und Masse 4,57V).

@markbee
Gerade noch gesehen, dass jemand etwas geschrieben hat :slight_smile:

Also ich lasse den Potentiometer ersteinmal weg.

Ich habe Gate an Pin9 (PWM) angeschlossen.
Drain geht einmal an den Motor (der andere Anschluss des Motors geht an 3.3V des Arduinos).
Source geht an Masse des Arduinos.

Grüße und schonmal vielen Dank für euro Hilfe :slight_smile:

Hatte die Spannung zwischen Source und Drain gefragt.

Du kannst keinen Motor an die 3,3V des Arduino anschließen. Du machst den Spannungsstabiliator für die 3,3V kaputt bzw beim Arduino 2009 den FT232 Chip.
Es fehlt außerdem die Schutzdiode antiparalell zum Motor. Ein 150 Ohm Widerstand zwischen Ausgang und Gate schützt auch den ausgang des Arduinos.
Auch würde ich den Motor nicht mit den 5V der USB-Schnittstelle versorgen da auch hier ein Risiko die USB Schnittatelle des Computers zu beschädigen gegeben ist.

Grüße Uwe

Oben stand Gate und Source. Deswegen hatte ich es so gemessen.
Warum kann ich denn keinen Motor an den 3.3V-Anschluss des Arduinos betreiben?
Wo genau soll denn die Schutzdiode hin?
Aber das sind doch auch alles noch keine Gründe, warum der Motor nicht auf voller Leistung läuft?

Grüße

Dominik

moondryl:
Oben stand Gate und Source. Deswegen hatte ich es so gemessen.

Du hast Recht hab Gate geschrieben und Drain gedacht. Bitte entschuldige mir den Fehler und die nachfolgende Bemerkung.

moondryl:
Warum kann ich denn keinen Motor an den 3.3V-Anschluss des Arduinos betreiben?

Weil der Motor den Arduino überlastet. Der FT232 das Arduino 2009 gibt max 50mA und der Spannungstabilisattor lp2985-33dbvr des Arduino UNO R3 gibt max 150mA. Du reskierst den Arduino kaput zu machen.

moondryl:
Wo genau soll denn die Schutzdiode hin?

Sagte ich doch: antiparalell zum Motor; Kathode auf Pluspol und Anode auf Minuspol des Motors.

moondryl:
Aber das sind doch auch alles noch keine Gründe, warum der Motor nicht auf voller Leistung läuft?

Nehmen wir mal die Motordaten 3,3V und 200mA an und einen Arduino UNO.
Dann ist der Innenwiderstand das Motors an diesem Arbeitspunkt 16,5 Ohm wenn Du dann 0,55 Ohm des MOSFETs in Reihe schaltets verringert sich die Spannung (aber nicht umbedingt der Strom am Motor, der kann auch größer werden, es kommt auf die Last an) und der Arbeitspunkt verschiebt sich. Der Innenwiderstand bei stehendem Motor (Kurschlußwiderstand) ist viel kleiner. Du kannst Ihn einfach bei stillstehenden Motor mit einem Multimeter messen. Da ergibt sich ein Spannungsteiler mit dem MOSFET der unvorteilhaft (kleinere Spannumg) für den Motor ist. Der Spannungsstabilisator hat eine internen Überstromschutz der wie Fig 6 Seite 8 LP2985A data sheet, product information and support | TI.com anspricht und den Strom bzw Spannung herunterfährt. Ein 200mA Nominalstrom-Motor kann ruhig ein mehrfaches des Nennstroms beim Einschalten verbrauchen, also leicht über 500mA.

Die Zweite Möglichkeit ist daß der MOSFET gar nicht richtig durchschaltet (deshalb die Bitte die Drain Source Spannung zu messen (diesmal richtig :wink: :wink: :wink: ) ) und somit sein Innenwiederstand größer als die minimal 0,55 Ohm sind.

Grüße Uwe

Hallo Ihr,

richtig ist alles geschriebene. Ich möchte das Problem nochmal anders beschreiben. Der Mosfet wird schnell eine Zeit ganz durchgeschaltet und eine zweite Zeit lang ganz ausgeschaltet.
Das Verhältnis der beiden Zeiten ergibt die Spannung zwischen 0 und 3.3V. Das Ganze passiert in der Grundeinstellung welche Du mit Sicherheit beibehalten hast 400 Mal in der Sekunde.

Unglücklicherweise verlangen die meisten Mosfets so ungefähr mindestens 10 -12 V um voll durchzuschalten. Das tust Du jedoch nicht also hat der Mosfet einen hohen D-S Widerstand welchen Du nicht gebrauchen kannst. Uwes Rechnung halt...

Weiterhin erfordert ein schneller Wechsel zwischen sperren und durchsteuern einen relativ großen Strom für eine gute Flankensteilheit. Auch das ist mit dem Arduino schwer zu schaffen.

Was tun?

  1. einen Mosfet nutzen welcher schon mit Arduino Spannungen am Gate voll durchsteuert. Das nennt man einen TTL Typen. IRL3803 fällt mir da ein.

  2. Einen Mosfet Treiber IC zwischen Gate und Arduino zwischenschalten.

Tut mir leid wenn ich gerade zum Schluss ein wenig "technisch" wurde :slight_smile:

Ach ja: Um den Mosfet in der Sperrzeit wirklich zu sperren empfieht sich ein Widerstand zwischen Gate und Source. Nimm mal einen 10 k.

Viele Grüße

Jörg

Hallo,
leider habe ich es nicht früher geschafft wieder zu antworten. :frowning:
Aber ersteinmal vielen Dank für eure Geduld und Hilfe!

Ich fange mal wieder an, alles nacheinander zu beantworten.

Ist das direkte Betreiben des Motors an 3,3V zu vergleichen mit dem direkten Betreiben einer LED an einem Pin, da es keine Strombegrenzung (Widerstand bei der LED) gibt und ich deswegen Gefahr laufe, meinen Arduino zu braten? (nur damit ich das verstehe)

An Drain und Source fallen 2,03V ab.

Diode ist mitlerweile mit integriert.

Widerstand zwischen Gate und Source auch mitlerweile integriert.

Berechnungen nach gefühlten 10-mal lesen wohl annähernd verstanden. :slight_smile:

Also wenn ich das richtig verstehe, werde ich ein Problem mit dem Innenwiderstand und damit der Gate Threshold Voltage haben. Die einfachste Lösung wäre dann wohl ein TTL-MOSFET, der schon bei 5V annähernd voll durchschaltet. Den IRL3803 gibt es leider nicht in SMD (SOT-23 wäre perfekt). Aber wenn ich das richtig gedeutet habe, dann müsste der IRLML2502 doch passen oder? Sollte ich das richtig sehen, dass dieser schon bei ca. 3,7V ausreichend durchschaltet?

Nochmals vielen Dank für eure Hilfe!

Grüße

Dominik

irlml2502.pdf (127 KB)

Der IRLML2502 geht gut.

An Drain und Source fallen 2,03V ab.

Bei 100%PWM? also schaltet der MOSFET nicht durch. Das ist das Problem. Mit dem IRLML2502 müßte das Problem gelöst sein.

Grüße Uwe

Bei so kleinen Schaltungen bietet sich auch der TTL Typ IRLF024 ist sogar im 4-DIP Gehäuse. Passt für viele Anwendungen
Gruß
Der Dani