Contrôle d’un servo avec un TLC5940 (calcul des paramètres PWM)

William

Contrôle d’un servo avec un TLC5940 (calcul des paramètres PWM)


J’essaie de contrôler quelques servos et un tas de LED RGB à partir d’une carte Arduino. Pour ce faire, je vais enchaîner quelques puces TLC5940. Le problème que j’essaie de résoudre en ce moment est de savoir quels paramètres PWM ai-je besoin pour les servos; en particulier quels sont les paramètres de rotation minimale et de rotation maximale?

Mon servo est un: HiTech HS-55. Ce site: http://www.servocity.com/html/hs-55_sub-micro.html indique que le servo fonctionne sur « + Pulse Width Control 1500usec Neutral » avec une impulsion de 600us étant -90 et une impulsion de 2400us étant +90.

Pour comprendre comment générer des impulsions aussi longues avec mon pilote PWM, j’ai besoin de connaître la fréquence sur laquelle le pilote fonctionne. La fiche technique du pilote: http://www.ti.com/lit/ds/symlink/tlc5940.pdf dit ceci à propos de l’opération PWM au bas de la page 19:

Le cycle PWM en niveaux de gris commence avec le front descendant de BLANK. La première impulsion GSCLK après la suppression de BLANK augmente le compteur de niveaux de gris de un et active tous les OUTn avec une valeur de niveaux de gris différente de zéro. Chaque front montant suivant de GSCLK augmente le compteur de niveaux de gris d’une unité. Le TLC5940 compare la valeur en niveaux de gris de chaque sortie OUTn avec la valeur du compteur en niveaux de gris. Tous les OUTn avec des valeurs de niveaux de gris égales aux valeurs du compteur sont désactivés. Un signal BLANK = H après 4096 impulsions GSCLK remet le compteur de niveaux de gris à zéro et termine le cycle PWM de niveaux de gris (voir Figure 21). Lorsque le compteur atteint un décompte de FFFh, le compteur arrête de compter et toutes les sorties se désactivent. Tirer BLANK haut avant que le compteur n’atteigne FFFh remet immédiatement le compteur à zéro.

Malheureusement, je n’ai aucune idée de ce que cela signifie. (Je pense) Je sais que le pilote PWM reçoit une forme de signal d’horloge d’arduino mais ne m’aide malheureusement pas à le comprendre.

Quelqu’un peut-il m’aider à déterminer quels paramètres je dois utiliser sur le pilote PWM pour générer les impulsions souhaitées. La valeur la plus proche fonctionnera. Pour mon application, si le servo atteint quelques degrés, il doit être suffisamment proche. Est-ce que cela fonctionnera même du tout? Ma compréhension du fonctionnement des servos est qu’ils ont généralement besoin d’une impulsion toutes les 20 ms, donc même si je calcule comment générer la durée d’impulsion correcte, je doute que cela fonctionnera comme par magie en impulsion toutes les 20 ms. Le servo acceptera-t-il l’entrée?

angelatlarge

Pouvez-vous clarifier un peu la relation entre le TLC5490 et les servos, s’il y en a …

William

Il n’y a aucune relation. J’ai juste besoin de pouvoir contrôler un grand nombre de LED et de servos à partir d’une carte Arduino Uno.

Réponses


 angelatlarge

Pour répondre au côté TLC5940 de la question:

Tout d’abord, gardez à l’esprit que lorsque vous utilisez le TLC5940, votre intensité n’a pas besoin d’être des valeurs 12 bits (4096 valeurs): vous pouvez utiliser le TLC5940 avec des intensités de n’importe quelle valeur 12 bits ou moins. Par exemple, des intensités de 8 bits (256 valeurs) fournissent un résultat très satisfaisant. Plus sur ce dernier.

En supposant des intensités de 12 bits, voici comment fonctionnent GSCLK et BLANK : le TLC5940 n’a pas sa propre horloge. Ainsi, GSCLK est utilisé pour déterminer quand allumer et éteindre chaque LED. Au début d’un cycle, toutes les LED sont allumées. Chaque fois GSCLK front positif sur GSCLK est reçu, un compteur interne est incrémenté sur TLC5940. Chaque LED dont la valeur d’intensité est inférieure au compteur est éteinte. Ainsi, les LED d’intensité 1 sont éteintes après le premier cycle, les LED d’intensité 2 sont éteintes après le deuxième cycle et les LED d’intensité 4096 ne sont pas du tout éteintes. À la fin du cycle, la puce ne se réinitialise pas elle-même, elle s’attend plutôt à ce qu’un bord positif sur BLANK le réinitialise, et après cela, le cycle recommence.

Voici ce que cela signifie pour piloter le TLC5940: vous avez besoin de deux sorties PWM; un pour GSCLK et un pour BLANK , et celui pour BLANK doit se produire tous les 4096 cycles de GSCLK . Notez maintenant que nous parlons ici de la fréquence , et non du rapport cyclique, alors que c’est le rapport cyclique que analogWrite() contrôle. Pour piloter le TLC5940, vous pouvez utiliser une bibliothèque écrite pour piloter le TLC5490, ou vous pouvez effectuer vous-même le pilotage de niveau inférieur du TLC5940, qui peut utiliser l’une des approches suivantes (en supposant que vous utilisez un Arduino basé sur ATmega, et à l’échelle de difficulté croissante):

  • Programmez les deux minuteries vous-même de manière à ce qu’elles utilisent des pré-détartreurs différents de sorte que la ligne BLANK soit entraînée à 1 / 4096e de la fréquence du GSCLK
  • Programmez le fusible CKOUT sur l’ATmega, en le faisant émettre le signal d’horloge sur l’une de ses broches de sortie. Utilisez ceci pour GSCLK . Utilisez ensuite une minuterie pour générer une impulsion BLANK à 1 / 4096e de la fréquence d’horloge.
  • Horloge externe de l’ATmega et utilisation de la même horloge pour GSCLK . Demandez à un temporisateur ATmega de générer l’impulsion BLANK à 1 / 4096e de la fréquence d’horloge.

Passons maintenant à la relation de fréquence entre la synchronisation du TLC5940 et le PWM. La ligne BLANK aura un rapport cyclique de 1/4096 (ou quelle que soit la valeur d’intensité maximale que vous utilisez), de sorte que cela ne fonctionnera probablement pas pour vos servos. Le GSCLK généralement un rapport cyclique de 50/50, mais ce n’est pas GSCLK . Supposons que vous vouliez que vos LED semblent stables, et prenons la tension du scintillement à 50 Hz . Cela signifie que vous avez besoin que votre LED d’intensité 1 scintille à GSCLK ou plus, ce qui signifie qu’un cycle long de 4096 heures devrait se terminer en 20 millisecondes, ce qui signifie que votre horloge GSCLK devrait être d’au moins 204 kHz. À 204 kHz, les impulsions d’horloge sont longues d’environ 5 µS. Donc, en théorie, vous pouvez utiliser la même horloge pour vos servos et le TLC5940 (je pense que c’est ce que vous demandez): si vous maintenez la fréquence d’horloge (à 204 kHz) et changez le rapport cyclique, vous pouvez contrôler vos servos et cadencer le TLC5940 . Cependant, si vous utilisez des intensités de 12 bits, l’horloge en niveaux de gris nécessaire au TLC5940 sera trop rapide pour les servos.


Mais si 4096 valeurs d’intensité sont trop importantes à gérer, envisagez d’utiliser des valeurs d’intensité 8 bits. Vous devrez toujours les envoyer en tant que valeurs 12 bits (c’est ce que l’interface TLC5940 attend), cependant, aucune loi ne stipule que votre impulsion BLANK doit se produire toutes les 4096 horloges GSCLK . Si cela se produit toutes les 256 horloges, vous avez vous-même une intensité de 8 bits. Ainsi, vos intensités 8 bits doivent être envoyées sous forme de valeurs 12 bits valides (les quatre bits les plus élevés étant nuls), et vous redémarrerez le cycle de synchronisation toutes les 256 horloges. Vous pouvez utiliser n’importe quel autre nombre de bits d’intensité, tant qu’il est de 12 ou moins, de la même manière. Si vous utilisez 256 valeurs d’intensité (= niveaux de gris), votre horloge minimale est de 12,8 kHz et la durée de l’horloge est de 78 µS. Plus proche de l’impulsion 2400uS +90, mais encore assez loin. Si nous supposons que l’impulsion +90 est un rapport cyclique 90/10, alors nous calculons la durée du cycle d’horloge à 2,6 ms, ce qui se traduit par une horloge de 375 Hz. À ce cadencement, la valeur d’intensité maximale qui ne produira aucun scintillement est de 8 valeurs (3 bits) à la persistance de 50 Hz et de 16 valeurs (4 bits) à 25 Hz. Vous pouvez décider si cela convient à vos besoins.

William

Wow, c’est une réponse impressionnante. Je pense qu’il y a toutes les informations dont nous avons besoin ici pour savoir si je peux le faire faire ce que je veux, mais je vais devoir le lire plusieurs fois pour le comprendre. Merci pour l’aide!

William

Je regardais juste la bibliothèque TLC pour Arduino et elle a en fait une méthode pour contrôler les servos de la bibliothèque. Il semble donc que tout ce travail a été fait pour moi (j’espère). Merci encore.


 starblue

Vous disposez d’une entrée d’horloge en niveaux de gris (recommandée: 30 MHz, voir page 3) et elle compte jusqu’à 4096 valeurs.

Pour votre servo qui est beaucoup trop rapide (la durée du cycle est d’environ 140 µs), vous devez donc utiliser une horloge plus lente. Ensuite, vous pouvez calculer la synchronisation du signal d’asservissement en termes de cycles d’horloge.

 

avec, Calcul, contrôle, d’un, des, Paramètres, PWM, Servo, TLC5940, un

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *