Beiträge von KaiR

    Hmm…. der Pfeil (nicht die Diode) zeigt in Richtung Substrat und nicht nach außen. Also ist es ein N-Kanal Mosfet.

    Die Erklärungen im Thread „PNP-Mosfet“ bezüglich Pullup- oder Pulldown Widerständen (R4) scheinen spurlos an Dir vorüber gegangen zu sein. Vom Abgriff zum digitalen Pin aus gesehen, handelt es sich um eine Low-Side Schaltung.


    Es wurde schon alles erklärt. Alles schon aufgeschrieben. Mehrfach. Wenn es dich wirklich interessieren sollte, liegt es an Dir die ganzen Informationen durchzuarbeiten und die Grundlagen zu lernen. Es hilft nichts, wenn wir hier im Forum zig mal das gleiche Schreiben.

    A1 ist ein analoger Eingang , D1 ein digitaler. Die Schaltung der LED wurde nicht berücksichtigt, weil es für die Antwort auf Deine Frage irrelvant war. Und ja, es wäre da noch ein dritter Pin für die LED Steuerung notwendig.


    Was das für ein Mosfet ist, sieht man am Schaltsymbol und an der Verwendung des 56k Widerstandes. Da verweise ich auf den Thread „PNP-Mosfet“. Da steht fast alles über Mosfets, was es im Hobbybereich dazu zu sagen gibt.


    Du darfst ruhig noch ein bisschen mehr nachdenken. Dann würde sich die ein oder andere Frage wahrscheinlich von selbst erledigen ;):P.

    Hallo Pius,


    das kann Nicole ja dann machen :). Ich hatte den Widerstand schon von 400Ω auf 2,2kΩ gesetzt um den Abstand zu vergrößern. Da es ja nur zwei Taster sind ginge aber sicher auch 10k / 10k.


    Nicole:

    Bevor ich jetzt auf jedes Detail dieser Beispielschaltung(en) festgenagelt werde. Die Widerstandwerte sind mehr oder weniger willkürlich. R5 kann man auch weglassen. Es ist nur ein Beispiel und soll als Lösungsansatz dienen. Mehr nicht.

    Nur mal so eine Idee.... aber ausprobieren musst Du schon selber....


    Taster.png           Taster2.png



    Es wäre gut, wenn Du dir angewöhnst die höheren Potentiale oben und die niedrigeren unten im Schaltplan anzuordnen. Also Betriebsspannung oben, GND nach unten. Dann ist das einfacher zu lesen...

    Hotte25:


    Das Programm macht das, was Knisterbein beschrieben hat. Der AVR hat die Möglichkeit eine Funktion aufzurufen, wenn sich an einem PIN der Zustand ändert. An den Pins 2 und 3 (INT0 / INT1) kann auch bestimmt werden, bei welcher Zustandsänderung diese Funktion aufgerufen wird (steigender Pegel, fallender Pegel, jede Pegeländerung, Low oder High Pegel). Das geschieht völlig unabhängig von dem Hauptprogramm.


    Diese Funktion nennt sich Interrupt Service Routine (ISR). Darum steht in dem Beispielprogramm auch außer der Werteausgabe nichts in der Loopschleife. Das läuft quasi parallel.


    In der Setuproutine wird lediglich konfiguriert, dass der Pin 2 auf eine Pegeländerung (steigende Flanke) reagieren soll EICRA |= _BV(ISC01) | _BV(ISC00); . Außerdem wird bekannt gemacht, dass das an dem Pin2 (INT0) passieren soll EIMSK |= _BV(INT0); und die Interruptfunktionalität wird global aktiviert sei();. Das ist quasi die maschinennahe Version von attachInterrupt().


    Der Rest ist passiert nur noch in der ISR. Werte speichern und rechnen. Die Drehzahl wird in der globalen Variable "rotationalSpeed" zur Verfügung gestellt und kann in loop() beliebig weiter verarbeitet werden. In loop() wird der Wert pro Sekunde einmal ausgegeben.


    Da die Interruptroutine unabhängig vom Hauptprogramm aufgerufen wird, stört es auch nicht, dass der delay() Befehl verwendet wird.


    Vielleicht ist es etwas verwirrend, dass ich viel C++ (17) Terminologie verwende. Aber das sollte nicht weiter stören.


    Will man die (volatile) Variablen im "normalen" Code verändern sollten Interrupts ausgeschaltet werden z.B.

    Code
    1. cli(); // Interrupts ausschalten
    2. rotationalSpeed() += 10;
    3. sei(); // Interrupts wieder möglich

    Die einfachste Möglichkeit erscheint mir die von Pius am Ende seines Beitrages vorgeschlagene zu sein. Ich bin bei meinem Beispiel jetzt davon ausgegangen, dass die Messvorrichtung der Motordrehzahl immer ein Signal (ansteigende oder abfallende Flanke) pro Umdrehung liefert.


    Damit das Beispielprogramm funktioniert, muss das Signal an PIN2 des Nano/Uno (Atmega328) "eingespeist" werden. An diesem Pin wird bei jeder ansteigenden Flanke ein Interrupt (Interruptvektor 0) ausgelöst. Wenn man möchte, dass bei einer fallende Flanke ausgelöst wird, muss EICRA = _BV(ISC01); verwendet werden.


    Mit Hilfe eines Arrays, welches zwei Werte speichern kann, wird bei jeder zweiten Flanke die Zeitdifferenz zwischen der aktuellen und der vorhergegangenen Flanke in Mikrosekunden ermittelt. Die ermittelte Differenz entspricht einer Periode, also dem Kehrwert der Frequenz. Eine Sekunde dividiert durch die Periodendauer ergibt die Hertz Zahl, welche den Umdrehungen des Motors pro Sekunde entspricht. Multipliziert mit 60 ergibt das die Umdrehungen pro Minute (RPM).


    In dem Beispielprogramm wird (60*106) / Zeitdifferenz gerechnet. Hier entsteht allerdings ein kleiner Fehler der sich mit steigender Frequenz aufaddiert, weil bei der Verarbeitung durch den Controller die Ermittlung der Zeitspanne nicht hundertprozentig genau ist (Stichwort: Auflösung der Funktion micros()). So hatte ich beispielsweise bei 25Hz eine Drehzahl von 1503 RPM und bei 50Hz schon 3006 RPM. Aber ich denke, das kann man verschmerzen.


    Die Ermittlung der Drehzahl habe ich getestet, indem ich einen Frequenzgenerator an Pin2 angeschlossen habe. Bis auf 0,05Hz = 3 RPM ist es nach unten genau. Allerdings muss klar sein, dass die Aktualisierung dieser geringen Drehzahlen im Display sehr lange dauert weil eine Periode bei 3 RPM 20 Sekunden lang ist.



    Einen möglichen "Nachteil" gibt es noch. Wenn das Signal einfach aufhört, bleibt die zuletzt ermittelte Drehzahl stehen, weil die Interruptroutine (mangels aufsteigender Flanke am PIN 2) nicht mehr aufgerufen wird. Bei einem kontinuierlichen Betrieb des Motors sollte das aber kein Problem sein.

    Bei den meisten PCB Herstellern sind 4mil = 0,1 mm das absolute Minimum, das sie produzieren. Bei PCBWay wird empfohlen auf mindestens 6mil zu gehen. JLCPCB hat ein Minimum von 5mil. Das ist übrigens alles bei den Herstellern nachzulesen.


    Es wird zwar gesagt, dass Signalleitungen nicht zu breit gemacht werden sollen um kapazitive Einstreuungen/Störungen zu vermeiden. Aber Du hast ja keinerlei OpAmp oder sonst was in Deiner Schaltung, sprich, im Prinzip keine Signalleitungen. Zu schmal ist auch nicht gut, weil der Widerstand steigt und die Stabilität sinkt. Ich bin bei meinen PCBs nie unter 12mil gegangen. Interessant für die Leiterbahn-Berechnung ist nicht die Transistorstrecke … da ist das Mumpitz. Wichtig ist das für die Power und Source - Drain Strecke von deinem P-Channel Mosfet. Das ist ja die Strecke die geschaltet wird. Da musst Du Dir im Klaren darüber sein, wieviel Ampere Du da drüber schicken willst.


    Mehr sage ich jetzt nicht mehr dazu. In diesem Thread steht alles was Du brauchst. Bau das Ding einfach und mach Deine Erfahrungen.


    Bevor Du ein PCB zusammen bastelst, kannst Du dein Machwerk ja auch auf einer Streifenrasterplatine aus Hartpapier zusammenlöten. Da wirst Du dann schon merken, ob alles passt.

    nische, @Pius,


    Pius‘ Ausführung zu der internen Diode war eigentlich der Hintergrund meiner Frage. Es könnte ja gute Gründe geben, eine extra Diode zu verwenden. Ich weiß es halt auch nicht, darum hatte ich nachgefragt.


    Ergänzung:


    Ich habe ein bisschen gestöbert und im MOSFET-Artikel auf Wikipedia den Abschnitt über die Inversdiode gefunden.


    Dort steht unter anderem:

    Zitat

    Bei manchen Schaltanwendungen ist eine Leitung von Strom entgegen der „normalen“ Richtung sogar erwünscht. So sind Brückenschaltungen so konzipiert, dass die Inversdiode leitend wird. Bei Anwendungen mit hoher Schaltfrequenz ist allerdings die vergleichsweise lange Sperr-Erholzeit der Inversdiode eine Begrenzung. Außerdem führt ihre recht hohe Flussspannung zu erhöhter Verlustleistung. In diesen Fällen wird extern eine schnelle Schottkydiode mit niedrigerer Flussspannung parallel zur Inversdiode an Source und Drain hinzugefügt.


    Und nun zurück zu eForth ;)

    Hallo Nische,


    mal eine Frage zu dem Treiber. In den Mosfets ist doch eigentlich schon eine Diode von Source nach Drain enthalten. Reicht die nicht aus oder warum hast du zwei Dioden pro Fet verbaut?


    Das,Winken kommt gut ;).

    Interessantes Thema. Auf Heise Developer ist ein Artikel, der die Funktionalität recht ausführlich (in deutsch) beschreibt: I/O on Steroids.


    Es gibt auch ein kostenloses Buch (allerdings in englisch) "Get started with MicroPython on Raspberry Pi Pico" zum download. Wer möchte, kann aber auch spenden. Es ist eine Einführung zu dem Controller mit einigen Programmierbeispielen für Display(I2C) und Sensoren. Im Anhang wird auch etwas auf die PIO-Programmierung eingegangen (Ansteuerung von Neopixel WS2812B LEDs).

    @Pius: Man erreicht ein gleichbleibendes Schaltverhalten. Ab knapp 14V tut die Z-Diode ihren Dienst (drunter ist die Spannungsdifferenz < 10V). Ab diesem Punkt ist es egal ob 14V, 25V oder 40V Betriebsspannung anliegen. Die Ströme und Spannungen ändern sich im Transistorzweig praktisch nicht.


    Noch ein Beispiel:

    F330A08B-90C6-4066-8293-0AF212A70866.png

    @Pius: Was die Berechnung betrifft: Vielleicht liege ich ja falsch. Aber wenn Du I=U/R = (15-10) / 200 Ohm = 25mA rechnest ist das nachvollziehbar. Die 10mA vom 1K passen auch. Aber die10 mA müssen von den 25mA abgezogen werden. Nicht addiert. Weil sich die 25mA auf Widerstand und Diode aufteilen. Oder nicht?


    Das würde jetzt auch nicht so viel ausmachen, weil 25mA * 200V/A ja auch 5V ergeben und damit Deine Aussage immer noch passt. In einer Simulationsschaltung kam ich übrigens auf einen Diodenstrom von 10,5mA und 20,6mA in Summe. Die Schaltung hat demnach funktioniert.

    Schaltung-PChannelMF.png


    Bei der EveryCircuit Simulationsapp kommt nahezu dasselbe heraus.


    B14E7980-8944-4D4B-B0C9-437F8E3EE23E.png

    Also @Pius: Du warst es, der in #16 die Schaltung, an der Nicole sich festgebissen hat, ins Spiel gebracht hat. Und genau das hat sie nachgebaut ;):).


    In #27 hast du ja schon einmal darauf hingewiesen, dass die Differenz zwischen der Spannung an der Basis und der Spannung an R1 groß genug sein muss, damit die 0,7V UBE überhaupt erreicht werden. Gut... nun hast Du es noch einmal vorgerechnet, dadurch wurde es "plastischer".


    Vielleich bringt es ja etwas, noch einmal zur Ursprungsfrage zurückzukehren um das hier mal gedanklich wieder auf eine Linie zu bringen.


    Nicole:


    Die ursprüngliche Frage war mal:

    Zitat

    Welche Möglichkeiten gibt es einen Logic Level PNP Mosfet mit dem Arduino anzusteuern ?

    Die meisten Schaltungen nutzen zusätzlich noch einen NPN Transistor um den PNP Mosfet zu steuern.

    Ist der NPN Transistor immer notwendig oder gibt es auch noch andere Möglichkeiten ?


    Eigentlich ist das schon mehrmals beantwortet worden und es kann in einem Satz gesagt werden: Es geht je nach Anwendungsfall durchaus ohne NPN Transistor, aber es gibt auch genug Anwendungsfälle bei denen er notwendig ist. Beispiele wurde aufgezeigt.


    Vielleicht wäre es ja gut, wenn Du ein konkretes Ziel beschreibst. Z.B. bei welcher Betriebsspannung soll was geschaltet werden. Mit welcher Frequenz soll das passieren. Warum muss es unbedingt ein P-Kanal Mosfet sein? Was ist der Zweck der Schaltung? Davon machst Du einen Plan und stellst dazu konkrete Fragen, wenn sie denn auftauchen sollten. Im Prinzip hat Hans das ja auch schon vorgeschlagen. Das würde helfen, das Ganze zu strukturieren und in leichter verdauliche Informationshäppchen aufzuteilen.

    DanielS: Es geht um einen normal sperrenden P-Kanal Mosfet. Siehe #25. Jedenfalls sollte es das.

    Links auf Seiten, bei denen die verschiedenen Typen der Mosfets erklärt werden, wurden in diesem Thread auch schon mehrere gepostet z.B. in #2, #3, #4, #7.


    Aber es kann ja nicht schaden, wenn noch ein paar dazu kommen.


    Aber Daniel hat durchaus recht mit der Nachfrage. Jetzt gibt es zwar einen Schaltplan der im Prinzip, mal abgesehen von Motor und LED, der gleiche wie in #25 ist. Was das eigentliche Problem ist, geht daraus, zumindest für mich, nicht hervor.

    Wer nur den Hammer kennt, für den ist jedes Problem ein Nagel.


    Wenn die Betriebsspannung der Schaltung bei 5V liegt und der Grenzwert der Gate-Sourcespannung mit 10V bzw. 20V deutlich darüber liegt, dann braucht man die Mimik nicht. Das sollte doch einleuchten. In #17 ging es darum das Schalten eines P- Channel Mosfets durch einen Microcontroller zu simulieren und zu zeigen, dass man nicht noch zusätzlich einen Transitor braucht, um eine LED an- und aus zu knippsen. In dem Text wurde mehrfach erwähnt, dass es um 5V Betriebsspannung geht. Nicht um 12V wie in #25. Es war ein Beispiel um die grundsätzliche Funktionalität zu zeigen. Keine Universallösung. Und ja, es wurde ohne Transistor und nur mit Widerständen (+ einer LED) gearbeitet. weil es funktioniert und Sinn macht.


    Wenn aber Grenzwerte überschritten werden, braucht es entsprechende Maßnahmen, dass einem die Bauteile nicht in Rauch aufgehen. Für diese simple Weisheit, sollten eigentlich keine weitergehenden Erklärungen notwendig sein.


    Pius hat das Beispiel gebracht, wenn die Betriebsspannung höher ist, bzw. eine Möglichkeit aufgezeigt was man machen kann, wenn Grenzbereiche überschritten werden. Das wurde doch ausführlich beschrieben. Zugegebener Maßen nicht ganz einfach, aber das dies Fallbeispiele waren, sollte doch klar geworden sein.


    Aus eigener Erfahrung kann ich sagen das, wenn man einen Text nicht verstanden hat, es zuweilen hilft ihn mehrmals zu lesen. Ich regiere etwas erbost, weil es Zeit kostet die Fragen zu beantworten, es aber immer wieder der Eindruck entsteht, dass die Informationen überhaupt nicht oder maximal zur Hälfte zur Kenntnis genommen werden.

    Ja, genau das bedeutet es….


    Und in der Schaltung aus Beitrag #17 gibt es weder Diode noch Transistor… Das hast Du ja selber festgestellt. Also wie kommst Du auf die Frage in #37/#39? Warum soll man einen Widerstand für Bauteile verwenden, die gar nicht vorhanden sind?

    Der Zweck von R1 in der #25 gezeigten Schaltung wurde mehr als einmal erklärt …. siehe unten. Wenn es Dir beliebt auf ihn zu verzichten, dann mach das :).


    Ein Widerstand an der Basis des Transistors beschränkt den Strom IBE und somit auch UBE. Darüber wird der Stromfluss über die C-E Strecke beeinflusst. Dann wirkt der Transistor als (variabler) Widerstand.


    Mir wäre ein fest definierter Widerstand lieber und ich würde nicht auf R1 verzichten um einen evtl. Kurzschuss durch die Diode D2 zu vermeiden.


    Welche von mir gezeigte Schaltung meinst Du? Ich kann mich nicht erinnern eine mit Z-Diode gezeigt zu haben.

    Wenn ich Widerstände verwende, habe ich immer einen Widerstand R1 in meinen Schaltungen, weil ich bei Eins anfange zu zählen ;).

    Eigentlich ist R2 ja nur der Pullup für das Gate vom Mosfet. Er zieht das Gate auf Betriebsspannung, wenn der Transistor geschlossen ist. Damit schließt auch der Mosfet. Je geringer der Widerstand ist, desto schneller passiert das. Das hat Pius ja schon in seinem Posting #27 beschrieben.


    Pullup mit kleinem Widerstand = „fast pullup“, großer Widerstand = „slow pullup“ .


    Entscheidend für den Stromfluss an Diode/Transistor ist R1. Natürlich wird umso mehr Strom durch die Diode fließen (bei offenem Transistor) je größer R2 gewählt wird. Aber beides wird durch R1 begrenzt.