Réécriture des fonctions de base.

Codage des fonctions de base et leurs particularités.

Dans ce chapitre nous allons passer en revue chaque fonction de base pour en préciser les caractéristiques d’affichage et éventuellement les particularités logicielles. La préoccupation permanente lors du développement sera la minoration du temps nécessaire pour effectuer une mesure, effacer les zones concernées sur l’afficheur et tracer les nouvelles valeurs. On doit en outre effectuer un antiparasitage par lissage lors de la mesure sur un nombre suffisant de numérisations. Chaque module sera issu d’un compromis acceptable conduisant à des mesures fiables
et à une rapidité de rafraichissement suffisante. Avant de s’aventurer dans des codages fastidieux, vérifions la faisabilité, c’est à dire la possibilité d’un affichage numérique et analogique simultané sans pour autant trop pénaliser la fluidité. Le programme P07_TEST_ruban_analogique.ino effectue des mesures de tension continue sur l’entrée E dans la boucle de base, en inversant l’état de la LED 13 d’Arduino à chaque rafraichissement. Un fréquencemètre numérique utilise cette sortie pour mesurer le taux de rafraichissement. Les résultats sont donnés dans le tableau ci-contre. Ne pas effacer et réafficher le ruban analogique ne modifie pas la cadence de façon significative. Ces mesures montrent que l’on ne peut espérer la quasi instantanéité d’affichage obtenue sur le MINI LABORATOIRE. Dans le programme complet on limitera l’antiparasitage à 50 mesures. Le taux de rafraichissement de 4 à 5 fois par seconde reste malgré tout très acceptable et conduit à un instrument pleinement opérationnel. Nous pouvons programmer sur ces bases.

Spécificités d’affichage des diverses fonctions de base.

Élaborer un oscilloscope numérique expérimental « perfectionné » ne sera acceptable que si l’ensemble des fonctions de base est déjà implémenté et laisse assez de place en mémoire de programme et surtout en mémoire dynamique. Les premières fonctions réécrites ont montré un taux de remplissage de la mémoire de programme assez alarmant et de mauvaise augure. La prise en compte de ce constat initial obligeait à envisager des restrictions. S’il s’avérait impossible d’assurer la totalité des fonctions du MINI LABORATOIRE, n’écarter que les plus marginales et conserver si possible les plus « fréquentées ». Pour assurer à notre PICOLAB une réelle polyvalence, les items fondamentaux du MENU ont donc été satisfaits en premier et dans l’ordre.

Rafraichir l’écran entre trois et quatre fois par seconde est largement suffisant pour la grande majorité des types de mesurages effectués. Un cas particulier, toutefois, rend la fonction relativement peu utile : Celui du chronomètre. En effet, compte tenu de la « lenteur relative des affichages », il n’est plus possible de faire fonctionner notre instrument au dixième de seconde. Le programme P08_CHRONOMETRE.ino contient la version PICOLAB du chronomètre. Le bouton FC+ déclenche ou stoppe l’évolution. La touche FC- force la valeur à zéro sans modifier l’état d’évolution qui reste en PAUSE ou en comptage. Notez que pour optimiser la rapidité de comptage lors des essais, la plus petite écriture a été implémentée pour minimiser les durées d’effacement. Vu la cadence lente de cette fonction, j’ai décidé de l’écarter provisoirement des possibilités du PICOLAB. Cette décision arbitraire nous évite d’avoir à créer un petit adaptateur pour pouvoir brancher la poignée. Passons maintenant à l’étude des diverses fonctions de base.

Globalement, les divers écrans vont se ressembler. Nous trouverons dans la zone orange soit un titre de la fonction avec un cadre supérieur, soit une échelle linéaire analogique. Un grand cadre délimitera la zone bleue dans laquelle seront affichées la ou les valeurs numériques. Pour minimiser la taille du code généré, les deux cadres ainsi que l’échelle graduée pour la présentation analogique sont émulés par des procédures de servitude invoquées à la demande.
Les procédures de formatage diverses étant en place, créer chaque fonction de base s’est alors avéré une opération assez routinière. Chaque module une fois mis au point dans DEVELOPPEMENT.ino était intégré progressivement dans P30_PICOLAB_complet.ino pour évaluer au fur et à mesure l’espace mémoire restant pour ajouter de nouvelles options. Comme nous l’avions déjà constaté dans les versions précédentes, les débuts sont très gloutons en octets. Puis, progressivement on fait appel de plus en plus à des procédures existantes. Le code enfle alors plus modérément nous laissant l’espoir de pouvoir intégrer un maximum d’outils de mesurage.

