Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Come comandare un servo digitale in C

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Come comandare un servo digitale in C

Messaggioda Foto UtenteStephano » 21 ago 2010, 2:44

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.
Avatar utente
Foto UtenteStephano
-2 2
 
Messaggi: 10
Iscritto il: 28 lug 2008, 23:07

0
voti

[2] Re: Come comandare un servo digitale in C

Messaggioda Foto UtentePaolino » 22 ago 2010, 15:06

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.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[3] Re: Come comandare un servo digitale in C

Messaggioda Foto UtenteStephano » 22 ago 2010, 17:19

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
Avatar utente
Foto UtenteStephano
-2 2
 
Messaggi: 10
Iscritto il: 28 lug 2008, 23:07

0
voti

[4] Re: Come comandare un servo digitale in C

Messaggioda Foto UtentePaolino » 25 ago 2010, 8:03

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.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[5] Re: Come comandare un servo digitale in C

Messaggioda Foto UtenteStephano » 26 ago 2010, 15:59

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'è!!!
Avatar utente
Foto UtenteStephano
-2 2
 
Messaggi: 10
Iscritto il: 28 lug 2008, 23:07

0
voti

[6] Re: Come comandare un servo digitale in C

Messaggioda Foto UtenteTardoFreak » 26 ago 2010, 16:03

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)
{
}
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[7] Re: Come comandare un servo digitale in C

Messaggioda Foto UtenteStephano » 26 ago 2010, 16:15

Stessa situazione purtroppo!!!
Avatar utente
Foto UtenteStephano
-2 2
 
Messaggi: 10
Iscritto il: 28 lug 2008, 23:07

0
voti

[8] Re: Come comandare un servo digitale in C

Messaggioda Foto UtenteTardoFreak » 26 ago 2010, 16:15

Cosa misuri con l' oscilloscopio?
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[9] Re: Come comandare un servo digitale in C

Messaggioda Foto UtenteStephano » 26 ago 2010, 16:20

Misuro il pin RC2 dove esce il segnale
Avatar utente
Foto UtenteStephano
-2 2
 
Messaggi: 10
Iscritto il: 28 lug 2008, 23:07

0
voti

[10] Re: Come comandare un servo digitale in C

Messaggioda Foto UtenteTardoFreak » 26 ago 2010, 16:32

Si ok, :mrgreen: 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?
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti