Auteur Sujet: Problème gestion des servos  (Lu 289 fois)

BricoTrain2024

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Problème gestion des servos
« le: mars 28, 2024, 04:15:47 pm »
Bonjour, soyez indulgeant, je suis débutant.
Je rencontre un problème sur mon réseau, actuellement Z21 start, et quelques composant de retour d'informations (DR4088RB et Y6016RB). Mais je gère le réseau surtout à base d'Arduino Méga. Par exemple, je reçois les adresse via un décodeur (maison Locoduino, schèma et les sketchs, merci au passage) pour la retro, ainsi que pour mes aiguilles, manœuvrées avec des servos. Tout fonctionne, mais néanmoins, de temps à autre, l'un ou l'autre des servos se met à avoir des comportements anarchiques et fatals s'ils viennent à bloquer en dessous de 0 ou + de 180° (même avant que le pilotage passe via DCC). Enfin, je ne vous apprends rien, vous devez connaître le problème. A l'origine, je pilotais directement depuis l'Arduino, et lorsque je suis passé à la retro, comme j'ai inclus pas mal de pca9685, j'en ai profité pour piloter aussi les servos avec ces cartes, pensant que cela résolverait mon problème, mais non! A priori, sur tout ce que j'ai lu, les personnes qui ont eu les mêmes déboires, ont solutionné en coupant l'alimentation entre chaque appel. J'ai voulu faire de même avec la commande setPWM(canal, activé, désactivé), mais le servo n'a pas apprécié (ce qui est logique, mais j'ai tenté). Y-a-t-il une commande qui permet de désactiver / réactiver une broche du pca ? Ou, y-a-t-il une raison qui déclenche ce comportement? Cela se passe aussi bien le servo à quelques cm, qu'a l'autre bout du réseau (+10m). Ha, naturellement, il y a une alimentation externe, contrôlée via voltmètre et ampèremètre, et tout reste normal.
Si quelqu'un a déjà été confronté à ce problème, comment l'avez vous résolu? Voilà, j'espère que cela n'est pas dû à ma co------ie, si je puis me permettre cette expression à mon égard. En attendant, si vous avez des suggestions, je suis preneur? Bonne journée.

BricoTrain2024

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Problème gestion des servos
« Réponse #1 le: avril 01, 2024, 10:51:18 am »
Bonjour à tous, et joyeuses fêtes.
Je vois, que beaucoup de monde a lu mon problème, mais à priori, il n'y a pas de solution.
Je me demande, si je mets un relai, qui alimente les servos, que j'envoie la commande, et recoupe l'alimentation 5 v des servos dans la foulée? Il me semble que c'est justement l'alimentation continue qui maintient en place la position des servos? Dans ce cas, y a t-il un risque pour l'électronique des servos et leur stabilité ?
Merci d'avoir pris le temps de me lire, bonne journée

BricoTrain2024

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Problème gestion des servos
« Réponse #2 le: avril 01, 2024, 07:06:46 pm »
Re bonjour,
A force de rechercher, j'ai trouvé ceci :
/*!
   *  @brief  Sets the PWM output Off for one of the PCA9685 output pins
   *  @param  num One of the PWM output pins, from 0 to 15
   *  @param  off Full off value = 16
   */
  void Adafruit_PWMServoDriver::setPWMOff(uint8_t num, uint8_t off = 16) {
  #ifdef ENABLE_DEBUG_OUTPUT
      Serial.print("Setting PWM Off ");
      Serial.print(num);
      Serial.print(": ");   
      Serial.println(off);
  #endif

      _i2c->beginTransmission(_i2caddr);
      _i2c->write(PCA9685_LED0_OFF_H + 4 * num);   
      _i2c->write(off);
      _i2c->endTransmission();
  }
Mais, étant débutant et sûrement pas très doué en plus, je ne sais pas trop comment interpréter ce code et si cela pourrait résoudre mon problème?
Là, je fais appel à votre expertise, si vous pouvez m'aider à déchiffrer. Et m'expliquer à quel endroit l'insérer?
Bonne soirée.

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 748
    • Voir le profil
Re : Problème gestion des servos
« Réponse #3 le: avril 02, 2024, 03:23:18 pm »
A vue de nez, le code permet de désactiver une pin (num) parmi les 16 disponibles sur le circuit PCA9685. Ca supprime le PWM et ça peut marcher, mais le servo est toujours relié à la broche. Si celle ci est flottante, sans valeur fixe, alors le problème sera le même.
Pour piloter un servo, la bibliothèque passe par une fonction attach() qui fixe la pin dédiée à ce servo. Il y a aussi un detach()... Peut être n'attacher le servo à sa broche que pendant son mouvement et rester 'detach' le reste du temps...

BricoTrain2024

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Problème gestion des servos
« Réponse #4 le: avril 02, 2024, 11:26:03 pm »
Bonsoir, et merci Thierry.
Je vais tenter attach() et detach(). mais pas tout de suite, j'ai un boulot à terminer avant. Sinon, ce code serait à mettre en fonction, et faire un appel depuis le loop?
Bonne soirée

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 748
    • Voir le profil
Re : Problème gestion des servos
« Réponse #5 le: avril 03, 2024, 09:16:13 am »
L'idée serait de faire l'attach() juste avant de fixer la position du servo, et de faire le detach() dès que le mouvement est terminé, peut être avec un délai pour laisser le temps...