Posizione Servo a ZERO

Ho un servo HITEC HS7985MG, lo posiziono manualmente a zero ma quando inizia a ricevere dati si porta in una posizione 0 differente (per l'esattezza un 30° più avanti rispetto alla posizione 0 manuale). Quindi anziché spaziare di 180° (come dovrebbe, giusto?) ha un angolo di movimento più ristretto.

omaroski: quando inizia a ricevere dati si porta in una posizione 0 differente (per l'esattezza un 30° più avanti rispetto alla posizione 0 manuale).

Sei sicuro di mandargli il giusto impulso PPM per la posizione neutrale ? Normalmente il periodo per la posizione neutrale è 1500 us, o 1512 us a seconda del produttore/modello, inoltre non tutti i servo digitali di default girano di 180° complessivi, spesso sono impostati per una escursione massima di +/- 60° (120° totali), per modificarla occorre lo specifico programmatore per il servo.

omaroski: Ho un servo HITEC HS7985MG, lo posiziono manualmente a zero ma quando inizia a ricevere dati si porta in una posizione 0 differente (per l'esattezza un 30° più avanti rispetto alla posizione 0 manuale). Quindi anziché spaziare di 180° (come dovrebbe, giusto?) ha un angolo di movimento più ristretto.

Cosa intendi con "lo posiziono manualmente a zero" ? Togli l'alimentazione, lo giri manualmente ad un angolo che tu intendi 0° ?

Ciao

Esatto, intendo che lo porto manualmente ad uno degli estremi, quello che da quanto ho capito sembra essere indicato come lo zero.

Non si trova un datasheet decente, né su quanto consumino né di quanto possano ruotare anche se ho trovato qualcosa (non chiarissima) che parla di 90° come escursione standard (ma mi sembra esagerato) e modificabile a 180 (non so come), oltre a poterli far girare 360 tagliando il blocco di un ingranaggio.

Sto usando la libreria Servo.h, la posizione la specifico in gradi da 0 a 180. Ho visto il comando in microsecondi ma non l'ho ancora provato.

Il segnale è PWM

grazie per l'aiuto

se usi la servo non stai usando il PWM ma il PPM.

i gradi della libreria sono valori standard, non è detto che vadano bene per il tuo servo. Usa i millisecondi che sono molto più precisi.

Vediamo di capirci qualcosa (sto imparando anch'io adesso):

i servo sono comandati da un impulso, dove la lunghezza dell'impulso corrisponde alla posizione; chiaramente la lunghezza dell'impulso è compresa in un intervallo, dove gli estremi corrispondono all'angolo minimo e massimo del servo (no giro continuo). Dal sito della Hitec leggi che per tutti i servo l'intervallo va da 0,9mS a 2,1mS (cioè 900uS a 2100uS), quindi per posizionare con precisione il servo usi:

servo1.writeMicroseconds(900);

capisci che il punto centrale è 1500 ( = (900+2100)/2), non devi posizionarlo manualmente, come gli dai il commando sarà lui a posizionarsi alla posizione indicata.

P.S. a dirla tutta col mio HS-5065MG ho un intervallo che va da 800 a 2200, ma te accorgi da solo:

servo1.writeMicroseconds(801); servo1.writeMicroseconds(800); //si muove servo1.writeMicroseconds(799); /NON si muove

Ciao