Pour éviter une inflation de petits programmes démonstrateurs, seuls les essais particuliers ont été retenus. Pour analyser les petits détails de programmation, il vous suffira de consulter le listage de P30_PICOLAB_complet.ino reprenant les « séquences actives » du MINI LABORATOIRE. (Pour le programme complet, le numéro d’ordre 30 a été choisi pour laisser potentiellement un nombre possible de démonstrateurs important. Cette valeur élevée le place à la fin dans le dossier des programmes. Il est donc facile à repérer dans la liste.) Passons à l’analyse des diverses fonctions de base créées durant les développements initiaux :

Voltmètre pour tensions continues calibre 5Vcc.
C’est l’incontournable fonction de base qui a servi à définir assez précisément la présentation de l’écran bicolore, sachant maintenant que la compatibilité avec l’écran monochrome tout blanc ne pose pas de problème particulier. Cette présentation de base sera reprise pour tous les mesurages qui n’engendrent comme résultat qu’une seule valeur numérique. La taille de l’affichage numérique est alors la plus grande pour faciliter la lecture d’un peu loin quand l’appareil de mesures est placé en recul sur le plan de travail.

Voltmètre pour tensions continues calibre 50Vcc.
Informatiquement, nous n’allons pas attraper une méningite car on continue à mesurer sur E, le programme « ne voit » strictement aucune différence. C’est l’utilisateur qui branche sa sonde de mesure sur la  borne électrique insérant en série la résistance de 3,3MΩ. Tout au plus on adapte la valeur du #define Koef_50V qui corrige la précision pour le calibre +50Vcc. On affine la valeur de cette constante de façon à voir afficher exactement 50.0v quand cette tension est appliquée en entrée de l’appareil. Compte tenu des divers SHUNTs mis en ligne, des dépassements de valeurs sont possibles par rapport à la limite de +5Vcc du convertisseur analogique numérique de l’ATmega328. De ce fait on pourra effectuer des mesures à des tensions dépassant un peu les 50Vcc du calibre. Comme montré sur la Fig.60 dans le médaillon rouge, le  ruban analogique dépasse alors le cadre de l’échelle graduée. Ce petit dépassement n’est pas effacé lorsque l’on revient à des valeurs respectant le calibre. Il faudrait effacer plus loin, et reconstituer le cadre orange pour éliminer cet effet de mémoire. Comme le rapport Coût en octets/Agrément obtenu est jugé défavorable, ce petit perfectionnement n’a pas été retenu. Ce calibre n’impose en définitive que deux petites modifications dans le programme :
• Ajustement de la précision logicielle des valeurs des SHUNTs,
• Remplacer les affichages 0 à 5 par 0 à 50 sur l’échelle graduée analogique.
On double ainsi le nombre d’options dans le MENU avec une augmentation très faible de la taille du code et des variables dynamique. C’est très bon pour le moral ça …

Ampèremètre courant continu calibre 50mA.
Encore une fonction qui se résume informatiquement à peu d’ajouts dans le programme complet. On retrouve une déclaration d’une nouvelle constante #define Koef_50mA qui corrige logiciellement la précision du SHUNT. Il y a reprise de l’échelle graduée analogique avec les valeurs comprises entre 0 et 50. Tout en bas du cadre bleu, l’information précise que si l’on convertit la valeur analogique entre 0 et 5 on obtient en volts la chute de tension que génère dans la ligne électrique l’insertion de notre multimètre. Ainsi l’opérateur est averti de la perturbation notable qu’engendre notre instrument de mesures et dont l’opérateur doit absolument tenir compte.

Ampèremètre courant continu calibre 500mA.
Ce calibre est pratiquement gratuit sur le plan logiciel. Il ne fait qu’ajouter un aiguillage dans le MENU et un recalcul pour tenir compte de la constante #define Koef_500mA qui appointe la portée de la mesure. La rampe analogique reprend les graduations de 0 à 5, et c’est à l’opérateur de multiplier par 100 l’affichage analogique. Comme l’affichage numérique est sans confusion possible, reprendre les valeurs de l’échelle graduée a été éliminé. En effet, les essais ont montré que les valeurs 100 à 500 ne pouvaient pas être dégagées des petits traits verticaux. Le bas du cadre bleu reprend la ligne d’avertissement relative à la chute de tension aux bornes du SHUNT de 10Ω 2W.

La mesure des résistances.
Déjà abordé dans ce didacticiel, le calibre pour 10Ω a été abandonné. En affinant la valeur limite de 4990 dans l’instruction
if (Tension_lue <= 4990) Afficher_la_valeur_de_R();
on autorise des mesures jusqu’à pratiquement 500kΩ. L’expérience prouve que cette valeur permet de différencier de façon très fiable la non présence d’une résistance entre les sondes de mesure. Dans ce cas l’affichage devient / / / / / / /. Dans le rectangle orange est précisée la portée « raisonnable » des mesures possibles. Enfin en bas on observe la tension aux bornes de l’échantillon mesuré. Par exemple pour une LED rouge on obtient 0,64V pour 636Ω internes.

Voltmètre pour tensions alternatives calibre 60V∼.
Pour simplifier le logiciel et alléger le MENU de base, le calibre 30V a été abandonné. Cette optimisation se justifie par le fait que la pratique montre que le calibre 60V convient parfaitement pour les tensions faibles. Pour vous en rendre compte, le tableau présenté en bas de cette page montre que l’écart entre la valeur affichée et la valeur réelle reste inférieur à 1 volt sur toute la plage des mesures. L’échelle analogique n’a pas de graduations verticales, les indications numériques étant suffisantes. Elle commence à la valeur de 0.5 compte tenu de la fonction de transfert. Comme pour le cas de la Fig.60 un débordement de calibre laisse un « résidu » hors échelle graduée.

x

x

x

La mesure des FRÉQUENCES.
La Fig.64 donnée ci-contre présente l’écran quand le PICOLAB mesure le signal PWM qu’il génère simultanément pour pouvoir effectuer un autotest. Le cadre orange qui précise en titre la nature de la fonction en cours propose également un rappel pour l’opérateur. Il conseille de ne pas utiliser cette fonction pour les fréquences inférieures à 1000Hz. Le nombre de chiffres significatifs est dans ce cas de trois, alors qu’en périodemètre il devient supérieur à quatre. En grand nous avons la fréquence réellement mesurée. En petit sur la ligne du bas une évaluation de la période effectuée par calcul. (Pour 491Hz il serait plus précis d’utiliser la fonction Périodemètre.)

La mesure des PÉRIODES.
C’est la réciproque de la fonction précédente. On inverse la nature des données affichées. C’est la période du signal qui est effectivement mesurée, et l’on déduit par calcul la valeur de la fréquence qui en résulte. Le titre orange est toujours complété par le petit texte qui suggère que si la fréquence dépasse 1000Hz il vaut mieux changer de fonction pour effectuer les mesures. Nous constatons que dans le cas présent, la valeur de la période est quatre fois plus précise. Si vous êtes dans un contexte où la précision des mesures est un facteur important, il faudra impérativement sélectionner la fonction la mieux adaptée dans le MENU de base.

NOTE : Pour visualiser l’activité du programme, la LED jaune change d’état au début de chaque mesure. Pour le fréquencemètre elle « bat » la seconde, y compris s’il n’y a pas de signal en entrée E. En Périodemètre les mesures se font par détection de front montant et descendant. S’il n’y a pas de signal présent en entrée E, la boucle de mesurage est « inerte » et l’état de la LED ne change pas. Le logiciel est bloqué et l’on ne peut sortir de cette situation qu’en appliquant un signal en entrée E ou en effectuant un RESET.

La mesure des IMPULSIONS.
Du point de vue informatique, par analyse des fronts montants et descendants, on commence par mesurer la durée de l’impulsion « positive », puis celle de l’impulsion « négative ». Ce type de mesure n’est généralement pertinent que sur des signaux rectangulaires. Sur une sinusoïde par exemple les valeurs ne représentent pas grand chose de concret ou de réellement utilisable. Puis, avec les durée au niveau « 1 » et au niveau « 0 », le logiciel en effectue la somme pour déduire la Période, à partir de laquelle il évalue la Fréquence et le rapport cyclique. La Fig.66 montre la présentation d’écran adoptée.
Arrivé à ce stade des études, j’ai estimé que les nouvelles fonctions prioritaires à émuler seraient celles relevant de la génération d’un signal périodique, me réservant plus tard si la non saturation de mémoire le permet, de compléter la liste par d’autres modules de mesurage. Passons en revue de détail la trilogie concernée. Ces trois fonctions actuellement intégrées au programme P30_PICOLAB_complet.ino n’ont pas été forcément développées dans l’ordre du MENU. Du reste, si vous consultez le listage source, vous avez au début une zone de remarques qui précise l’état d’occupation de la mémoire à chaque étape du projet. On a ainsi l’incidence d’encombrement engendré par chaque module ajouté. Cette documentation réalisée au cours du temps classe les modules par leur ordre dans le MENU de base. On peut vérifier que la taille du programme n’augmente pas régulièrement. C’est la colonne PGM qui réordonnée par tailles occupées croissantes permet de reconstituer la chronologie réelle d’intégration des diverses fonctions dans le programme complet. Nous pouvons maintenant passer à l’étude « ordonnée » des trois modules de génération de signaux.

La génération d’un signal PWM.
C’est ce type de fonction que nous utilisons en programmation C++ de l’IDE pour commander progressivement la luminosité d’une LED, la température générée par une résistance, la déviation d’un galvanomètre à cadre mobile etc. Dans ce type d’application, souvent on numérise « un potentiomètre » entre 0 et 1023, on transpose entre 0 et 254 et l’on utilise l’instruction analogWrite(Sortie_PWM, NNN);
La Fig.67 présente l’écran de cette fonction. En texte grand nous avons le titre de la fonction et à droite la valeur de la commande numérisée Cmd avec en dessous en PWM la transposition entre 0 et 255. La ligne du bas calcule le rapport cyclique du signal généré. Ce dernier est visualisé en analogique dans la zone orange, sachant que l’échelle 0-5 doit être interprétée comme allant de 0 à 1. Les applications sont innombrables, vous en découvrirez forcément au cours de vos expérimentations électronicoinformatiques.

La fonction ÉTALON de FRÉQUENCES.
Servant de référence temporelle, personnellement je ne saurais me passer d’un tel module. Il ne faut donc pas s’étonner de constater qu’il a été considéré comme très important. La Fig.68 présente un écran dépouillé. Le titre orange annonce la fonction, le texte en gros la valeur actuellement générée. Pas moins de dix huit fréquences sont possibles, échelonnées entre 50Hz et 50kHz. C’est largement de quoi couvrir nos besoins dans ce domaine. Les boutons FC+ et FC- courts font changer la tonalité générée alors que FC+ et FC- longs font passer à la fonction suivante ou précédente dans le MENU.

Le générateur BASSES FRÉQUENCES.
C’est également un incontournable à mes yeux. Il complète le MENU des fonctions de base, celles que j’utilise assez régulièrement. Reprenant la philosophie de son grand frère, FC+ et FC- courts permettent de sélectionner l’une des quatre gammes possibles. Dans chaque plage indexée dont les valeurs sont précisées dans la petite ligne de texte du bas, la fréquence est ajustée avec le potentiomètre. La couverture totale s’étend de 30Hz à légèrement plus de 50000Hz. Enfin, pour respecter le comportement global du clavier, FC+ et FC- longs font passer à la fonction suivante ou précédente dans le MENU.

L’ensemble des fonctions considérées comme importante pour conduire à un laboratoire réellement polyvalent étant émulées, la place en mémoire encore disponible reste relativement importante. On peut envisager sereinement de développer un petit oscilloscope numérique. Sa bande passante n’est pas très importante, mais ses modestes performances en rapidité d’échantillonnage n’en font pas moins un outil expérimental très intéressant. L’écran graphique permettant de tracer ce que l’on veut ouvre un champ d’évaluation extraordinaire. Comme tout est possible, avant de s’engager dans le codage d’un module complexe, une étape intermédiaire est souhaitable pour tester diverses variantes d’affichage et en estimer la pertinence. De nombreuses possibilités ont été évaluées. La sélection finale est disponible dans le petit démonstrateur P09_Simuler_oscilloscope.ino à partir duquel sont extraites les Fig.70 A, B, C et D permettant de commenter et de justifier les choix retenus pour concrétiser cet OSCILLOSCOPE.
Dès le début, il a été envisagé de pouvoir synchroniser, de choisir le seuil de déclenchement, d’afficher ou non une grille de référence, et de visualiser en simple définition ou en affichage étendu à tout l’écran. De plus, comme le graphisme permet d’afficher ce que l’on désire, un index permet de situer la valeur de la tension efficace calculée sur le groupe des valeurs numérisées dans la mémoire d’échantillonnage. Dans ce démonstrateur les échantillons sont calculés par une fonction sinus.

>>> Page suivante.

Laisser un commentaire

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