Domanda:
A causa della sovracorrente, non dovrei essere estremamente cauto quando imposto un pin I / O come Output?
Julian Zatloukal
2020-01-03 05:38:51 UTC
view on stackexchange narkive permalink

La domanda può essere applicata a qualsiasi microcontrollore con capacità di I / O, ma attualmente sto lavorando con il popolare ATmega328p. Considera il seguente circuito: un semplice interruttore SPST normalmente aperto con una resistenza di pull-up da 10k e un condensatore ceramico collegato, collegato a qualsiasi porta I / O. Il pin specifico va ovviamente configurato come INPUT nella rispettiva DDRx. Il datasheet descrive, all'interno della sezione DC Characteristics, un pin I / O di corrente di dispersione in ingresso \ $ (I_ {IL} / I_ {IH}) \ $ di 1µA, mentre lontano nell'orizzonte, la corrente CC per pin I / O raggiunge i 40,0 mA. Non è affatto un problema.

  DDRD = 0x00; // Intera porta come INPUT
 

enter image description here Ora considera che ho dimenticato il fatto che il pin dato deve essere impostato come Input, l'ho impostato come Output e ho impostato la porta HIGH.

  DDRD = 0xFF; // Intera porta come OUTPUT
PORTD = 0xFF; // Tutta la porta ALTA
 

Sebbene il foglio dati non fornisca un'impedenza di uscita può essere stimata in 25 Ω, sulla base dei grafici forniti. Ora, nel momento in cui viene premuto il pulsante, la corrente si fa strada attraverso il microcontrollore dalla sorgente 5V con una resistenza da 25Ω più una resistenza trascurabile a causa della traccia di rame. Questo teoricamente produce una sovracorrente di 160 mA superiore alla corrente CC per il soffitto del pin I / O. Questo potrebbe friggere la porta e il dispositivo? enter image description here Analogamente, se passo alla logica positiva e imposto la porta a BASSA si potrebbe riscontrare lo stesso problema:

  DDRD = 0xFF; // Intera porta come OUTPUT
PORTD = 0x00; // Tutta la porta LOW
 

enter image description here Considerando che questo tipo di circuito è vivamente incoraggiato, come sembra non portare problemi? Ora, tornando alla domanda originale, non dovrei essere estremamente cauto quando imposto un pin I / O come Output? O almeno collegare un resistore in piccola serie come protezione primitiva?

Nota: non sei un madrelingua inglese, sentiti libero di modificare il post se vedi qualcosa di imbarazzante.

Il tuo inglese, punteggiatura, ortografia e lettere maiuscole è perfetto e di gran lunga migliore di molti dei madrelingua che pubblicano qui.Lascerò che qualcuno con maggiore conoscenza dei GPIO su quei chip risponda alla tua domanda.+1.
@Transistor È piuttosto lusinghiero sentirlo!La verità è che di solito mi prendo più tempo per scrivere questo tipo di post, mi sento come se tutti stessero pignolando i miei scritti: '(
Proprio come quando guidi su una strada a due corsie, fai attenzione a non cambiare corsia nel traffico in arrivo.Mostrate attenzione a far corrispondere il codice al design del sistema.In generale non si impostano i controlli delle porte in questo modo, una lettura-modifica-scrittura è tipica, non richiesta, ma tipica per ridurre il rischio di tali errori.Ma gli errori accadono e le patatine lasciano uscire il fumo.Anche con decenni di esperienza di solito compro un paio di tre di qualcosa nel caso in cui ne faccia saltare uno e non voglio aspettare alcuni giorni / settimane per un altro.
Allo stesso tempo, se vuoi fare un lavoro hardware o software a questo livello, corri questo rischio e trovi quelle che sono soluzioni personali per prendere buone abitudini, la soluzione di una persona per non commettere errori non funziona su un'altra persona.Ogni riga di codice che aggiungi aggiunge rischi al design, quindi non vuoi che il codice sia eccessivo, lo stesso vale per il design dell'hardware.snello, meschino e pulito, ma mostra cura.
Ho visto addetti all'hardware aggiungere cose nel caso in cui il software si guasta e allo stesso modo molti software necessari si gonfiano per proteggere il software dagli addetti all'hardware, piuttosto che tutti quelli che si siedono e ne parlano, ed entrambe le parti fanno quello che hanno detto che avrebbero fatto efallo bene sia che si tratti di revisione tra pari o doppio controllo o altro.
@old_timer Grazie per aver dedicato del tempo a scriverli!Immagino che la codifica nei sistemi incorporati non sia un mondo magico in cui non succederà nulla se si incasina, a differenza dello sviluppo web o mobile.Un codice errato può danneggiare l'hardware reale, ne prenderò atto e starò attento.
@JulianZatloukal Una volta (accidentalmente) ho inserito un bias inverso a 5v su vcc e gnd sul chip ATTiny85 per ~ 5s - Ho notato che diventava piuttosto caldo (doloroso al tatto) e ho tirato il potere.Chip ha funzionato ancora come un campione, le architetture avr sono notoriamente resilienti.
Dovresti essere * leggermente * cauto, perché ti costerà solo circa $ 2 per un nuovo chip?
Sei risposte:
Tom Carpenter
2020-01-03 06:21:05 UTC
view on stackexchange narkive permalink

Come altri hanno già detto, non dovresti avere problemi a patto di ricontrollare il tuo codice.

Se sbagli, in generale i pin ATMega IO si limiteranno a circa ~ 80mA a causa della resistenza interna dei MOSFET (valore trovato dall'esperimento). Questo non va bene per il chip, ma finché non lo lasci in questa condizione per un periodo prolungato, tendono a riprendersi bene.


Se sei preoccupato, può essere una buona idea mettere un resistore in serie agli ingressi. Qualcosa nell'ordine di 330R per un VDD da 5 V o 220R per VDD da 3,3 V. Ciò garantirà che la corrente di cortocircuito sia limitata a ~ 15 mA, che rientra comodamente nelle specifiche.

Il resistore va tra il pin IO e qualunque cosa lo stia guidando (ad es. pulsante con pull-up o CMOS). Poiché ATMega ha una gamma di frequenza utile piuttosto limitata (frequenza IO < 10MHz), la resistenza extra non avrà alcun impatto notevole sul funzionamento del circuito poiché gli ingressi hanno pochissimo in termini di corrente di dispersione e capacità

Grazie per aver notato il post!Sicuramente ricontrollo il mio codice, considerandomi più un programmatore al giorno d'oggi!Ma in realtà ero preoccupato per una riga stupida in una libreria importata che attivava l'output.Forse sono un po 'paranoico.Non sapevo che i MOSFET limitassero la corrente, forse questo è il motivo per cui non ho sentito parlare di questo problema prima.
Non sei paranoico, i pin falliscono se li metti in corto a massa o Vdd su un 328p.
Justme
2020-01-03 06:06:44 UTC
view on stackexchange narkive permalink

Dovresti essere cauto ma non terrorizzato.L'impostazione di un'uscita pin e la sua guida nell'altra direzione farà fluire molta corrente, ma non esploderà immediatamente in fumo.Ad esempio, è possibile alimentare il dispositivo con un'alimentazione labotatoria limitata corrente quando si presenta un progetto in modo che questo tipo di errori causi ancora meno danni.Sarei più preoccupato che il pulsante e il condensatore subiscano danni durante l'uso continuo poiché premendo il pulsante in modo efficace si interrompe il condensatore e un picco di corrente è limitato solo dall'ESR del cappuccio, dal cablaggio del PCB e dalla resistenza del pulsante, quindi può superare molti ampere.E poiché ci sarà un rimbalzo del contatto sul pulsante, la corrente ha componenti ad alta frequenza e quella combinata con l'induttanza parassita di fili lunghi convertirà i picchi di corrente in picchi di tensione, protetti solo da diodi di protezione dei pin IO.Quindi, in generale, un resistore anche di 330 ohm in serie inizia ad essere una buona idea per limitare la corrente tramite il pulsante.

Graham
2020-01-03 19:11:59 UTC
view on stackexchange narkive permalink

Considerando che questo tipo di circuito è vivamente incoraggiato, come sembra che non porti problemi?

Perché quando gli ingegneri configurano l'I / O per il loro dispositivo, stanno attenti a garantire che non drive input come output. Per la maggior parte degli I / O, imposteremo i pin come ingressi o uscite all'avvio e non li cambieremo mai in seguito. Questo ci dà solo una riga di codice che dobbiamo ricontrollare attentamente, il che non è un compito particolarmente difficile.

Non c'è bisogno di un resistore di protezione a meno che non pensi che sia probabile che non ti preoccuperai della tua codifica. In tal caso, ti suggerisco caldamente di lavorare per migliorare le tue pratiche di codifica, eseguendo test migliori o rivedendo il tuo codice prima di eseguirlo.

Come esempio simile, se colleghi un cavo direttamente tra le linee di alimentazione + 5V e 0V, brucerai l'alimentazione. Questo non significa che devi proteggere il tuo alimentatore, significa solo che devi stare attento a non commettere errori del genere!

Ora, tornando alla domanda originale, non dovrei essere estremamente cauto quando imposto un pin I / O come Output?

Sì, dovresti. Ma poi spero che tu sia ugualmente cauto su tutti gli molti altri modi in cui potresti causare danni al tuo circuito, come cortocircuitare i pin, girare su entrambi i lati di un ponte ad H o altri simili errori.

Hai ragione, forse schermare ogni pin non è affidabile.Forse scrivendo qualcosa come DDRD | = (1 << PORTD1) |(1 << PORTD5) |(1 << PORTD7);invece di DDRD | = 0b10100010;è meno soggetto a errori.Dovrei anche controllare se qualche libreria inclusa ha la precedenza su alcune DDRx.
@JulianZatloukal Sì, il codice auto-documentante come quello è molto meglio.Come suggerimento generale, è importante scrivere (e commentare) il codice come se ci si aspettasse che qualcun altro lo legga e lo capisca immediatamente.Tra sei mesi non ricorderai esattamente cosa hai fatto e il "qualcun altro" sarai tu.:)
A volte le persone progettano circuiti che eseguono codice che non stanno scrivendo e non possono rivedere.In questi casi può essere saggio assicurarsi che una cattiva programmazione non uccida l'unità.Gli esempi includono alcuni modelli di business della robotica e qualsiasi cosa per l'istruzione.
@DisplayName Abbastanza vero.Non direi che sia un'applicazione molto comune, tuttavia, la maggior parte delle persone che sono in grado di progettare le proprie schede progettano anche la propria elettronica.E nessuna offesa per Julian, ma chiunque progetta schede didattiche generiche per la vendita avrà molta esperienza, quindi hanno superato il punto in cui avrebbero dovuto chiedere a SE.
David Molony
2020-01-03 16:25:21 UTC
view on stackexchange narkive permalink

Posso confermare, su un chip 328p di arduino uno, se colleghi un'uscita pilotata a massa o VDD, ucciderà quel pin.L'ho fatto accidentalmente più volte nei miei primi giorni con l'elettronica.

Su altri chip con cui lavoro, sono abbastanza attento a non farlo, ma quelli più moderni sembrano meno suscettibili a questa modalità di errore.Ad esempio, ho accidentalmente impostato un timer su uno stm32 in modalità pwm out e l'ho fatto combattere un accoppiatore ottico per circa 15 minuti ... L'opto ha vinto in modo completo il tiro alla fune ... Ma il chip STM è sopravvissuto.

La situazione con i chip arduino 328 è talmente grave che le persone hanno creato "ruggeduinos" con tutti i tipi di protezioni per evitare comuni cause di morte.

Modifica: L'aggiunta di un resistore, circa 100 ohm in serie con il pin, è nella mia esperienza sufficiente per evitare il danneggiamento del pin.

"Ruggeduinos" hahaha.Forse un giorno uno script che ispeziona il codice per le modifiche DDRx in qualsiasi GPIO potrebbe aiutare.Forse proverò ad aggiungere un resistore o semplicemente a correre il rischio, considerando che il mio pcb è già sovraffollato di componenti.
Ruggeduino esiste https://www.rugged-circuits.com/microcontroller-boards/ruggeduino-se-special-edition con resistore di limite di corrente per pin IO e anche un limite di tensione extra."Le caratteristiche includono protezione da sovracorrente e sovratensione su tutti i pin I / O e uscite 5V / 3.3V, protezione ESD su tutti i pin I / O e porta USB, protezione totale da sovracorrente del microcontrollore e funzionamento fino a 30V."
TimWescott
2020-01-03 06:05:08 UTC
view on stackexchange narkive permalink

Generalmente, cortocircuitare un'uscita logica a massa non uccide immediatamente un chip.Potrebbe non essere buono , ma non è così male che impostare erroneamente gli input sugli output fa bruciare le cose.

Quindi, vai avanti e utilizza i circuiti consigliati e ricontrolla il tuo software.Se hai amici o colleghi disponibili, fai delle revisioni del codice.

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

È necessario selezionare "Absolute Maximum Ratings" nella scheda tecnica come questa http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf, che dichiara che

  Corrente CC per pin I / O..................40,0 mA
VCC corrente CC e pin GND...........200,0 mA
 

Il che significa che se non rispetti quanto sopra, l'affidabilità della parte non sarà garantita.Ma non attendibile non significa fallire ora o addirittura fallire un giorno dopo, si tratta solo della possibilità di fallire.

Per la scheda di sviluppo in laboratorio, se è costoso o non è facile ottenerne un'altra, è necessaria maggiore attenzione.È possibile utilizzare una funzione speciale per accedere al registro che lo rende l'unico punto di cura a meno che la memoria non sia corrotta da altro codice.Ma nella maggior parte dei casi non è così costoso o richiede molto tempo per ottenerne un altro, quindi questo non è un grosso problema.

BTW ESD potrebbe avere maggiori possibilità di distruggere la tua scheda di sviluppo.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...