Attuatori in parallelo su diversi pin: se uno salta, tutto si blocca

Edit:
Il problema è stato riformulato in questo thread nella reply del 5 gennaio 2019 / 16:35 italiane


Ciao, ringrazio chi mi aiuterà a risolvere questo problema.

Ho realizzato ultimamente due circuiti di questo tipo in foto. Entrambi però a 12V. Uno con 16 elettrovalvole; un'altro con 4 motori DC (in due copie).

In entrambi i casi è successo che una delle uscite "saltasse", ovvero il TIP non desse più corrente al motore. Questo fatto inficiava tutto il funzionamento della macchina: anche gli altri motori smettevano di funzionare.

Una volta che il motore problematico veniva disconnesso, tutto tornava alla normalità (ovviamente tranne il motore suddetto).

Ho provato (nel caso delle 16 elettrovalvole) a sostituire: resistenza, diodo, TIP. Niente da fare. Ho dovuto ricreare quella parte di circuito da zero e aggiungerla al circuito originale.

Mi chiedo se è un problema comune visto che mi è capitato due volte su tre delle macchine di questo tipo che ho realizzato.

Purtroppo non ho sottomano le macchine...una è a New York e la potrebbero riparare a distanza, ne hanno due copie e una funziona ancora, l'altra si è fermata dopo tre mesi circa.

Grazie per chi interverrà nella discussione :slight_smile:

Come mai hai usato i TIP e non i Mosfet?

Ciao,
P.

touchmysound:
...
Ho provato (nel caso delle 16 elettrovalvole) a sostituire: resistenza, diodo, TIP. Niente da fare. Ho dovuto ricreare quella parte di circuito da zero e aggiungerla al circuito originale.
...

Hai controllato se il TIP era in corto o aperto? E in che stato era il diodo?

Ciao,
P.

Qui qualcosa non è chiaro, mi spiego:
come fai a sapere che UN motore smette di funzionare se tu stesso dici che smettono di funzioanre TUTTI? quando smettono di funzionare tutti come fai a sapere quello che ha causato il problema? li scolleghi uno a uno?
e poi non mi è chiaro, se il transitor fosse in cto il motore andrebbe sempre, ma non è questo il caso
se invece fosse interrotto non andrebbe il motore, ma non cambierebbe nulla a scollegarlo
inoltre tu dici di aver cambiato tutto, e non aver avuto risultati, solo rifacendo ex novo hai risolto
non è che hai bruciato una pista dello stampato?
spiega bene passo a passo cosa succede e cosa hai fatto

pgiagno:
Come mai hai usato i TIP e non i Mosfet?

Ciao,
P.

Credo di aver chiesto a qualcuno più esperto di me. Il rating era di molto sopra il voltaggio e l'amperaggio in question, quindi mi son fidato. Forse la frequenza di lavoro è troppo alta per un TIP? Ricordo di aver avuto questa discussione, forse su FB, prima di capire cosa comprare.
Forse la frequenza di lavoro PWM è troppo alta! Possibile?

pgiagno:
Hai controllato se il TIP era in corto o aperto? E in che stato era il diodo?

Ciao,
P.

Non ho controllato il TIP, ma l'ho cambiato direttamente visto che gli altri componenti sembravano OK.

Standardoil:
Qui qualcosa non è chiaro, mi spiego:
come fai a sapere che UN motore smette di funzionare se tu stesso dici che smettono di funzioanre TUTTI? quando smettono di funzionare tutti come fai a sapere quello che ha causato il problema? li scolleghi uno a uno?
e poi non mi è chiaro, se il transitor fosse in cto il motore andrebbe sempre, ma non è questo il caso
se invece fosse interrotto non andrebbe il motore, ma non cambierebbe nulla a scollegarlo
inoltre tu dici di aver cambiato tutto, e non aver avuto risultati, solo rifacendo ex novo hai risolto
non è che hai bruciato una pista dello stampato?
spiega bene passo a passo cosa succede e cosa hai fatto

È UN motore che non funziona perché testando era l'unico che dava risultati sballati mentre tutto era fermo. Ora non ricordo esattamente quali fossero i valori.

Mi pare che in effetti una elettrovalvola rimanesse sempre aperta, nel progetto di un mese fa. Ma nel caso dei 4 DC motors credo tutto fosse spento (non ho visto io, parlo per sentito dire perché il lavoro l'ho installato tre mesi fa in USA e poi son ritornato).

Non è uno stampato ma una projectboard, ricordo che le connessioni in stagno+cavi fossero tutte a posto nel progetto 16 elettrovalvole, presumo sia la stessa cosa anche per quest'ultimo coi DC motors.

Avevo rifatto ex novo solo una parte del ciruito, ovvero resistenza+TIP+diodo, connettendo poi a alimentazione, pin arduino e motore.

Grazie a tutti per ora.

Non ha senso parlare di problemi che avevi tempo fa e che non hai piú il hardware per riprodurre il problema.

Sei sicuro chenon era un problema di alimentazione, che l' alimentatore andasse in protezione termica o di sovvracorrente?

Ciao Uwe

uwefed:
Non ha senso parlare di problemi che avevi tempo fa e che non hai piú il hardware per riprodurre il problema.

Sei sicuro chenon era un problema di alimentazione, che l' alimentatore andasse in protezione termica o di sovvracorrente?

Ciao Uwe

Ciao
Il problema c'è ancora, l'hardware è a new york e stanno funzionando tre motori su quattro.
Sono sicuro che non è un problema di corrente/alimentazione (ha funzionato per tre mesi di fila, 12 ore al giorno con un timer, la copia esatta dell'installazione sta funzionando ancora bene).

UPDATE:
Sono risalito a quale transistor/mosfet ho usato ed è un IRL520 TO-220 N-ch 100V 10A, forse questo il problema? Mi pare sia molto più alto il valore di V e A rispetto a quello che il circuito utilizza. Köp IRL520N till rätt pris @ Electrokit

I mosfet che usi sono montati su un'aletta di raffreddamento? Puoi descriverla o fare una foto? Sai se riscaldano durante il funzionamento?

Ciao,
P.

pgiagno:
I mosfet che usi sono montati su un'aletta di raffreddamento? Puoi descriverla o fare una foto? Sai se riscaldano durante il funzionamento?

Ciao,
P.

Ciao, no avevo provato a controllare e non si riscaldano, anche perchè i motori non arrivano mai al massimo, e lavorano per meno di un quarto del tempo.

Ho però cambiato la frequenza del PWM fino al massimo, per evitare l'effetto di risonanza udibile. Potrebbe essere questo ciò che fa saltare il mosfet? strano perchè credo che me li abbiano cosigliati proprio perchè tenevano le frequenze alte.

Grazie

Scusa ma ci sono parecchie cose che non mi tornano. E dipendono dall'imprecisione sull'esposizione dei fatti.

Innanzi tutto tu fai vedere uno schema con 4 TIP e dici che hai una realizzazione con 4 motori (dici più avanti DC) e DUE realizzazioni con 16 elettrovavlvole (24V DC). Nello stesso post dici che il TIP non dava più corrente al motore e gli altri tre si fermavano. Poi sconnettevi il "motore problematico" e tutto tornava a funzionare. Sconnettevi il motore dal TIP? Sconnettevi il TIP dall'Arduino? Le tensioni di comando Arduino -> TIP arrivavano lo stesso? Non è dato sapere.

Poi passi alle elettrovalvole, che non dici che problema avevano, ma si suppone uno analogo? se n'è rotta una e le altre 15 hanno smesso di funzionare?. A questo punto SENZA controllare quale elemento era rotto, e se i comandi arrivavavo dai pin Arduino, hai cambiato tutto e buonanotte, incrociando le dita per il prossimo guasto.

Poi dici che non erano TIP (cioè transistor) ma IRL520 (mosfet) e dobbiamo supporre che lo schema iniziale sia ancora valido, con le resistenze da 1kOhm in gate.

Dulcis in fundo: dici che usi il PWM, ed è ovvio che lo usi SOLO per i motori, ma già questo implica programmi differenti, e usi i pin 2, 4, 7 e 8, ma nello schema ci sono 4 elettrovalvole. Poi dici che hai modificato la frequenza del PWM. Allora si suppone che tu non abbia usato le istruzioni analogWrite dell'IDE, che AGISCONO SOLO SUI PIN 3, 5, 6, 9, 10, o 11, ma che abbia fatto qualcos'altro. Ma cosa?

Le ricerca guasti è una tecnica complessa e agisce su UN SOLO elemento per volta. Se tu non hai neppure sottomano l'apparato, temo che la riparazione per procura sia molto MOLTO difficile. Mi spiace.

Ciao,
P.

l'almentazione di arduino è in comune con il resto degli apparati?... Potresti aumentare il valore delle resistenze alla base dei tranasistor fino a 10kOhm... e poi ci sono resistenze di pull-up e pull-down sugli eventuali pin che rimangono?? perchè immangino che tu abbia altro collegato insieme. Magari input??

Hai il codice da farci vedere?

Ciao a tutti,

scusate se ho aspettato finora a rispondere.

La mostra dove si trovava il mio lavoro è terminata e ho ricevuto ora i due esemplari del dispositivo, uno ancora funzionante e uno col problema che descrivevo, che è apparso dopo tre mesi circa di funzionamento per 12 ore al giorno.

Come dicevo qualche mese fa, uno dei quattro motori è stato disconnesso (disconnettendo il Pin - il numero 6 - che va alla resistenza) perché quando il pin è connesso la scheda Arduino si blocca lampeggiando sul LED L.
Ho anche fatto il video che potete trovare qua: https://youtu.be/lGmt82W66zs
Prima di riconnettere il Pin I tre motori che sono attaccati funzionano normalmente.
Non so se è una questione di reset continuo della scheda e non so da cosa può essere causato.
Ora avendo tra le mani l’oggetto posso probabilmente fare i test che mi suggerirete.

Per rispondere a chi mi chiedeva che modello era il mosfet o transistor: confermo che è un IRL 520
Invece le resistenze sono da 10Kohm, film.

Dispiace per la confusione con le elettrovalvole, dimentichiamocene per ora e concentriamoci solo su questi quattro motori.

Lo schema di base è sempre valido (tranne come detto i Mosfet, i 12V invece di 24V, e i motori DC invece dei solenoidi). Clicca qui per lo schema.
I 4 pin usati per comandare i motori sono in realtà 5, 6, 9, 10 come si evince dal codice e dal video.

Il codice:

const int motorPin1 = 5;
const int motorPin2 = 6;
const int motorPin3 = 9;
const int motorPin4 = 10;
const int mult = 60;
const int BaseIntens = 21; //(random a 4 --> max BaseIntens should be 21)

void setup() {

  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);

  setPwmFrequency(5, 1);
  setPwmFrequency(6, 1);
  setPwmFrequency(9, 1);
  setPwmFrequency(10, 1);
}

void loop() {
  int phrase = random(7);
  int pinChoice = random(4);
  int chosenPin = 0;
  unsigned int randomDel = random(1000 * mult);

  if (pinChoice == 0) {
    chosenPin = motorPin1;
  }
  else if (pinChoice == 1) {
    chosenPin = motorPin2;
  }
  else if (pinChoice == 2) {
    chosenPin = motorPin3;
  }
  else if (pinChoice == 3) {
    chosenPin = motorPin4;
  }


  if (phrase == 0) {
    down(chosenPin);
  }
  else if (phrase == 1) {
    up(chosenPin);
  }
  else if (phrase == 2) {
    updown(chosenPin);
  }
  else if (phrase == 3) {
    downup(chosenPin);
  }
  else if (phrase == 4) {
    delay(randomDel);
  }
  else if (phrase == 5) {
    steady(chosenPin);
  }
  else if (phrase == 6) {
    keepUp(chosenPin);
  }

}

void up(int motorPin) {
  int frame = random(70 * mult) + 25 * mult;
  int maxIntens = random(4) + BaseIntens;
  for (int intensity = 1; intensity < maxIntens; intensity++) {

    analogWrite(motorPin, intensity * 10);
    delay(frame);
    analogWrite(motorPin, 0);
    delay(frame);
  }
}

void down(int motorPin) {
  int frame = random(70 * mult) + 25 * mult;
  int maxIntens = random(4) + BaseIntens;
  for (int intensity = maxIntens; intensity > 1; intensity--) {

    analogWrite(motorPin, intensity * 10);
    delay(frame);
    analogWrite(motorPin, 0);
    delay(frame);
  }
}

void keepUp(int motorPin) {
  int frame = random(50 * mult) + 25 * mult;
  int maxIntens = random(4) + BaseIntens-1;
  int times = random(12)+1;
  
  for (int count = 0; count < times; count++) {

    analogWrite(motorPin, maxIntens * 10);
    delay(frame);
    analogWrite(motorPin, 0);
    delay(frame);
  }
}

void steady(int motorPin) {
  int frame = random(50 * mult) + 50 * mult;
  int maxIntens = random(4) + BaseIntens;
  analogWrite(motorPin, maxIntens*10);
  delay(frame);
  analogWrite(motorPin, 0);
}

void updown(int motorPin) {
  int frame = random(70 * mult) + 25 * mult;
  int maxIntens = random(4) + BaseIntens;
  for (int intensity = 1; intensity < maxIntens; intensity++) {

    analogWrite(motorPin, intensity * 10);
    delay(frame);
    analogWrite(motorPin, 0);
    delay(frame);
  }
  for (int intensity = maxIntens; intensity > 1; intensity--) {

    analogWrite(motorPin, intensity * 10);
    delay(frame);
    analogWrite(motorPin, 0);
    delay(frame);
  }
}

void downup(int motorPin) {
  int frame = random(70 * mult) + 25 * mult;
  int maxIntens = random(4) + BaseIntens;
  for (int intensity = maxIntens; intensity > 1; intensity--) {

    analogWrite(motorPin, intensity * 10);
    delay(frame);
    analogWrite(motorPin, 0);
    delay(frame);
  }
  for (int intensity = 0; intensity < maxIntens; intensity++) {

    analogWrite(motorPin, intensity * 10);
    delay(frame);
    analogWrite(motorPin, 0);
    delay(frame);
  }
}

void setPwmFrequency(int pin, int divisor) {
  byte mode;
  if (pin == 5 || pin == 6 || pin == 9 || pin == 10) {
    switch (divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 64: mode = 0x03; break;
      case 256: mode = 0x04; break;
      case 1024: mode = 0x05; break;
      default: return;
    }
    if (pin == 5 || pin == 6) {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    } else {
      TCCR1B = TCCR1B & 0b11111000 | mode;
    }
  } else if (pin == 3 || pin == 11) {
    switch (divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 32: mode = 0x03; break;
      case 64: mode = 0x04; break;
      case 128: mode = 0x05; break;
      case 256: mode = 0x06; break;
      case 1024: mode = 0x07; break;
      default: return;
    }
    TCCR2B = TCCR2B & 0b11111000 | mode;
  }
}

Ringrazio chi avrà voglia di aiutarmi a risolvere il problema.

Non è che un motore viene bloccato, perciò diventa quasi un cortocircuito e tira giù la tensione di alimentazione?

anch'io voto per un corto o forte sovraccarico (motore in stallo) , ma darebbe problema di reset continui solo se
l'alimentazione fosse comune E il motore fosse attivato immediatamente all'avvio, dal codice sembra che non sia così.
o in cto l'uscita 6 dll'arduino.......
Ok, per lo OP, hai a disposizione due macchine, una fa il difetto e una no
puoi scambiare tra di loro gli arduini, e vedere cosa succede?
o meglio, puoi sostituire ai motori dei led e vedere come si comportano?
ho visto che sei un artista, quindi non so che conoscenze tecniche hai, non ti offendere, ma devo fare domande banali
se ti diciamo di cambiare il codice, con uno più semplice... si fa? o no?
programmi, sai usare lo IDE?
la soluzione più semplica sarebbe sostituire i motori con led alimentati dal 5V di arduino,
poi se i led vanno si prova "a manella" a dare segnale ai singoli mosfet e vedere se il motore gira....
poi mettere un programma banale banale, del tipo accendi-spegni per un secondo un motre alla volta, e vedere come va e quando si incatasta
i motori sono liberi di girare all'infinito o hanno corsa limitata? se limitata cosa li ferma? c'è limitazione di corrente, di coppia? hanno un riduttore?

Grazie per le risposte.

Nell'ordine proverò questi test, visti i vostri consigli:

  1. controllare che il motore non sia bloccato (se riesco ad aprire la sfera) oppure alimentare il motore separatamente ad arduino spento.

  2. Cambiare programma utilizzando un altro pin nel caso il pin 6 sia andato

  3. Forse controllare il motore da un altro arduino, ricostruendo la parte del circuito che serve su una breadboard...

Alcuni test son forse più difficili da fre essendo il circuito sotto colla a caldo e vari altri ammennicoli, ma comincio dai test più semplici.

Per Standardoil: sì programmo, il codice l'avevo scritto io pian piano e ho fatto anche il circuito.
Posso anche tentare col tester per vedere se c'è qualcosa che non va.

(Ritornando alle elettrovalvole, e questa è una informazione supplementare, la stessa cosa mi era successa su un altro lavoro dalla struttira simile, con 16 elettrovalvole, ma ora non ricordo se usavo gli stessi mosfet

Vi dirò poi che succede!
Grazie e alla prossima

Ecco già fatti alcuni test.

Long story short, a un certo punto ho smontato l'alloggiamento del motore e l'ho girato a mano. Ho sentito come un click. Dopo di questo il motore gira normalmente controllato dal circuito, ma con un rumore abbastanza forte e in maniera non "smooth" durante la frenata o l'avvio (quando la velocità è bassa), come se dentro ci fosse qualcosa che lo fa grattare un po'.

Qui un video dove lo confronto con il motore a fianco che gira bene.

Potrei provare a vedere se riesco a cambiare il motore.
Ho cercato di far lasciare abbastanza spiragli per l'aria, non so se il problema sia stato il surriscaldamento. Gli altri 7 motori non hanno dato segni di cedimento per 6 mesi di mostra, 12 ore al giorno (quidni più di 1000 ore di servizio), con migliaia di persone che visitavano e utilizzavano l'installazione. Quindi mi chiedo se sia un difetto di design del mio lavoro, o semplicemente una casualità che quel motore si sia autoeliminato.

Grazie,
A.

Forse ci sono finiti dentro polvere, peli di maglioni e abbigliamento in genere (ricordo che, da giovane, dopo feste a casa con molti amici trovavo ciuffi per terra qua e là...), patatine, popcorn... :slight_smile:

Haha se riesco oggi lo smonto e vedremo. Ma non riesco a capire come un motore bloccato (se questo è veramente il problema) possa inficiare tutto il circuito...c'è una spiegazione?

Un motore bloccato è quasi un cortocircuito. In realtà ha una resistenza pari a quella del filo degli avvolgimenti. Quando è in rotazione, invece, la forza controelettromotrice (f.c.e.m.) che si genera limita la corrente assorbita.