Frage:
Sollte ich wegen Überstrom nicht äußerst vorsichtig sein, wenn ich einen E / A-Pin als Ausgang einstelle?
Julian Zatloukal
2020-01-03 05:38:51 UTC
view on stackexchange narkive permalink

Die Frage kann auf jeden Mikrocontroller mit E / A-Funktionen angewendet werden, aber ich arbeite derzeit mit dem beliebten ATmega328p. Betrachten Sie die folgende Schaltung: Ein einfacher SPST-Normal-Open-Schalter mit einem 10k-Pull-up-Widerstand und einem angeschlossenen Keramikkondensator, der an einen beliebigen E / A-Port angeschlossen ist. Der spezifische Pin sollte offensichtlich als INPUT im jeweiligen DDRx konfiguriert sein. Das Datenblatt beschreibt im Abschnitt DC-Eigenschaften einen Eingangsleckstrom-E / A-Pin \ $ (I_ {IL} / I_ {IH}) \ $ span> von 1µA, weit am Horizont liegt der Gleichstrom pro E / A-Pin bei 40,0 mA. Überhaupt kein Problem.

  DDRD = 0x00; // Gesamter Port als INPUT
 

enter image description here Bedenken Sie nun, dass ich vergessen habe, dass der angegebene Pin als Eingang gesetzt werden muss, ich setze ihn als Ausgang und setze den Port auf HIGH.

  DDRD = 0xFF; // Gesamter Port als OUTPUT
PORTD = 0xFF; // Gesamter Port HIGH
 

Obwohl das Datenblatt keine Ausgangsimpedanz enthält, kann es basierend auf den angegebenen Diagrammen auf 25 Ω geschätzt werden. Jetzt, wenn die Taste gedrückt wird, fließt der Strom von der 5-V-Quelle mit einem 25-Ω-Widerstand und einem vernachlässigbaren Widerstand aufgrund der Kupferspur durch den Mikrocontroller. Dies erzeugt theoretisch einen Überstrom von 160 mA über dem Gleichstrom pro E / A-Pin-Decke. Könnte dies den Port und das Gerät braten? enter image description here Analog könnte das gleiche Problem auftreten, wenn ich auf positive Logik umschalte und den Port auf LOW setze:

  DDRD = 0xFF; // Gesamter Port als OUTPUT
PORTD = 0x00; // Gesamter Port LOW
 

enter image description here In Anbetracht der Tatsache, dass diese Art von Schaltung eifrig empfohlen wird, wie scheint es keine Probleme zu bringen? Nun, zurück zur ursprünglichen Frage, sollte ich nicht äußerst vorsichtig sein, wenn ich einen E / A-Pin als Ausgang einstelle? Oder zumindest einen kleinen Vorwiderstand als primitiven Schutz anbringen?

Hinweis: Kein englischer Muttersprachler. Sie können den Beitrag jederzeit bearbeiten, wenn Sie etwas Unangenehmes sehen.

Ihr Englisch, Ihre Zeichensetzung, Rechtschreibung und Großschreibung sind perfekt und weitaus besser als bei vielen Muttersprachlern, die hier posten.Ich werde jemanden mit mehr Wissen über die GPIOs auf diesen Chips Ihre Frage beantworten lassen.+1.
@Transistor Das ist ziemlich schmeichelhaft zu hören!Die Wahrheit ist, dass ich mir normalerweise zusätzliche Zeit nehme, um diese Art von Post zu schreiben. Ich habe einfach das Gefühl, dass jeder meine Schriften nicht auswählt: “(
Genau wie beim Fahren auf einer zweispurigen Straße achten Sie darauf, die Fahrspur nicht in Gegenverkehr umzuwandeln.Sie achten darauf, dass der Code mit dem Systemdesign übereinstimmt.Im Allgemeinen legen Sie Port-Steuerelemente nicht so fest. Ein Lese-, Änderungs- und Schreibvorgang ist typisch, nicht erforderlich, aber typisch, um das Risiko solcher Fehler zu verringern.Aber Fehler passieren und Chips lassen ihren Rauch raus.Selbst mit jahrzehntelanger Erfahrung kaufe ich normalerweise ein paar Drei von etwas, falls ich eines in die Luft jage und nicht ein paar Tage / Wochen auf ein anderes warten möchte.
Zur gleichen Zeit, wenn Sie Hardware- oder Software-Arbeiten auf dieser Ebene ausführen möchten, gehen Sie dieses Risiko ein und finden persönliche Lösungen, um gute Gewohnheiten zu entwickeln. Die Lösung einer Person, keine Fehler zu machen, funktioniert nicht bei einer anderen Person.Jede Codezeile, die Sie hinzufügen, erhöht das Risiko für das Design, sodass Sie auch keinen Overkill im Code haben möchten. Gleiches gilt für das Hardware-Design.schlank und gemein und sauber, aber zeigen Sie Sorgfalt.
Ich habe gesehen, wie Hardware-Leute Dinge hinzufügten, nur für den Fall, dass Software versagt, und ebenso viele notwendige Software aufblähen, um Software vor den Hardware-Leuten zu schützen, anstatt dass jeder sich hinsetzt und darüber spricht und beide Seiten tun, was sie versprochen haben und tunMach es richtig, sei es Peer Review oder Double Checking oder was auch immer.
@old_timer Vielen Dank, dass Sie sich die Zeit genommen haben, diese zu schreiben!Ich denke, das Codieren in eingebetteten Systemen ist keine magische Welt, in der nichts passiert, wenn Sie es vermasseln, im Gegensatz zur Entwicklung von Web- oder Mobilgeräten.Schlechter Code kann die eigentliche Hardware beschädigen. Ich werde dies zur Kenntnis nehmen und vorsichtig sein.
@JulianZatloukal Ich habe einmal (aus Versehen) eine 5-V-Sperrspannung über vcc und gnd für ~ 5 Sekunden auf den ATTiny85-Chip gelegt - ich bemerkte, dass es ziemlich heiß wurde (schmerzhaft zu berühren) und zog die Stromversorgung.Chip arbeitete immer noch wie ein Champion, die avr-Architekturen sind notorisch belastbar.
Sie sollten * etwas * vorsichtig sein, weil es Sie nur etwa 2 US-Dollar für einen neuen Chip kostet?
Sechs antworten:
#1
+18
Tom Carpenter
2020-01-03 06:21:05 UTC
view on stackexchange narkive permalink

Wie andere gesagt haben, sollten Sie kein Problem haben, solange Sie Ihren Code überprüfen.

Wenn Sie etwas falsch machen, beschränken sich die ATMega IO-Pins aufgrund des Innenwiderstands der MOSFETs im Großen und Ganzen auf ca. 80 mA (experimentell ermittelter Wert). Dies ist nicht gut für den Chip, aber solange Sie ihn nicht über einen längeren Zeitraum in diesem Zustand belassen, erholen sie sich in der Regel in Ordnung.


Wenn Sie sich Sorgen machen, kann es eine gute Idee sein, einen Widerstand in Reihe mit den Eingängen zu schalten. Etwas in der Größenordnung von 330R für einen 5-V-VDD oder 220R für einen 3,3-V-VDD. Dies stellt sicher, dass der Kurzschlussstrom auf ~ 15 mA begrenzt ist, was bequem innerhalb der Spezifikation liegt.

Der Widerstand befindet sich zwischen dem E / A-Pin und dem, was ihn ansteuert (z. B. Taste mit Pull-up oder CMOS). Da der ATMega einen ziemlich begrenzten Nutzfrequenzbereich hat (E / A-Frequenz < 10 MHz), hat der zusätzliche Widerstand keinen merklichen Einfluss auf den Betrieb der Schaltung, da die Eingänge nur sehr wenig Leckstrom und Kapazität haben.

Vielen Dank, dass Sie den Beitrag bemerkt haben!Ich überprüfe meinen Code sicherlich noch einmal und betrachte mich heutzutage eher als Programmierer!Aber ich war tatsächlich besorgt über eine dumme Zeile in einer importierten Bibliothek, die die Ausgabe einschaltete.Vielleicht bin ich ein bisschen paranoid.Ich wusste nicht, dass die MOSFETs den Strom begrenzen, vielleicht habe ich deshalb vorher noch nichts von diesem Problem gehört.
Sie sind nicht paranoid, die Stifte versagen, wenn Sie sie auf Masse oder Vdd auf einem 328p kurzschließen.
#2
+11
Justme
2020-01-03 06:06:44 UTC
view on stackexchange narkive permalink

Sie sollten vorsichtig sein, aber keine Angst davor haben.Wenn Sie einen Pin-Ausgang einstellen und in die andere Richtung treiben, fließt viel Strom, aber er bläst auch nicht sofort in Rauch auf.Sie können das Gerät beispielsweise mit einer derzeit begrenzten Laborversorgung versorgen, wenn Sie ein Design aufrufen, damit diese Art von Fehlern noch weniger Schaden verursachen.Ich würde mir mehr Sorgen machen, dass der Druckknopf und der Kondensator bei ständigem Gebrauch beschädigt werden, da durch Drücken des Knopfes der Kondensator effektiv kurzgeschlossen wird und eine Stromspitze nur durch ESR-Kappe, Leiterplattenverkabelung und Knopfwiderstand begrenzt wird, sodass sie viele Ampere überschreiten kann.Und da am Druckknopf ein Kontaktsprung auftritt, weist der Strom Hochfrequenzkomponenten auf, und in Kombination mit der Streuinduktivität langer Drähte werden die Stromspitzen in Spannungsspitzen umgewandelt, die nur durch IO-Pin-Schutzdioden geschützt sind.Im Allgemeinen ist ein Widerstand von sogar 330 Ohm in Reihe eine ziemlich gute Idee, um den Strom durch einen Druckknopf zu begrenzen.

#3
+9
Graham
2020-01-03 19:11:59 UTC
view on stackexchange narkive permalink

Wenn man bedenkt, dass diese Art von Schaltung eifrig empfohlen wird, wie scheint es dann keine Probleme zu bringen?

Wenn Ingenieure die E / A für ihr Gerät einrichten, achten sie darauf, dass sie nicht -Laufwerkseingänge als Ausgänge verwenden. Für die meisten E / A setzen wir die Pins beim Start entweder als Ein- oder Ausgänge und ändern sie später nie mehr. Dies gibt uns nur eine Codezeile, die wir sorgfältig prüfen müssen, was keine außergewöhnlich schwierige Aufgabe ist.

Es ist kein Schutzwiderstand erforderlich, es sei denn, Sie glauben, dass Ihre Codierung wahrscheinlich nachlässig ist. In diesem Fall empfehle ich dringend, dass Sie daran arbeiten, Ihre Codierungspraktiken zu verbessern, bessere Tests durchzuführen oder Ihren Code zu überprüfen, bevor Sie ihn ausführen.

Wenn Sie in einem ähnlichen Beispiel ein Kabel direkt zwischen Ihre + 5V- und 0V-Versorgungsleitungen anschließen, wird Ihre Stromversorgung durchgebrannt. Dies bedeutet nicht, dass Sie Ihre Stromversorgung schützen müssen - es bedeutet nur, dass Sie vorsichtig sein müssen, um solche Fehler nicht zu machen!

Nun zurück zur ursprünglichen Frage, sollte ich nicht äußerst vorsichtig sein, wenn Sie einen E / A-Pin als Ausgang festlegen?

Ja, das solltest du. Aber dann sollte ich hoffen, dass Sie in Bezug auf alle viele auf andere Weise ebenso vorsichtig sind, wie Sie Ihren Stromkreis beschädigen könnten, z. B. durch Kurzschließen von Stiften, Drehen auf beiden Seiten einer H-Brücke oder ähnliches Fehler.

Sie haben Recht, vielleicht ist es nicht zuverlässig, jeden Stift abzuschirmen.Vielleicht schreiben Sie so etwas wie DDRD | = (1 << PORTD1) |(1 << PORTD5) |(1 << PORTD7);anstelle von DDRD | = 0b10100010;ist weniger fehleranfällig.Ich sollte auch prüfen, ob eine enthaltene Bibliothek DDRx überschreibt.
@JulianZatloukal Ja, so selbstdokumentierender Code ist sehr viel besser.Als allgemeiner Tipp ist es wichtig, Code so zu schreiben (und zu kommentieren), als ob Sie erwarten, dass jemand anderes ihn sofort lesen und verstehen muss.In sechs Monaten werden Sie sich nicht mehr genau daran erinnern, was Sie getan haben, und der "andere" werden Sie sein.:) :)
Manchmal entwerfen Leute Schaltkreise, die Code ausführen, den sie nicht schreiben und den sie nicht überprüfen können.In diesen Fällen kann es sinnvoll sein, sicherzustellen, dass eine schlechte Programmierung das Gerät nicht zerstört.Beispiele sind einige Geschäftsmodelle der Robotik und alles für die Ausbildung.
@DisplayName Richtig.Ich würde jedoch nicht sagen, dass dies eine sehr häufige Anwendung ist - die meisten Leute, die ihre Boards entwerfen können, entwerfen auch ihre eigene Elektronik.Und keine Beleidigung für Julian, aber jeder, der Allzweck-Bildungstafeln zum Verkauf entwirft, wird sehr erfahren sein, sodass er den Punkt überschritten hat, an dem er SE danach fragen müsste.
#4
+4
David Molony
2020-01-03 16:25:21 UTC
view on stackexchange narkive permalink

Kann auf einem Arduino Uno 328p-Chip bestätigen, dass dieser Pin zerstört wird, wenn Sie einen angesteuerten Ausgang mit Masse oder VDD verbinden.Ich habe es in meinen frühen Tagen versehentlich mehrmals mit Elektronik gemacht.

Bei anderen Chips, mit denen ich arbeite, bin ich ziemlich vorsichtig, dies nicht zu tun, aber modernere scheinen weniger anfällig für diesen Fehlermodus zu sein.Zum Beispiel habe ich versehentlich einen Timer auf einem stm32 im pwm-out-Modus eingerichtet und ihn etwa 15 Minuten lang gegen einen Optokoppler kämpfen lassen ... Der Opto hat das Tauziehen umfassend gewonnen ... Aber der STM-Chip hat überlebt. P.>

Die Situation mit den Arduino 328-Chips ist so schlecht, dass Menschen "Ruggeduinos" mit allen Arten von Schutzmaßnahmen hergestellt haben, um häufige Todesursachen zu vermeiden.

Bearbeiten: Das Hinzufügen eines Widerstands, ungefähr 100 Ohm in Reihe mit dem Stift, reicht meiner Erfahrung nach aus, um die Beschädigung des Stifts zu vermeiden.

"Ruggeduinos" hahaha.Vielleicht könnte eines Tages ein Skript helfen, das den Code auf DDRx-Änderungen in einem GPIO überprüft.Vielleicht werde ich versuchen, einen Widerstand hinzuzufügen oder einfach das Risiko einzugehen, da meine Platine bereits mit Komponenten überfüllt ist.
Ruggeduino existiert unter https://www.rugged-circuits.com/microcontroller-boards/ruggeduino-se-special-edition mit Strombegrenzungswiderstand pro E / A-Pin und zusätzlicher Spannungsbegrenzungsklemmung."Zu den Funktionen gehören Überstrom- und Überspannungsschutz an allen E / A-Pins und 5 V / 3,3 V-Ausgängen, ESD-Schutz an allen E / A-Pins und am USB-Anschluss, vollständiger Überstromschutz des Mikrocontrollers und Betrieb bei bis zu 30 V."
#5
  0
TimWescott
2020-01-03 06:05:08 UTC
view on stackexchange narkive permalink

Im Allgemeinen tötet ein Kurzschluss eines Logikausgangs mit Masse einen Chip nicht sofort.Es ist vielleicht nicht gut dafür, aber es ist nicht so schlecht, dass das falsche Setzen von Eingaben auf Ausgänge dazu führt, dass Dinge verbrennen.

Verwenden Sie also die empfohlenen Schaltkreise und überprüfen Sie Ihre Software.Wenn Sie willige Freunde oder Kollegen haben, führen Sie Codeüberprüfungen durch.

#6
  0
jw_
2020-01-03 15:30:57 UTC
view on stackexchange narkive permalink

Sie müssen "Absolute Maximum Ratings" im Datenblatt wie diesem überprüfen. http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf, der erklärt, dass

  Gleichstrom pro E / A-Pin..................40,0 mA
Gleichstrom-VCC- und GND-Pins...........200,0 mA
 

Dies bedeutet, dass die Zuverlässigkeit des Teils nicht gewährleistet ist, wenn Sie die oben genannten Anforderungen nicht erfüllen.Aber nicht realisierbar bedeutet nicht, dass Sie jetzt oder sogar eines Tages später scheitern. Hier geht es nur um die Chance, zu scheitern.

Wenn es für Entwickler im Labor teuer oder nicht einfach ist, ein anderes zu bekommen, ist mehr Sorgfalt erforderlich.Sie können eine spezielle Funktion verwenden, um auf das Register zuzugreifen, wodurch es zum zentralen Anlaufpunkt wird, sofern der Speicher nicht durch anderen Code beschädigt wird.Aber in den meisten Fällen ist es nicht so teuer oder zeitaufwändig, einen anderen zu bekommen, dann ist dies kein großes Problem.

Übrigens hat ESD möglicherweise eine größere Chance, Ihr Entwicklungsboard zu zerstören.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...