Salve,
sto utilizzando un servo Hitec HS-5065MG, utilizzando la libreria Servo che mandando gli impulsi manualmente succede, per esempio, che quando passo da 1000 a 1010 il perno fa un movimento in avanti, poi indietro ed infine in avanti per ottenere la posizione desiderata.
Vorrei sapere se è normale, e se si può intervenire in qualche modo.
Per completezza il pezzo di codice che uso è:
void servoTiltwriteMicroseconds(unsigned int servoTiltAttuale) {
digitalWrite(lineaTiltServo, HIGH);
delayMicroseconds(servoTiltAttuale);
digitalWrite(lineaTiltServo, LOW);
delay(20);
}
Per maggiore chiarezza: io collego l'uscita di Arduino direttamente all'ingresso del servo, si può fare, ci sono controindicazioni o conviene fare qualcos'altro ?
E alimento il servo con l'uscita di arduino (gnd-5V), in realtà alimento anche: un MAX 232, un MAX 485 e 4 led.
a me sembra più un problema di precisione del servo, gli stai facendo fare il suo "scatto" minimo, ma probabilmente il valore è talmente border-line che il servo è indeciso se fare il salto o meno
Probabile, anche perché mettendo dei micros() prima e dopo l'onda quadra, l'errore NON è costante.
Allora la domanda diventa come si fa ad aumentare la risoluzione (diminuire i gradi gestibili) dal servo ?
Mi spiego meglio adesso ho 900uS - 2100uS come dichiarato dalla casa (anche se non è vero visto che posso andare da 800 a 2200 ma questa è un'altra storia)
Se divido l'angolo di 120° per 2200 (2100-900 = 2200) ottengo l'angolo per ogni "scatto" minimo, se compro il programmatore, è possibile diminuire l'angolo (da 120 a 90), in maniera da dargli uno scatto minimo di 5 ma che corrisponde a 0,1° realmente ?
Esistono altri servo che mi riescono a dare una precisione di 0,1° senza gioco (che va bene per il modellismo ma non per i miei scopi ? )
non puoi scendere di precisione, dipende dalla meccanica.
secondo me se vuoi una precisione simile dovresti usare un motore stepper e/o dei motoriduttori.