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.
Come comandare un servo digitale in C
Moderatore:
Paolino
11 messaggi
• Pagina 1 di 2 • 1, 2
0
voti
0
voti
Ciao Stephano.
Tu scrivi:
e anche:
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.
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
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
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
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
0
voti
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
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
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'è!!!
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'è!!!
0
voti
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.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
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.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
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?
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.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
11 messaggi
• Pagina 1 di 2 • 1, 2
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)