mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik irf540ns - pull-down notwendig?


Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

meine LEDs leuchten jetzt auch mit C! Und ich kann xe senden. Toll,
was!? anfängereuphorischsei
Ich werde allerdings nochmal rausfinden müssen, warum jetzt schon knapp
20% meines tn2313 gefüllt sind.. liegt's an der delay.h? naja.

Jedenfalls habe ich es eben gewagt, eine Spule meines Schrittmotors
anzuschalten, was sogar funktioniert hat - nur leider bleibt der MOSFET
auch durchgeschaltet, wenn nach 60ms der AVR seinen Pin wieder 'low'
setzt (wenn ich mit dem Oszi rangehe, reicht es jedoch schon, um
auszuschalten).

Also nehme ich an, da fehlt noch ein pull-down!? 10K?
Wie messe ich, ob das Ding voll durchschaltet? Über den
Spannungsabfall?

Wenn der Motor sich dann dreht, mach ich mich an die Timer ran .. und
hoffe, daß ich für mein Programm mit dem vorhandenen Platz auskomme.

Wieder in dankbarer Erwartung,

Leif

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mhh. schaltet auch mit 10K nach GND nicht ab!

Autor: Tobias Schneider (tobias)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du den Ausgang auf 0 schaltest ist das der beste Pulldown, denn du
haben kannst :)

Ist es vll. ein mechanisches Problem?

Gruss Tobias

Autor: leif (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und auch nicht richtig ein. S*****ding. Ich häng nochmal den Schaltplan
an, vielleicht fällt Euch ja was ein. Bitte!?

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und hier der code, könnte ja sein:

initialisierung..

PORTD = 0x00;   /* Low */
DDRD  = 0x03;   /* Ausgänge, alles andere Eingänge */


einschalten geht..

        PORTD |= (1<<6);
        _delay_ms(100);
              PORTD &= ~(1<<6);

aber aus geht er nicht.
es reicht wenn ich mit dem finger ans gate gehe, dann brummt der motor
mit 50hz.
wenn ich mit dem oszi am gate messe, schaltet er mehr oder weniger ab.

kann es irgendwas damit zu tun haben, daß an derselben spule noch ein
anderer fet hängt?

ratlos,

leif

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie sieht deine Software aus?
Ist der FET überhaupt logic-level-kompatibel?

Autor: key (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es hiermit:
DDRD  = 0x03 & (1<<6);  // PD0, PD1, PD6 sind Ausgänge, Rest Eingänge

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups... zu lange gebraucht ;-)

> PORTD = 0x00;   /* Low */
> DDRD  = 0x03;   /* Ausgänge, alles andere Eingänge */

Also nur PORTD0 und PORTD1 sind Ausgänge. Ich empfehle das zu schreiben
als:

DDRD  = (1 << DDD0) | (1 << DDD1);

>        PORTD |= (1<<6);

Also PORTD6, der als Eingang konfiguriert ist. Es wird also der Pull-Up
eingeschaltet. Das schaltet den FET durch, wenn auch nicht besonder
schnell.

        _delay_ms(100);
>              PORTD &= ~(1<<6);

Und hier wird der Pull-Up von PORTD6 wieder ausgeschaltet. Er ist dann
auf tristate geschaltet, also offen. Mich wundert sehr, daß du glaubst,
das funktioniere.

Autor: key (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups! Korrektur: muss natürlich ver-odert werden. Also:
DDRD  = 0x03 | (1<<6);  // PD0, PD1, PD6 sind Ausgänge, Rest Eingänge

besser, weil übersichtlicher wie oben:

DDRD  = (1<<0) | (1<<6) | (1<<6); // PD0, PD1, PD6 sind Ausgänge, Rest
Eingänge

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
www.alldatasheet.com/datasheet-pdf/pdf/IRF/IRL540NS.html

gate threshold voltage 1-2 V

im DAtenblatt Fig 10a.  Switching Time Test Circuit wird er auch mit 5
V betrieben.

Die Software tut, was sie soll, wenn auch meine Clock noch nicht so
ganz richtig tickt. Der pin wird brav ein (5V) und ausgeschaltet,
zumindest, wenn ich zugucke.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmals: Port D6 ist bei dem von dir beschriebenen Code als Eingang
konfiguriert. In diesem Fall wird der Pin nicht zwischen High- und
Low-Pegel umgeschaltet, sondern es wird nur der integrierte
Pull-up-Widerstand ein- und ausgeschaltet.
Wenn du das dann misst, kann es so aussehen, als funktioniere alles
korrekt, aber der Pull-up hat einen sehr hohen Widerstandswert, der FET
wird also damit nicht optimal geschaltet. Und beim Ausschalten ist
plötzlich gar nichts mehr da (weder high- noch low-Pegel), also hält
die Gatekapazität des FET diesen leitend.

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MIST! Alles falschherum.
Und danke vielmals! Ich werde nächstes mal besser darauf achten, wo ich
mir die Bitoperationen kopiere.
Jetzt werde ich mich wohl noch länger über mich aufregen..

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, es klappt jetzt! ich habs erst nach meinem post gesehen.

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn Du dieses Problem gelöst hast, und ich dazu nichts beigetragen
habe, ein Tip aus der Praxis des Programmierens:

Schreib nicht

PORTD = 0x00;   /* Low */
DDRD  = 0x03;   /* Ausgänge, alles andere Eingänge */

sondern gewöhne Dir diese Art der Notation an:

PORTD = 0<<PD7 | 0<<PD6 | 0<<PD5 | 0<<PD4 | 0<<PD3 | 0<<PD2 | 0<<PD1 |
0<<PD0
DDRD = 0<<PD7 | 0<<PD6 | 0<<PD5 | 0<<PD4 | 0<<PD3 | 0<<PD2 | 1<<PD1 |
1<<PD0

Das Mehr an Schreibarbeit macht sich bezahlt, denn wenn Du mal fix zu
Testzwecken ein oder mehrere Bit ändern willst, dann ist es von großem
Vorteil, das möglichst schnell, bequem und struddelfehlersicher
erledigen zu können, und das Maximum all dessen bietet Dir nur die
zweite Variante.

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-)
Danke für den Rat, so liest man es ja auch 'überall'. Ich hatte die
Pins für den Motor schon per define eingerichtet, in der mittlerweile
bestätigten Hoffnung, die Anordnung der Spulen dann noch einfach durch
Probieren herauszufinden.

Jetzt dreht sich schon der Motor, und ich toggele die jeweils zu
ändernden Spulen. Hat gedauert, bevor ich die Möglichkeit gesehen
habe.

Jetzt kommt noch PWM, dann Timer, dann Interrupts..

Wahrscheinlich bis demnächst :-)

leif

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.