Curiosità arduino con e senza servo driver

Ciao ragazzi, Come già detto in un altro topic sto utilizzando un modulo che permette di pilotare fino a 16 servomotori con arduino. Leggendo nel reference manual ho letto che è consigliata una calibrazione del servomotore in quanto la libreria comanda il servo in modo diverso dal semplice Arduino. Con arduino se non ricordo male si utilizza la funzione Servo.write (gradi), mentre qui devo mandargli la pulsazione (non vorrei dire stupidaggini ma dovrebbe essere la lunghezza d'onda precisamente) mappata su 180° in base alla pulsazione massima e minima (o lunghezza massima e minima). Ora la mia domanda​ è: come mai con arduino non ho mai dovuto calibrare il servomotore? Forse sono io che ho sempre sbagliato nell'usare la funzione senza calibrazione, ma anche nel libro che mi uscì anni fa dal kit di arduino non accennava ad alcuna calibrazione. Questa non è una lamentela (per non essere frainteso :sweat_smile: ) perché mi ha intrigato la calibrazione del servo ed ho capito cose che prima non sapevo (soprattutto quando sfasciai un micro servo da 3€ :roll_eyes: ) ma è giusto per capire più o meno la differenza. Grazie

Non serve nessuna calibrazione, semplicemente devi inviare al servo impulsi compresi tra 550 us e 2450 us, la posizione dipende dalla durata dell'impulso, tipicamente con 1500 us il servo è in posizione centrale, a seconda del produttore/modello la posizione centrale può essere compresa tra 1510 e 1520 us (valore tipico 1512 us) invece dei 1500 us standard. Con 550 us il servo ruota di -90° (CCW) e con 1450 us il servo ruota di +90° (CW), se il punto centrale è compreso tra 1510 e 1520 us gli estremi si spostano di 10-20 us di conseguenza. Per farla breve, a seconda del servo driver che usi non devi fare altro che fargli emettere la corretta durata dell'impulso desiderato, come farlo dipende dal tipo di servo driver e la libreria abbinata.

astrobeed: Non serve nessuna calibrazione, semplicemente devi inviare al servo impulsi compresi tra 550 us e 2450 us, la posizione dipende dalla durata dell'impulso, tipicamente con 1500 us il servo è in posizione centrale, a seconda del produttore/modello la posizione centrale può essere compresa tra 1510 e 1520 us (valore tipico 1512 us) invece dei 1500 us standard. Con 550 us il servo ruota di -90° (CCW) e con 1450 us il servo ruota di +90° (CW), se il punto centrale è compreso tra 1510 e 1520 us gli estremi si spostano di 10-20 us di conseguenza. Per farla breve, a seconda del servo driver che usi non devi fare altro che fargli emettere la corretta durata dell'impulso desiderato, come farlo dipende dal tipo di servo driver e la libreria abbinata.

Forse ho capito male ciò che hai scritto :confused: ma ieri utilizzando la procedura consigliata ho trovato dei valori di 120(minimo) e 510(massimo) per le pulsazioni, poi per calcolare la lunghezza in base ai gradi ho mappato con pulselenght= map(gradi, 0, 180, minpulse, maxpulse); Facendo prima un costrain sui gradi fra 0 e 180 per essere sicuro

Se invece scrivevo un valore maggiore di 510 allora il servo ruotava e poi arrivava all'endstop meccanico e continuava a fare rumore, penso perché cercava di andare ancora oltre

salvatore_94: Forse ho capito male ciò che hai scritto :confused:

Io ti ho indicato il range di durata degli impulsi per i servo RC, poi come ottenerlo dipende dal servo driver che stai utilizzando e la relativa libreria, in tutti i casi non serve nessuna calibrazione. Anche il servo peggiore ha come risoluzione minima 0.3°, quelli buoni arrivano a 0.1°, quelli ottimi a 0.05°, ragionare con i singoli gradi non è un buono modo per far lavorare i servo.