Ist es üblich, dass interne Pull-up-Widerstände ausfallen? oder was würde dazu führen, dass sie zeitweise auftreten?

8

Ich habe ein Board, das auf einem ASIC ARM Cortex-M3 basiert und nach monatelanger Arbeit plötzlich falsche Tastendrücke meldet. Der ASIC ist nicht unser Design, sondern ein seriöses Unternehmen.

Das Schaltflächenschema ist unten angegeben. Der Pin ist als Eingang mit aktiviertem Pull-up-Widerstand konfiguriert. Der Widerstandswert beträgt ca. 30KOhm.

Wenn ich die Pin-Seite mit einem DMM messe, sehe ich, dass der Wert herumschwebt. Manchmal sind es 3,2 V (= VCC, Chipbereich: 2,1 V bis 3,6 V) und manchmal springt es zwischen 0,6 V und 1,0 V herum.

Es gibt keine Probleme mit Feuchtigkeit / Kondensation (9% relative Luftfeuchtigkeit), Staub oder anderen Gegenständen auf Spuren. Und dies ist das EINZIGE Board, das darunter leidet. Andere hergestellte Klone dieses Boards funktionieren (bisher sowieso) ohne Probleme.

Das einzige, woran ich denken kann, ist, dass etwas den internen Klimmzug zum Flackern bringt. Ist es üblich, dass die internen Klimmzüge nachgeben? Was könnte dies sonst noch verursachen?

Schaltflächenschaltfläche

R9, R12 sind 2,2 kOhm und C10, C11 sind 33 nF.

MandoMando
quelle

Antworten:

4

Es sieht so aus, als hätten Sie einige Anstrengungen unternommen, um Ihre Eingangspins von den Schaltern zu isolieren. Dennoch kann ein überwältigendes ESD-Ereignis einen Teil der Pin-Treiber / Empfänger-Schaltung auf dem Chip beschädigt haben (und nicht unbedingt das Pullup-Gerät im Besonderen). .

Wenn Sie dies robuster machen möchten, können Sie externe Klemmdioden, eine Ferritperle oder sogar einen Transistorpuffer zwischen dem Schalter und dem Pin hinzufügen.

Dave Tweed
quelle
Ich habe über ESD nachgedacht, aber unter der Annahme, dass C10 und C11 nahe am Chip liegen, ist es unwahrscheinlich, dass es sich um ESD handelt. Die normale Weisheit ist, dass 3nF ausreicht, um die meisten ESD-Ereignisse aufzunehmen, daher sollten diese 33nF-Kappen einen signifikanten Schutz bieten.
Hmm, die ps-Seite ist hier dargestellt. Könnte die Masse des Gleichrichters einen kleinen negativen Wert (<-0,3 V) transientieren und mit der Zeit eine Klemmdiode brechen? Oder ESD / Transient kommt durch den Pin, aber durch den VCC. Dieser Pin befindet sich physisch nahe am VDD-Pin des Chips.
MandoMando
@MandoMando: Sind Sie vorerst nicht in der Lage, Ihr Board zum Laufen zu bringen, indem Sie externe Klimmzüge verwenden?
Kaz
8

Statistik ist dein Freund. Ich verstehe, Sie haben ein ausgefallenes Gerät, Sie fragen sich, ob das meine Schuld ist? Ist es sicher, in großen Mengen zu versenden? Was passiert, wenn dies wirklich ein Problem ist und wir 10.000 Einheiten auf das Feld liefern? Alle Anzeichen dafür, dass Sie einen Mist geben und dass Sie wahrscheinlich ein gewissenhafter Designer / Ingenieur sind.

Tatsache ist jedoch, dass Sie einen Fehler haben und die menschlichen Schwächen der Bestätigungsvoreingenommenheit für negative Situationen ebenso leicht gelten wie für positive Situationen. Sie hatten einen Fehler ohne eindeutigen Grund. Wenn Sie kein Ereignis kennen, das diesen Effekt ausgelöst hat, ist dies nur Angst.

Das ist ESD. Kann ich beweisen, dass es sich um ESD handelt? - Vielleicht / vielleicht auch nicht - wenn Sie mir das Teil zusenden und ich viel Geld ausgeben muss, um es zu löschen und verschiedene Tests wie SEM und SEM mit Verbesserung des Oberflächenkontrasts durchzuführen. Ich hatte viele Fälle, in denen ich ein Gerät im Rahmen der ESD-Qualifikation absichtlich gezappt habe, das Gerät ausgefallen ist und es dennoch gut 30 Stunden gedauert hat, um den Fehlerpunkt zu finden. Es war wichtig, die Fehlermechanismen und die Aktivierungsenergie zu verstehen, damit die Jagd notwendig war (wenn auch scheinbar verschwenderisch), aber die Hälfte der Zeit konnten wir den Fehlerpunkt nicht sehen. Und das war nach einer FMEA-Analyse und einer designgesteuerten Standortbeseitigung.

Die Leute haben die falsche Vorstellung, dass ESD immer Explosionen und Splitterdärme bedeutet, die überall mit geschmolzenem Si und scharfem Rauch erbrochen werden. Sie sehen dies manchmal, aber oft ist es nur ein kleines Loch im Nanometerbereich im Gateoxid, das geplatzt ist. Es mag vor langer Zeit passiert sein und im Laufe der Zeit ist es aufgrund einer parametrischen Verschiebung gescheitert.

Tatsächlich verwenden wir während ESD-Tests die Arrhenius-Gleichung, um ein Versagen vorherzusagen. Wir zappen die Geräte auf verschiedenen Ebenen und mit verschiedenen Modellen (Quellenimpedanzen) und kochen dann die kleinen B *** rds stundenlang und verfolgen sie im Laufe der Zeit, um den Fehlermodus zu ermitteln und so die zukünftige Leistung vorherzusagen. Sie können problemlos Tausende von Chips auf Platinen haben, die monatelang in Umgebungskammern laufen. Es ist alles Teil von "qual" - dh Qualifikation.

Der Schlüsseleffekt, nach dem wir immer für einige Fehlermodi suchen, ist EOS (Electrical Overstress). Es kann durch ESD oder andere Situationen induziert werden. Bei modernen Prozessen beträgt die Toleranz gegenüber EOS auf Gate-Ebene innerhalb des Chips maximal 15%. (Deshalb ist es so wichtig, den Chip an der vorgesehenen MAX Vss-Schiene laufen zu lassen). EOS kann sich Monate später manifestieren. Die Wärme aus dem Betrieb wäre wie ein Mini-Test für die beschleunigte Lebensdauer (Sie wenden die Arrhenius-Gleichung einfach nicht an und sie wird nicht gesteuert).

Wenn Sie ein besseres Verständnis wünschen, lesen Sie die JEDEC ESD22-Standards, die das MM (Maschinenmodell) und das HMB (Human Body Model) beschreiben, die die Testsonden und das Laden beschreiben.

Hier ist ein Ausschnitt des Modells von JEDEC JESD22-A114C.01 (März 2005).

Geben Sie hier die Bildbeschreibung ein

Sie bemerken, wie es Ihrer Schaltung ähnelt? und die Werte sind sogar ein bisschen nahe beieinander, und dies wird mit den richtigen Spannungspegeln verwendet, um den Mist aus den ESD-Strukturen herauszublasen.

Was Sie also tun müssen, ist:

-scrap that board
- track it's provenance, lot number and who handled it
- keep this info in a database (or spreadsheet)
- note in dB that you suspect ESD
- track all failures
- check the data over time.
- institute manufacturing controls so you can track.
- relax - you're doing fine.
Platzhalter
quelle
Vielen Dank! Ich habe einen 45-V-Fernseher über den PS-Eingang (60 V tolerant) und ich nahm an, dass sich das um ESD kümmern würde, nicht wahr? Wenn ich Ihre Antwort lese, glaube ich, dass dies EOS oder vielleicht ESD ist. Dies ist das dritte Brett, das dieser Ort geröstet hat, aber die anderen waren mehr Chip-Guts-Erbrochenes. Die Eingangsleistung ist etwas heiß, als SMPS verarbeiten kann. Irgendwie kommen ESD-Scherben durch, um sie zu beschädigen. Ich bin sehr gespannt, wie ESD-Schäden verhindert werden können. Ich habe sogar eine Frage dazu. Wenn Sie Licht ins Dunkel bringen können, würde ich gerne beide Antworten zusammen mit Dankbarkeit akzeptieren.
MandoMando
Es gibt wahrscheinlich andere hier, die ein besseres Gespür für verfügbare Teile für ESD auf Platinenebene haben. Ich werde bemerken, dass es zwar möglich ist, dass sich das Chip-Layout zwischen den Pads unterscheidet, es aber bemerkenswert ist, dass Sie Chip-Eingeweide verschüttet haben. Ich würde Ihr Board vor dem Chip vermuten, wenn es so lokalisiert ist. Gibt es etwas an Ihrem Layout, das diese Spuren empfindlicher macht? Die Vorschläge von Dave TWeed sind durchaus vernünftig.
Platzhalter
Nun, das SMPS ist für 40 V ausgelegt und der Eingang liegt bei oder knapp darüber. Ich vermute, der Regler lässt einige Spitzen durch. Die erste Platine hat Mut verschüttet, ich habe TVS hinzugefügt, dann ist sie einfach gestorben. Ich habe den Gleichrichter mit einer etwas höheren Durchlassspannung ausgetauscht, um den Eingang ein wenig zu senken, und er ist nicht gestorben, aber das ist ihm passiert. Ich denke, EOS macht Sinn und die Eingangsspannung ist immer noch zu hoch. Vielleicht ein 3V3-Fernseher auf der Innenseite, wenn der SMPS
MandoMando
(+1) Ich bin wegen etwas anderem hierher gekommen, fand dieses Ding aber ziemlich relevant für ein Projekt, an dem ich arbeite. Mein Fall ist nicht so schwerwiegend, aber ich mochte die logischen Schritte, die in einem solchen Szenario unternommen werden müssen. Ich war wahrscheinlich in Panik geraten, wenn mir so etwas passiert wäre.
Whiskeyjack
4

Die wahrscheinlichsten Szenarien sind entweder, dass der Chip einige Schäden erlitten hat, zu deren sichtbaren Auswirkungen flockiges Pull-up-Verhalten gehört, oder dass der Code aus irgendeinem Grund dazu führt, dass die Pull-ups manchmal versehentlich aktiviert und manchmal deaktiviert werden. Die letztere Situation kann häufig auftreten, wenn der Hauptzeilencode Folgendes tut:

WIDGET_PIN_PORT->PULLUPS |= WIDGET_PIN_PULLUP_MASK;

und ein Interrupt macht so etwas wie:

GADGET_PIN_PORT->PULLUPS |= GADGET_PIN_PULLUP_MASK;

Dabei sind WIDGET_PIN und GADGET_PIN unterschiedliche Bits am selben E / A-Port. Der Hauptzeilencode wird so etwas wie übersetzt

ldr r0,= [[address of port pullup register]]
ldr r1,[r0] ; ***1
orr r1,#WIDGET_PIN_PULLUP_MASK
str r1,[r0] ; ***2

Wenn ein Interrupt nach, ***1aber vorher ***2auftritt, wird das Pullup von GADGET_PIN durch den Interrupt eingeschaltet, aber dann fälschlicherweise durch den Hauptleitungscode ausgeschaltet. Es gibt zwei Möglichkeiten, um dieses Problem zu vermeiden:

  1. Verwenden Sie Hardware, mit der ein Teil des Pull-up-Registers mithilfe eines einzelnen Befehls anstelle einer Lese-, Änderungs- und Schreibsequenz eingestellt werden kann. Ich glaube, dass alle Cortex-M3-basierten Controller eine "Bit-Banging" -Funktion bieten, die für diesen Zweck verwendet werden kann, obwohl ich noch keine gute Möglichkeit gefunden habe, sie aus in C geschriebenem Code zu verwenden, außer durch manuelles Definieren von Bit -banded Adressen. Einige andere Prozessoren verfügen möglicherweise über E / A-Port-spezifische Mittel, um eine ähnliche Aufgabe auszuführen.
  2. Deaktivieren Sie Interrupts während der Lese-, Änderungs- und Schreibsequenz des Ports. Ersetzen Sie beispielsweise den obigen C-Code durch einen Aufruf einer Methode

    void set32 (uint32_t volatile * dest, uint32_t value) {uint32_t old_int = __get_PRIMASK (); __disable_irq (); * dest = * dest | Wert; __set_PRIMASK (old_int); }}

Dieser Code führt dazu, dass Interrupts sehr kurz deaktiviert werden (wahrscheinlich ca. 5 Anweisungen). Das ist kurz genug, um auch bei relativ zeitkritischen Interrupts keine Probleme zu verursachen. Beachten Sie, dass das Kompilieren der obigen Methode als Inline die zum Aufrufen erforderliche Zeit verkürzen kann, aber die Zeitspanne verlängern kann, für die Interrupts deaktiviert werden [z. B. wenn der Optimierer den Code neu anordnet, sodass der Befehl, der die Adresse von lädt, destdies nicht tut passiert bis nach __disable_irq ()].

Angesichts der Tatsache, dass Sie sagen, dass das Pull-up-Verhalten nur sporadisch auftritt, ist ein Codeproblem wahrscheinlich wahrscheinlicher als ein Hardwareproblem. Darüber hinaus würden schädliche Bedingungen, die die Pull-up-Schaltung beschädigen würden, wahrscheinlich auch andere Schäden am Chip verursachen - einige erkennbar und andere nicht. Wenn irgendeine Art von nachweisbaren Schäden an der Hardware zu einem Chip auftritt, ist es fast immer besser , den Chip auf Junk und ihn durch einen neuen zu ersetzen, als zu hoffen , dass der beobachtete Schaden das „nur“ Problem.

Superkatze
quelle
0

Einige der vorherigen Antworten übersehen das Offensichtlichste: Überprüfen Sie die Lötstellen auf Knopf, Widerstände, Kondensatoren und uC. Unter dem Mikroskop können Sie möglicherweise eine gerissene Lötstelle erkennen.

Wenn Sie kein Mikroskop haben, löten Sie eine und eine Verbindung erneut und prüfen Sie, ob das Problem dadurch behoben wird.

Reidar Gjerstad
quelle