PC-RM4V 2.2 |
Programme du chronocomparateur PC-RM4 |
Téléchargements
|
Aperçus d'écrans
|
Documentation
|
Bugs connus
|
Anciennes versions
|
Introduction
Le logiciel téléchargeable sur cette page est le programme du chronocomparateur PC-RM4. Vous trouverez ici toutes les indications pour réaliser la partie matérielle de ce chronocomparateur. Pour mémoire, ce chronocomparateur d'atelier est de faible coût tout en proposant une résolution de mesure de 25ns au lieu de 4µS pour les versions précédentes.
Le chargement du logiciel sur le chronocomparateur nécessite l'utilisation d'une sonde ST-LINK V2 de faible coût. Vous trouverez toutes les informations à ce sujet sur la page déjà mentionnée.
Exécutable pour le chronocomparateur PC-RM4
Chargement Version 2.2 : ce programme permet de mesurer les caractéristiques d'une montre mécanique afin d'en effectuer le réglage. Les données mesurées sont l'écart par rapport au battement attendu, la moyenne de cet écart depuis le début de la mesure, l'avance-retard sur 24h00, le tout, avec une très grande résolution et précision de mesure. Il permet également de mesurer l'angle de levée et propose un affichage de la forme du signal récupéré par le capteur qui mmesure le tic-tac de la montre.
Documentation technique
Environnements et plateforme cible
- S'exécute sur une carte de développement à base de STM32F407VET6. Il s'agit de la carte de développement STM32_F4VE ou la carte de développement DevEBox.
- La carte STM32_F4VE utilise un écran 320x240 directement connectable sur la de développement. Une version avec écran SPI 480x320 a également été développé.
- Pour la carte DevEBox, le chronocomparateur dispose d'un circuit imprimé. Le connecteur de l'écran est prévu pour l'afficheur 3.2" TFT LCD Color MBR3205.
- Environnement de développement : STM32CubeIDE
- Téléchargement possible de l'exécutable fourni avec le programme ST Link Utility.
Fichiers et répertoires
Il existe plusieurs versions du logiciel selon la configuration choisie pour l'affichage (320x240, bus parallèle, 480x320, bus SPI, Carte DevEBox, carte STM32_F4VE, etc.).
Les parties indépendantes du matériel (comprendre, indépendante de l'écran, du TouchScreen et des LED) sont regroupées dans le répertoire pcrm4_commun nommé [1] par la suite.
Les autres parties sont dans les répertoires nommés [2] :
- pcrm4_320x200 pour l'écran 320x240 avec bus parallèle et la carte STM32_F4VE.
- pcrm4_480x320SPI pour l'écran 480x320 avec bus SPI et la carte STM32_F4VE.
- pcrm4_DevEBox pour l'écran 3.2" TFT LCD Color MBR3205 320x240 et la carte de développement DevEBox.
- Sources :
- main.c et main.h : initialisation du matériel [2].
- principal.c et principal.h : programme principal [1].
- lcd.c et lcd.h : gestion de l'afficheur (bas niveau) [2].
- led.c et led.h : gestion des LEDs [2].
- capteur.c et capteur.h : gestion du capteur de mesure [1].
- nvmemory.c et nvmemory.h : gestion de la mémoire non volatile [1].
- touch.c et touch.h : gestion du TouchScreen et calibrage [2].
- affichages.c et affichages.h : gestion des écrans d'affichage et des boutons [1].
- Adafruit_GFX.c, Adafruit_GFX.h et polices de caractères : gestion afficheur (haut niveau) [1].
- Utilitaires.c et utilitaires.h : divers utilitaires [1].
- Parametre.c et Parametre.h : gestion de l'écran de paramétrage [1].
- Autres fichiers générés par l'environnement de développement [2].
- pcrm4_320x240.xx : exécutable directement téléchargeable dans la carte de développement STM32_F4VE avec l'utilitaire ST Link Utility pour la version avec écran 320x240 parallèle.
- pcrm4_480x340.xx : exécutable directement téléchargeable dans la carte de développement STM32_F4VEavec l'utilitaire ST Link Utility pour la version avec écran SPI 480x320 (ILI9488).
- pcrm4_devebox.xx : exécutable directement téléchargeable dans la carte de développement DevEBox l'utilitaire ST Link Utility pour la version avec écran 320x240 parallèle MBR3205.
Précisions sur le contenu des fichiers
touch.c et touch.h
Il y a 4 constantes de compilations pour la mise au point ou la vérification du bon fonctionnement du TouchScreen :
- TEST_XPT2046_XY : test des valeurs X et Y lues sur le contrôleur du TouchScreen. Boucle indéfiniment.
- TEST_XPT2046_Z : test des valeurs lues Z (pression) sur le contrôleur du TouchScreen. Boucle indéfiniment.
- TEST_CALIBRE : affiche les écarts entre les points de l'écran pour la calibration et ceux calculés suite à une calibration. Un écart > 20 pixel est considéré comme une erreur.
- TEST_ORIENTATION : permet de tester le TouchScreen selon les différentes orientations de l'écran. Permet de faire 4 tests par orientation avant le passage à l'orientation suivante. Boucle indéfiniment.
Ces constantes sont prises en compte dans principal.c et permettent l'appel aux fonctions de test de touch.c.
Autres constantes à considérer parmi d'autres :
- LCD_CONTR : texte à afficher sur l'écran d'accueil (modèle de contrôleur).
lcd.c et lcd.h
Constantes à considérer parmi d'autres :
- DEF_320x240 : à définir pour les écrans 320 x 240 pixels (ou inférieurs à 480 x 320).
- DEF_480x320 : à définir pour les écrans 480 x 320 pixels ou plus.
- LCD_CONTR : texte à afficher sur l'écran d'accueil (modèle de contrôleur).
utilitaires.c et utilitaires.h
Les textes affichés par le programme se trouvent dans ces fichiers. Pour ajouter une nouvelle langue&snbp;:
- Dans utilitaire.h, ajouter la langue dans "enum TLangue {LFrancais,LAnglais,LDebordement};" avant LDebordement. Exemple : vous voulez ajouter l'italien, "enum TLangue {LFrancais,LAnglais,LItalien, LDebordement};"
- Dans utilitaire.c, ajouter un "case" pour LItalien, recopiez les textes d'une langue (celle avec laquelle vous vous sentez le plus à l'aise) dans cette nouvelle entrée, traduisez le textes puis recompilez. Au prochain démarrage, la nouvelle langue sera proposée dans l'écran de paramétrage.
Explications de la logique pour le comptage
Une horloge interne du processeur (42 à 84MHz) fournit une horloge AB1 qui va alimenter des compteurs 32 bits (TIM2 et TIM5) du microcontrôleur, les compteurs étant pilotés par une logique de commande réalisée autour de deux bascules U3A et U3B pilotée par le microcontrôleur. C'est la principale nouveauté de PC-RM4 par rapport aux précédents chronocomparateurs PC-RM1 et PC-RM3, la commande des compteurs est indépendante de l'activité du microcontrôleur.
Notations:
- Les entrées des bascules U3A et U3B sont notées /R, /S, C, D, Q et /Q qui sont suffixées par le nom de la bascule (U3A ou U3B).
- L représente le signal Low (0V), H représente le signal High (3,3V).
La sortie de la carte amplificatrice "Horloge" est reliée aux entrées U3AC et U3BC (C par la suite) des bascules.
La sortie de la carte amplificatrice "Analog" est reliée à l'entrée analogique PA4 du microcontrôleur.
Les entrée U3AS et U3BS sont inactive (reliée à H).
Le microcontrôleur génère un signal Enable sur PA2 et sur PA3.
- PA2 = PA3 = L signifie qu'il n'y a pas de comptage.
- PA2 = H et PA3 = L signifie que le déclenchement du comptage est attendu sur PA0 relié au compteur TIM2 du microcontrôleur.
- PA2 = L et PA3 = H signifie que le déclenchement du comptage est attendu sur PA1 relié au compteur TIM5 du microcontrôleur.
Les entrées U3A/C et U3C/C sont reliées au OU de PA2 et PA3. Donc, pour arrêter tout comptage, il faut positionner PA2 et PA3 à L.
L'entrée U3AD est reliée à PA2. L'entrée U3BD est reliée à PA3.
U3A/Q et U3B/Q sont reliés à PA0 et PA1 du microcontrôleur. Le changement d'état de U3A/Q ou U3B/Q génére une interruption sur le microcontrôleur et surtout, autorise le comptage en mode Gated sur le microcontrôleur.
Récapitulatif du câblage :
Carte capteur | Microcontrôleur | ||
U3A/Q (6) | Compteur 1 | PA0 | TIM2 |
U3B/Q (8) | Compteur 2 | PA1 | TIM5 |
U3AD (2) | PA2 | ||
U3BD (12) | PA3 | ||
Horloge | U3AC et U3BC | ||
Analog | Signal analogique | PA4 | Entrée analogique |
Le tableau ci-après donne les différents états du comptage avec pour chaque état, la valeur initiale des principales entrées et sorties (0=L, 1=H).
La partie en bleu donne les entrées avant un changement d'état sur C, la partie orange donne les sortie après ce changement d'état. Un X dans la colonne C indique que les valeurs des sorties sont les mêmes que C change détat ou non. Un 0 dans la colonne C indique que la valeur de C vaut 0 (ou L) et ne change pas. Une flêche indique un changement d'état (dans le cas présent, uniquement de L vers H).
Etats du système de comptage
Durée d'occultation
Pour comprendre les explications ci-après, il est nécessaire d'expliquer la notion de fenêtre d'occultation.
Supposons qu'un certain Tic intervienne au temps T1. Le suivant doit intervenir au temps T2 = T1+durée d'une demi période.
La fenêtre de mesure autorisée est centrée sur T2. Les impulsions ne sont prises en compte que dans la zone verte. Si une impulsion survient dans la première zone grisée en rouge (avant T2), elle est ignorée. Si l'impulsion survient au delà de la zone verte, cela signifie probablement qu'un signal a été perdu. Le chronocomparateur ignore cette donnée et tente de se resynchroniser sur une autre impulsion.
Pour une montre qui bat à 18000 coups par heure, la demi-période (durée entre un Tic et un Tac) est de 200ms. Si l'on choisit une durée d'occultation de 9/10, les impulsions ne seront prises en compte qu'entre T1+180ms et T1+220ms.
Une durée d'occultation de 9/10 de la pdemi-période permet d'éliminer les phénomènes parasites.
Etat initialisation (Etat0)
Le programme du processeur bloque le comptage en mettant PA2 et PA3 à L ce qui active U3A/R et U3B/R et positionne les sorties U3A/Q et U3B/Q à L. Donc, quelque soit la valeur de C, /Q1 et /Q2 valent L et ce, quelques soient les variations de C et TIM2 et TIM5 ne s'incrémentent donc pas.
Démarrage du comptage (Etat1)
Le programme attend un début de TIC (ou de TAC). Pour ce faire, il attend que le signal sur C vaille L "un certain temps" qui dépend du battement de la montre. Ce temps écoulé sans qu'un TIC ou un TAC ait eu lieu, le programme initialise TIM2 et TIM5 à 0 et positionne PA2 à H alors que PA3 reste à L. U3AD = PA2 vaut H et U3BD = PA3 vaut L.
Tant qu'il n'y a pas de signal sur C, U3A/Q et U3B/Q restent à leur valeur initiale (celle de l'état précédent), c'est à dire H. Donc, TIM2 et TIM5 ne s'incrémentent pas.
Etat Comptage 1 (Etat2)
Une première impulsion arrive sur C. Comme U3AD vaut H, U3A/Q va passer à L ce qui va entrainer le comptage dans TIM2. Comme U3BD vaut L, U3B/Q reste à H et donc TIM5 ne s'incrémente pas.
Le changement d'état de U3A/Q génère une interruption sur le processeur qui va alors déclencher le timer de la fenêtre d'ocultation ce qui correspond à l'Etat3. A la fin de cette fenêtre, on passe dans l'état Fin Fenêtre 1 (Etat 4).
Etat Fin Fenêtre 1 (Etat4)
Le microcontrôleur positionne PA3 à H et PA2 à L (dans cet ordre, sinon, on réinitialise les bascules à U3A/Q = U3B/Q = H).
Puisqu'on vient de sortir de la fenêtre d'occultation, le signal en sortie d'amplificateur connecté à C ne bouge pas et est à l'état L (sauf si la montre présente de graves défauts ou si la valeur du battement sélectionnée est (très) incorrecte). On a donc toujours U3A/Q qui vaut L et U3B/Q qui vaut H. Donc, TIM2 continue de s'incrémenter et TIM5 ne s'incrémente pas.
Tant que le signal en sortie de l'amplificateur ne change pas, on reste dans cet état. Si le signal change (passe à l'état H sur C, Etat5), la logique passe dans l'état Comptage 2 (Etat6).
Etat Comptage 2 (Etat6)
PA2 vaut L, PA3 vaut H, un front d'horloge arrive sur C.
Puisque U3BD vaut PA3 qui vaut H, la sortie U3B/Q va prendre la valeur L et donc TIM5 va commencer à compter les impulsions d'horloge. A l'inverse, U3A/Q va passer à H et donc TIM2 ne s'incrémentera plus. On utilise le changement d'état de U3A/Q ou U3B/Q pour générer une interruption qui permettra au microprocesseur de lire la valeur du compteur TIM2, le remettre à 0 et déclencher le timer de la fenêtre d'occultation. A la fin de cette fenêtre, on passe dans l'état Fin Fenêtre 2 (Etat 7).
Etat Fin Fenêtre 2 (Etat7)
Le microcontrôleur positionne PA2 à H et PA3 à L (dans cet ordre, sinon, on réinitialise la bascule à U3A/Q = U3B/Q = H).
Puisqu'on vient de sortir de la fenêtre d'occultation, le signal en sortie de l'amplificateur ne bouge pas et est à l'état L (sauf si la montre présente de graves défauts ou si la valeur du battement sélectionnée est (très) incorrecte). On a donc toujours U3B/Q qui vaut L et U3A/Q qui vaut H, et donc, TIM5 continue de s'incrémenter tandis TIM2 ne compte pas d'événements.
Au premier changement d'état de C, on passe dans l'Etat Comptage 1bis (Etat8).
Etat Comptage 1bis (Etat8)
PA2 vaut H, PA3 vaut L, un front d'horloge arrive sur la logique de commande.
Puisque U3AD vaut PA2 qui vaut H, la sortie U3A/Q va prendre la valeur L. A l'inverse, U3B/Q va passer à H et donc TIM5 ne s'incrémente plus. On utilise le changement d'état de U3A/Q ou U3B/Q pour générer une interruption qui permettra au microprocesseur de lire la valeur du compteur TIM5, de le remettre à 0 et de déclencher le timer de la fenêtre d'occultation. A la fin de cette fenêtre, on passe dans l'état Fin Fenêtre 1 (Eta4), et ainsi de suite.
L'intérêt de cette logique est que le comptage ne dépend plus du programme avec les risques de masquage des interruptions dues au traitement d'autres interruptions.
Les interruptions générées par U3A/Q ou U3B/Q ne nécessittent pas un traitement immédiat. Les durées se comptent en dizaines de millisecondes du côté du signal provenant de la montre alors que le déclenchement de l'interruption et le traitement vont se compter en microsecondes côté programme. Mais ce qui est important, c'est que le comptage ne dépend pas des éventuels délais de réaction du microprocesseur, tant qu'on ne passe pas quelques dizaines de millisecondes ce qui (sauf bug) ne se produit jamais (on sera plutôt au niveau de quelques microsecondes).
Avec les timers TIM2 et TIM5, il est possible de compter jusqu'à 107 secondes avec une précision de 25nS (40MHz).
Bugs connus
Vous pouvez signaler les bugs des programmes en utilisant le contact indiqué sur la page d'accueil. "m" pour mineur, "M" pour majeur, "A" pour amélioration.
Version 2.2
A : Simplification du calcul de l'amplitude. Les versions précédentes proposaient une recherche de 2 ou 3 pics pour calculer l'amplitude. Seule la version 2 pics est conservées (1er pic = déclenchement, 3ème pic = pic de valeur la plus élevée.
A : Amélioration de l'affichage en mode "scope" avec F0 (pas de filtre).
Version 2.1
Première version mise en Téléchargement.