Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Pilotaggio Servo Motore SG90

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Pilotaggio Servo Motore SG90

Messaggioda Foto Utentedaniele1996 » 9 set 2020, 3:01

Ciao a tutti, ho la necessità di pilotare un servo motore (per quindi gestire un movimento angolare) purtroppo provando quello che ho trovato in rete non funziona, perché?

Codice: Seleziona tutto

   TCCR1A |= (1 << WGM11);
   TCCR1B |= (1 << WGM12) | (1 << WGM13) | (1 << CS10); //| (1 << CS12);
   TIMSK1 |= (1 << OCIE1A);
   ICR1 = 19999;
.
.
.
while(1){
       if(TCNT1 >= 5000 && (PORTC & (1 << PC3))) PORTC &= ~(1 << PC3);
}

.
.
.

ISR(TIMER1_COMPA_vect){
   PORTC |= (1 << PC3);
}




Il micro è L'atmega324PA e da quello che vedo nel datasheet tutto sembra corretto, ma il servo esegue movimenti non corretti, Dove può essere il problema?
Avatar utente
Foto Utentedaniele1996
580 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1231
Iscritto il: 29 ago 2011, 11:29

0
voti

[2] Re: Pilotaggio Servo Motore SG90

Messaggioda Foto UtenteWALTERmwp » 13 set 2020, 23:29

Non mi pare un'esposizione circostanziata, forse manca qualche informazione.
Ad esempio sapere come alimenti il servomotore, qual è il comportamento che riscontri e quale quello che invece ti aspetti, non sarebbe male.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
23,5k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6935
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[3] Re: Pilotaggio Servo Motore SG90

Messaggioda Foto Utentedaniele1996 » 19 set 2020, 15:32

Per quanto riguarda l'alimentazione sto utilizzando un alimentatore ATX dove i +5Vsb (Max 2A) alimenta il micro e la linea +5V (Quella attivata ponticellando a massa il filo ON/OFF) la uso per tenere grossi carichi tipo il servomotore ed altro.
Dando una guardata al Datasheet secondo me potrebbe essere un problema nell'impostazione del timer, nel senso che il segnale PWM deve necessariamente avere una frequenza di 50Hz, ma il periodo di ON deve essere un multiplo di 1ms, questo risulta corretto? o bisogna fare qualche altra osservazione? Attualmente non ho provato ad implementare questa soluzione, ma lo farò nei prossimi giorni. Grazie per la partecipazione al mio topic.
Avatar utente
Foto Utentedaniele1996
580 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1231
Iscritto il: 29 ago 2011, 11:29

0
voti

[4] Re: Pilotaggio Servo Motore SG90

Messaggioda Foto UtenteEcoTan » 19 set 2020, 19:23

daniele1996 ha scritto:il periodo di ON deve essere un multiplo di 1ms.

Deve andare da 1 a 2 msec, il resto del tempo serve per gli eventuali altri servo.
Avatar utente
Foto UtenteEcoTan
5.792 4 10 13
Expert EY
Expert EY
 
Messaggi: 3710
Iscritto il: 29 gen 2014, 8:54

0
voti

[5] Re: Pilotaggio Servo Motore SG90

Messaggioda Foto UtenteWALTERmwp » 20 set 2020, 13:50

WALTERmwp ha scritto:(...) qual è il comportamento che riscontri e quale quello che invece ti aspetti (...)

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
23,5k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6935
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[6] Re: Pilotaggio Servo Motore SG90

Messaggioda Foto Utentedaniele1996 » 24 set 2020, 2:03

WALTERmwp ha scritto:qual è il comportamento che riscontri e quale quello che invece ti aspetti

In pratica all'inviio del segnale fa un movimento secco verso destra o sinistra e all'invio successivo anche dello stesso segnale si sposta nuovamente avanti, oppure sembra quasi fermo in un punto di indecisione tra l'andare avanti o indietro al posto di posizionarsi al punto preciso dell'angolo... Secondo me il problema sta nell'impostazione del timer sia in frequenza che in duty cycle... voglio fare qualche prova per vedere se il problema sta lì... Grazie!
Avatar utente
Foto Utentedaniele1996
580 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1231
Iscritto il: 29 ago 2011, 11:29

0
voti

[7] Re: Pilotaggio Servo Motore SG90

Messaggioda Foto UtenteWALTERmwp » 24 set 2020, 10:06

Per mantenere una posizione il segnale(l'uscita attivata in duty-cycle) deve essere perpetuato, questo accade?
Verificalo sul pin con un oscilloscopio(nel farlo scollega il servo dal micro), se ne disponi.
Ti occorre la conferma ovvero il riscontro della ripetizione ininterrotta dell'alternanza on-off e dei relativi tempi.
Se qualcosa non ti torna il problema è ovviamente nel codice altrimenti è il servo che ha qualche problema o non è interfacciato correttamente.
Più probabile la prima.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
23,5k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6935
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[8] Re: Pilotaggio Servo Motore SG90

Messaggioda Foto Utentedaniele1996 » 28 set 2020, 19:07

Ho fatto la prova impostando il timer0 (8 Bit) Prescaler 1024, Timer Tick 156, e ogni 20ms genera un interrupt quindi una frequenza a 50Hz;
Per il duty cycle:
Codice: Seleziona tutto
if(TCNT0 >= val && (PORTC & (1 << PC3))) PORTC &= ~(1 << PC3);

sembra funzionare per valori compresi tra 8 e 40 (alcuni valori generano un movimento con tremolio)
mentre per valori superiori, il servo torna indietro, come se lungo tutto il periodo ci fosse una doppia mappatura del dutycycle.
Purtroppo non ho un oscilloscopio per monitorare l'uscita PWM del micro...
ho impostato il timer0 al posto del timer1 perché il valore da raggiungere era inferiore a 255, certo, con un timer a 8 bit posso ottenere una risoluzione nettamente inferiore rispetto ad un timer a 16 bit impostato con un prescaler più basso.
C'è da tenere conto che non mi interessa un movimento molto preciso, deve muovere un pezzo meccanico con angolo prefissato e limitato, sopratutto il movimento deve essere o tutto verso destra o tutto verso sinistra, non ci sono vie di mezzo. Quindi se mi mantengo nei valori compresi tra 8 e 40 dovrebbe riuscire a svolgere discretamente il suo compito.
Avatar utente
Foto Utentedaniele1996
580 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1231
Iscritto il: 29 ago 2011, 11:29

0
voti

[9] Re: Pilotaggio Servo Motore SG90

Messaggioda Foto UtenteWALTERmwp » 28 set 2020, 19:38

Partirei dal presupposto che: quel servo funziona se gestito correttamente, l'interfaccia hw non "allunga" i fronti di salita e di discesa.
Poi, tu rifatti i conti, ricontrolla sul datasheet del micro la modalità di utilizzo dei parametri del modulo timer e poi dicci a quanto corrisponderebbe il T-ON e il T-OFF.
Forse ti è chiaro ma, come @EcoTan ti aveva già fatto notare in base al link che hai fornito sul servo, il T-ON può andare da 1 ms, come minimo, a 2 ms, come massimo; il tempo rimanente ad arrivare a 20 ms è tutto T-OFF.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
23,5k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6935
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[10] Re: Pilotaggio Servo Motore SG90

Messaggioda Foto Utentedaniele1996 » 28 set 2020, 19:55

Ho commesso un errore nel calcolo, la frequenza di clock non è 8Mhz ma 16, però se uso i settaggi del timer a 8 funziona, se passo a quello a 16 no... sbaglio in qualcosa, ma non capisco dove!
devo rivedere un po di cose...
Avatar utente
Foto Utentedaniele1996
580 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1231
Iscritto il: 29 ago 2011, 11:29

Prossimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite