Progetti

   

Tutorial

   

Servizi

   

Sponsor  

   
Benvenuto, Ospite
Nome utente: Password: Ricordami

ARGOMENTO: pilotare 2 servo con tre timer del pic18f4550

pilotare 2 servo con tre timer del pic18f4550 3 Anni 9 Mesi fa #6

  • mpeino
  • Avatar di mpeino
  • Offline
  • Gold Boarder
  • Messaggi: 174
  • Ringraziamenti ricevuti 2
  • Karma: 0
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
Ultima modifica: 3 Anni 9 Mesi fa da mpeino.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

pilotare 2 servo con tre timer del pic18f4550 3 Anni 9 Mesi fa #7

  • mpeino
  • Avatar di mpeino
  • Offline
  • Gold Boarder
  • Messaggi: 174
  • Ringraziamenti ricevuti 2
  • Karma: 0
Mauro Laurenti ha scritto:
Salve Massimo,

potresti specificare il quarzo di cui fai uso?
il quarzo è di 20MHz
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
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

pilotare 2 servo con tre timer del pic18f4550 3 Anni 9 Mesi fa #8

  • Pinna
  • Avatar di Pinna
  • Offline
  • Moderatore
  • Messaggi: 1007
  • Ringraziamenti ricevuti 107
  • Karma: 8
sei stato precettato, insieme alla tua famiglia, per una bella pinsata accompagnata da un bel boccale di birra :) :) :) a parte questo, fammi liberare da qualche piccolo impegno (diciamo pure tanti piccoli impegni che mi occuperanno tempo nei prossimi giorni) e ti vengo immediatamente incontro..... appena posso voglio fare una prova anche con l'atmel, almeno simulando con quattro potenziometri e vedendo che succede.... poi ti farò sapere

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
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

pilotare 2 servo con tre timer del pic18f4550 3 Anni 9 Mesi fa #9

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Offline
  • Moderatore
  • Messaggi: 4677
  • Ringraziamenti ricevuti 561
  • Karma: 52
Salve Massimo,

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
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

pilotare 2 servo con tre timer del pic18f4550 3 Anni 9 Mesi fa #10

  • Pinna
  • Avatar di Pinna
  • Offline
  • Moderatore
  • Messaggi: 1007
  • Ringraziamenti ricevuti 107
  • Karma: 8
Massimo, per quanto ho capito velatamente il pensiero di Mauro, tradotto significa che se con un timer piloti bene due servi, con due potresti pilotarne quattro. Oppure, questa è un'idea che mi è venuta in mente, invece di fare la scansione di ogni adc sequenzialmente usando lo shift, potresti avviare e chiudere la lettura per ogni canale, uno dietro l'altro..... mi spiego meglio: avvii la lettura sul canale 1, dopo che hai letto chiudi l'adc..... avvii la lettura sul canale 2, dopo che hai letto chiudi l'adc.... e così via..... io non ho mai provato sperimentalmente queste due situazioni diverse e di conseguenza non conosco le eventuali differenze tra i due sistemi, ma forse le cose potrebbero andarti meglio....

Marcello
Chi vola vale, chi vale vola, chi non vola è un vile
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Powered by Forum Kunena
   
© LaurTec 2006-2015