ULN2803 disturbo su Arduino

Buonasera a tutti,

due giorni fa ho riscontrato un problema che non so è normale o no...
io ho fatto varie prove e si ripete uguale quindi non è casuale.

PROBLEMA :

Ho utilizzato un ULN2803 come driver d'ingresso per collegare 8 pulsanti che sono distanti circa 3 metri dal componente.
Per fare in modo che posso comandare gli ingressi con un range di tensione da 3v fino a 30v.
Non ho usato partitori di tensione perché dovrei dimensionare le resistenze e succederebbe che le tensioni d'uscita cambierebbro in base a quella d'ingresso.

Il cavo è formato da 9 poli 8 per i singoli contatti e uno per il comune (positivo, che fa ponte su un PIN del contatto di ognuno).

In uscita al componente ULN ho collegato 8 led con relativa resistenza da 3.3k.

Alimento il tutto a 15v.
Quando attivo un contatto si accende il corrispettivo led ma ho notato che gli altri lampano sia quando chiudo il contatto sia quando apro.

Qualsiasi contatto dei quei 8 fa accendere il corrispettivo le d ma anche gli altri con una intensità minore con una durata breve però visibile.

Ho provato a collegare tali uscite agli ingressi di Arduino con relativa resistenza di pull up da 10k (gli ULN sono NPN quindi uscita negativa open collector )

Tale prova mi conferma che Arduino legge anche gli impulsi delle uscite dell'ULN dove non ha il suo ingresso abilitato.

Praticamente i conduttori sono come antenne che mandano il segnale anche negli altri ingressi e tali componenti sono super sensibili.

Infatti se tolgo un filo ad un ingresso dell'ULN il led o l'Arduino collegato non rileva niente.

Provando a mettere una resistenza in serie di 100k Ohm per ogni ingresso noto che il disturbo si riduce e non si nota ma ho notato che comunque Arduino lo risente meno frequentemente ma lo fa ancora.

Non ho provato ad alzare la resistenza maggiore di 100k

Non ho provato a mettere delle resistenze esterne a massa negli ingressi da 10k o 4.7k o 3.3k ecc

Ho provato a collegare il PIN COM al positivo nel comune dei diodi antiparallelo di ogni transistor darlington.

In conclusione non mi sono mai reso conto che tali ingressi siano così sensibili e non so se è un normale problema o no e se sto sbagliando qualcosa... spero di sì...

Grazie dell'aiuto in anticipo !!!

Makers

La base di un darlington è molto sensibile, il guadagno elevato ne fa un ottimo captatore di campi elettrici. Secondo me sugli ingressi dell'ULN oltre delle pull down da 10k basta collegare anche dei condensatori 100nF..1µF verso massa, che dovrebbero "assorbire" la tensione indotta dai fili vicini.

Suggerimento ... quando hai pulsanti con fili "lunghi" (che potrebbe essere anche un cablaggio lungo in un'apparato grande, non solo esterni), usa un vecchio trucco ... alimenta i pulsanti con una tensione piu alta dei 5V (fra 9 e 12 in genere funziona bene), e metti delle protezioni piu debounce sugli ingressi (ovviamente il trucco funziona solo con pulsanti con pull-down fra 33K e 100K ed attivazione verso il positivo, per ovvi motivi :wink: ) ... piu nello specifico, per ogni ingresso, dal pulsante in serie una resistenza da 1K, l'altro capo della resistenza al pin di ingresso ... dal pin verso massa, in parallelo alla resistenza di pull-down si mette uno zener da 4.9V (per sistemi alimentati a 5V, se invece vano a 3.3 si possono usare zener da 3.1V), catodo al pin ed anodo a massa, e sempre in parallelo un condensatorino ceramico fra 47n e 100n, valore non critico ... :wink:

Questo sistema, oltre a fare da debounce ed a risolvere le cadute di tensione su cavi un po lunghi (senza bisogno di mettere un ULN), risolve parzialmente anche il problema dei contatti leggermente ossidati che potrebbero avere alcuni pulsanti, perche' anche se a causa dell'ossidazione passa un po meno tensione, finche' ci sono almeno 5 o 6 V, il sistema funziona lo stesso ...

Claudio_FF:
La base di un darlington è molto sensibile, il guadagno elevato ne fa un ottimo captatore di campi elettrici. Secondo me sugli ingressi dell'ULN oltre delle pull down da 10k basta collegare anche dei condensatori 100nF..1µF verso massa, che dovrebbero "assorbire" la tensione indotta dai fili vicini.

All'inizio

Etemenanki:
Suggerimento ... quando hai pulsanti con fili "lunghi" (che potrebbe essere anche un cablaggio lungo in un'apparato grande, non solo esterni), usa un vecchio trucco ... alimenta i pulsanti con una tensione piu alta dei 5V (fra 9 e 12 in genere funziona bene), e metti delle protezioni piu debounce sugli ingressi (ovviamente il trucco funziona solo con pulsanti con pull-down fra 33K e 100K ed attivazione verso il positivo, per ovvi motivi :wink: ) ... piu nello specifico, per ogni ingresso, dal pulsante in serie una resistenza da 1K, l'altro capo della resistenza al pin di ingresso ... dal pin verso massa, in parallelo alla resistenza di pull-down si mette uno zener da 4.9V (per sistemi alimentati a 5V, se invece vano a 3.3 si possono usare zener da 3.1V), catodo al pin ed anodo a massa, e sempre in parallelo un condensatorino ceramico fra 47n e 100n, valore non critico ... :wink:

Questo sistema, oltre a fare da debounce ed a risolvere le cadute di tensione su cavi un po lunghi (senza bisogno di mettere un ULN), risolve parzialmente anche il problema dei contatti leggermente ossidati che potrebbero avere alcuni pulsanti, perche' anche se a causa dell'ossidazione passa un po meno tensione, finche' ci sono almeno 5 o 6 V, il sistema funziona lo stesso ...

Grazie Claudio, nfatti ho provato e sembra ad abbassare il disturbo.

Ho provato però con dei conduttori lunghi e il problema si è ripresentato.

Praticamente la lunghezza del cavo è rientra come variabile quindi devo vedere bene che valori mettere determinati da una lunghezza massima.

Grazie anche a Etemenanki non ho provato a fare tale circuito.

Posso farlo anche che mi comanda l'ULN ?
Perché dopo la scheda riceve degli ingressi ad attivazione negativa. Ed il circuito è su scheda...

PER TUTTI:

Un problema è nato provandolo a fare anche con Arduino: ho creato un software che fa l'effetto Flip Flop Toggle quindi ogni volta che l'ingresso è basso (INPUTPULLP) lui mi accedende e spegne il led.
Non ho messo nessun tipo di ritardo software in quanto ho voluto di proposito farlo per avere la massima sensibilità da arduino per testare il tutto.

In tale esperimento non ho usato l'integrato ULN ma ho collegato un conduttore del cavo che è connesso al pub di Arduino un conduttore per il polo negativo e gli altri a dei led diretti comandati tramite il katodo (negativo)

Ho scoperto che quando accendevo i led avvolte mi si accendeva il led di Arduino.

Ho scoperto che il conduttore del PIN 2 anche se lo toccavo a mano il led lampava.

All'inizio non avevo messo una resistenza di pull up esterna poiché ho impostato l'input nel software con l'istruzione input pull up.
Poi ne ho messa una da 3.3k

Le cose si sono migliorate ma c'erano ancora dei problemi quando all'interno del cavo scorreva un conduttore per comandare un carico un solenoide che mi consuma a 15 volt una corrente di 750 milliampere con Diodo antiparallelo.

A caso ho provato a mettere un diodo con l'anodo contrario in modo tale da proteggere l'ingresso da tensioni positive e sembra Ok... i problemi non si sono presentati.

Ho provato anche a mettere in serie una resistenza da 10k prima del conduttore del cavo è noto che dà ancora più disturbi senza il diodo.

Poi mettendo il diodo tutto sparisce anche con la resistenza da 1k (che poi non andava poiché fa partitore ed la tensione è troppo bassa).

Devo ancora fare ulteriori prove ma non capisco che effetto fa Il diodo in quanto sembra proteggere il circuito delle cariche capacitive dei cavi.

Sembra un fenomeno logico e non casuale... spero che un lavoro di soppressione lui lo faccia... bho...

Voi sapete ?

Metti uno schemino dei vari casi, perché tra ho collegato quà e ho collegato là io non ho capito quasi niente :slight_smile:

MizzardNet:
... spero che un lavoro di soppressione lui lo faccia... bho...

Chi lo dovrebbe fare secondo te ? ? ? Arduino ? ? ?
Se SI ... allora NON hai letto bene il punto 15.5 del REGOLAMENTO ... ::slight_smile:

Guglielmo

Claudio_FF:
Metti uno schemino dei vari casi, perché tra ho collegato quà e ho collegato là io non ho capito quasi niente :slight_smile:

Sì Claudio farò tutti gli schemi dei vari casi al più presto !

gpb01:
Chi lo dovrebbe fare secondo te ? ? ? Arduino ? ? ?
Se SI ... allora NON hai letto bene il punto 15.5 del REGOLAMENTO ... ::slight_smile:

Guglielmo

Scusa Guglielmo non capisco cosa centri, lo so bene che Arduino non è certificato ecc ma infatti io sto lavorando a casa per progetti miei e volevo solo capire se il componente che ho posto ha un funzionamento corretto alle prove che sto facendo.
Sto lavorando per un flipper fatto a mano in casa per me.

Se volevi intendere che Arduino non ha protezioni varie come un sistema certificato come un PLC l'ho capito Bene. È evidente.
Che poi non sto lavorando con la 220v ma con la 15 e 5v... quindi non dovrei morire.

Mi scuso in anticipo se non ho capito cosa intendevi.
Grazie.

MizzardNet:
Se volevi intendere che Arduino non ha protezioni varie come un sistema certificato come un PLC l'ho capito ...

Si intendevo proprio quello ... ero partito dalla tua frase:

MizzardNet:
... spero che un lavoro di soppressione lui lo faccia... bho...

... e sottolineavo il fatto che ... NO, su Arduino nessuno fa il lavoro di "soppressione" ... tutto qui, per questo ti segnalavo il punto 15.5 che, col la tensione NON ha nulla a che vedere, ma con le protezioni sugli ingressi, si ;D

Guglielmo

Si, il trucchetto funziona sia con gli ingressi digitali dell'arduino, sia con quasi tutti i tipi di ingressi ad alta impedenza ... quindi dovrebbe andare bene anche con gli ingressi dell'ULN ...

Comunque e' sempre meglio abbondare dovunque con antidisturbo, debounce e schermature ... il fatto che tu lavori a casa tua e non in una ditta o altro ambiente non cambia i parametri di funzionamento della scheda ... non certificato e' perche' a bordo non possiede alcun tipo di protezione o debounce sulle linee di ingresso o uscita, quindi che lavori a casa o meno, il problema dei possibili disturbi o interferenze ci sara' sempre ...

Ci sono anche versioni "certificate" per uso PLC, tipo "controllino" o "iono arduino", a cui e' stata aggiunta un bel po di roba per proteggere ingressi e MCU, ma se usi arduino puro e semplice, le protezioni le devi aggiungere tu in base a quello che ti serve ed a quello che ci colleghi ... :wink:

gpb01:
Si intendevo proprio quello ... ero partito dalla tua frase:
... e sottolineavo il fatto che ... NO, su Arduino nessuno fa il lavoro di "soppressione" ... tutto qui, per questo ti segnalavo il punto 15.5 che, col la tensione NON ha nulla a che vedere, ma con le protezioni sugli ingressi, si ;D

Guglielmo

la frase "spero che lui il lavoro di soppressione lo faccia" era riferito al diodo che ho messo.

Che poi lavorando al lavoro con PLC una volta mi è capitato di aprirne uno e ho visto un ATMega2560 con gli ingressi con dei semplici partitori di tensione... nessun diodo, condensatore o fotoaccoppiatore... ed è certificato !!!

Etemenanki:
Si, il trucchetto funziona sia con gli ingressi digitali dell'arduino, sia con quasi tutti i tipi di ingressi ad alta impedenza ... quindi dovrebbe andare bene anche con gli ingressi dell'ULN ...

Comunque e' sempre meglio abbondare dovunque con antidisturbo, debounce e schermature ... il fatto che tu lavori a casa tua e non in una ditta o altro ambiente non cambia i parametri di funzionamento della scheda ... non certificato e' perche' a bordo non possiede alcun tipo di protezione o debounce sulle linee di ingresso o uscita, quindi che lavori a casa o meno, il problema dei possibili disturbi o interferenze ci sara' sempre ...

Ci sono anche versioni "certificate" per uso PLC, tipo "controllino" o "iono arduino", a cui e' stata aggiunta un bel po di roba per proteggere ingressi e MCU, ma se usi arduino puro e semplice, le protezioni le devi aggiungere tu in base a quello che ti serve ed a quello che ci colleghi ... :wink:

Quindi mi stai dicendo che quel trucchetto del diodo in serie posto prima dell'ingresso riesce a sopprimere quei disturbi indotti sui cavi ?

Nel caso dell' Arduino l'ho messo in modo tale che lui riceva gli 0v ovvero Gnd se gli metto una tensione positiva lui non va perché la blocca.

Nel caso degli ULN se i conduttori passano sul diodo messo nel giusto verso e poi negli ingressi anche lì dovrebbe sopprimere quei disturbi indotti ?

Perché sull' ULN non ho ancora provato.

Poi gli ULN hanno un'alta impedenza ingresso?
Dal datasheet sono dei transistor darlington non a tecnologia mos e quindi dovrebbero funzionare in corrente che in tensione.
Intendi le resistenze interne all'integrato ?

Grazie in anticipo !!!

Visto che devi usare collegamenti lunghi per gli ingressi secondo me è meglio se scegli una soluzione più robusta dal punto di vista dell'immunità ai disturbi. Quella in allegato l'ho sperimentata e funziona senza problemi da 5 a 30 Volt, sotto i 5 V non sono sicuri funzioni, quantomeno non è garantito. L'unica vera limitazione è che non è adatta ad ingressi 'veloci' (tipo un encoder), ma se ti limiti a pulsanti azionati a mano va più che bene e non hai problemi di debouncing.

Ciao, Ale.

ilguargua:
Visto che devi usare collegamenti lunghi per gli ingressi secondo me è meglio se scegli una soluzione più robusta dal punto di vista dell'immunità ai disturbi. Quella in allegato l'ho sperimentata e funziona senza problemi da 5 a 30 Volt, sotto i 5 V non sono sicuri funzioni, quantomeno non è garantito. L'unica vera limitazione è che non è adatta ad ingressi 'veloci' (tipo un encoder), ma se ti limiti a pulsanti azionati a mano va più che bene e non hai problemi di debouncing.

Ciao, Ale.

Utile !
Questo va a usare praticamente un regolatore di tensione e poi è fotoaccoppiato per isolare il tutto.

Diciamo che per adesso devo vedere di risolverlo in modo più semplice poiché ho le schede già fatte e tutta quella componentistica per più di 40 ingressi non vedo come possa aggiungerla cioè dovrei rifare la scheda...

Proverò a vedere con diodi, resistenze e condensatori per adesso... chiaramente quando dovrò fare nuovi progetti utilizzerò metodi più potenti come il tuo.

Ho fatto progetti in passato ancora funzionanti di tastiere musicali a MATRICE e Arduino circa 2 metri distante che riceve i 16 conduttori 8 di indirizzo e 8 di data e non ho notato problemi ma anche nei prodotti di strumenti musicali le tastiere a matrice prima di arrivare al micro hanno un po' di lunghezza... poi sbirciando qua e là non ho mai visto filtri in tali sistemi (a matrice ) se non in casi eccezionali per matrici in uscita per comandare Lampade (in Array) invece che led.... chiaro, un buffer per la ripetizine del segnale avvolte l'ho messo ma per questioni di non caricare tanta corrente al micro... ma di disturbi non li ho notati in tal caso...

Poi come ho descritto ho creato un programma con Arduino che mi riproduce un Flip Flop T senza neanche un ritardo via software.
Quindi anche se lo collegassi un pulsante funzionerebbe male poiché so che il contatto produce delle vibrazioni e quindi dei falsi impulsi che il mciro ATMega legge.
L'ho fatto di proposito per rendere l'ingresso sensibile.

Questo va a usare praticamente un regolatore di tensione e poi è fotoaccoppiato per isolare il tutto.

Il regolatore è usato in modalità corrente costante, e fornisce 12 mA circa al fotoaccoppiatore. Se l'isolamento non è necessario si può usare uno zener da 4,7 Volt al posto del fotoacc., magari alzando anche sui 150 ohm la resistenza . Per quanto riguarda gli ingombri se hai bisogno di molti ingressi e devi comunque sviluppare un PCB se usi componenti SMD occupi pochissimo spazio.

Ciao, Ale.

ilguargua:
Il regolatore è usato in modalità corrente costante, e fornisce 12 mA circa al fotoaccoppiatore. Se l'isolamento non è necessario si può usare uno zener da 4,7 Volt al posto del fotoacc., magari alzando anche sui 150 ohm la resistenza . Per quanto riguarda gli ingombri se hai bisogno di molti ingressi e devi comunque sviluppare un PCB se usi componenti SMD occupi pochissimo spazio.

Ciao, Ale.

Ma le zener dove lo metto precisamente e come ? In serie, parallelo i capi dove sono connessi ?

Bon sì ovvio con SMD è logico ma non riuscirei ad attaccarli da solo e mi costerebbe un botto fare il montaggio ad altri... è a livelli elevati ancora ...desidero fare le cose in modo semplice...
io parlo di schede fatte mano... le mille fori...

Forse è meglio se posto uno schema più chiaro :

Si può realizzare in poco spazio anche su una mille fori usando componenti tradizionali, non ho purtroppo niente a disposizione per fare una foto, altrimenti ti postavo un esempio.

Ciao, Ale.

edit: il secondo schema non richiede un input pullup, scusate, è tardi e sono stanco... :frowning:

MizzardNet:
......
Che poi lavorando al lavoro con PLC una volta mi è capitato di aprirne uno e ho visto un ATMega2560 con gli ingressi con dei semplici partitori di tensione... nessun diodo, condensatore o fotoaccoppiatore... ed è certificato !!!
......

Era uno ZELIO della Schneider :slight_smile:
solo partitore ed un condensatore da 0.1

steve-cr:
Era uno ZELIO della Schneider :slight_smile:
solo partitore ed un condensatore da 0.1

E dici poco? Hai disaccoppiamento dell'ingresso dato dalla R in serie, inerzia (filtro) data dal condensatore e bassa impedenza data dalla R verso GND... la triade contro i disturbi più comuni (per i condotti o forti burst RF potrebbero servire anche induttanze e optoisolamento)

Nel caso in discussione l'elevato range di tensione 3..30V complica un po'. La soluzione con generatore di corrente costante (magari a transistor per ridurre il dropout e funzionare a 3V) era sembrata anche a me la più "sicura", ma per molti ingressi può essere ingestibile.

MizzardNet:
...
Quindi mi stai dicendo che quel trucchetto del diodo in serie posto prima dell'ingresso ...

Ehm ... dove ho parlato di diodo "in serie" ? ...

In serie al pulsante c'e' una resistenza da 1K ... cioe' collegta fra il pulsante ed il pin ... poi, fra il pin e massa ci sono una resistenza di pull-down, che puo essere anche da 33K, 47K, o valori simili, e sempre fra pin e massa, uno zener, catodo al pin ed anodo a massa, ed un condensatore da 100n ...