Projet (fréquencemètre) périodemètre horloger.

  • Auteur de la discussion JCS
  • Date de début
JCS
JCS
Compagnon
22 Juin 2007
2 556
Cher
  • Auteur de la discussion
  • #1
Salut à tous,

J'ouvre une nouvelle discussion sur un projet qui me tient à cœur depuis bien longtemps. Il s'agit de fabriquer un "fréquencemètre horloger", destiné à ajuster rapidement la fréquence d'un balancier de pendule, avec un maximum de précision. Moins d'une minute/jour serait un bel objectif et éviterait de nombreux jours de retouches.

Il y a plusieurs méthodes :

* Comparaison d'une fréquence étalon avec la fréquence du balancier à ajuster.
Ici un exemple d'un appareil que j'ai fabriqué il y a plus de 20 ans et que je viens d’exhumer de mes placards :


* Capter les bruits de l'échappement. Pas aisé à cause des bruits parasites et des irrégularités de fabrication de la mécanique.

* Capter les oscillations du balancier sans les perturber, en coupant un faisceau IR ou mieux laser.
Cette solution commence à être à ma portée grâce à mes débuts avec Arduino.

L'affichage doit se faire en nombre d'alternances par heures. Un affichage en Hertz n'a pas de sens en horlogerie.

J'ai commencé par faire un bistable avec un ATtiny85 qui fonctionne bien. Reste à faire une barrière lumineuse avec IR ou mieux un mini laser qui sera interrompu en fin de course du balancier.

Le signal sera envoyé vers un Arduino et sera traité avec un PulsIn.

Une oscillation sur 2 sera traitée. La fréquence instantanée sera convertie en alternance/heure et affichée sur la ligne du haut et le nombre d'oscillations mesurées ainsi que la moyenne sur la ligne du bas d'un afficheur LCD 2 lignes 16 caractères.

Je ne vais malheureusement plus avoir accès à mon "labo d'électronique" avant fin mars. Cela me laissera le temps de bien mûrir ce projet.

Toutes les suggestions et idées sont bienvenues.

Merci d'avance.

@+
JC.
 
RacingMat
RacingMat
Compagnon
30 Oct 2016
614
Marseille
Chouette projet ! Largement faisable en Arduino :) on pourra t'aider ! Il faut bien découpler la boucle du compteur et l'affichage LCD (histoire que la bibliothèque LCD n'amène pas de la latence)

J'éviterais le laser : c'est pas mieux et un reflet sur un balancier métallique et hop dans l'œil
 
pinou29
pinou29
Compagnon
18 Mar 2009
2 877
Toulon ( Var )
Bonjour.
Même si je ne vais pas tout comprendre, je vais essayer de suivre.
Bernard;
 
RacingMat
RacingMat
Compagnon
30 Oct 2016
614
Marseille
ajuster rapidement la fréquence d'un balancier de pendule, avec un maximum de précision. Moins d'une minute/jour
Tu pourrais commencer par un calcul qui nous donnerait les ordres de grandeurs.
Ensuite on pourra regarder ce que la précision de l'arduino te donnera en théorie.
 
osiver
osiver
Compagnon
7 Sept 2013
12 024
On parle de fréquence mais est-ce ce ne serait pas plutôt une période que l'on va mesurer ? :smt104
 
JCS
JCS
Compagnon
22 Juin 2007
2 556
Cher
  • Auteur de la discussion
  • #6
Merci à tous pour vos réponse rapides.

Il faut bien découpler la boucle du compteur et l'affichage LCD (histoire que la bibliothèque LCD n'amène pas de la latence)
Je ne pense pas que cela posera problème, l'Arduino aura largement le temps de gérer l'affichage et les calculs, le temps d'une oscillation. Pour un très petit balancier, par exemple 10 cm, cela représente environ 300 ms.
J'éviterais le laser : c'est pas mieux et un reflet sur un balancier métallique et hop dans l'œil
Excellente remarque, j'abandonne le laser !

On parle de fréquence mais est-ce ce ne serait pas plutôt une période que l'on va mesurer ? :smt104
Très juste, mauvaise habitude de ma part ( et aussi de nombreux horlogers), je bats ma couple. Il s'agit bien de période et non de fréquence. Une fréquence s'exprime en hertz.

Est-il possible de modifier le titre de cette discussion ?

@+

JC.
 
osiver
osiver
Compagnon
7 Sept 2013
12 024
Ce n'était pas le but ! :P
Juste faire remarquer que la mesure d'une période (temps entre deux battements) est bien plus fine et rapide à cette vitesse que de compter des battements sur une certaine durée. :wink:

Pour modifier le titre : éditer le premier post 8-)
 
S
stanloc
Compagnon
29 Oct 2012
5 120
Perso j'ai ajusté le mouvement de mon carillon en plaçant une barrière IR en fin de course du balancier et ce capteur actionnait un simple compteur. Je déclenchais un chrono au début du comptage et je revenais "un certain temps plus tard" arrêter le compteur et le chrono. On a une précision aussi grande que voulue en laissant le comptage s’effectuer aussi longtemps que nécessaire. Il SUFFIT donc d'un compteur commandé par une base de temps de qualité. Nul besoin d'Arduino et autre truc compliqué. Si on a le nombre de "dents" de la roue d'échappement et celui du train d'engrenage qui fait tourner les aiguilles des heures on sait à priori quel est le nombre de coups de balancier qu'il faut pour une durée donnée.
Stan
 
JCS
JCS
Compagnon
22 Juin 2007
2 556
Cher
  • Auteur de la discussion
  • #10
Salut Stan,

Nul besoin d'Arduino et autre truc compliqué
Depuis très longtemps, je mesure le temps de 20 oscillations avec un chronographe et je me suis fait un tableur qui me permets de déterminer rapidement et facilement la période des balanciers des pendules que l'on me confie :

http://sulka.fr/bal/bal.xls

Personne ne va m'empêcher de m'amuser à fabriquer un périodemètre avec un Arduino, pour le fun et de partager.
Merci tout de même pour ton intervention (constructive).

Pourquoi ne pas analyser simplement le bruit style "ClockMaster" sur smartphone ou autre avec un bon micro-pince ?
Salut Jdg, j'en ai expliqué la raison au début de la discussion et j'ai envie de fabriquer un truc utile avec Arduino.

@+
JC.
 
S
stanloc
Compagnon
29 Oct 2012
5 120
Ce que je constate JCS, c'est que assez souvent tu lances des bouteilles à la mer en espérant accrocher des gens qui t'aideront à réaliser tes projets peut-être car tu ne maîtrises pas toute leur réalisation, c'est pourquoi moi je te proposais une solution simple que tu pourrais mener à bien tout seul.
Stan
 
JCS
JCS
Compagnon
22 Juin 2007
2 556
Cher
  • Auteur de la discussion
  • #13
Ce que je constate JCS, c'est que assez souvent tu lances des bouteilles à la mer en espérant accrocher des gens qui t'aideront à réaliser tes projets peut-être car tu ne maîtrises pas toute leur réalisation, c'est pourquoi moi je te proposais une solution simple que tu pourrais mener à bien tout seul.
Tu as raison, c'est un peu l'intérêt de ce forum. J'y ai trouvé beaucoup d'aide et de solutions. Je pense entre autre, Tronix etJpbbricole, par exemple. Je m'excuse pour tout ceux que j'oublie et qui sont très nombreux et que je remercie.

Lorsque j'en ai l'occasion, je n'hésite pas à partager mon expérience.

Je ne suis pas électronicien, mais un petit horloger de campagne curieux.
Toutefois, saches que si j'ai ouvert cette discussion, c'est parceque je suis en mesure de la memer, à ma façon, jusqu'au bout.
Rendez-vous fin mars pour la concrétisation !

Je ne te remercie pas pour ton aide.

@+
JC.
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 249
Corsier-sur-Vevey (Vaud)
Super job et super application pour un Arduino!
Il faut bien découpler la boucle du compteur et l'affichage LCD (histoire que la bibliothèque LCD n'amène pas de la latence)
Est-ce bien nécessaire si l'on travaille en interrupt pour détecter la coupure de faisceau.
J'éviterais le laser :....
Sniffff pour mon LASER je trouvais que celà apporterai un petit air NASA au projet, mais tu as entièrement raison, les IR sont plus sûres.

Cordialement
jpbbricole
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 249
Corsier-sur-Vevey (Vaud)
Re bonsoir!
Si tu utilises Programino pour développer ton programme, tu pourra tracer directement une courbe dans son plotter analogique.
Si tu veux directement envoyer tes mesures dans Excel, j'ai ce qu'il te faut.

Bonne soirée
jpbbricole
 
f6exb
f6exb
Compagnon
13 Juin 2013
1 730
En horlogerie, qu'appelle-t-on une alternance ?

Un aller-retour = une alternance ou
un aller + un retour = deux alternances ?

Je pose la question à cause de ça :
Une oscillation sur 2 sera traitée.
 
JCS
JCS
Compagnon
22 Juin 2007
2 556
Cher
  • Auteur de la discussion
  • #17
Salut Jpbbricole,

Un grand merci pour ton aide !

Dans un premier temps, je vais essayer de suivre mon idée, très simple, comme je l'ai décrite au début, en fonction de ce que je maîtrise.
Si cela fonctionne comme je le souhaite, on pourras améliorer et je suis certain, qu'ensemble, on pourra faire un truc génial et "open source" !

J'ai ouvert, un peu sous la pression, cette discussion trop tôt, car je ne suis pas en mesure d'avancer avant fin mars.

@+
JC.
 
JCS
JCS
Compagnon
22 Juin 2007
2 556
Cher
  • Auteur de la discussion
  • #18
En horlogerie, qu'appelle-t-on une alternance ?
Une alternance est une demie oscillation (période). Elle correspond à la chute d'une dent ( un tic ou un tac) libérée par une levée d'ancre. 2 alternances = 1 dent, par rapport à un point fixe :

a2bigrhm.gif


apinwhl.gif


@+

JC.
 
Dernière édition:
f6exb
f6exb
Compagnon
13 Juin 2013
1 730
Pourquoi veux-tu prendre une oscillation sur 2 ?
 
JCS
JCS
Compagnon
22 Juin 2007
2 556
Cher
  • Auteur de la discussion
  • #20
Pourquoi veux-tu prendre une oscillation sur 2 ?
Comme je l'ai dit au début, je compte utiliser un circuit bistable pour mesurer les oscillations.

Première coupure de faisceau le signal se met à haut jusqu'à la prochaine coupure ou le signal devient bas. La durée du signal haut sera mesurée avec PulseIn d'arduino. Pendant l'oscillation non mesurée, l'Arduino aura tout le temps de faire les conversions, calculs et d'afficher les résultats.
Cette solution est sûrement sommaire mais fiable et je pense la maîtriser.
C'est une base qui pourra être améliorée.

@+
JC.
 
RacingMat
RacingMat
Compagnon
30 Oct 2016
614
Marseille
Est-ce bien nécessaire si l'on travaille en interrupt pour détecter la coupure de faisceau.
C'est possible mais je pense que c'est inutile si la boucle de compteur est courte et découplée de celle de l'affichage. Mais sinon les interruptions sont bien là pour ça :)

Comme le but n'est pas d'afficher les périodes individuelles mais bien la période moyenne de l'horloge le plus précisément possible, l'appel au LCD peut ne se faire qu'une fois et à la fin.

Je suggérerai l'approche suivante dans le code :
Tadaaaa ! Ce sera le plus précis

Et pour plus de précision, il suffit d'augmenter 50

Au maximum, on peut attendre 70 minutes ensuite la valeur de l'heure en microsecondes déborde. Comme tu veux avoir une mesure rapide, c'est OK
 
Dernière édition:
JCS
JCS
Compagnon
22 Juin 2007
2 556
Cher
  • Auteur de la discussion
  • #22
Merci RacingMat pour cette approche intéressante.

Voilà comment je vois les choses :

PulseIn attend le niveau haut du bistable et mesure sa durée,
Convertit en A/H (alternances/heure) => 3600 secondes ( 1 heure ) / durée alternance ( convertie en secondes ),
Affichage sur la première ligne de l'afficheur du résultat,
Compteur incrémente le nombre de mesures,
Calcul de la moyenne des mesures,
Affichage sur la 2è ligne du nombre de mesures et de la moyenne.

Et ça recommence...

Il serait peut-être bon que la première mesure ne soit pas significative.

@+

JC.
 
RacingMat
RacingMat
Compagnon
30 Oct 2016
614
Marseille
mais l'erreur de mesure (du montage complet) sera reportée complètement dans ta moyenne
alors qu'avec la mesure de l'intervalle total des 50 battements, cela va diviser l'erreur du montage par 50 :wink:

mais oui, ça marchera aussi :smt023 et peut-être que l'erreur ne sera pas un problème pour ton usage :)
 
petit_lulu
petit_lulu
Compagnon
11 Jan 2015
841
gers
perso je programmerai tout ca en ASM (j'aime pas arduino, je prefere les pic :roll::-D)
lors d'un premier passage, je declenche un compteur a la frequence d'horloge du µC par interruption.
sur les pic il y a meme des broches de declenchement direct des timer, il y a peut etre la meme chose sur arduino...
au second passage j'arrete le compteur toujours sur interruption (je gere les depassements de compteur si le temps est trop important)
je range les valeurs obtenu dans une memoire FIFO, par exemple 16 valeurs
a chaques nouveau passage, je fais la moyenne des valeurs du registe FIFO (rien de difficile, 16 sommes et 1 division par 16 soit un decalage de 4 bits)
j'affiche la valeur direct en µs ou ms ou...
de cette facon je connais precisement et rapidement la periode du balancier et je peut corriger facilement.

faire attention a la derive de la frequence du quartz du µC...
 
JCS
JCS
Compagnon
22 Juin 2007
2 556
Cher
  • Auteur de la discussion
  • #26
De toutes les façons, des erreurs il y en aura sûrement beaucoup !

* la fréquence du quartz de l'Arduino ne satisfera sûrement pas à un usage horloger, il faudra la déterminer et appliquer une correction.

* La mesure s'effectuera sur un temps court. Pas forcément représentatif du fonctionnement moyen de la pendule ( irrégularité de construction du rouage).

* Etc...

Mais tout cela n'est que supputations. Tant que cela n'existera pas, on ne pourra pas quantifier l'erreur.
La quantifier permettra de la corriger en partie, certainement.

Si l'on peut approcher 1 minute/jour, se sera déjà très bien, cela fait 1/1440.

@+
JC.
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 249
Corsier-sur-Vevey (Vaud)
PulseIn attend le niveau haut du bistable et mesure sa durée
L'idée du bistable est excellente, ainsi c'est toujours le même événement qui déclenche. Par contre, je suis moins fan de PulseIn si on veut être précis, on ne sait pas ce qui se passe dans cette "boîte" et pendant la mesure on est bloqué.
Pour un si beau projet, ça vaut la peine d'utiliser les interrupt de l'Arduino et le timer. Ainsi on maitrise toute la chaîne et il n'est plus nécessaire de contrôler d'hypothétiques erreurs ou dérives.

Cordialement
jpbbricole
 
T
tronix
Compagnon
6 Mar 2012
1 486
Toulouse
Bon, chacun y va de son avis...
Une moyenne sur plusieurs battements est une bonne façon d'améliorer la précision, et sur un nombre pair pour répondre au critère initial d'un battement sur deux. Mais on doit déjà pouvoir faire une mesure précise sur 2 alternances. La programmation est meilleure si on utilise bien les périphériques du processeur, et sur les PIC, on peut faire des mesures de temps sans (quasiment) aucune ligne de code. Je suppose que c'est identique sur beaucoup de processeurs, mais je connais surtout les PIC(32) que j'utilise tous les jours, et je découvre de nouvelles façons tous les jours (ou presque) aussi. En ce moment, je refais une application de démodulation radio (pro), que j'avais faite il y a quelques mois avec l'aide d'un FPGA, cette fois juste avec un PIC32MZ, et c'est impressionnant ce qu'on peut faire avec les modules DMA bien utilisés. Car dans mon application, le moindre jitter est préjudiciable au bon fonctionnement des filtres, des DAC et ADC, et le traitement sous interruption n'est pas assez stable (même avec une horloge à 200MHz).
Et tout en C. Il ne me viendrait jamais à l'idée de conseiller de programmer une telle application (celle du post) en assembleur, cela n'a absolument aucun intérêt. Surtout que l'assembleur de ces processeurs est imbuvable. Les compilateurs sont très efficaces, et pour faire mieux en assembleur, il faut s'accrocher !
Bon, c'est vrai que les programmes Arduino que j'ai vus sont souvent mal faits et totalement inefficaces, avec des boucles d'attente partout (à bannir totalement). Mais ce n'est pas une fatalité.
 
RacingMat
RacingMat
Compagnon
30 Oct 2016
614
Marseille
Si la dérive du quartz de l'arduino vous inquiète, pour quelques euros il y a le module DS3231 qui est une horloge temps réel (RTC) qui contient un quartz qui est compensé pour les dérives suivant la température.

Mais je n'ai lu les specs sur la dérive du quartz de l'arduino, je ne saurai pas dire quelle est son ampleur et si cela serait préjudiciable ici
 
T
tronix
Compagnon
6 Mar 2012
1 486
Toulouse
Un oscillateur quartz autour de +/-1ppm vaut moins de 2 euros, et on trouve des TCXO encore meilleurs dans les mêmes prix. Donc, on peut tout simplement changer celui d'origine, c'est plus facile pour la programmation que de s'embêter avec un module supplémentaire.
Mais j'ai l'impression que cela part un peu dans tous les sens, il faut commencer par la détection du mouvement. Le reste n'est qu'affaire de bon sens. Et un oscillateur 1ppm ne sert à rien si la programmation ne suit pas.
 
Haut