Jump to content
PLC Forum


Sign in to follow this  
Edge

Strano Comportamento Pic

Recommended Posts

Edge

Buongiorno a tutti,

volevo porvi una domanda su un problema che mi sta capitando. Ho realizzato una semplicissima scheda con a bordo un PIC18F1220 che realizza una banalissima logica di comando di una coppia di elettrovalvole su una piccola macchina semovente ambito vigneti. In genere non uso mai i micro in tale tipologia di macchine perchè piene di rumori e operanti in ambienti poco felici. Preferisco realizzare la logica via hardware. Ad ogni modo, questa volta, considerata la logica della macchina veramente banale ho optato per l'uso del micro.

Riporto il codice dell'applicazione (scritto in linguaggio C) :



#define PREMUTO 1

#define OFF 0


int var=0; // variabile di appoggio

int cont=0; // variabile di appoggio


void main()

{

ADCON1=0xFF;

TRISB=0x07;  // RB0,RB1, RB2 = INPUT  - da RB3 a RB7 = OUTPUT

TRISB=0x07;

PORTB=0;

PORTB=0;

var=0;

cont=0;

PORTB.F6=0;

PORTB.F6=0;

PORTB.F7=0;

PORTB.F7=0;

while(1)

{


/*---------------------------------------------------*/

  //LOGICA 1

/* Premo il pulsante su RB2 e la macchina è abilitata in quanto segnala la

presenza di uomo a bordo. L'uscita va ad agire su relè.

Il rilascio del medesimo pulsante di uomo presente è ritardato di circa

mezzo secondo per evitare false segnalazioni di uomo non presente*/



if(PORTB.F2==PREMUTO)

{

   Delay_ms(100);

   {

    if(PORTB.F2==PREMUTO)

    {

	 PORTB.F7=1;

	 PORTB.F7=1;

	 var=1;

	 var=1;

    }

   }

  }


if((PORTB.F2==OFF)&&(var==1))

{

   Delay_ms(100);

   {

    if((PORTB.F2==OFF)&&(var==1))

    {

    Delay_ms(500);

	 PORTB.F7=0;

	 PORTB.F7=0;

	 var=0;

	 var=0;

    }

   }

  }



/*-----------------------------------------------------------*/

  //LOGICA 2

/* Premo il pulsante su RB0 e dopo un ritardo di circa 2s vado ad azionare

l'elettrovalvola.

Agendo nuovamente sul medesimo pulsante si disattiva l'elettrovalvola*/



if((PORTB.F0==OFF)&&(cont==0))

{

   Delay_ms(800);

    if((PORTB.F0==OFF)&&(cont==0))

    {

	 Delay_ms(1000);

	    PORTB.F6=1;

	    PORTB.F6=1;

	    cont=1;

	    cont=1;

	    while(PORTB.F0==OFF){};

	    Delay_ms(50);

	 }

}


if((PORTB.F0==OFF)&&(cont==1))

{

   Delay_ms(100);

    if((PORTB.F0==OFF)&&(cont==1))

	   {

	    PORTB.F6=0;

	    PORTB.F6=0;

	    cont=0;

	    cont=0;

	    while(PORTB.F0==OFF){};

	    Delay_ms(50);

	   }

}

}

}

Come si può vedere ci sono due funzioni banalissime. Durante il debug del firmware non ho riscontrato nessun problema, e non ho nessun problema quando realizzo il circuito (di cui allego lo schema) e lo provo in laboratorio. Quando vado però a montare la scheda sulla macchina capita (purtroppo casualmente, non è sistematica la cosa) che il sistema si blocca, non funziona più nulla e per poter riutillizare la macchina, o si spegne e si riaccende l'impianto girando la chiave, oppure l'operatore deve dare una accelerata alla macchina e dopo circa 2 secondi riparte tutta la logica. E' come se improvvisamente ci fosse un buco di tensione nell'impianto che mi manda in palla il micro. Ovviamente ho provato a misurare se si verificassero dei buchi di tensione ma non ho riscontrato nulla. Come si vede la macchina deve solo comandare due elettrovalvole in tutto, non dovrebbero verificarsi comunque dei buchi così significativi.

Ho provato anche mettendo sull'alimentazione un condensatore con diodo di blocco. Pensavo di aver risolto ma alla fine si è verificata comunque l'anomalia.

Non ho ancora provato perchè lo utilizzo raramente, ma magari sfruttare il watchdog timer puntato a 2,3 secondi potrebbe essere una idea.

Se avete qualche suggerimento in merito è ben accetto.

Edge

Share this post


Link to post
Share on other sites

Livio Orsini

E' un problema HW. Per questo tipo di applicazioni tutti gli I/O da e verso il controllore devono essere disaccoppiati galvanicamente. L'alimentazione deve essere derivata tramite alimentatore PWM con trasformatore, magari seguito da regolatore serie con filtraggio pesante prima del regolatore, non dopo come nel tuo caso.

Il disaccoppiamento, da effettuarsi tramite foto accoppiatori, e la separazione dell'alimentazione tramite trasfo, son necessari per non avere masse in comune evitando la conduzione di distrubi.

Nella logica di funzionamento bisogna anche assolutamente evitare dia vere ingressi normalmente appesi a +Vdd, ma invece devono essere tenuti a 0 tramite resistori di basso valore (<=1k). assolutamente non ci devono essere ingresssi intilizzati lasciati appesi e flottanti, ma devono essere ancorati a 0 V direttamente o conresistori di basso valore.

Il circuito deve essere alloggiato in contenitore metallico ferroso, così da costituire una schermatura magnetica.

Share this post


Link to post
Share on other sites
Edge

Intanto ti ringrazio Livio per la tua risposta.

E' un problema HW. Per questo tipo di applicazioni tutti gli I/O da e verso il controllore devono essere disaccoppiati galvanicamente. L'alimentazione deve essere derivata tramite alimentatore PWM con trasformatore, magari seguito da regolatore serie con filtraggio pesante prima del regolatore, non dopo come nel tuo caso.
Difatti normalmente eseguo sempre questa metodologia, però sono circuiti puramente hardware essendo "hardwerista" e poco "softwerista". Questa volta, vuoi la problematica di spazio che avevo a disposizione e vuoi la banalità della logica da fare, ho pensato bastasse un circuito di questo tipo sopravvalutando la robustezza del micro.
Nella logica di funzionamento bisogna anche assolutamente evitare dia vere ingressi normalmente appesi a +Vdd, ma invece devono essere tenuti a 0 tramite resistori di basso valore (&lt;=1k).
Ok, vada per i pull-down.
assolutamente non ci devono essere ingresssi intilizzati lasciati appesi e flottanti, ma devono essere ancorati a 0 V direttamente o conresistori di basso valore.
Ok. Mi basta porre a zero gli altri ingressi per evitare effetti "antenna" dai pin inutilizzati o devo proprio ancorarli a massa sul PCB? L'unica cosa su cui posso avere problemi è l'utilizzo del trafo di isolamento ma per motivi di spazio (e di costo). Hai qualche sigla in merito sul quale potrei utilizzare per tale applicazioni? Edge Edited by Edge

Share this post


Link to post
Share on other sites
Edge

Forse un DC/DC traco (TMA 1205S) da 1W - 200mA dovrebbe bastare.

Share this post


Link to post
Share on other sites
Livio Orsini
Forse un DC/DC traco (TMA 1205S) da 1W - 200mA dovrebbe bastare.

A me sembra un'ottima soluzione.

ho pensato bastasse un circuito di questo tipo sopravvalutando la robustezza del micro.

Il micro è molto rubusto, infatti non si è ancora rotto. :P

Il problema sono i disturbi! Alimentato a 5 V ha un'immunità teorica di 2 V circa. Avendo elevatissima impedenza d'ingresso basta pochissima energia per far commutare la porta. Non solo, se il disturbo è abbastanza forte può sporcare il program counter ed allora il micro va farfalle, per un po' fa il pazzerellone poi, casualmente ripassa per lo zero del program counter e riparte in modo corretto sino al prossimo disturbone.

Le apparcchiature industriali (serie) vengono sottoposte sempre a test di immunità ai disturbi condotti. La prova minima consiste nel far passare tutti i fili di collegamento da e per il campo, alimentazione compresa, entro le armature di una specie di condensatore. Questo è uno strumento appositamente studiato per questo test. In pratica si generano disturbi pseudo random con ampiezza di 2 kVpp. L'apparato deve funzionare regolarmente per almeno 15' con questi disturbi. Se supera il test è (quasi) certo che non ci saranno problemi sul campo.

In un'applicazione "automotive" i disturbi sono ancora più severi.

Share this post


Link to post
Share on other sites
Edge
Il micro è molto rubusto, infatti non si è ancora rotto

In effetti :P ...

Grazie mille Livio per la delucidazione. Come sempre chiara ed estremamente utile :smile: .

Edge

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...