Newsgroup: it.hobby.elettronica.digitale
Titolo: Secondo voi.....

Un consiglio:
devo pilotare un servomotore con una precisione estrema (devo muovere un
puntatore laser).
Ho trovato persone che lo hanno fatto con un sistema Linux Real Time, per
aver al massimo 0.5 msec di latenza.
Sbaglio a credere che una precisione simile possa essere ottenuta con un
semplice PIC 16F84 temporizzato con un buon quarzo?
Grazie a chiunque
--
----------------------
Walter Lucetti
----------------------

 con un semplice PIC 16F84 temporizzato con un buon quarzo?
Per quanto riguarda la precisione, un pic a soli 4MHz di clock i 500 uS fa
in tempo a leggerli, rileggerli, andarsi a fare un caffe' e tornare a
rileggerli... che ancora gli avanza del tempo;) Visto che un'istruzione dura
1 o 2 uS, a software si possono generare impulsi a passi di pochi uS... un
po' di piu' se si mette in mezzo la gestione di un contatore.
Pero' mi sfugge una cosa, sara' per la mia ignoranza su linux, il tempo di
latenza di cui parli cosa indica? Se e' il ritardo massimo a cui puo' essere
soggetta una scrittura su periferica (
p.es
. parallela) mi sembra impossibile
poter comandare decentemente un servo (che richiede impulsi precisissimi tra
1 e 2 mS).
ciao
Claudio F


Infatti ho sbagliato a scrivere, la latenza è di 50 microsec.......
Cmq grazie per la risposta.... la cosa mi semplifica di mooooolto la TESI
:)))
Ciao
Walt

 Infatti ho sbagliato a scrivere, la latenza è di 50 microsec.......
Se non hai il vincolo di un PIC a 4MHz considera anche un clock di 20 MHz...
le istruzioni durano 0,2..0,4uS e avresti quindi una precisione 5 volte
maggiore senza nessuna variazione di circuito... certo forse qualche
contatore andrebbe fatto a 16 bit invece che a 8 il che comporta una certa
quantita' di operazioni in piu'... anche questo e' da valutare.
ciao
Claudio F


A questo punto č d'obbligo una digressione sul linguaggio da usare.
Per non tribolare piů di tanto propenderei per un compilatore C, credo he
con 20 Mhz di clock non avrei problemi.... cosa dici?
Cmq grazie per l'interesse :-)
Ciao
Walt

 con 20 Mhz di clock non avrei problemi.... cosa dici?
Se vuoi avere temporizzazioni precise, dell'ordine del microsecondo,
e senza jitter, cioe' perfettamente stabili, devi assolutamente usare
l'assembler e contare i cicli di clock manualmente, inserendo
dei nop quando servono per tarare esattamente i ritardi.
Con i PIC e' abbastanza agevole farlo, visto che le istruzioni hanno
tutte un tempo costante. In ogni caso questo modo di programmare
lo puoi adottare esclusivamente con i micro, mentre non puoi farlo
con un pc che non ti permettera' mai di ottenere temporizzazioni
cosi' precise e stabili.
Se ti bastano precisioni inferiori allora puoi usare un compilatore
e usare l'interrupt per fare le temporizzazioni, ma in questo
caso avrai sempre una certa instabilita' nei tempi generati e
probabilmente risultati simili potresti averli anche con un pc.

 di ottenere temporizzazioni cosi' precise e stabili.
A meno di non usare il DOS puro... un bel CLI e via,
come ai tempi dello ZX Spectrum;)
...avevo fatto cosi' per campionare l'audio quando la soundblaster a 8 bit
era ancora uno sfizio per facoltosi:PPP
Claudio F

 come ai tempi dello ZX Spectrum;)
No, nemmeno disabilitando l'interrupt riesci a eliminare
il jitter. Resta sempre il DMA che interferisce sui tempi
di esecuzione, a meno di non disabilitare anche quello,
ma non so che cosa succeda al rinfresco della RAM,
io avevo provato in epoca ante pentium e avevo si' dei cicli
perfettamente stabili, ma dopo pochi decimi di secondo
andava tutto in crash. Non so se oggi il rinfresco sia fatto in
un modo diverso dal DMA. E poi ci sono tempi diversi di
esecuzione a seconda se il programma e' gia' in cache o in
RAM.
Praticamente e' impossibile ottenere temporizzazioni
stabili via software su macchine cosi' complesse, a parte
la difficolta' di calcolare i cici di clock esatti di un programma.

 
Mah... semmai il problema č l'eventuale controllo da implementare tra i
segnali di pilotaggio motore.
in 50 microsec puoi fare:
50/0.4=125 istruz @ 10 MHz
50/0.2=250 istruz @ 20 MHz
Anche implementando un semplice controllo pid a raggiungere 100-200
 istruzioni ci vuole poco, occhio quando vai a prendere il caffč...
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG