Problema di disturbi su circuiteria e Arduino

Salve a tutti!

Presento velocemente il progetto e poi il problema.

Progetto:

Sto costruendo una macchina che piega un filo di metallo per fare delle graffette o altre forme.
C'è un motore che si chiama trascinatore e uno che piega il filo che si chiama piegatore.
I due motori sono dotati di encoder incrementali a 360ppr (360 impulsi a giro) per sapere quanto filo prelevare e poi quanto piegarlo.

La parte di potenza è formata da 3 relè dove uno attiva il trascinatore e gli altri due muovono il piegatore (senso orario e antiorario).
Poi c'è un alimentatore switching che alimenta a 24v da 10a i due motori.
I due motori consumano 3.5a ciascuno a 24v in corrente continua.

La parte elettronica di comando è formata da un Arduino nano, display LCD, due integrati CD4040 che sono counter a 12 bits per dividere gli impulsi degli encoders per garantire al MCU di leggere gli tutti gli impulsi nel caso l'esecuzione del codice diventasse troppo lenta, ma con lo svantaggio di avere meno risoluzione dell'encoder,
un CD4013 Flip Flop D duale, collegato come Flip Flop T che inverte la sua uscita quando l'encoder del piegatore giunge sul punto zero, in questo caso esso ha un esatto punto di partenza prima di contare gli impulsi e un ULN2803 che sono un array di 8 transistor Darlington con gli ingressi connessi ad Arduino e le uscite ai 3 relè.

L'alimentazione è di 12v in corrente continua da un alimentatore switching da 2.5a
La 12v alimenta i relè e l'Arduino.
L'Arduino, con il suo regolatore da 5v, alimenta il display LCD e gli integrati CD4040 e CD4013.
Tutta la circuiteria elettronica ha condensatori di bypass da 1uF e 100uF sia sulla 5v e per la 12v.

Problema:

Nonostante la parte di potenza sia isolata dalla parte di comando con due alimentatori separati, quando faccio partire un motore mi va in tilt avvolte il circuito di comando.

I due alimentatori sono collegati alla stessa linea 220v in corrente alternata con fase, neutro e terra.

Togliendo l'alimentazione ai motori e provando la parte di comando, tutto funziona...
I relè scattano e non provocano problemi (l'ULN2803 ha diodi di flyback interni quindi non ci sono disturbi).

Provando a mano a collegare i fili di un motore ai morsetti dell'alimentatore di potenza con il circuito di comando alimentato con il suo alimentatore, tutto va in tilt..

Provando a mettere i diodi di flyback sulla parte di potenza per i motori, il disturbo viene attenuato ma non del tutto... se provo in maniera molto veloce ad accendere e spegnere un motore per un po' di tempo mi fa andare in tilt la parte di comando...

Da tenere in considerazione che con i diodi di flyback sui motori fanno sì che il disturbo si è ridotto almeno del 70%... senza diodi ogni volta che il motore si spegne mi manda in tilt la parte di comando.

Ho provato a invertire la presa della 220v nel caso non avessi collegato la fase con la fase e il neutro con il neutro...

Ho provato a cambiare alimentatore mettendo uno della OMRON di tipo industriale e il disturbo viene attenuato ancora di più ma non del tutto...

Ho sempre mantenuto l'alimentatore cinese da 12v e 2.5a per la parte di comando...
Devo provare a cambiarlo e mettere uno da PC... forse è più filtrato...

Secondo voi è un problema di alimentatori?

Se sì cosa posso fare?
Devo aggiungere qualche componente in più sulla parte di potenza per evitare i picchi di extra tensioni generate dal motore quando si spegne?

Più di isolare non saprei cosa fare...

Adesso faccio lo schema per chi vuole avere ulteriori dettagli...

Grazie a tutti dell'aiuto :frowning:

Ecco lo schema:


Il GND dei due alimentatori è in comune? Dallo schema non è chiaro perché usi lo stesso simbolo.
In caso positivo, prova a tenerli separati: non c'è alcun bisogno che la parte di potenza abbia un riferimento comune con quella di comando visto che usi il contatto di un relè.
Devi fare attenzione anche a come disponi i cavi tenendo separati quelli di comando da quelli di potenza ed evitando di farli "viaggiare" in parallelo.

P.S.
Sei proprio sicuro che sia necessario dividere gli impulsi encoder? 360ppr non mi sembra nulla di che per un microcontrollore "moderno" (ad anche antico a dirla tutta).

Sì... Usando gli interrupt non dovrebbe esserci alcun problema a seguire gli encoder e pilotare qualche relè.

Per i disturbi, prova a mettere un RC serie oltre ai diodi sia sulle bobine dei relè che sui motori:
https://www.google.com/search?q=rcd+snubber
https://www.google.com/search?q=relay+motor+types+of+snubber+circuit

anche i rele sono fonte di disturbo
non vedo sui rele diodo di ricircolo e resistenza e condensatore soppressori di disturbi

meglio ancora isolare i rele con foto accoppiatori
io isolerei anche gli encoder o comunque metterei dei filtri su ck 4040 e 4013

Di sicuro male non fanno, ma sta usando un ULN2803 come driver, quindi in teoria il diodo è già incluso nel driver.
I 4010 ed il 4013 invece io li eliminerei proprio dal circuito: come detto non vedo alcun vantaggio nel dividere gli impulsi (anzi solo svantaggi) e non mi è chiaro perché sia necessario invertire il segnale di zero e non si possa usare cosi come arriva dall'encoder.

Il 4013 serve per garantire che l'MCU riesca a leggere il dato quando cambia quindi solo il fronte di salita o di discesa.

Mi è successo che questo segnale col PLC non veniva letto poiché troppo veloce da beccare precisamente, quindi ho usato questa tecnica per "rallentare" il segnale.

Così qualsiasi MCU o PLC ci colleghi io riuscirò sempre a leggere il punto di zero anche se è super veloce.

I due contatori che fungono da prescaler per i due encoder gli ho usati perché prima usavo un PLC che, anche in questo caso, non era adeguato per leggere segnali così veloci.

Quindi ho fatto un circuitino hardware con questi CD4040 per avere maggiore stabilità nella lettura poiché più lenti...

Lo svantaggio è che ho meno risoluzione ma per quello che deve fare la macchina anche 100 impulsi a giro vanno più che bene...

Ragazzi forse ho risolto... cioè non vedo più che succede nulla, è tutto perfetto!

Ho avuto l'idea di staccare la messa a terra dell'alimentatore della 24v dc che alimenta i motori, da quando l'ho fatto non è più andato in tilt...

Ho provato a mano a far partire i motori a "mitraglia" e tutto va...

Se ricollego il conduttore di protezione tutto va in tilt... uffa... chissà che pasticci fa...

Poi ho scoperto che l'ambiente dove faccio le prove ecc ha una messa a terra di ME*DA! :smiley:

Comunque adesso sulla parte di potenza non c'è nulla... quindi dovrei mettere uno snubber?

O un condensatore da 0.1uF in parallelo al motore?
Più i diodi di flyback?

Funziona anche se non metto nulla ma è probabile che danneggio l'alimentatore?

Il funzionamento di un sistema a microcontrollore è del tutto diverso rispetto a quello di un PLC e quando sviluppi in questo senso, devi mettere da parte le prassi che usi con i PLC e adottare tecniche e algoritmi più adeguati.

In un sistema a microcontrollore tipicamente si fa largo uso di interrupt (ovvero una reazione nell'ordine dei microsecondi ad un input esterno) e di "periferiche" dedicate a compiti specifici.

Ad esempio, tu hai scelto di usare un piccolo Arduino Nano, ma un economicissimo ESP32 ti avrebbe consentito di gestire via hardware fino ad 8 encoder in quadratura usando la periferica integrata Pulse Counter - PCNT ottenendo un posizionamento molto più preciso senza appesantire inutilmente il software.
Parlo di questa MCU perché la conosco bene, ma non è l'unico esempio con supporto per encoder integrato.
Ad ogni modo anche con il "piccolo" Nano, ti assicuro che sia il 4040 che il 4013 sono del tutto ridondanti.

Pratica sconsigliata per ragioni di sicurezza.

Bisognerebbe capire se la terra dell'alimentatore è collegata al negativo (GND) o separata. Se entrambi gli alimentatori hanno la terra collegata al loro negativo, allora di fatto attraverso il collegamento di terra i GND non sarebbero più separati.

sì hai ragione: in uno dei due alimentatori ha il polo negativo era collegato al conduttore di protezione e visto che l'ambiente non ha una buona messa a terra non scarica bene e fa pasticci :frowning:

ho letto un po' del Pulse Counter PCNT... si può usare nell'IDE di Arduino? Non capisco :frowning:

Si certo.
Qualsiasi funzione o struttura già presente nel sistema di sviluppo di Espressif può essere usata anche in Arduino IDE.

Inoltre, c'è anche una libreria Arduino che semplifica l'uso del modulo PCNT per gli encoder in quadratura.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.