PIC, stepper PWM driver e quintali di disturbi

Salve, ho costruito un azionamento per motori stepper tramite un PIC16F628 e una coppia di LMD18245

formatting link
prendendo spunto da n tutorial di VincenzoV
formatting link
e dal datasheet dell'LMD18245.

Il PIC pilota i driver con un po' di linee di I/O, e riceve dei comandi tramite una comunicazione seriale fatta in casa: ad ogni fronte del segnale di clock si scatena un interrupt (tramite l'ingresso RB0), che poi va a leggere il valore del dato presente su RA4 e mette tutto dentro un registro. Il tutto funziona, ma non sempre: casualmente, senza nessuna precisa regola, il PIC sembra non ricevere bene il comando, oppure si impalla e smette di reagire e di pilotare i driver dello stepper.

PIC e LMD18245 sono piazzati sullo stesso PCB (circa 3x4cm), con aree di massa separate (anche se internamente l'LMD18245 tester alla mano introduce tra le masse digitali e di potenza una resistenza di circa 8 ohm) che si ricollegano in un unico punto sulla carcassa metallica del contenitore. I cavi che vanno al motore stepper sono schermati (schermo collegato alla massa di potenza sul PCB) e lo stesso per i cavi che portano l'alimentazione al driver. L'alimentazione ed i dati per il PIC arrivano con un flat cable a 10 fili non schermato lungo circa 5 cm.

Qualcuno ha qualche idea per mitigare il problema?

PS: Sto pensando di rifare tutto tenendo i driver separati su di un PCB, e il microcontrollore su di un altro PCB, tenendo sempre le masse separate. Può aiutare?

A presto, Eugenio. mail: enavacchia@INVECE_CHE_LIBERO_PUNTO_IT_METTI_VIRGILIO_PUNTO_IT

Reply to
Eugenio Navacchia
Loading thread data ...

Può succedere che un disturbo elettro-magnetico faccia scattare l'interrupt e così il pic si pianta in attesa del dato che invece non gli viene inviato. Quindi è necessario prevedere un time-out, che inizia a contare quando scatta l'interrupt e dopo un certo tempo se il dato non è stato ricevuto fa terminare cmq la isr dell'int0. Potrebbe anche succedere che un disturbo corrompa i dati e quindi per essere sicuro che quello che invii è quello che il pic riceve, devi implementare un protocollo di controllo e correzione (o ritrasmissione)

Ciao

Reply to
Ice

"Ice" ha scritto nel messaggio news:xVGEb.15542$ snipped-for-privacy@news1.tin.it...

l'interrupt

inviato.

fa

essere

un

Puoi provare con un nucleo in ferrite sul cavo di alimentazione dello step motor

Ciao

Reply to
Paladini Gianluca

"Ice" ha scritto nel messaggio news:xVGEb.15542$ snipped-for-privacy@news1.tin.it...

l'interrupt

inviato.

fa

essere

un

visto che usi una 628, perchè non usi la sua usart?

Reply to
Iw7

Le alimentazioni sono già separate, addirittura con due trasformatori distinti. Uno da pochi VA per la parte digitale, più un 7805 e varie capacità di disaccoppiamento. L'altro da una cinquantina di VA per i driver, e giusto un paio di condensatori da 330 µF l'uno. Le masse sono separate, e si ricollegano in un unico punto sul telaio. La cosa che non mi convince è che internamente l'LMD18245 non tiene isolate le masse digitali e di potenza, ma provando con un tester ci sono circa

8-10 ohm fra di loro... Se lascio le masse separate e le richiudo solo in un punto, allora occhio e croce mi sembra garantito il loop, visto che comunque qualcosa (ma non tutto) si richiude dentro all'LMD18245...

Boh...

Reply to
Eugenio Navacchia

Eh, magari... Il fatto è che:

1-il circuito è nato per il 16F84, e solo a stampato pronto sono passato al 16f628, per motivi di risparmio! 2-chi manda i comandi al 16F628 non ha una usart, e quindi non posso approfittarne :-/

Sto comunque cercando di fare un protocollo a rilevazione di errore, così almeno il PIC si accorge del messaggio sbagliato e chiede la ritrasmissione; speriamo migliori.

Reply to
Eugenio Navacchia

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.