Question:
3 Hz d'un cristal de montre
Padu Merloti
2014-08-09 09:24:08 UTC
view on stackexchange narkive permalink

J'ai un moteur pas à pas dont l'angle de pas est de 2 degrés. Je veux afficher les secondes à l'aide d'une aiguille attachée à ce pas à pas.

Le cristal de la montre se divise bien pour produire des impulsions de 1 Hz, donc chaque seconde je peux commander au pas à pas de faire tourner 3 impulsions CW (360 degrés / 60 secondes = 6 degrés par seconde. Puisque le pas à pas va de 2 degrés par pas, j'ai besoin de 3 de ces impulsions.

Supposons maintenant que je veuille utiliser chaque pas pour afficher les secondes de manière plus fluide. J'aurais besoin de faire avancer le moteur tous les 1/3 de seconde, ou à 3 Hz.

J'essaie de trouver la meilleure façon de faire cela.

Une évidence L'astuce consiste à utiliser une fréquence plus élevée (j'utilise 64 Hz) et à tolérer une certaine gigue. Y a-t-il un autre moyen qui me donnera les 3 Hz exacts sur les 32,768 kHz? (même en sachant que l'un n'est pas divisible par l'autre?)

BTW J'utilise un MSP430, mais ce problème pourrait être porté sur n'importe quelle autre plateforme.

PLL et un diviseur de fréquence.
Et si vous utilisiez trois cristaux de 1 Hz, chacun décalé de 1/3 de phase?
Sept réponses:
placeholder
2014-08-09 10:20:32 UTC
view on stackexchange narkive permalink

Vous pouvez faire un rapport de démultiplication de 3: 1 et faire le diviseur à 32768.

32768 = 10 923 + 10 923 + 10 922 qui indique une machine à états qui compte d'abord jusqu'à 10923 répétitions, puis supprime un compte, ce serait précis toutes les 3 secondes. La pire erreur absolue que vous verriez est 31 PPM, ce qui correspond à ce que le cristal peut faire (en fonction de votre cristal).

Andy aka
2014-08-09 12:46:48 UTC
view on stackexchange narkive permalink

Prenez l'onde carrée de 32 768 Hz et faites-la passer à travers un filtre passe-bande de 98 kHz pour laisser (principalement) sa 3e harmonique - c'est assez trivial. Vous avez maintenant 3 fois 32 768 Hz que vous pouvez diviser avec le circuit précédent que vous utilisiez pour obtenir 3 Hz.

Chris Stratton
2014-08-10 01:04:45 UTC
view on stackexchange narkive permalink

Il est vrai que 32768 Hz ne divise pas par 3 Hz, mais ce n’est pas beaucoup.

Vous avez besoin d’une solution qui semble visuellement lisse et précise en moyenne dans le temps .

Créez simplement une logique qui:

Compte 10923 horloges d'entrée et fait un pas
Compte 10923 horloges d'entrée et fait un pas Compte les horloges d'entrée 10922 et fait un pas

et se répète.

Vous auriez besoin d'une instrumentation ou d'une expérience sensible pour déterminer que toutes les 3 impulsions sont. 009% plus court.

user51012
2014-08-09 17:06:43 UTC
view on stackexchange narkive permalink

La solution numérique consiste à prendre quelque chose comme un accumulateur 8 bits et à y ajouter 3 toutes les 128 impulsions. Chaque fois qu'il porte, faites marcher le moteur. La gigue résultante ne sera pas perceptible et annulera à long terme. Un accumulateur plus long (et par conséquent un pré-diviseur plus court) réduira la gigue, un plus court l'augmentera. Vous pouvez probablement passer à un accumulateur à quatre bits (et à une prédivision d'ici 2048) sans grande différence perceptible: il s'interpolerait alors en prenant 5 horloges à effectuer dans 2 cas sur 3, et 6 horloges à effectuer dans 1 sur 3 cas.

Bruce Abbott
2014-08-09 11:20:45 UTC
view on stackexchange narkive permalink

Attendez 1 seconde d'impulsion et effectuez la première étape, puis retardez 333 ms avant de faire chacune des deux autres étapes. vous n'obtiendrez peut-être pas exactement des pas égaux, mais il devrait être suffisamment proche pour que vous ne remarquiez pas la différence (et la fréquence moyenne sera exactement de 3 Hz).

Spehro Pefhany
2014-08-09 22:19:01 UTC
view on stackexchange narkive permalink

Le stepper se déplace par pas discrets chaque fois que vous changez l'état des bobines, donc une certaine quantité de «sautillement» est inévitable si vous conduisez le stepper de cette façon.

Si vous faites un micro-pas le moteur, vous pouvez obtenir un grand nombre de pas par tour, évitez essentiellement le sautillement (il y aura une certaine non-linéarité du mouvement, mais cela devrait être imperceptible à moins que votre aiguille ne soit très, très longue), et obtenez un mouvement de balayage fluide de l'aiguille (un Saint Graal parmi certains aficionados de montres). Cela éviterait également toute vibration due à un sous-amortissement.

Si vous voulez rester avec les étapes de 2 °, vous pouvez ajouter 0x0C à un registre 8 bits à 64 Hz et faire tourner le moteur à chaque fois vous obtenez un report.

Voici à quoi ressemble la gigue - moins de +/- 8 millisecondes, qui ne sera pas visible:

Time = 0.328125 delta = 0.328125Time = 0.656250 delta = 0,328125 Temps = 0,984375 delta = 0,328125 Temps = 1,328125 delta = 0,343750 Temps = 1,656250 delta = 0,328125 Temps = 1,984375 delta = 0,328125 Temps = 2,328125 delta = 0,343750 Temps = 2,656250 delta = 0,3283750 Temps = 1,656250 delta = 0,328125 Temps = 1,984375 delta = 0,328125 Temps = 2,328125 delta = 0,343750 Temps = 2,656250 delta = 0,3283750 Temps = 0,343125 delta = 0,3283725 Temps = 0,343125 delta = 0,3283725 Temps = 3,656250 delta = 0,328125 Temps = 3,984375 delta = 0,328125 Temps = 4,328125 delta = 0,343750 Temps = 4,656250 delta = 0,328125 Temps = 4,984375 delta = 0,328125 Temps = 5,328125 delta = 0,343750 Temps = 5,6562550 delta = 0,38125 Temps = 5,6562550 delta = 0,38125 Temps = 5,6562550 delta = 0,38125 6,328125 delta = 0,343750 Temps = 6,656250 delta = 0,328125 Temps = 6,984375 delta = 0,328125 Temps = 7,328125 delta = 0,343750 Temps = 7,656250 delta = 0,328125 Temps = 7,984375 delta = 0,328125 Temps = 8,328125 delta = 0,343750 Temps = 8,656250 delta = 0,328125 Temps = 8,984375 delta = 0,328125 Temps = 9,328125 delta = 0,343750 Temps = 9,656250 delta = 0,328125 Temps = 9,984375 delta = 0,328125 Temps = 10,328125 delta = 0,343750 Temps = 10,656250 delta = 0,328125 Temps = 10,984375 delta = 0,328125 Temps = 11,328125 delta = 0,3437505 Temps = 10,656250 delta = 0,328125 Temps = 10,984375 delta = 0,328125 Temps = 11,328125 delta = 0,3437505 Temps = 11,656250 delta = 0,328125 Temps = 10,984375 delta = 0,328125 Temps = 11,328125 delta = 0,3437505 Temps = 11,328125 delta = 0,3437505 Temps = 11,656250 delta = 0,3437505 Temps = 11,328125 delta = 0,3437505 Temps = 11,65125 delta = 0,3437505 Temps = 11,6125 delta = 0,3437505 Temps = 11,61250 delta = 0,3437505 12.328125 delta = 0.343750Time = 12.656250 delta = 0.328125Time = 12.984375 delta = 0.328125Time = 13.328125 delta = 0.343750Time = 13.656250 delta = 0.328125Time = 13.984375 delta = 0.328125Time = 14.328125 delta = 0.328125Time = 14.328125 delta = 0.328125Time = 14.328125 delta = 0.328125Time = 14.328125 delta = 0.328125.943 = 0.328125Time = 15.328125 delta = 0.343750Time = 15.656250 delta = 0.328125Time = 15.984375 delta = 0.328125

La même méthode pourrait être utilisée pour contrôler un moteur à micro-pas, juste avec des étapes plus fines comme comme 2 ° / 16.

EM Fields
2014-08-10 12:37:18 UTC
view on stackexchange narkive permalink

Pour ceux d'entre vous qui aiment le matériel, voici un schéma de la solution de compteur à double module de l'espace réservé, mais sans l'erreur possible de 31PPM.

Si vous voulez jouer avec le circuit, la liste des circuits LTspice et les fichiers de support sont ici.

Le schéma ci-dessous montre les préréglages pour une horloge à 32768 Hz, tandis que la version LTspice a le nombre - et le timing - raccourci de façon drastique afin de garder le sim de fonctionner pour toujours, mais pour toujours montrer le fonctionnement du compteur à double module.

enter image description here



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...