Adafruit Trinket 5V, Servomoteur SG90 et SoftServo

Problème d'angles

a marqué ce sujet comme résolu.

Bonjour

Je travail actuellement avec une carte Adafruit Trinket 5V, à base d’ATiny85 et un servomoteur SG90. Je pilote le Servo avec la bibliothèque d’Adafruit SoftServo. Notons que je force la carte à travailler à 8MHz, et que la valeurs des temporisations sont bonne (delay(1000) dure bien une seconde).

Cependant, bien que le SG90 soit censé avoir une course de 180°, je n’arrive pas à dépasser les 90°

D’après ce que je comprend de la doc du servo(Attention, PDF), il est sensé être à 0° pour un signal de 1ms sur un temps de cycle de 20ms, et à 180° pour 2ms. C’est exactement ce que me semble faire SoftServo, qui met la sortie à 1 entre 1 et 2ms en fonction de l’angle souhaité dans la fonction write

1
2
3
4
5
6
void Adafruit_SoftServo::write(uint8_t a) {
  angle = a;

  if (! isAttached) return;
  micros = map(a, 0, 180, 1000, 2000);  
}

Si je comprend bien encore, le temps de cycle est fixé dans le code (pas dans la bibliothèque) par le déclenchement d’une interruption toute les 20ms dans cette fonction

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// We'll take advantage of the built in millis() timer that goes off
// to keep track of time, and refresh the servo every 20 milliseconds
volatile uint8_t counter = 0;
SIGNAL(TIMER0_COMPA_vect) {
  // this gets called every 2 milliseconds
  counter += 2;
  // every 20 milliseconds, refresh the servos!
  if (counter >= 20) {
    counter = 0;
    myServo1.refresh();
  }
}

J’ai beau modifier l’incrémentation de la variable counter, ou la valeur qu’elle doit atteindre, cela ne change rien. Donc, je dois mal comprendre.

Qui saurait m’expliquer où je me goure ? :)

P.S.: j’ai trouvé une manière de contourner le problème en modifiant le mappage de l’angle vers le temps d’impulsion par essais/erreurs avec les valeurs suivantes  : micros = map(a, 0, 180, 680, 2680);, mais je ne trouve aucune logique dans valeurs et ça ne me satisfait donc pas totalement.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte