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
Ach Du grüne Neune schrieb: > Rene Meier schrieb: >> der AVR interne Pullup ist deaktiviert. > > Du meinst wahrscheinlich Pull Down? Integrierte Pulldown sind bei AVRs recht selten ;-)
Arduino Fanboy D. schrieb: > Integrierte Pulldown sind bei AVRs recht selten ;-) Gut, aber dann brauchst du irgendwoher eine positive Spannung zum Ansteuern der Gates. Sei es über Push Pull Treiber, oder Pullups.
>Was geht hier schief?
Du hast die Abblock-Kondensatoren vergessen am µC, hast eine schlechte
Masseführung in Bezug auf die Motorströme, und ähnliche Fehler ...
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!
Ach Du grüne Neune schrieb: > Gut, aber dann brauchst du irgendwoher eine positive Spannung zum > Ansteuern der Gates. Seltsamerweise kann die aus einem AVR Controller Pin herauskommen. Wunder der Technik!
Ach Du grüne Neune schrieb: > Gut, aber dann brauchst du irgendwoher ... Ich nicht... Aber der TO, und das hat er wohl, da er den Pin als Ausgang definiert hat. Ansonsten: Kein Bild, kein Schaltplan und kein Code. Demnach: Meine Telepathischen Fähigkeiten sind ausgereizt. Eine 1N4148 scheint mir arg winzig zu sein, für einen 3A Motor.
Ach Du grüne Neune schrieb: > Gut, aber dann brauchst du irgendwoher eine positive Spannung zum > Ansteuern der Gates. Und? Das ist doch AVR, als Ausgang geschaltet...
Aber Deine Kleinsignaldioden sind viel zu zierlich für die 3 A, die geschaltet werden sollen. mfG
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.
Arduino Fanboy D. schrieb: > Eine 1N4148 scheint mir arg winzig zu sein, für einen 3A Motor. Er hat unterlassen zu sagen ob die 3 Ampère für einen oder drei Motoren gedacht sind.
Ach Du grüne Neune schrieb: > Ja, aber der TO behauptet den internen Pullup deaktiviert zu haben. Welches "aber" ist das?
Ach Du grüne Neune schrieb: > Ja, aber der TO behauptet den internen Pullup deaktiviert zu haben. Das ist nicht relevant für einen Pin der als Ausgang geschaltet ist.
Finga Heba schrieb: > Er hat unterlassen zu sagen ob die 3 Ampère für einen oder drei > Motoren gedacht sind. Ja.. Und dennoch: Ein 55A FET, und dann so eine Diode... Das passt nicht zusammen.
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
Rene Meier schrieb: > 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... Wie sieht es denn mit dem Anlaufstrom deiner Motoren aus. Der beträgt gewöhnlich ein Vielfaches des Nennstromes.
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.
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! OK, die TWI Einheit kann es, aber da sind wir nicht.
"dann hätte man von außen direkt einen Pullup an 12V schalten können" Wie? Und dann den hochohmigen Ausgang mit mehr als die 5V Betriebsspannung beaufschlagen? Kann gehen, aber wie lange. mfG
Gruss An die verwendete Diode dachte ich zuerst, als ich das hier las. UF und BYW Dioden u.a. sind in dem Zusammenhang bekannt. Die auftretenden Induktionsspannungen sind noch zu beachten. Ein Schönes Wochenende wünsche ich Euch Dirk St
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
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.
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
Rene Meier schrieb: > das Basteln kann weitergehen. Nö, das nennt man solide Entwicklung. Voll durchdacht und ausgetestet. Entwicklung ist abgeschlossen. Lese bloss nicht den ganzen Schrott den wir dir hier geschrieben haben.
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.
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.
Arduino Fanboy D. schrieb: > Der AVR kennt keinen Open Drain Mode. Und die Variante mit DDR - ist das keine Open Drain Mode? Dann was ist das? Wenn 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? :)
:
Bearbeitet durch User
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!
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.
:
Bearbeitet durch User
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.
> 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! Applaus, Applaus, es funktioniert! Und die Diode leitet putzige Fehlerströme ab. MfG
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.
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.
Hallo, auch wenn das hier ausartet, anbei noch der zusammenkopierte Schaltplan in einem Stück. Gruß, Rene
Rene Meier schrieb: > auch wenn das hier ausartet, anbei noch der zusammenkopierte Schaltplan > in einem Stück. Bin gespannt ob dich roehrenvorheizer rettet. Aber nachdem was ich bis jetzt von dir gelesen habe - eher nicht.
Arduino Fanboy D. schrieb: > Als Open Drain ansteuern, ist eine Sache. > Als Open Drain konfigurieren, ist die andere Sache. Bravo Professor! Gute Erklärung erfunden! :) Hauptsache, das funktioniert: auch AVR kann Outputs mit Open Drain haben. Wie du das nennst, ist nicht wichtig.
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.....
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.
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.
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?
@Arduino Fanboy D., heute der Don Quichotte im Forum: du kämpfst gegen Windmühlenflügel 😉
Wolfgang schrieb: > Du setzt das Port-Bit fest auf Low > und steuerst das DDR-Bit. Schon hast du einen Open-Drain Ausgang. Genau so ist es. Gut beschrieben.
HildeK schrieb: > @Arduino Fanboy D., heute der Don Quichotte im Forum: du kämpfst > gegen > Windmühlenflügel 😉 Ach sollen sie doch glücklich werden, in ihrer kleinen AVR Welt, und den Rest ausblenden. (wenn Dummheit quietschen würde, dann müssten die Burschen den ganzen Tag mit der Ölkanne rum laufen)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.