Vai al contenuto
PLC Forum


Raspberry, MCP23017 e reset


silvern18

Messaggi consigliati

Buongiorno a tutti!

Innanzitutto vi ringrazio perchè, in passato, ho avuto modo di spulciare spesso il forum da utente visitatore trovandolo molto utile.

Mi trovo, ora, a chiedervi gentilmente un consiglio.

 

Ho realizzato un sistema di controllo remoto del riscaldamento di casa.

l'impianto di riscaldamento è, per sommi capi, composto da:

  • caldaia
  • 3 pompe, una per piano (Grundfos UMP3)
  • 3 valvole di piano
  • ventilconvettori per ogni ambiente (Aermec con comandi PXA-E)

 

La filosofia di funzionamento dell'impianto prevede:

  • accensione caldaia
  • accensione gruppo pompe
  • attivazione di almeno un ventilconvettore tramite apertura di un contatto previsto sul comando, denominato contatto CE. Tale contatto, se chiuso, inibisce l'avviamento del ventilconvettore. Si tratta di un contatto in tensione (220Vac).
  • Dopo poco, la valvola di piano si apre ed il relativo finecorsa attiva la pompa del piano tramite un relè. Basta un singolo ambiente attivo per aprire la valvola di piano

 

Il sistema di comando realizzato si basa su Raspberry che, tramite espansore di porte MCP23017, comanda due schede relè così divise:

  • Scheda relè 2 canali:
    • accensione/spegnimento caldaia tramite un relè passo-passo interposto tra scheda relè e caldaia
    • accensione/spegnimento gruppo pompe tramite un relè passo-passo interposto tra scheda relè e gruppo pompe
  • Scheda relè 8 canali:
    • attivazione/disattivazione comandi ventilconvettori

 

Sono inoltre presenti alcuni input al sistema:

  • riscontro relè passo-passo caldaia e relè passo-passo gruppo pompe, utilizzando una seconda coppia di scambi sui relè passo-passo
  • riscontro 3 valvole di piano, utilizzando una seconda coppia di scambi sui relè che comandano le singole pompe
  • riscontro termostati su mandata pompe
  • misure di temperatura

 

Tutti gli input sono a 5Vdc e vengono prima portati su schede optoisolatrici in cui avviene anche la conversione 5Vdc-3,3Vdc e successivamente inviati ad un secondo MCP23017 dedicato agli input.

 

Le alimentazioni sono così distribuite:

  • raspberry alimentato con alimentatore proprietario direttamente da rete 220Vac
  • MCP23017, schede optoisolatrici ed elettronica schede relè alimentate a 3,3V tramite DC-DC converter connesso ad alimentatore 5Vdc
  • circuiti di input e sezione di "potenza" delle schede relè alimentate a 5Vdc tramite alimentatore dedicato direttamente da rete 220Vac

 

Ora le note dolenti...

Sto combattendo da tempo con numerosi disturbi che non riesco purtroppo a caratterizzare per assenza di strumentazione idonea.

La fenomenologia è sempre la stessa: rilevo il reset dei due MCP23017 e conseguente impossibilità di proseguire con l'utilizzo del sistema.

Quando non si arriva a tanto, rilevo comunque variazioni dei valori logici sui pin dell'MCP23017 dedicato agli input nonostante sia impostato con pull-up attivo.

 

Questi fenomeni si presentavano dapprima già comandando i relè passo-passo di caldaia e pompe.

 

Successivamente, ho rivisto drasticamente il sistema operando le seguenti migliorie:

  • sostituzione schede relè elettromeccanici con SSR, alimentate ora solo a 3,3Vdc
  • sostituzione DC-DC converter con alimentatore 220Vac-3,3Vdc dedicato direttamente da rete
  • rivisitazione schedine MCP23017 con seguenti modifiche:
    • installazione condensatore direttamente tra pin Vdd e Vss
    • installazione resistenze di pull-up sul bus I2C (sia SDA sia SCL, eventualmente disinseribili tramite jumper)
    • collegamento pin reset a Vdd tramite resistenza di pull-up e verso raspberry per eventuale reset remoto
  • predisposizione schede di distribuzione 3,3Vdc e 5Vdc con inserimento condensatori
  • accorciamento dei percorsi cavi
  • separazione tra cavi segnale e cavi potenza
  • GND comune all'interno del sistema

 

Tramite anche la modifica del software di comando, ovvero ritardando le operazioni consecutive sui relè passo-passo, ora non riscontro più problemi durante il comando di caldaia e gruppo pompe.

 

Purtroppo, ho ancora dei reset quando una delle pompe si spegne.

Lo spegnimento avviene alla chiusura della relativa valvola di piano e, quindi, viene diseccitato il relè che alimenta la singola pompa.

Questi relè, che sono 3, sono dei classici Finder serie 55 per barra DIN.

 

Domanda:

  • potrei risolvere con dei varistori installati tra i contatti dei 3 relè che comandano le pompe?
  • è possibile sostituire i relè Finder con SSR e, nel caso, ne otterrei beneficio
  • come posso altrimenti proteggere il sistema da questi reset?
  • penso che i disturbi comportino il calo del livello di tensione sui pin di reset degli MCP23017 comportandone il riavvio. Nonostante siano alimentati a 3,3V (anche per evitare convertitori logici 3,3V-5V su bus I2C), posso collegare i pin di reset a 5Vdc?
  • vedete qualcosa di errato che stia esponendo il sistema a questi disturbi?

 

 

Vi ringrazio per la pazienza che, se siete arrivati fino a qui, è stata immensa!

Link al commento
Condividi su altri siti


12 ore fa, silvern18 ha scritto:

Sto combattendo da tempo con numerosi disturbi

 

Tipico di quando si usa raspberry o arduino per questo tipo di controlli.

L'immunità ECM di queste schede è nulla, quindi qualsiasi spiffero è in grado di mandare a farfalle il software.

usando arduino le cose migliorano un poco perchè, essendo dotato di watch dog, è possiible farlo reinizializzare se entro un x tempo il main loop non ha completato il ciclo.

 

Con Raspberry questa pratica diventa molto più pesante perchè il tempo di reinizializzazione è, in genere, molto più lungo.

 

Fatta questa premessa ti elenco alcuni metodi di minimizzazione di questi problemi, tratti dalla mia esperienza diretta cin queste problematiche (io ho fatto quache cosa di simile con arduino).

 

Per prima cosa l'alimentazione della scheda.

Si passa dall'alternata 230V ad una continua di valore decisamente più alto dei 5V richiesti dalla scheda.

Prima dell'alimentatore si usa un buon filtro di rete connesso ad una linea di terra efficiente.

Poi metti un paio di celle pigreco C-L-C in serie all'limentazione e, nel caso di raspberry, un successivo regolatore serie per portare la tensione a 5V.

Questa tensione deve alimentare esclusivamente la scheda raspberry o arduino o, al più, periferiche che non hanno alcuna connessione con il campo.

Tutti gli ingressi e le uscite devone essere disaccoppiate galvanicamente in modo che non ci sia alcuna connessione fisica tra la scheda ed il campo.

In questo modo si è frapposto uno schermo efficiente ed efficace per tutti i disturbi condotti dalla rete e dalle connessioni di I/O.

 

Rimangono i disturbi irradiati che, in ambiente domestico, in genere non sono ne frequenti ne di ampiezza elevata.

 

Io ho realizzato un controllo simile al tuo, usando però arduino e connessioni WiFi con protocollo LoRa. Funziona da alcuni anni senza aver mai accusato intoppi.

In questi anni ho solo risocntrato un inconveniente che, sebbene non infici il funzionamento del controllo, è un po' antipatico.

In almeno 2 occasioni un disturbo di rete mi ha mandato fuori controllo il visualizzatore alfa numerico delcontrollore master. Purtroppo l'unico modo per resettare il visualizzatore è togliere l'alimentazione allo stesso. Durante la fase di visualizzazione "assente" il sistema ha continuato a lavorare regolarmente; questo fatto indica che le misure adottate sono state efficaci. Nelle misure è compreso anche l'eventuale reset automatico dato dal WDT.

 

Ovviamente il WDT si può adottare in processi dove un'interruzione del controllo per qualche centinaio di ms non influisce sul processo. Se si trattasse, ad esempio, di un controllo di posizione potrebbe essere un evento catastrofico.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Buongiorno,

ringrazio innanzitutto per la risposta, non scontata sia per contenuti sia perchè il primo post era effettivamente lungo...

 

Rispondo per punti così da rendere più agevole la lettura:

  • fortunatamente, i disturbi sperimentati hanno interessato sempre e solo gli integrati MCP23017 e mai Raspberry. La riprova deriva dal fatto che, nel momento in cui sperimento il problema, l'MCP23017 si trova con i registri nella configurazione di default post avviamento ovvero tutti i pin impostati come input e senza pull-up o interrupt configurati.
  • ho già previsto un watchdog software che è in grado di resettare l'MCP23017 tramite raspberry in caso di malfunzionamento. Purtroppo, tale espediente crea dei loop del tipo:
    • eseguo un'azione che comportare disturbi tali da causare il malfunzionamento
    • rilevo che c'è stato un malfunzionamento
    • resetto MCP23017 e riconfiguro nuovamente facendo tornare funzionante il sistema
    • se voglio eseguire nuovamente l'azione, rischio di ricadere nella medesima situazione
  • Argomento disturbi condotti:
    • tutte le uscite sono azionate tramite schede relè SSR che dovrebbero già garantire disaccoppiamento
    • tutti gli ingressi sono prima portati a schede contenenti optoisolatori che svolgono anche la conversione DC-DC tra 5V e 3,3V. Le schede sono di questo tipo.
    • i due alimentatori (220Vac->5Vdc e 220Vac->3,3Vdc) effettivamente non hanno a monte filtri di rete. Ha qualche buon consiglio su questi filtri per qualcosa di funzionale e con prezzo commisurato?
    • Celle pigreco C-L-C: andrebbero poste sull'uscita degli alimentatori verso le schede? Visto che l'alimentatore 220Vac->5Vdc di fatto viene usato solo per sostenere la tensione sugli input e non fornisce alimentazione a nessuna scheda (nè raspberry nè integrati), è necessario anche qui? Serve inserire una cella anche sull'alimentazione del raspberry? Anche in questo caso, ha qualche buon consiglio per qualche prodotto commerciale?
    • Regolatore di tensione per raspberry: avendo verificato che il raspberry rimane perfettamente funzionante anche se alimentato con il suo alimentatore standard fornito, è necessario il regolatore per proteggere il resto del sistema? Il raspberry è connesso al sistema come segue:
      • bus I2C tramite SDA e SCL ai due MCP23017
      • pin di interrupt da MCP23017 dedicato ad input
      • pin per sensori di temperatura 1-wire DS18B20
  • Sul fronte dei disturbi irradiati, invece, ho maggiori dubbi:
    • in alcuni casi ho sperimentato che il reset degli integrati si ha anche scollegando tutti gli ingressi/uscite del sistema e lasciando solo le alimentazioni connesse al 220Vac. Aprendo infatti i coltellini dei morsetti Weidmuller sezionabili mi sono scollegato dal campo con l'esclusione proprio dell'alimentazione 220Vac ai due alimentatori ed al raspberry. I casi sarebbero due:
      • o si tratta ancora di disturbi condotti tramite alimentazione
      • o si tratta di disturbi irradiati
    • qualche beneficio si è avuto installando una paratia metallica in lamierino sull'ingresso cavi al box che contiene il sistema. Il box è di legno ed è posto a circa 20cm dal centralino elettrico all'interno del quale sono presenti i relè passo-passo, i relè bistabili ed i sezionatori per le alimentazioni. Il gruppo pompe è installato al di sotto del centralino a circa 50cm di distanza.
    • nel centralino sono appunto presenti alcuni componenti che potrebbero causare disturbi irradiati come i relè passo-passo ed i relè bistabili. Spesso il reset si presenta in fase di apertura del relè (quindi sgancio del passo-passo o apertura del bistabile) e quindi in presenza teoricamente di scintillio sui contatti.

 

Grazie ancora

Saluti

 

Modificato: da silvern18
adeguato link scheda
Link al commento
Condividi su altri siti

Buongiorno,

aggiungo alcune considerazioni che nel frattempo mi sono venute in mente:

  • gli alimentatori AC-DC impiegati sono di tipo switching.
    • Quello 3,3Vdc, di marca Meanwell, è serie RS-15 di cui qui il datasheet. Vedo che ha un filtro EMI in ingresso. Possiamo ritenerlo adeguato o conviene comunque filtrare a monte?
    • L'alimentatore 5Vdc è di marca cinese (al momento non ricordo quale) ma costruttivamente analogo. Sicuramente di qualità inferiore (il condensatore in uscita è di gran lunga di capacità inferiore) ma, come indicato, non alimenta schede elettroniche.
  • Nell'ottica, come suggerito, di garantire separazione galvanica tra campo e sistema, per la sezione di alimentazione mi viene il dubbio: possiamo considerare tali alimentatori adeguati a garantire questa separazione?

 

Grazie!

 

Link al commento
Condividi su altri siti

2 ore fa, silvern18 ha scritto:

tutte le uscite sono azionate tramite schede relè SSR che dovrebbero già garantire disaccoppiamento

 

Al massimo ti garantisce un disaccoppiamento statico se l'alimentazione lato comando è completamente separata dall'alimentazione alto carico. Però non garantisce un disaccoppiamento dinamico. Cerco di chiarire. i disturbi sul lato carico si accoppiano sul lato comando, succede.

Anche conn i relè elettromeccanci c'è disaccoppiamento galvanico tra bobina e contatti, però è meglio pilotarli tramite opto accoppiatore con alimentazione della bobina completamente separata da quella della CPU.

 

2 ore fa, silvern18 ha scritto:

fortunatamente, i disturbi sperimentati hanno interessato sempre e solo gli integrati MCP23017 e mai Raspberry. La riprova deriva dal fatto che, nel momento in cui sperimento il problema, l'MCP23017 si trova con i registri nella configurazione di default post avviamento ovvero tutti i pin impostati come input e senza pull-up o interrupt configurati.

 

Per esperienza personale ci sono 2 possiiblità per questo guaio:

  • Disturbi sul bus i2C tali da azzerare la configurazione.
  • CPU con software che va per i fatti suoi ed invio di comandi a casaggio che riportano il tutto alla configurazione di default.
2 ore fa, silvern18 ha scritto:

Ha qualche buon consiglio su questi filtri per qualcosa di funzionale e con prezzo commisurato?

 

Io uso filtri Shaffner, mi hanno sempre garantito un ottimo risultato.

 

2 ore fa, silvern18 ha scritto:

Celle pigreco C-L-C: andrebbero poste sull'uscita degli alimentatori verso le schede?

 

Si, con particolare riguardo all'alimentazione della CPU ed a qualsiasi alimentazione non sia galvanicamente separata dalla CPU.

 

Io ti ho descritto come ho realizzato le alimentazioni del mio sistema. L'unico dispositvo di campo non galvanicamente separato è il DS18B20, ma si tratta di un dispositivo di campo per modo di dire perchè è montato su un supporto nelle immediate vicinaze della CPU e misura la temperatura ambiente nel punto più freddo della casa, dovo è istallato il controllore. Poi vado alle periferiche di attuazione in LoRa.

Il sistema funziona egregiamente da qualche anno. Proprio in questi giorni sto implementando una modifica per facilitare l'aggiornamento dell'orologio.

Link al commento
Condividi su altri siti

Buongiorno,

ringrazio nuovamente per la risposta e mi scuso per il ritardo.

 

  • per le uscite, anche se realizzate tramite relè a stato solito, risulta necessario l'impiego di un optoisolatore? che vantaggio darebbe rispetto all'uso del solo SSR?
  • gli alimentatori switching sono tali da garantire disaccoppiamento?
  • un filtro EMI sull'alimentazione come lo Schaffner FN2010B-10-06 (qui il link) è idoneo?
  • come celle C-L-C, invece, ha dei suggerimenti?

Grazie ancora

Saluti

Link al commento
Condividi su altri siti

46 minuti fa, silvern18 ha scritto:

per le uscite, anche se realizzate tramite relè a stato solito, risulta necessario l'impiego di un optoisolatore? che vantaggio darebbe rispetto all'uso del solo SSR?

 

Mi ricito

Il 31/8/2022 alle 16:26 , Livio Orsini ha scritto:

Al massimo ti garantisce un disaccoppiamento statico se l'alimentazione lato comando è completamente separata dall'alimentazione alto carico. Però non garantisce un disaccoppiamento dinamico. Cerco di chiarire. i disturbi sul lato carico si accoppiano sul lato comando, succede.

Anche conn i relè elettromeccanci c'è disaccoppiamento galvanico tra bobina e contatti, però è meglio pilotarli tramite opto accoppiatore con alimentazione della bobina completamente separata da quella della CPU.

 

47 minuti fa, silvern18 ha scritto:

gli alimentatori switching sono tali da garantire disaccoppiamento?

 

si se espressamente dichiarato.

Per avere il disaccoppiamento si deve usare un circuito che preveda un traformatore di isolamento. Quasi tutti gli switching diretti da rete, anche quelli si inseriscono direttamente nella presa, sono dotati di trasformatore d'isolamento. Un alimentatore che renda, ad esempio, 10W a 9V necessita di un trasformatore veramente piccolo e di peso insignificante.

 

 

52 minuti fa, silvern18 ha scritto:

un filtro EMI sull'alimentazione come lo Schaffner FN2010B-10-06 (qui il link) è idoneo?

 

E anche molto sovradimensionato per corrente. E sicuramente un'ottimo filtro. Per funzionare bene, però è indispensabile che sia connesso ad un'ottima linea di terra.

 

53 minuti fa, silvern18 ha scritto:

come celle C-L-C, invece, ha dei suggerimenti?

 

Io solitamente, per aplicazioni di questo tipo, uso 0,33µF ceramico multilayer come ingresso, 220µHy, e 2000µF elettrolitico in uscita. I valori non sono critici, importante è che l'indutore ammetta una corrente maggiore della massima prevista come assorbimento del circuito a valle.

Link al commento
Condividi su altri siti

Buongiorno,

come alimentatori utilizzo un Meanwell (qui datasheet) e uno cinese, di fatto una copia. Ne deduco che siano dotati di trasformatore di isolamento...

 

Per le celle CLC, invece, se dovessi trovare qualche componente sfuso in cantina mi metto ad assemblarla. In caso contrario, qualcosa come i filtri Murata (qui datasheet) potrebbero andare?

 

Un'ultima informazione circa l'uso di optoisolatori tra le uscite di MCP23017 e i relè SSR.

Nel caso dovessi usare una scheda come questa, come dovrei collegarlo?

Mi spiego: le singole uscite dell'MCP andrebbero connesse sui pin di ingresso mettendo ground in comune tra loro e collegando tale ground a quello dell'MCP stesso.

In uscita, invece, andrei a collegare i pint di uscita della scheda ai pin di ingresso della scheda relè, anche in questo caso con ground comune tra loro. Ma quale ground in questo caso?

 

Oggi, le due schede relè SSR sono alimentate a 5Vdc tramite l'uscita 5Vdc di raspberry.

 

Grazie

Saluti

 

Link al commento
Condividi su altri siti

12 ore fa, silvern18 ha scritto:

Per le celle CLC, invece, se dovessi trovare qualche componente sfuso in cantina mi metto ad assemblarla. In caso contrario, qualcosa come i filtri Murata (qui datasheet) potrebbero andare?

 

Murata ha sempre fatto ottimi prodotti. Non ho mai usato filtri di questo tipo, però credo possa dare ottimi risultati.

 

12 ore fa, silvern18 ha scritto:

In uscita, invece, andrei a collegare i pint di uscita della scheda ai pin di ingresso della scheda relè, anche in questo caso con ground comune tra loro. Ma quale ground in questo caso?

 

Cominciamo a distinguere lo zero volt dal graund (terra).

La terra è quella che colleghi all'ingresso del filtro di rete.

Gli zero volt sono gli zeri delle alimentazioni, quelli che alcuni chiamano -V.

Avrai un alimentatore che alimente sia raspberry che le schede con MCP23017; lo zero di questo alimentatore è comune a raspberry, agli MCP23017 ed all'ingresso della schede optoisolatori.

Poi avrai un altro alimentatore che alimenta i comandi degli SSR, o le bobine dei relè, e l'uscita delle schede optoisolatori.

Lo zero volt di questo alimentatore sarà il comune dell'uscita degli opto e dei comandi degli SSR.

I 2 alimentatori devono essere galvanicamente isolati da rete.

In questo modo hai disaccoppiato tutte le uscite CPU da quello che è il campo.

Se hai segnali che provengono dal campo devi separali nel medesimo modo.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...