FET Ansteuerung über AVR, Problem mit Pulldown/Gate-Source Widerstand

Gast #6460170
Lesenswert?

Hallo,

möchte über einen AVR an Port C vier DC-Motoren (12V bei ca. 3000mA) 
schalten (nur an/aus alle ~5min, kein PWM) und wollte dazu an vier 
Portpins (Pin C0...C3) jeweils direkt einen IRLZ 34N anschließen. Das 
ist ein Logic Level MOSFET und ich hatte daher keinen Vorwiderstand zw. 
Gate und AVR Pin eingeplant, sondern "nur" einen Pulldown/Gate-Source 
Widerstand von 100k. Zusätzlich eine 1N4148 zwischen Drain und 12V als 
Freilaufdiode.
Da ich es erst einmal testen wollte, habe ich auf einem Brettaufbau mit 
einem IRFZ 44N (also kein Logic Level!) an einem Pin (Pin C0) einen 
Versuch gestartet. Leider geht das gehörig schief...
Wenn die 100k Pulldown/Gate-Source Widerstand in der Schaltung sind, 
stürzt der AVR immer beim Schalten ab. Entferne ich die 100k, läuft 
alles wie gewünscht. Der Pin des AVR ist dabei als Ausgang geschaltet, 
der AVR interne Pullup ist deaktiviert. Was geht hier schief?
Brauche ich an der Stelle schon einen Treiber? Da ich Logic Level 
MOSFETs nutze: würde ein günstiger 74AC14 ausreichend sein (der Inverter 
würde natürlich mein Schaltsignal invertieren), oder müssten es vier 
teure Treiber sein, bzw. zwei MCP 14E9?

Gruß, Rene
Gast #6460204
Lesenswert?

Rene Meier schrieb:
> möchte über einen AVR an Port C vier DC-Motoren (12V bei ca. 3000mA)
> schalten

Wenn die Motoren ihren Strom auch über die Masse des Controllers
beziehen dann darf man das Layout der Masse nicht mehr ausser
Acht lassen bzw ignorieren. Schwankende Masseströme können den
AVR Controller massiv stören.

Rene Meier schrieb:
> Was geht hier schief?

Zeige deine Schaltung und den Aufbau wenn du das geklärt haben
willst!
Gast #6460216
Lesenswert?

Finga Heba schrieb:
> Seltsamerweise kann die aus einem AVR Controller Pin herauskommen.
> Wunder der Technik!

Ja, aber der TO behauptet den internen Pullup deaktiviert zu haben.

Rene Meier schrieb:
> der AVR interne Pullup ist deaktiviert.

Arduino Fanboy D. schrieb:
> Eine  1N4148 scheint mir arg winzig zu sein, für einen 3A Motor.

Das kommt noch dazu.
#6460224
Lesenswert?

Und das Gate direkt an einen Ausgang schalten, kann gut gehen, aber 
besser ist es über einen Widerstand. Der Umladestrom ist bereits recht 
hoch ohne Widerstand. Die vorgeschlagenen 220 Ohm sind nicht verkehrt, 
bei seltenem Schalten kann auch 1...2 KOhm passen. Der Pulldown dürfte 
nur im hochohmigen Zustand der Pins relevant sein und sonst nie. Kann 
auch etwas kleiner sein, z.B. 33 kOhm.

mfG
Gast #6460231
Lesenswert?

Finga Heba schrieb:
> Das ist nicht relevant für einen Pin der als Ausgang geschaltet ist.

Ach soo, und ich dachte schon man könnte den Ausgang auch als offenen 
Kollektor konfigurieren, dann hätte man von außen direkt einen Pullup an 
12V schalten können und bräuchte keinen Logic-Level-Mosfet mehr.
Aber das hat sich ja jetzt erübrigt.
Gast #6460269
Lesenswert?

WOW, das ging ja mehr als schnell!

Aktuell ist das ganze fliegend aufgebaut: größtenteils auf Lochraster 
gelötet, teilweise auf einem Brettboard gesteckt... ( den MOSFET wollte 
ich z.B. nicht "verlöten").
Habe nun den Pulldown auf 39k verringert und zusätzlich einen 1.2k in 
Reihe zwischen AVR Pin und Gate vom MOSFET gelötet: es funktioniert!
Bzgl. der Diode muss ich mir mal eine größere suchen. Da ich aber 
dachte, dass die nur "Fehlerströme" ableiten muss und nicht den vollen 
Strom, hatte ich da so eine kleine gewählt.

Danke an alle, das Basteln kann weitergehen. Gruß und schönen Abend,

Rene
#6460272
Lesenswert?

dieser 3A Motor wird einen Anlaufstrom von mind. 10A haben und für 
deinen 7805 bleibt dann nichts mehr übrig. Also ruhig ein paar größere 
Elko mit der Gießkanne verteilen (am Motor und am LM7805 mit ggf. einer 
Diode davor damit dieser nicht vom Motor leergezogen wird) und unbedingt 
die empfohlenen Kerkos verbauen siehe AVR042

Zur Diode, diese muss kurzzeitig die 3A verkraften die beim Abschalten 
weiterfließen wollen. Einem 1A Typ würde ich das zutrauen so einer 100mA 
Diode aber nicht.

Wenn da aber später dauerhaft eine PWM eingesetzt wird dann wähle gleich 
eine Diode die das dauerhaft schafft.
Gast #6460282
Lesenswert?

Der Betrieb erfolgt über ein altes "externe HDD" Netzteil das 12V und 5V 
bereitstellt: die 5V für den AVR, wobei der an den VCC Pins jeweils 
seine 100nF hat und einen 4,7uF davor, die 12V für die Motoren. Wie 
gesagt: läuft jetzt (mit einem Motor/Pin)
Vielleicht aus Glück, aber es läuft ;-) Mache mich nun an den Schaltplan 
für die vier Motoren und lasse mir eine Leiterplatte für SMD ätzen, dann 
geht es in ein paar Wochen weiter.

Rene
#6460291
Lesenswert?

Arduino Fanboy D. schrieb:
>> Ach soo, und ich dachte schon man könnte den Ausgang auch als offenen
>> Kollektor konfigurieren,
> Nein, das kann ein AVR normaler weise nicht!

Was für Problem? PORT = 0, mit DDR wird manipuliert. Ist DDR 0, dann ist 
Ausgang offen. Ist DDR 1, dann ist Ausgang zu GND gezogen. Nur Vcc darf 
Ausgang nicht überschreiten.
Gast #6460299
Lesenswert?

Maxim B. schrieb:
> Arduino Fanboy D. schrieb:
>>> Ach soo, und ich dachte schon man könnte den Ausgang auch als offenen
>>> Kollektor konfigurieren,
>> Nein, das kann ein AVR normaler weise nicht!
>
> Was für Problem? PORT = 0, mit DDR wird manipuliert. Ist DDR 0, dann ist
> Ausgang offen. Ist DDR 1, dann ist Ausgang zu GND gezogen. Nur Vcc darf
> Ausgang nicht überschreiten.

Das ist ein durchaus brauchbarer Notnagel.
Aber keine Konfiguration.
Der AVR kennt keinen Open Drain Mode.
Außer, wie schon gesagt die TWI Einheit.
Gast #6460378
Lesenswert?

Maxim B. schrieb:
> Und die Variante mit DDR - ist das keine Open Drain Mode?
Nein!

Maxim B. schrieb:
> Dann was ist das?
Eine Nachbildung per Software, weil die Hardware es nicht vorsieht.

Maxim B. schrieb:
> enn etwas sieht aus wie eine Ente, geht wie eine Ente, schwimmt wie
> eine Ente, spricht wie eine Ente - ist das bestimmt der Falke, nicht
> wahr? :)
Nee, das ist Donald Trump!
#6460392
Lesenswert?

Arduino Fanboy D. schrieb:
> Eine Nachbildung per Software, weil die Hardware es nicht vorsieht.

Software kann in jedem Fall keinen Strom leiten. Das macht nur Hardware. 
Es gibt komplementare Paar von Transistoren. Wenn wir obere, P-MOSFET, 
ausschalten, bekommen wir N-MOSFET alleine, d.h. mit offenem Drain. Wenn 
wir untere, N-MOSFET, ausschalten, bekommen wir P-MOSFET alleine. Das 
alles macht Hardware. Wäre separate Steuerung von Transistoren mittels 
Hardware nicht vorgesehen, so wäre das nicht möglich.
Welche Bit in welchem Register sollte man dafür auf 1 oder auf 0 setzen, 
ist nicht prinzipiell.

Also, wir haben in AVR Möglichkeit, N-MOSFET oder P-MOSFET mit offenem 
Drain benutzen. Im Fall von N-MOSFET ist dann Ausgang invertierend, aber 
das ist kein Problem für einen Mikrocontroller: entweder gibt man "~" in 
C, oder in Assembler schreibt man sbi statt cbi und umgekehrt, das macht 
keine Verluste von Flash oder von SRAM.

Mag sein, daß du damit ein Verständnisproblem hast. Aber erinnere mal, 
wie viele "verschiedene" Assembler-Befehle in AVR gleiche Maschinencode 
haben. Oder sagst du etwa, einige sind "echte" Befehle und andere sind 
"falsche" ? :) Genau so mit Ausgangssteuerung: es ist nicht wichtig, wie 
genau du N-MOSFET oder P-MOSFET ausschaltest. Wichtig ist nur, daß das 
funktioniert. Und das funktioniert nur deshalb, weil Hersteller solche 
Möglichkeit in Hardware vorgesehen hat.
Gast #6460400
Lesenswert?

Arduino Fanboy D. schrieb:
> Ach Du grüne Neune schrieb:
>> Ach soo, und ich dachte schon man könnte den Ausgang auch als offenen
>> Kollektor konfigurieren,
> Nein, das kann ein AVR normaler weise nicht!

Da hast du zweifels ohne Recht. Die AVR Controller sind in CMOS-Technik 
aufgebaut, d.h. die kann man folglich auch nur als Open Drain ansteuern.

Die Sache mit den 12V geht nicht, weil maximal eine Spannung von 
VCC+0.5V an den Pins zulässig ist (Ausnahme Reset). Grund dafür sind die 
Schutzdioden. Die schematische Darstellung des Innenlebens der IO-Ports 
findet sich in jedem AVR Datenblatt.
Gast #6460431
Lesenswert?

Rene Meier schrieb:
> Da ich aber dachte, dass die nur "Fehlerströme" ableiten muss und
> nicht den vollen Strom, hatte ich da so eine kleine gewählt.

Du hast die Funktion einer Freilaufdiode noch nicht verstanden. Die 
sorgt dafür, dass in der Induktivität der Strom nicht schlagartig 
aufhört zu fließen, wenn der FET abschaltet.
Bau dir die Spuleninduktivität mit dem schaltenden FET einfach mal in 
LTSpice nach und guck, was beim Abschalten passiert (Ströme durch Diode 
und Induktivität, Spannung am Drain), einmal mit und einmal ohne 
Freilaufdiode. Und dann überlege dir, wie der Stromkreis bei 
abgeschaltetem FET aussieht.
Gast #6460433
Lesenswert?

Wolfgang schrieb:
> Da hast du zweifels ohne Recht. Die AVR Controller sind in CMOS-Technik
> aufgebaut, d.h. die kann man folglich auch nur als Open Drain ansteuern.

Als Open Drain ansteuern, ist eine Sache.
Als Open Drain konfigurieren, ist die andere Sache.
Das letztere, eben das konfigurieren, kann man beim AVR nicht machen.
Andere µC können das schon.

Maxim B. schrieb:
> Mag sein, daß du damit ein Verständnisproblem hast.
Wenn dir der semantische Unterschied nicht klar ist, zwischen "zum Open 
Drain konfigurieren", oder als "Open Drain betreiben", dann tust du mir 
leid.
Dann hast du noch ganz andere Probleme, als du bisher geglaubt hast.

Die Ansage war:
Ach Du grüne Neune schrieb:
> Ach soo, und ich dachte schon man könnte den Ausgang auch als offenen
> Kollektor konfigurieren,...
Das geht bei AVRs eben nicht, bei anderen µC u.U. schon.

Da kannst du dich ruhig uneinsichtig zeigen und  dich höllisch 
blamieren.
Meinen Segen du hasst.
Gast #6462109
Lesenswert?

Rene Meier schrieb:
> anbei noch der zusammenkopierte Schaltplan
> in einem Stück.

R19 und R6 bilden einen Spannungsteiler.
Das ist eher kontraproduktiv an der Stelle.

Abhilfen:
Das Verhältnis verbessern, z.B. 100R zu 100k
Oder den Pulldown vor dem Gatewiderstand anschließen.


------------------

Maxim B. schrieb:
> Bravo Professor! Gute Erklärung erfunden! :)

Klar kannst du mich für dein mangelhaftes Textverständnis verantwortlich 
machen.
Viel Spaß dabei.....
Gast #6462504
Lesenswert?

Arduino Fanboy D. schrieb:
> Wolfgang schrieb:
>> Da hast du zweifels ohne Recht. Die AVR Controller sind in CMOS-Technik
>> aufgebaut, d.h. die kann man folglich auch nur als Open Drain ansteuern.
>
> Als Open Drain ansteuern, ist eine Sache.
> Als Open Drain konfigurieren, ist die andere Sache.
> Das letztere, eben das konfigurieren, kann man beim AVR nicht machen.

Sprich mal Klartext.
Was willst du da groß konfigurieren. Du setzt das Port-Bit fest auf Low 
und steuerst das DDR-Bit. Schon hast du einen Open-Drain Ausgang.
Gast #6462574
Lesenswert?

Wolfgang schrieb:
> Du setzt das Port-Bit fest auf Low
> und steuerst das DDR-Bit. Schon hast du einen Open-Drain Ausgang.

Das sollte doch mittlerweile klar sein, das der übliche AVR GPIO keinen 
Open Drain Mode kennt, man es also auf diese Art simulieren muss.
Da gibt es nichts zu konfigurieren.
Und nichts anderes sage ich die ganze Zeit.
Wie ein Papagei....

Die grüne neune wollte genau das aber tun.
Zumindest sagte er das.
Soll ich es nochmal zitieren, oder findest du das selber?

Andere µC können das allerdings sehrwohl!
Die kennen einen expliziten Open Drain Mode.
Als Beispiele seien genannt:
8051
ESP32
ESP8266
Manche ARM
Dort stellt man den GPIO auf Open Drain, und der Pin ist in dieser 
Konfiguration nicht mehr in der Lage Vcc auszugeben, sondern muss per 
Pullup dahin gezogen werden.

Vorteil:
Man verwendet den gleichen Code zum toggeln des Pins.
Sowohl im Open Drain Mode, als auch im Push-Pull Mode.
Ein nettes Feature, welches der gemeine AVR nicht bietet


Das ist der Unterschied!
Einmal die Simulation, und einmal die Konfiguration.
Jetzt klarer geworden?
Ansonsten kann ich nur raten, sich über die beiden Worte kundig zu 
machen, so lange, bis die korrekte Bedeutung in die Hirnwindungen 
getropft ist.
Gast #6462598
Lesenswert?

Arduino Fanboy D. schrieb:
> Das sollte doch mittlerweile klar sein, das der übliche AVR GPIO keinen
> Open Drain Mode kennt, man es also auf diese Art simulieren muss.

Da ist nichts simuliert. Das ist echt.
Was kennt der nicht? Steht irgendwo geschrieben, dass es verboten ist, 
das DDR zu benutzten.
Oder wird dieser Mode nur von deiner Assemblercodeerzeugungssoftware 
nicht unterstützt?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren