Reset MCP23017 con carichi induttivi

Buongiorno a tutti,
da qualche giorno sto sbattendo la testa con un piccolo progetto che prevede l'impiego del famoso MCP23017 e di alcuni relè.
Purtroppo devo ammettere che il controllo avviene per mezzo di un Raspberry Zero W ma, in virtù delle maggiori competenze che noto su questo forum e del fatto che il problema che ho è esterno al controllore, ho pensato di postare qui.

L'obiettivo del progetto è il controllo del riscaldamento della mia abitazione tramite il comando di alcuni contatti e di 2 relè passo-passo e l'acquisizione di alcuni input (termostati, riscontri valvole ecc).

Lo schema prevede:

  • Raspberry Zero W alimentato tramite alimentatore dedicato (il classico a spina con USB micro B)
  • 2 MCP23017 connessi su bus I2C al Raspberry (che già è dotato di pull-up da 1,8kOhm sia su SDA sia su SCL) ed alimentati a 3,3Vdc tramite convertitore DC-DC (LM2596, il classico setup cinese da 1€). Un MCP è dedicato alle uscite, verso una scheda relè mentre l'altro MCP è dedicato agli ingressi. Su entrambi gli MCP, il pin di reset è solidamente connesso a 3,3V.
  • Una scheda relè di quelle comunemente reperibili sui vari market (quindi tipo active-low). Questa scheda prende alimentazione "di controllo" dal 5V fornito da raspberry (sia Vcc sia GND da raspberry) ed alimentazione "di potenza" da alimentatore 220Vac-5Vdc esterno (quindi jumper rimosso).

Una precisazione sul giro delle alimentazioni: attualmente ho ponticellato GND tra raspberry e l'uscita del convertitore DC-DC e ne risulta quindi che Raspberry, MCP e scheda relè (parte di controllo) hanno lo stesso riferimento di GND. In precedenza, infatti, senza questo ponticello il bus I2C dava errore e non trovavo i due MCP.
Risulta invece separato il GND dell'alimentatore 220Vac-5Vdc che va quindi solo alla parte "di potenza" della scheda relè (anche se, di fatto, va anche sull'ingresso del convertitore DC-DC).

Il problema si presenta azionando carichi induttivi con la scheda relè, ovvero ventole o le bobine dei relè passo-passo: in queste occasioni gli MCP si resettano perdendo la configurazione ed occorre riavviare lo script python di configurazione. Con altri carichi (lampadine ad esempio) non si presentano problemi.

Ecco uno schema di massima:

Di seguito l'elenco dei tentativi già fatti:

  • riduzione lunghezza cavi I2C: anche se già prima non superavano i 20cm, ho guadagnato altri 5cm circa
  • twistatura cavi
  • installazione condensatori di decoupling: purtroppo sto aspettando condensatori da 47uF e quelli che avevo in casa sono piccolini (0,047uF) quindi non posso dire di aver terminato questo punto
  • allontanamento cavi da relè a carichi

Altri tentativi:

  • dato che non mi fido molto del convertitore DC-DC (i condensatori presenti sono la metà di quanto previsto dagli schemi dell'LM2596), vorrei comprare un alimentatore 220Vac-3,3Vdc da mettere in parallelo sul 220Vac a quello che già ho e che fornisce il 5V. Questo eliminerebbe il problema del GND sopra descritto e renderebbe più stabile l'alimentazione agli MCP.
  • pull-up su pin di reset degli MCP: serve davvero, anche in assenza di circuiti connessi a questo pin?

Avete qualche altra idea per risolvere il problema e garantire affidabilità al sistema? Notate qualche errore che posso correggere?

Grazie a tutti!

Buonasera, mi spiace ma, per correttezza e rispetto verso altri utenti a cui ho chiuso thread in passato, debbo chiudere anche questo ... REGOLAMENTO, punto 16.11 ... come tu stesso hai riconosciuto qui Arduino e la sua programmazione NON c'entrano nulla, per cui ... :confused:

Guglielmo