È normale che i resistori pull-up interni falliscano? o cosa li farebbe diventare intermittenti?


8

Ho una scheda basata su un ASIC ARM Cortex-M3 che dopo mesi di lavoro ha iniziato improvvisamente a segnalare pressioni spurie dei pulsanti. L'ASIC non è il nostro design, ma un'azienda rispettabile.

Lo schema dei pulsanti è riportato di seguito. Il pin è configurato come ingresso con la resistenza pull-up abilitata. Il valore del resistore è di circa 30KOhm.

Quando misuro il lato pin con un DMM, vedo il valore fluttuare intorno. A volte è 3,2 V (= VCC, intervallo di chip: da 2,1 V a 3,6 V) e altre volte salta in giro fluttuando tra 0,6 V a 1,0 V.

Non ci sono problemi di umidità / condensa (9% RH), polvere o altri oggetti sulle tracce. E questa è l'UNICA tavola che soffre di questo. Altri cloni prodotti di questa scheda funzionano senza problemi (finora comunque).

L'unica cosa a cui riesco a pensare è che qualcosa sta facendo tremolare il pull-up interno. È comune che i pull-up interni cedano? Cos'altro potrebbe causare questo?

Schema dei pulsanti

R9, R12 sono 2.2Kohm e C10, C11 sono 33nF.

Risposte:


4

Sembra che tu abbia fatto qualche sforzo per isolare i tuoi pin di input dagli switch, ma ancora, un travolgente evento ESD potrebbe aver danneggiato una parte dei circuiti del driver / ricevitore dei pin sul chip (e non necessariamente il dispositivo pullup in particolare) .

Se vuoi renderlo più robusto, potresti prendere in considerazione l'aggiunta di diodi di serraggio esterni, un cordone di ferrite o persino un buffer di transistor tra l'interruttore e il pin.


Ho pensato a ESD, ma supponendo che C10 e C11 siano vicini al chip, è improbabile che sia ESD. La saggezza normale è che 3nF è sufficiente per assorbire la maggior parte degli eventi ESD, quindi quei cappucci da 33nF avrebbero dovuto fornire una protezione significativa.

Hmm, il lato ps è raffigurato qui, il terreno del raddrizzatore potrebbe infatti transitare un piccolo negativo (<-0,3 V) e rompere alcuni diodi di bloccaggio nel tempo? O ESD / transitorio proveniente dal pin ma attraverso il VCC. Questo pin è fisicamente vicino al pin VDD del chip.
MandoMando,

@MandoMando: Per ora, sei in grado di far funzionare la tua scheda kludging in pull-up esterni?
Kaz,

8

Le statistiche sono tue amiche. Ho capito, hai un dispositivo guasto, ti chiedi è colpa mia? è sicuro spedire in volume? cosa succede se questo è davvero un problema e spediamo 10.000 unità sul campo? Tutti segni che fai schifo e che probabilmente sei un progettista / ingegnere coscienzioso.

Ma il fatto è che hai un fallimento e le debolezze umane del pregiudizio di conferma si applicano a situazioni negative altrettanto facilmente come situazioni positive. Hai avuto un fallimento, senza una causa definita. A meno che tu non sia a conoscenza di un evento che ha scatenato questo effetto, questa è solo ansia.

Questo è ESD. Posso provare che si tratta di ESD? - Forse / forse no - se mi spedisci la parte e spendo un sacco di dollari per annullarla ed eseguirla attraverso diversi test come SEM e SEM con miglioramento del contrasto della superficie, forse. Ho avuto molti casi in cui ho deliberatamente zappato un dispositivo come parte della qualifica ESD, il dispositivo ha fallito e tuttavia ci sono volute ben 30 ore per trovare il punto di errore. Era importante capire i meccanismi di fallimento e l'energia di attivazione, quindi la caccia era necessaria (se apparentemente dispendiosa) ma per la metà del tempo non siamo riusciti a vedere il punto di fallimento. E questo è stato dopo un'analisi FMEA e la progettazione guidata all'eliminazione della posizione.

La gente ha la falsa idea che ESD significhi sempre esplosioni e patatine di vomito dappertutto con Si fuso e fumo acre. Lo vedi a volte, ma spesso è solo un piccolo foro stenopeico nanometrico nell'ossido di gate che si è rotto. Potrebbe essere successo molto tempo fa e nel tempo non è riuscito a causa del cambio parametrico.

Infatti durante i test ESD utilizziamo l'equazione di Arrhenius per prevedere il fallimento. Zappiamo i dispositivi a vari livelli e modelli diversi (impedenze della sorgente) e quindi cuciniamo i piccoli b *** rd per ore e li tracciamo nel tempo per essere in grado di raccogliere la modalità di guasto e quindi prevedere le prestazioni future. Puoi facilmente avere un migliaio di chip su schede in esecuzione in camere ambiente per mesi alla volta. Fa tutto parte di "qual", ovvero qualificazione.

L'effetto chiave che cerchiamo sempre per le modalità _some_failure è EOS (Electrical Overstress). Può essere indotto da ESD o altre situazioni. I moderni processi la tolleranza a livello di gate EOS all'interno del chip è forse del 15% max. (Ecco perché eseguire il chip nel modo in cui è prevista la guida MAX Vss è così importante). EOS può manifestarsi mesi dopo. Il calore proveniente dal funzionamento sarebbe come un mini test di durata accelerato (non stai semplicemente applicando l'equazione di Arrhenius e non è controllata).

Se si desidera una migliore comprensione, consultare gli standard JEDEC ESD22 che descrivono MM (modello di macchina) e HMB (modello di corpo umano) che descrivono le sonde di prova e la carica.

Ecco il modello del modello JEDEC JESD22-A114C.01 (marzo 2005).

inserisci qui la descrizione dell'immagine

Ti accorgi che sembra un po 'simile al tuo circuito? e i valori sono anche piuttosto vicini, e questo viene usato con i giusti livelli di tensione per far esplodere le strutture ESD.

Quindi quello che devi fare è:

-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.

Grazie mille! Ho un TVS a 45 V attraverso l'ingresso PS (tollerante a 60 V) e ho pensato che si sarebbe preso cura di ESD, no? leggendo la tua risposta però, credo che sia EOS o forse ESD. Questa è la terza scheda che questa posizione ha arrostito, ma le altre erano più vomito di patatine. La potenza in ingresso è un po 'più alta di quella che SMPS può gestire, in qualche modo frammenti di ESD arrivano per romperlo. Sono molto curioso di sapere come prevenire i danni ESD, ho anche una domanda su di esso. Se riesci a far luce, sarei felice di accettare entrambe le risposte con gratitudine.
MandoMando,

Probabilmente ce ne sono altri qui che hanno un migliore senso delle parti disponibili per ESD a livello di scheda. Noterò che mentre è possibile che il layout del chip possa differire tra i pad, è da notare che hai avuto il budello di chip versato, sospetterei che la tua scheda prima del chip se fosse localizzata in quel modo. C'è qualcosa nel tuo layout che rende queste tracce più sensibili? I suggerimenti di Dave TWeed sono del tutto ragionevoli.
segnaposto

bene, l'SMPS è valutato per 40 V e l'ingresso è pari o appena superiore a quello. Sospetto che il regolatore lasci passare alcuni spuntoni. La prima scheda si è rovesciata, ho aggiunto TVS, poi è morta, ho scambiato il raddrizzatore con una tensione in avanti leggermente più alta per far cadere un po 'l'ingresso e non è morto, ma questo è successo. Penso che EOS abbia senso e che la tensione di ingresso sia ancora troppo alta. Forse una TV 3V3 all'interno se l'SMPS
MandoMando il

(+1) Sono venuto qui per qualcos'altro ma ho trovato questa cosa abbastanza rilevante per un progetto a cui sto lavorando. Il mio caso non è così grave ma mi sono piaciuti i passaggi logici necessari per essere adottati in tale scenario. Probabilmente mi sarei lasciato prendere dal panico se mi fosse successo qualcosa del genere.
Whiskeyjack,

4

Gli scenari più probabili sono o che il chip abbia subito qualche danno, i cui effetti visibili includano comportamenti di pull-up instabili, oppure che il codice sia per qualsiasi motivo che causa l'attivazione accidentale e talvolta la disattivazione accidentale dei pullup. Quest'ultima situazione può sorgere frequentemente se il codice della linea principale fa qualcosa del tipo:

WIDGET_PIN_PORT->PULLUPS |= WIDGET_PIN_PULLUP_MASK;

e un interrupt fa qualcosa del tipo:

GADGET_PIN_PORT->PULLUPS |= GADGET_PIN_PULLUP_MASK;

dove WIDGET_PIN e GADGET_PIN sono bit diversi sulla stessa porta I / O. Il codice della riga principale verrà tradotto come qualcosa del genere

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

Se si verifica un interrupt dopo ***1 ma prima ***2, il pullup di GADGET_PIN verrà attivato dall'interrupt ma poi verrà erroneamente disattivato dal codice della linea principale. Esistono due modi per evitare questo problema:

  1. Utilizzare hardware che può consentire l'impostazione di un po 'del registro pull-up usando una singola istruzione anziché una sequenza di lettura-modifica-scrittura. Credo che tutti i controller basati su Cortex-M3 forniscano una funzionalità di "bit banging" che può essere utilizzata per questo scopo, anche se devo ancora trovare un modo carino di usarlo dal codice scritto in C diverso dalla definizione manuale del bit indirizzi a banda. Alcuni altri processori possono disporre di mezzi specifici per le porte I / O per eseguire un compito simile.
  2. Disabilita gli interrupt durante la sequenza di lettura-modifica-scrittura della porta. Ad esempio, sostituire il codice C sopra con una chiamata a un metodo

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

Questo codice provocherà una breve disattivazione degli interrupt (probabilmente circa 5 istruzioni); è abbastanza breve da non causare problemi anche con interruzioni relativamente temporali. Si noti che la compilazione del metodo sopra come inline può ridurre il tempo necessario per chiamarlo, ma potrebbe aumentare il tempo per cui gli interrupt sono disabilitati [ad es. Se l'ottimizzatore capita di riorganizzare il codice in modo che l'istruzione che carica l'indirizzo di destnon succede fino a dopo __disable_irq ()].

Dato che dici che il comportamento di pull-up è intermittente, penso che un problema con il codice sia probabilmente più probabile di un problema hardware. Inoltre, condizioni dannose che danneggerebbero i circuiti di pull-up potrebbero causare anche altri danni al chip - alcuni rilevabili e altri no. Se a un chip si verifica qualsiasi tipo di danno hardware dimostrabile, è quasi sempre meglio spazzare il chip e sostituirlo con uno nuovo, piuttosto che sperare che il danno osservato sia "l'unico" problema.


0

Alcune delle risposte precedenti trascurano quelle più ovvie: controllare i giunti di saldatura per il pulsante, i resistori, i condensatori e l'uC. Al microscopio potresti essere in grado di vedere un giunto di saldatura incrinato.

Se non si dispone di un microscopio, ri-saldare uno e un giunto e vedere se risolve il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.