Pagina 1 di 2
Come comandare un servo digitale in C

Inviato:
21 ago 2010, 2:44
da Stephano
Salve,
come da oggetto, data la vostra esperienza, sapete indicarmi quali sono i metodi che usate per comandare un servo digitale con un PIC, ovviamente mi interessa il codice in C.
Come generate i 20ms del segnale con un quarzo da 8MHz e come create gli impulsi di centro (1.5ms), sinistra (0,9ms) e destra (2,1ms)
Grazie.
Re: Come comandare un servo digitale in C

Inviato:
22 ago 2010, 15:06
da Paolino
Ciao Stephano.
Tu scrivi:
Stephano ha scritto:... sapete indicarmi quali sono i metodi che usate per ....
e anche:
Stephano ha scritto:... ovviamente mi interessa il codice in C.
Quindi, vuoi i metodi o il codice? Io inizio a suggerirti un metodo, il codice vedrai che lo ricavi in modo banale dai "metodi".
Un'idea è quella di usare i timer, magari sotto interrupt. I timer vanno configurati in modo da avere le temporizzazioni da te richieste. Per capire come funzionano i timer puoi dare un'occhiata a
questo articolo, sperando ti possa essere utile!
Iniziamo con questo aspetto, poi se vuoi possiamo approfondire.
Ciao.
Paolo.
Re: Come comandare un servo digitale in C

Inviato:
22 ago 2010, 17:19
da Stephano
Grazie della risposta, stavo proprio leggendo un articolo sul tuo sito picexperience.
Vedo che molti utilizzano la modulazione PWM, sto provando con questa ma ci sono dei conti che non mi tornano, tipo:
il mio sistema easypic5 ha un clock di 8MHz, PIC16F877A e comando un servo Hitec dove 1,5 sta al centro, 0,9 dx e 2,1 sx.
Non capisco come posso generare una frequenza di 50Hz e quindi un periodo 20ms avendo un oscillatore di 8MHz, sono costretto ad abbassarla come dice il libro a 500KHz ottenendo un PR2 di 155.
Quello che mi domando è: "che significa abbassare a 500KHz e come?"
Grazie
Re: Come comandare un servo digitale in C

Inviato:
25 ago 2010, 8:03
da Paolino
Stephano ha scritto:Quello che mi domando è: "che significa abbassare a 500KHz e come?"
Credo proprio sia necessario utilizzare un oscillatore da 500 kHz: devi, sostanzialmente, togliere il quarzo da 8 MHz e mettere un oscillaore da 550 kHz. Questo, ovviamente, se vuoi utilizzare il PWM. In alternativa puoi provare con i timer. Però 8 MHz mi sa che è ancora alto, come valore.
Hai provato a fare quatro conti coi timer?
Ciao.
Paolo.
Re: Come comandare un servo digitale in C

Inviato:
26 ago 2010, 15:59
da Stephano
Ho messo un PIC 16f887, quarzo a 360KHz e poi ho provato sia con i registri che con le funzioni della libreria:
void main()
{
TRISC = 0 ;
PORTC = 0 ;
Pwm1_Init(50);
Pwm1_Start();
while(1)
{
Pwm1_Set_Duty(27); //Equivalente a 10,5%, ossia 2.1mS
delay_ms(4);
}
}
Il servo sta fermo, accenna un movimento soltanto quando spengo l'alimentatore che da tensione al servo.
Premetto che il servo (ne ho provati due identici) è hitec digitale e si comanda con impulsi da 0,9ms - 1,5ms - 2,1ms a 50Hz.
Con l'oscilloscopio vedo che la modulazione c'è!!!
Re: Come comandare un servo digitale in C

Inviato:
26 ago 2010, 16:03
da TardoFreak
E no! Nel loop indinito non ci devi mettere niente, senno' tutte le volte ti riprogramma il duty cicle. Prova cosi':
- Codice: Seleziona tutto
PORTC = 0 ;
Pwm1_Init(50);
Pwm1_Set_Duty(27); //Equivalente a 10,5%, ossia 2.1mS
Pwm1_Start();
while(1)
{
}
Re: Come comandare un servo digitale in C

Inviato:
26 ago 2010, 16:15
da Stephano
Stessa situazione purtroppo!!!
Re: Come comandare un servo digitale in C

Inviato:
26 ago 2010, 16:15
da TardoFreak
Cosa misuri con l' oscilloscopio?
Re: Come comandare un servo digitale in C

Inviato:
26 ago 2010, 16:20
da Stephano
Misuro il pin RC2 dove esce il segnale
Re: Come comandare un servo digitale in C

Inviato:
26 ago 2010, 16:32
da TardoFreak
Si ok,

che cosa trovi nel pin di uscita visualizzando il segnale con l' ausilio di un oscilloscopio? Quanto e' il periodo del segnale in ms? Quanto vale i Ton in ms?
Hai un link dove trovare le specifiche del segnale richiesto dal servo?