Pages: [1]   Go Down
Author Topic: Continuous servo - writeMicroseconds() vs write()  (Read 697 times)
0 Members and 1 Guest are viewing this topic.
Torino, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao a tutti,
ho uno SpringRc SM-S4315R a rotazione continua, per un progetto di testa panoramica motorizzata. Ho fatto una ricerca nel web su come pilotarlo ma non mi è chiaro quale dei due metodi citati nel subject sia il più indicato o se sono equivalenti (a parte i valori da assegnare ai comandi, ovviamente). Inoltre, nel caso di writeMicroseconds(), ci sono dei valori massimi in microsecondi oltre i quali si potrebbe eventualmente danneggiare il servo? (1000-2000, 1300-1700 ..., non ho trovato valori limite per il mio servo sul web). In ultimo, per effettuare il ramping (accelerazione/decelerazione) è corretto utilizzare codice tipo:

  for(int speed = 100; speed >= 0; speed -= 2)
  {
    servoLeft.writeMicroseconds(1500+speed);   
    servoRight.writeMicroseconds(1500-speed); 
    delay(20);                                 
  }

Gigi
Logged

0
Online Online
Shannon Member
****
Karma: 132
Posts: 10498
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non esistono dei valori standard, devi cercarteli a mano.

per il ramping mi pare corretto. Usa la wrireMicroseconds che è più precisa della write (che in realtà trasforma il valore 0-255 in writeMicrosecods
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 270
Posts: 21861
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ci sono valori che danneggiano il Servo. normalmente 1000 e 2000 sono i valori estremi ( 0 e 180) ma alcuni modelli di Servo si posizionano a dei angoli maggiori con pilotaggio sotto /sopra 1000/2000.
writeMicroseconds() e write() sono equivalenti dai solo dei valori diversi come posizione (durata impulso in microsecondi o angolo in gradi)

 
Code:
for(int speed = 100; speed >= 0; speed -= 2)
  {
    servoLeft.writeMicroseconds(1500+speed);   
    servoRight.writeMicroseconds(1500-speed);
    delay(20);                                 
  }

Direi che la pausa é troppo corta per avere un movimento dato dal pilotaggio e non dalla velocitá di movimento del motore.


Ciao Uwe
Logged

Torino, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho ripreso il progetto della testa panoramica dopo lunga pausa ...
ho fatto delle prove con i miei SpringRc SM-S4315R a rotazione continua e ho notato che la velocità di rotazione CCW è diversa da quella CW, a parità di variazione dei microsecondi (myServo.writeMicroseconds(1500+vel)). Cioè, ottengo la stessa velocità di rotazione (ad esempio, circa 1 giro completo in un secondo) con un valore di 1600 us in rotazione oraria e 1370 us in rotazione antioraria, a fronte di una posizione di stop di 1500 us, mentre in teoria dovrei ottenere la stessa velocità a 1600 e 1400 us ...
E' un problema del servo?
Di questi SpringRc in realtà ne ho due ma non ho ancora provato come si comporta il secondo ...
Gigi
Logged

Pages: [1]   Go Up
Jump to: