- Messaggi: 174
- Ringraziamenti ricevuti 2
pilotare 2 servo con tre timer del pic18f4550
Pinna ha scritto: scusa, ma se tu dovessi usare 16 servi useresti un pic che ha 17 timers? a parte che non esistono, ma ti pare logico? io, come tutti, uso due timer, uno per i 20 ms e l'altro per regolare l'ampiezza del segnale pwm tramite adc... ogni canale adc lo scansiono uno per volta effettuando uno shift....
Sono d'accordo con te però resta il fatto che io devo pilotare 4 servo e ti posso garantire che con il tuo programma " ampliato " il sistema non funziona i servi "tremano " si muovono in ritardo vanno in definitiva per fatti loro o non si muovono.
Se non mi credi perchè non fai una prova e ti rendi conto ( naturalmente quando hai tempo).
Ho anche provato a cambiare il TAd a 20 ma con scarsi risultati.
A questo punto potrai dirmi che la strada di più timer da me scelta è sbagliata e devo inventarmi qualcos'altro.
Resta il fatto che con due timer e un servo funziona benissimo.
P.S l'invito è stato gradito.
Massimo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- mpeino
- Autore della discussione
- Elite Member
il quarzo è di 20MHzMauro Laurenti ha scritto: Salve Massimo,
potresti specificare il quarzo di cui fai uso?
Dal momento che parli di tempi degli impulsi presumo che tu abbia fatto delle misure con un oscilloscopio.
Hai modo di postare degli screen shot?
non lo mai fatto posso allegare un video come file???
Dovendo gestire più servi e tempi ridotti organizzerei il programma in maniera diversa, in particolare facendo uso delle state machine, ovvero eseguo il codice nel main e negli interrupt (ISR) cambio solo il valore di stato.
A seconda dello stato della state machine nel main eseguo un codice diverso.
Scusa mauro non sono laureto in informatica ma solo un autodidatta mi potresti dire in poche parole che sono le state machine ( poi approfondisco da solo)
Personalmente userei un timer per una base dei tempi che mi permetta di ottenere 20ms.
Magari con tempi da 10ms, e un secondo timer per orchestrare i servo.
se tutti mi dite cosi avete provato a collegare piu servo senza problemi che si muovono in maniera precisa e non in ritardo o per fatti loro e questo significa o il mio circuito ha dei problemi e al piu presto controllerò
Ma se ho ragione l'idea di utilizzare un timer a servo piu uno per i 20ms concettualmente è sbagliata??
Quali sono le specifiche del tuo sistema?
Quanti servi?
Quanti potenziometri? (mi aspetto 1:1 con servi.)
uso un pic18f4550 4 servo 4 potenziometri
Massimo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- mpeino
- Autore della discussione
- Elite Member
- Messaggi: 174
- Ringraziamenti ricevuti 2
Marcello
p.s. chiamami quando vuoi, potessi fare le prove indieme a te le avrei già fatte
Chi vola vale, chi vale vola, chi non vola è un vile
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pinna
- Moderator
- Messaggi: 1010
- Ringraziamenti ricevuti 107
l'utilizzo di un timer per servo non è errato ma usi più risorse del necessario.
Se dovessi avere solo due Servo potrebbe andare bene ed effettivamente il codice potrebbe essere più semplice da scrivere e leggere.
Se i servo aumentano però ti imbatti presto contro il limite dei timer che potrebbero non essere essere sufficienti (numericamente).
Per pochi Servo potresti usare un solo timer. Il modo con cui lo gestisci potrebbe essere diverso, ma dal momento che devi gestire più Servo è in generale più complicato e un buon esercizio per la mente.
Per State machine (macchina a stati) intendo che le varie operazioni vengono a dipendere da una variabile di stato.
Per esempio per accendere una lampada lo potresti fare direttamente all'interno dell'ISR (Interrupt Service Routine) oppure cambi il valore ad una variabile e assegni il valore 1 (per acceso...o altro).
Nel main controlli in un loop la variabile di stato e quando la trovi ad 1 accendi la luce.
In questo modo le ISR sono molto corte visto che cambi solo il valore della variabile di stato.
Quando il timer continua a contare, nel main, hai tutto il tempo di gestire il nuovo stato.
In questo modo si riesce a snellire il software e in generale gestire più eventi.
Nel libro XC8 Step By Step che trovi nella sezione Libri, trovi diversi esempi che fanno uso di una variabile di stato.
Gli esempi sono negli ultimi capitoli visto che si richiede un poco di dimestichezza.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
Marcello
Chi vola vale, chi vale vola, chi non vola è un vile
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pinna
- Moderator
- Messaggi: 1010
- Ringraziamenti ricevuti 107
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.