Auteur Sujet: Mes servos chantent même à l'arrêt  (Lu 12027 fois)

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Mes servos chantent même à l'arrêt
« le: février 20, 2022, 05:18:35 pm »
Bonjour,
Je viens de programmer un Arduino Mega pour gérer le mouvement de deux servos utilisés comme moteurs d'aiguillages lents pour les aiguilles 1a et 1b (les moteurs sont des DLY2de DLYmoteur).
Pour le moment, je les commande avec des caractères saisis sur le moniteurs série de l'ordi, à titre d'essai.
Quand le sketch démarre, tt est ok, mais après un premier mouvement, le servo est en position, mais continue le même petit bruit léger que quand il bouge.
Du coup, après avoir utilisé les 2 aiguillages, même sans mouvement, j'entends les servos qui continuent à "chanter" à l'arrêt.
Comment éviter cela ?
Mon code :
#include <Servo.h>

const byte dir_1a = 60;      // Position ("angle") pour aig1a en voie directe
const byte dev_1a = 130;     // Position ("angle") pour aig1a en voie déviée
const byte dir_1b = 60;      // Position ("angle") pour aig1b en voie directe
const byte dev_1b = 130;     // Position ("angle") pour aig1b en voie déviée
Servo moteur_aig_1a;         // crée l’objet pour contrôler le servomoteur "moteur_aig_1a"
Servo moteur_aig_1b;         // crée l’objet pour contrôler le servomoteur "moteur_aig_1b"

void setup()
{
    Serial.begin(9600);
    Serial.println("_________");
    Serial.println("");
    Serial.println("Démarrage (A pour Aig1a en voie déviée | Z pour Aig1a en voie directe | Q pour Aig1b en voie déviée | S pour Aig1a en voie directe)");
    Serial.println("_________");
    moteur_aig_1a.attach(9);
    moteur_aig_1b.attach(10);
}

void loop()
{
    if( Serial.available())
    {
        byte incomingByte = Serial.read();
        if (incomingByte == 65)                      // Si on reçois un A du moniteur série
        {
            bouge_moteur(moteur_aig_1a, dev_1a);     // On met Aig1a en voie déviée
        }
        else if (incomingByte == 90)                 // Si on reçois un Z du moniteur série
        {
            bouge_moteur(moteur_aig_1a, dir_1a);     // On met Aig1a en voie directe
        }
        else if (incomingByte == 81)                 // Si on reçois un Q du moniteur série
        {
            bouge_moteur(moteur_aig_1b, dev_1b);     // On met Aig1b en voie déviée
        }
        else if (incomingByte == 83)                 // Si on reçois un S du moniteur série
        {
            bouge_moteur(moteur_aig_1b, dir_1b);     // On met Aig1b en voie directe
        }
    }
}

void bouge_moteur(Servo moteur, byte position)
{
    if (position>moteur.read())                           // Si l'angle final est supérieur à l'initial
    {
        for (int i = moteur.read() ; i < position ; i++)  // On boucle de la position actuelle à la position demandée en incrémentant de 1
        {
            moteur.write(i);                              // On met le servo dans la position incrémentée
            delay(20);                                    // On attend 20 ms
        }
    }
    else if (position<moteur.read())                      // Si l'angle final est inférieur à l'initial
    {
        for (int i = moteur.read() ; i > position ; i--)  // On boucle de la position actuelle à la position demandée en décrémentant de 1
        {
            moteur.write(i);                              // On met le servo dans la position décrémentée
            delay(20);                                    // On attend 20 ms
        }
    }
}
:

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Mes servos chantent même à l'arrêt
« Réponse #1 le: février 20, 2022, 07:32:23 pm »
Bonjour,

je verrais bien des attach / detach bien placés mais il y a peut-être plus subtil.
Cordialement

dmskd

  • Newbie
  • *
  • Messages: 48
  • Arduino et N
    • Voir le profil
Re : Mes servos chantent même à l'arrêt
« Réponse #2 le: février 20, 2022, 11:35:26 pm »
Bonsoir,

Il suffit de couper la tension d'alimentation du servo quand il a atteint sa position.
Cordialement,
Dominique

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : Mes servos chantent même à l'arrêt
« Réponse #3 le: février 21, 2022, 07:40:28 am »
Merci de vos réponses !

Citer
attach / detach bien placés
oui, pourquoi pas.

Citer
couper la tension d'alimentation du servo quand il a atteint sa position
on peut le faire en code Arduino ?

dmskd

  • Newbie
  • *
  • Messages: 48
  • Arduino et N
    • Voir le profil
Re : Mes servos chantent même à l'arrêt
« Réponse #4 le: février 21, 2022, 11:11:57 am »
Bonjour babskwal,
Oui on peut le faire en code Arduino en alimentant le servo via un circuit ULN2803.
En basculant une entrée de l'ULN on autorise ou on bloque la sortie correspondante (voir schéma joint).
Cordialement,
Dominique

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : Mes servos chantent même à l'arrêt
« Réponse #5 le: février 21, 2022, 11:30:24 am »
Oui, OK, c'est possible comme ça. N'est-ce pas un peu l'artillerie lourde par rapport à la solution attach/detach ?

Tony04

  • Hero Member
  • *****
  • Messages: 570
    • Voir le profil
Re : Mes servos chantent même à l'arrêt
« Réponse #6 le: février 21, 2022, 12:59:33 pm »
Bonjour,

avez-vous essayé la librairie SlowMotion de Locoduino: https://www.locoduino.org/spip.php?article159

Une vrai petite pépite et vous avez aussi l'option detach avec un préréglage du temps avant la coupure. 

Cordialement
Antoine

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : Mes servos chantent même à l'arrêt
« Réponse #7 le: février 21, 2022, 05:05:45 pm »
IL faudrait que j'essaye ! C'est pas immédiat  ;)

dmskd

  • Newbie
  • *
  • Messages: 48
  • Arduino et N
    • Voir le profil
Re : Mes servos chantent même à l'arrêt
« Réponse #8 le: février 21, 2022, 05:40:08 pm »
Citer
Oui, OK, c'est possible comme ça. N'est-ce pas un peu l'artillerie lourde par rapport à la solution attach/detach ?
Je ne sais pas ce que fait attach/detach, je n'ai jamais essayé.
Est-ce que le moteur reste alimenté ? Est-ce qu'il continue à consommer du courant ?

Le montage que j'ai présenté a été motivé par le fait qu'il pouvait y avoir des mouvements incontrôlés du servo lors de la mise sous tension du décodeur.
Le fait de démarrer le signal PWM avant de mettre le moteur sous tension a résolu ce problème,  d'où ce schéma qui permet de contrôler l'alimentation.

Cordialement,
Dominique
Cordialement,
Dominique

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : Mes servos chantent même à l'arrêt
« Réponse #9 le: février 22, 2022, 01:44:10 pm »
J'ai essayé le système attach/detach ; il semble satisfaisant sur le sujet initial du bruit. J'imagine donc qu'il ne doivent plus consommer.
En revanche, comme je passe par une fonction "mouvement_moteur" qui prenait pour arguments :
- la position à atteindre (un byte, prédéfini dans les déclarations avec la bonne valeur pour la position en voie directe et en voie déviée pour chaque appareil de voie)
- un servo (donc un moteur)
J'ai été obligé d'ajouter un troisième argument à ma fonction, à savoir la pin à laquelle attacher et détacher le servo. Je crois que je vais créer des objets "moteurs" comprenant un servo et sa pin...

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1717
    • Voir le profil
Re : Re : Mes servos chantent même à l'arrêt
« Réponse #10 le: février 23, 2022, 09:29:00 am »
Bonjour,

Le montage que j'ai présenté a été motivé par le fait qu'il pouvait y avoir des mouvements incontrôlés du servo lors de la mise sous tension du décodeur.
Le fait de démarrer le signal PWM avant de mettre le moteur sous tension a résolu ce problème,  d'où ce schéma qui permet de contrôler l'alimentation.

J'ai également rencontré ce problème qui se règle est tirant le signal de contrôle du servo au 5V via une résistance de 10k par exemple.

Il semble que ce mouvement incontrôlé soit dû à l'électronique du servo qui pense voir un créneau sur le signal quand la tension monte à l'allumage.

Cordialement.
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1717
    • Voir le profil
Re : Re : Mes servos chantent même à l'arrêt
« Réponse #11 le: février 23, 2022, 09:32:55 am »
Je ne sais pas ce que fait attach/detach, je n'ai jamais essayé.
Est-ce que le moteur reste alimenté ? Est-ce qu'il continue à consommer du courant ?

detach coupe le pulse de commande. Le servo n'est plus asservi mais reste alimenté.
Cordialement

dmskd

  • Newbie
  • *
  • Messages: 48
  • Arduino et N
    • Voir le profil
Re : Mes servos chantent même à l'arrêt
« Réponse #12 le: février 23, 2022, 05:44:31 pm »
Merci Jean-Luc pour ces précisions.
Cordialement,
Dominique