Eliminare interferenze prodotte da motore asincrono 48VAC [risolto]

Buongiorno a tutti !! :blush:
Ho un problema che devo risolvere e chiedo il vostro cortese aiuto.

Ho realizzato un progetto che prevede il pilotaggio di un motore asincrono alimentato in corrente alternata 48Vac utilizzando Arduino. Già consapevole del fatto che Arduino è sensibile ai disturbi elettromagnetici, ho previsto i seguenti accorgimenti

HARDWARE
• Tutti gli ingressi digitali sono stati acquisiti con fotoaccoppiatori 24V to 5V

image

• Tutte le uscite pilotano relay su schede previste di fotoaccoppiatori ed è stato applicato l’accorgimento di utilizzare alimentazioni separate per arduino e relay shield (alimentazione scheda da JD-VCC con jumper rimosso). Anche i GND sono stati separati.

image

• Ai carichi induttivi (solenoidi / contattori 24Vdc) pilotati con i relay è stato applicato diodo di flyback in antiparallelo e filtro rc snubber (condensatore da 0,1 uF e resistenza da 47 Ohm)

image

• Arduino è stato inserito in un case, avvolto con nastro di alluminio collegato a GND per ottenerne una schermatura alle interferenze esterne

image
image

• Arduino è alimentato a 5v con un bel condensatore elettrolitico da 10000 uf messo in parallelo tra 5V e GND per stabilizzare il segnale di alimentazione

image

SOFTWARE
• Sono stati applicati dei filtri antirimbalzo di 500ms sull’acquisizione degli ingressi digitali

• Tutti i pin non utilizzati sono settati come “INPUT PULL-UP”

RISULTATO
L'esito di svariate prove è che il tutto funziona perfettamente ed in maniera continuativa fintanto che il motore asincrono trifase rimane scollegato. Se collego il motore, al momento del pilotaggio capita che, ogni tanto (random) Arduino si resetta e ciò accade ogni tot pilotaggi (dove “tot” è una variabile che varia da 1 a 10).

Di seguito riporto lo schema del contattore, dove:
• A1-A2 è il solenoide al quale è applicato diodo di flyback ed rc-snubber il quale è pilotato dalla relay shield
• T1, T2, T3 sono i terminali ai quali è collegato il motore asincrono

image

ringrazio tutti anticipatamente

Non credo sia importante e men che meno definitivo, ma conviene definirli come “INPUT” e connetterli direttamente al GND più vicino, o tramite una resistenza da 180-220 Ohm. Se li connetti direttamente, attenzione a non definirli erroneamente “OUTPUT” e pilotarli, perché rischi di bruciare il pin.

Se ho capito bene l’Arduino si resetta al momento del comando del contattore A1-A2 e SOLO se il motore è attaccato. Se il motore è staccato il fenomeno NON si presenta?

Il fenomeno si presenta anche a motore attaccato ma A VUOTO? o solo SOTTO CARICO?

Quando il fenomeno non è governabile c’è una soluzione estrema, se applicabile. Consiste nel memorizzare su EEPROM gli ‘stati’ significativi raggiunti dal programma. In caso di reset l’Arduino ‘ripesca’ dalla EEPROM lo stato in cui si era interrotto e il programma riparte da lì. Ma tutto questo si può fare SOLO a determinate condizioni. Nel tuo caso occorre vedere se si può fare in caso di reset all’attivazione del solenoide, se l’Arduino si resetta SOLO e sporadicamente in quel caso.

Ciao,
P.

Ciao @pgiagno, innanzitutto grazie per la risposta.

Esattamente

Il fenomeno si presenta anche a motore attaccato ma con carico scollegato

Ho già pensato a questa soluzione ma purtroppo non è applicabile nel mio caso, in quanto durante il funzionamento automatico la macchina esegue un ciclo periodico di attivazione e spegnimento del motore asincrono con durata del periodo di circa 8 secondi.
Considerando un funzionamento medio di 6 ore al giorno per 5 giorni a settimana otterrei settimanalmente 13.500 scritture EEPROM. Considerando che Atmel dichiara una durata di 100.000 cicli di scrittura, avrei, nella migliore delle ipotesi un deterioramento della EEPROM in meno di 3 mesi dopo la messa in servizio.

NON è par fare pubblicità (l’ho detto tante volte che, fortunatamente, non occorre), ma sul penultimo numero di “Elettronica In”, 252, marzo 2021, c’è un mio articolo con una soluzione molto semplice e veloce che usa una memoria NVSRAM dal costo irrisorio ed una piccola batteria a bottone. Prova a guardare perché ho sviluppato anche la libreria per l’uso :wink:

Tali memorie NON hanno il problema del numero di scritture della EEPROM anche perché, praticamnete, sono delle SRAM con batteria di backup. :wink:

Guglielmo

Grazie per la dritta, in mancanza di valide alternative lo terrò in considerazione.

Se non l’hai ancora fatto prova a collegare il pin RST al +5V con una resistenza da 180-220 Ohm.

Ciao,
P.

Che possono diventare 50 anni se usi le celle a rotazione :wink:

Il problema è se l’interferenza avviene durante la procedura di aggiornamento.

Ho giusto postato da poco i link alla documentazione Atmel sull’argomento … è possibile trovare il tutto QUI :wink:

Guglielmo

Come suggeritomi, un asso nella manica potrebbe essere quello utilizzare qualche accrocchio software che sfrutta il salvataggio in memoria (NVSRAM oppure scrittura della EEPROM nativa con celle a rotazione) dello stato macchina per un successivo ripristino automatico al momento del riavvio indesiderato.

Tuttavia, vorrei trovare un sistema hardware per risolvere i riavvii di Arduino alla base del problema. Al momento, come suggerito da @pgiagno potrei provare le seguenti cose:

  • collegamento dei pin liberi a GND con resistenza 180-220ohm e definiti come INPUT
  • collegamento del pin RST al +5V sempre con resistenza 180-220ohm

Un'altra idea che mi è balenata in testa potrebbe essere quella di collegare uno smorzatore (snubber RC) in parallelo ad ogni avvolgimento del motore asincrono 48Vac, per un totale di 3 snubber.

Che ne pensate?

O anche in parallelo ai contatti del contattore, non so bene in trifase dove sia meglio (se sul carico o sui contatti).

Piuttosto questo, ok l’isolamento ottico, che comunque non è garanzia di isolamento da disturbi a radiofrequenza che possono passare lo stesso (l’ optoisolatore è come un piccolo condensatore), ma poi lato 5V i collegamenti come sono? Lunghi / corti / vicini ad altri fili / diretti sugli ingressi del micro o con interposte resistenze di disaccoppiamento?

Collegamenti corti, senza resistenze di disaccoppiamento.
Considera che le due schede (arduino e fotoaccoppiatore) si trovano a 5 centimetri l’una dall’altra.

Aggiornamento:
Ho provato quanto suggeritomi dal punto di vista hardware (portare i pin liberi a GND e stabilizzare il pin di reset) senza però ottenere alcun miglioramento.

Ho successivamente provveduto ad installare un filtro antidisturbo posto in parallelo al motore asincrono (sulle 3 fasi in uscita dal contattore), ed in questo modo il problema si è risolto.
Ecco lo schema del filtro antidisturbo, se ne trovano in commercio già pronti, ma è possibile realizzarlo in autonomia applicando 3 snubber in configurazione stella

Conclusione:
Il disturbo veniva generato dal contattore in fase di aggancio/sgancio andando a perturbare l'alimentatore 5v.
Probabilmente un altro stratagemma per risolvere il problema sarebbe stato quello di filtrare il segnale di alimentazione con un filtro LC in prossimità del microcontrollore.

Chiarimenti aggiuntivi:
Lo scopo di Arduino UNO non è quello di essere utilizzato in ambito commerciale/industriale, non solo perchè non rispetta tutte quante le certificazioni, ma anche perchè, nel suo formato "as is" , è tecnicamente sprovvisto di filtri sull'alimentazione/optoisolatori/schermature/snubber, che andrebbero quindi aggiunte a parte. Il cuore di Arduino UNO è un ATmega328p, i cui "scopi" vanno ben oltre all'ambito prototipale/hobbistico, tanto che, questo microcontrollore, viene già installato in molte applicazioni commerciali ed industriali.

Stai confondendo una scheda realizzata attorno ad una MCU con l'MCU stessa ...

... ci mancherebbe altro che il ATmega328P non sia usato in ambito civile/industriale, era una delle MCU di punta di Atmel ed ancora ampiamente usata su un'infinità di prodotti ... è la scheda Arduino UNO (MEGA, Nano, ecc.) nuda e cruda che NON è certificata per quel tipo di applicazioni, ma, se ad esempio prendi i moduli sviluppati da SferaLabs in Italia, basati proprio su Arduino (ma con un bel po' di elettronica in più attorno), sono tutti più che certificati !

Guglielmo

No no Guglielmo, non sto confondendo nulla.
Abbiamo detto entrambi la stessa cosa.

:+1: :+1: :+1:

Guglielmo