Aller au contenu


Photo
- - - - -

Problème entre servos moteur et arduino en utilisant le tlc 5940 de sparkfun.


  • Veuillez vous connecter pour répondre
1 réponse à ce sujet

#1 lyc-gb

lyc-gb

    Nouveau membre

  • Membres
  • 1 messages

Posté 10 février 2014 - 05:54

Le problème est le suivant :
Normalement nous pouvons orienté les servosmoteurs de 0 à 180 degrés a partir du programme suivant de la librairie tlc 5940:

#include "Tlc5940.h"
#include "tlc_servos.h"

#define SERVO_CHANNEL 0
#define DELAY_TIME 20

void setup()
{
tlc_initServos(); // Note: this will drop the PWM freqency down to 50Hz.
}

void loop()
{
for (int angle = 0; angle < 180; angle++) {
tlc_setServo(SERVO_CHANNEL, angle);
Tlc.update();
delay(DELAY_TIME);
}
for (int angle = 180; angle >= 0; angle--) {
tlc_setServo(SERVO_CHANNEL, angle);
Tlc.update();
delay(DELAY_TIME);
}
}

___________________________________________________________________________________________

mon programme:

#include "Tlc5940.h"
#include "tlc_servos.h"

#define SERVO_CHANNEL 0
#define DELAY_TIME 20

void setup()
{
tlc_initServos(); // Note: this will drop the PWM freqency down to 50Hz.
}

void loop()
{

tlc_setServo(SERVO_CHANNEL, 30);
Tlc.update();
delay (1000);

tlc_setServo(SERVO_CHANNEL, 90);
Tlc.update();
delay (1000);
tlc_setServo(SERVO_CHANNEL, 0);
Tlc.update();
delay (1000);
tlc_setServo(SERVO_CHANNEL, 180);
Tlc.update();
delay (1000);
tlc_setServo(SERVO_CHANNEL, 60);
Tlc.update();
delay (1000);
tlc_setServo(SERVO_CHANNEL, 120);
Tlc.update();
delay (1000);

}
_________________________________________________________________________________________

Cependant quand nous utilisons celui-ci , le servomoteur ne tourne qu'à 90 degrés.
En augmentant la valeur de 0 a 255 nous pouvons augmenté l'angle , cependant il s'arrête a 255 et on est a peut près à 110°aprés cela il y a un décrochement.

Pouvez vous m'aider afin de pouvoir atteindre 180° .
Merci d'avance ! :)

#2 olivthill

olivthill

    Membre occasionnel

  • Membres
  • Pip
  • 143 messages
  • Gender:Male
  • Location:Normandie

Posté 10 février 2014 - 07:35

Normalement nous pouvons orienté les servosmoteurs de 0 à 180 degrés a partir du programme suivant de la librairie tlc 5940:
...
for (int angle = 0; angle < 180; angle++) {
tlc_setServo(SERVO_CHANNEL, angle);
Tlc.update();
delay(DELAY_TIME);
}

Non, la boucle va de 0 à 179 degrés.

Donc, je suggérerais de tester avec 179 au lieu de 180, pour avoir l'angle maximal :

tlc_setServo(SERVO_CHANNEL, 0);
Tlc.update();
delay (1000);
tlc_setServo(SERVO_CHANNEL, 180 179);
Tlc.update();
delay (1000);

D'autre part, je ne suis pas sûr que le délai de 1000 soit suffisant.

Par ailleurs, l'angle maximum dépend aussi du servo. Certains ont plus d'amplitude que d'autres. C'est pour cela qu'il peut-être intéressant de tester un servo avec un testeur de servo avant de l'utiliser. Image IPB

Edit :
En lisant les commentaires sur la page de Sparkfun, on voit que des utilisateurs ont été obligés de modifier deux constantes (SERVO_MIN_WIDTH et SERVO_MAX_WIDTH) qui se trouvent dans le fichier "tlc_servos.h" pour avoir une plus grande amplitude.

Edit 2 :
La page qui montre l'exemple a aussi des commentaires dont un qui indique comment éviter un problème de tremblements : "What I did was go into the tlc_servos.h file and adjust the timings. I changed the SERVO_MIN_WIDTH from 200 to 203 and SERVO_MAX_WIDTH from 400 to 560. I also found that changing the SERVO_TIMER1_TOP to 19500 got rid of some jitter that was going on. I think the servos ideally like a 60Hz signal but I couldn't work out how to get that exactly and I got 19500 by trial and error."




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users