Voici un petit article pour mes collègues prof, mais pas que.
Nous autres, enseignants, avons souvent besoin de représenter des signaux BF (basse fréquence) tels qu’on les voit à l’oscilloscope. Exemple ici, un signal en dent de scie.
On peut faire ainsi des petits contrôle avec des questions du genre :
Quelle est la période de ce signal, sa fréquence ?
Si on applique ce signal à l’entrée de l’amplificateur étudié précédemment, dessinez la forme du signal de sortie, etc.
Vous voyez un peu notre besoin ?
Comment générer numériquement et facilement ces signaux avec un tableur ?
Bien sûr, vous allez rencontrer des petits malins qui vous diront : facile, il suffit de décomposer ton signal en série de Fourier, et après tu n’as plus qu’à tracer 10 harmoniques et hop…
Mais on est pas comme ça, nous, on a des astuces, des trucs. Du métier, quoi !
Et je vais vous donner mes tuyaux !
La sinusoïde
Ça c’est très facile.
Y = SIN(X) ou Y = COS(X) !
Sur une colonne on place t, sur l’autre V et on trace V(t).
Exemple : un sinus d’amplitude 5 V et de fréquence 1000 Hz, 20 points par période, soit un point toutes les 50 µs. Voila ce que ça donne
Signal sinusoïdal
Vraiment facile !
Le carré
Un peu plus dur. Il suffit maintenant de se dire qu’un signal carré peut être obtenu en prenant le signe d’un signal sinusoïdal. On utilise donc la fonction signe du tableur. Rappelons ici comment cette fonction fonctionne !
Pour obtenir un signal carré, il suffit donc d’écrire
Y = SIGNE (SIN(X))
Signal carré
Quelques remarques :
le temps de montée/descente est égal au pas d’échantillonnage
éviter Signe(sinus(0)) = 0 , qui fait un point à 0, préférer Signe(sinus(ε))
Le signal triangulaire
C’est le plus difficile. Avant je galérais et puis je suis tombé sur cette formule, je ne me souviens plus où :
Y = ARCSIN(SIN(X))
C’est l’équation d’un signal triangulaire. Voici ce que ça donne !
Signal triangulaire
La période est la même que le sinus associé.
Le signal évolue entre +π/2 à -π/2, il faut en tenir compte et multiplier l’amplitude par 2/π.
La rampe
Une fois qu’on connait le truc de Arcsin(sin(x)), on peut chercher d’autres trucs. Pour la rampe, j’ai choisi :
Y = ARCTAN(TAN(X))
Voila ce que ça donne :
Signal rampe
La période est la moitié de la période du sinus. Le signal évolue entre entre -π/2 à +π/2. mais la forme de rampe est bien là. Vous pouvez aussi ajouter de l’offset en X et en Y.
Voila, vous avez maintenant tous les outils pour faire des chouettes évaluations et représenter des oscillogrammes comme des pros. Pas mal, non ?
Gravé dans le marbre, ça signifie écrit pour longtemps, intangible… Dans nos projets, il est parfois nécessaire de sauvegarder une donnée de manière non volatile. Pour cela, on mémorise la donnée en EEPROM. J’ai récemment mis en œuvre cette opération avec Arduino et avec PSoC. Je vous raconte ça ici…
Arduino et EEPROM
Avec Arduino, le projet était un compteur de vélo. J’avais besoin de sauvegarder en EEPROM la variable p, le périmètre de la roue en cm. Pour une roue de vélo normale cette grandeur est <255. En effet une roue de vélo de 700 ( diamètre 700 mm) correspond à un périmètre de π.D soit 220 cm environ. Le périmètre de la roue correspond à la distance parcourue avec 1 tour de roue. C’est un paramètre important ici à modifier en fonction de la taille des roue du vélo.
Nous allons utiliser la bibliothèque EEPROM (documentation ici), pour cela, dans le programme Arduino, il est nécessaire d’écrire dans l’en-tête du programme :
#include <EEPROM.h>
La taille de la mémoire EEPROM de l’Arduino UNO est de 1024 octets. Les adresses disponibles sont donc comprises entre 0 et 1023. Les données stockées sont sur un octet et donc comprises entre 0 et 255. Pour lire la donnée p stockée à l’adresse 0 , on utilisera l’instruction suivante :
p = EEPROM.read(0); // lecture perimetre de la roue à l'@0
Pour écrire la donnée p à l’adresse 0, on peut utiliser l’instruction suivante :
EEPROM.write(0,p);
Mais attention, la durée de vie de l’EEPROM de l’Arduino est limitée à 100.000 cycles ! C’est pas mal, mais ce n’est pas infini. C’est pourquoi j’ai préféré utiliser l’instruction suivante :
EEPROM.update(0,p);
L’instruction update n’écrit la donnée que si celle-ci est différente de la donnée présente. On économise ainsi la durée de vie de la mémoire en évitant les écritures inutiles.
Bon maintenant, si vous vous amusez à changer ce paramètre une fois par jour, 100.000 écritures, ça va marcher pendant 274 ans ! C’est pas mal !
Ecrire et lire dans l’EEPROM avec Arduino : pas si difficile finalement…
PSoC et EEPROM
Je n’avais jamais utilisé l’EEPROM sur un projet PSoC. Nous en avons besoin cette année sur un projet mené avec nos étudiants. J’ai donc fait un petit programme sur le kit PSoC-050 pour valider l’écriture et la lecture en EEPROM sur PSoC 5. Le PSoC de ce kit possède 2 ko (2048 octets) de mémoire EEPROM. Le design implémenté est le suivant :
Juste le minimum : 1 EEPROM (c’est ça qu’on teste), 1 afficheur LCD pour la visu, 2 boutons-poussoirs (pull-uppés en interne), 1 led.
Informations et tuto sur kit PSoC-050 disponibles sur ce site ici.
Le programme est le suivant :
Au démarrage, le programme va lire la case mémoire EEPROM d’adresse 0000 avec l’instruction EEPROM_1_ReadByte(adresse). Celle ci s’affiche pendant 4 s. Ensuite l’utilisateur peut incrémenter la valeur lue par appui sur BP1 (cette valeur repasse à 0 dès que la valeur est >255). Un appui sur BP2 permet de sauver dans la case mémoire d’adresse 0000 cette nouvelle valeur en utilisant l’instruction EEPROM_1_WriteByte(donnée,adresse). La led s’allume furtivement lors de l’écriture EEPROM.
Si on débranche puis on rebranche le kit on peut vérifier que la donnée a bien été écrite.
Sur PSoC, l’EEPROM est donnée pour 1 million de cycles d’écriture et 20 ans de rétention d’info !
En 2019, au Lycée Cabanis de Brive, un des projets de nos étudiants de BTS SN était un boîtier de commande d’un onduleur IGBT. Le but de ce boîtier, interfacé à un PC en USB, était de générer les signaux de commande pour réaliser un hacheur ou un onduleur. Ce projet utilisait un circuit PSoC5. Durant la phase de pré-étude de ce projet, je me suis posé une question :
Comment générer un signal sinusoïdal à f = 50 Hz, à partir d’un signal PWM avec un PSoC ?
On rappelle PWM : pulse width modulation ou MLI en français (modulation de largeur d’impulsion). On ne présente plus le PSoC, on en parle souvent sur ce site !
Conception PSoC
La structure retenue est la suivante :
Onduleur sinus PWM
On utilise un composant PWM 8 bits attaqué par une horloge Clock_1.
La configuration du PWM est la suivante :
Configuration PWM
Le PWM est constitué d’un (dé)compteur qui compte de 255 à 0. La sortie PWM est à 1 lorsque l’état du compteur est inférieur ou égal (Less or Equal) à un entier CMP_Value_1. La fréquence du signal PWM est donc égale à la fréquence de l’horloge divisée par 256.
Pour obtenir un signal PWM à valeur moyenne sinusoïdale, nous allons alors à chaque fin de cycle du compteur PWM (détecté par la broche TC = Terminal Count) déclencher une interruption (ISR_1). Cette interruption va modifier la valeur de CMP_Value_1. La suite des valeurs de CMP_Value_1 suit une loi sinusoïdale.
La figure suivante illustre ce principe :
PWM sinusoïdale
Nous avons choisi une suite de 256 valeurs pour les valeurs de CMP_Value_1. Pour obtenir une sinusoïde de fréquence 50 Hz, il faut que la fréquence de l’horloge soit égale à 256 x 256 x 50 = 3,2768 MHz.
Le programme
Le programme est donné ci-après :
Programme PSoC
On définit d’abord un tableau TabSinus de 256 éléments. Celui-ci va contenir les 256 points constituants la sinusoide.
La routine d’interruption Cy_ISR, appelée à chaque fois que le compteur du PWM a terminé son comptage, configure le nouveau rapport cyclique du PWM avec la valeur qu’elle va chercher dans le tableau TabSinus.
Le programme principal fait clignoter la led et, si le bouton-poussoir est appuyé, on diminue l’amplitude du signal sinusoïdal en écrivant une nouvelle suite de valeurs dans TabSinus.
Les résultats
Et ca marche ? Regardons un peu les mesures que j’ai faites avec mon vieux Tektro. C’est un scope analogique mais avec de la mémoire numérique (Tektronix 2212). Une antiquité (cet appareil a une trentaine d’années), mais qui fait très bien le job !
PWM et sinus
En haut avec un calibre 5V/carreau, le signal PWM.
En bas, le même signal filtré par un passe-bas du 1°ordre (RC = 1kΩ.1µF), calibre 1V/carreau.
On remarquera que le PWM est plutôt à 1 quand le sinus est max et plutôt à 0 quand le sinus est bas.
Le détail est visible ici :
PWM et sinus – zoom échelle des temps
Sur cette deuxième figure, on observe bien que le rapport cyclique du PWM (donc la largeur des impulsions) diminue quand le signal sinusoïdal est décroissant !
Maitriser le tableur est, à mon avis, un savoir-faire indispensable pour un technicien supérieur. Voici un TP que nous faisons, mon collègue et moi, en début de BTS SN première année. Les exemples étudiés ici sont adaptés et contextualisés pour des électroniciens. Et un tableur traite des données : écrire des formules dans des cases, c’est aussi de la programmation !
Prochainement, notre BTS SN va devenir le BTS CIEL (Cybersécurité, Informatique et réseaux, ELectronique). Ce nouveau BTS intègre un co-enseignement mathématiques et sciences et techniques de l’ingénieur. Ce TP peut donc être une activité de co-enseignement intéressante. À discuter avec le prof de maths… Le texte complet du TP est à télécharger en fin d’article.
Ce TP se fait sur Calc de LibreOffice, mais pourrait aussi bien se faire sur Microsoft Excel.
Formules magiques
Le premier exercice consiste à remplir le tableau suivant (en rouge, les résultats attendus). C’est un tableau de conversion dBm – mW – Volts sur 600 Ω.
Conversion dBm – mW – Volts
Bien entendu, les étudiants doivent saisir les formules qui donnent les résultats. Je précise ça parce qu’une fois, j’ai vu un étudiant faire les calculs avec sa calculette et remplir le tableau avec ses résultats !
Vous avez remarqué comme je suis peau de vache ? Parfois je demande des mV, parfois des Volts. C’est bourré de chausse-trappes ce TP !
Un capteur à thermistance
Un tableur, ca sert aussi à tracer des courbes ! Dans cet exercice, il s’agit de tracer la caractéristique d’un capteur à thermistance. Je ne vais pas trop le détailler ici car j’ai déjà consacré un article à ce capteur (le mois dernier). Ca se passe ici : lien vers l’article capteur à thermistance
Voici la courbe que les étudiants doivent tracer :
Caractéristique du capteur à thermistance
Tracé impédance -fréquence
Plus compliqué, on va tracer ici des courbes sur une échelle semi-logarithmique. Il s’agit de tracer l’impédance d’entrée d’un système en fonction de la fréquence. On doit aussi faire figurer sur la courbe un gabarit afin de savoir si la courbe est dans la spécification (ou pas). Les points de mesure sont donnés ainsi que le gabarit. Voilà ce que ca donne !
Impédance en fonction de la fréquence
Pas mal ? Moi, quand j’étais étudiant, je devais tracer ce type de courbes sur du papier millimétré semi-logarithmique 4 décades ou 5 décades (je ne vieillis pas, je deviens vintage !).
Un comparateur à ALI
On peut aussi utiliser le tableur pour simuler un circuit électronique. En voilà un exemple :
Voici le circuit :
Circuit comparateur ALI
Et voici les signaux d’entrée et de sortie. V+ est une tension continue de 1.2 V et V- est une sinusoïde de fréquence 1 kHz et d’amplitude 3 V.
Signaux comparateur ALI
Cet exercice permet de voir quelques fonctions comme le sinus et la fonction SI. SI(Test; Alors Valeur ; Sinon Valeur) : on fait bien de l’informatique !
Un peu de tout
A la fin du TP, on fait un peu de tout.
Du calcul de moyennes pondérées avec les coefficients du BTS et détermination si le candidat est admis ou collé (SI moyenne >= 1 0, alors « REÇU », sinon « COLLÉ »). Ça permet de voir les $ et aussi les mises en forme conditionnelles (on affiche en vert ou en rouge les notes en fonction de leurs valeurs).
Un diagramme de Gantt ou l’emploi du temps de la classe (pratique en période de rentrée scolaire).
En bonus, ceux qui sont en avance peuvent faire le convertisseur binaire-décimal-hexadécimal :
Convertisseur binaire – décimal – hexadécimal
Et enfin, des courbes de fonction de transfert de filtre passe-bas du second ordre en 3 D ! Avec échelle semi-logarithmique, s’il vous plait ! Mais ça c’est vraiment le super-bonus, pour les cracks !
C’est un TP de BTS SN (Systèmes numériques) 1° année. C’est le premier TP avec l’Arduino. Il s’agit de réaliser un thermomètre avec Arduino. Pour cela, nous allons modéliser un capteur de température réalisé avec une thermistance CTN puis calculer et afficher la température mesurée ! Le cahier des charges est le suivant :
Réaliser un thermomètre Arduino avec affichage de la température sur la liaison série.
Plage de température : -20°C à 50°C
Précision < +/- 1°C
La thermistance
Pour réaliser notre capteur, nous avons utilisé une thermistance. Nous avions au lycée un petit stock de thermistance 4,7 kΩ. La loi de variation de la résistance RTH (la résistance de la thermistance) en fonction de la température est donnée ci-après :
RTH = R0 e B(1/T -1/T0)
avec R0 = 4700 Ω et B = 3980 K-1 et T0 = 298,15 K
C’est assez facile à tracer avec un tableur. Voilà ce que ca donne entre -20°C et 50°C avec un point tout les 5°. J’utilise LibreOffice : efficace, gratuit et libre !
Caractéristique R(T) de la thermistance 4.7 k
C’est une CTN (résistance à coefficient de température négatif) cela signifie que lorsque la température augmente, la résistance diminue. Remarquez qu’à la température ambiante (25°C), la résistance a une valeur de 4700 Ω.
Le capteur
L’Arduino sait mesurer des tensions, pas des résistances. Il est donc nécessaire de transformer la variation de résistance en variation de tension. Pour cela, on réalise un pont diviseur en y associant une résistance de 4,7 kΩ conformément au schéma suivant.
Capteur de température à thermistance
Calculons Vt, la tension fournie par le diviseur de tension :
Vt = Vcc. RTH / (RTH+R1)
Lorsque la température est basse, la résistance est haute, la tension est élevée (proche de 5V). Lorsque la température est haute, la résistance est faible, la tension est basse (proche de 0V). À la température de 25°C, la thermistance a une résistance de 4,7 kΩ et la tension est à Vcc/2.
Avec le tableur, nous pouvons maintenant tracer la courbe Vt(T°C), c’est-à-dire la tension fournie par le capteur en fonction de la température.
Caractéristique Vt(T°C) du capteur à thermistance
Entre -20 et 50°C, la tension Vt varie entre 4,5V et 1,2V.
Maintenant, ne perdons pas de vue notre objectif, ce qui nous intéresse, c’est de connaitre la température à partir de la mesure de Vt. En fonction de la tension mesurée, quelle température dois-je afficher ? C’est donc la courbe inverse qui nous intéresse soit T°C(Vt) :
Caractéristique T(Vt) du capteur à thermistance
Si la tension mesurée est égale à 2,5V, c’est que la température est à 25°C. Si par exemple, la tension mesurée est à 3,5V, la température est alors de l’ordre de 7°C.
Modélisation
La question est la suivante : à partir de la mesure de la tension, comment mon Arduino va déterminer la température. Comment l’Arduino peut-il reconstituer la courbe Vt(T°C) ? Il nous faut modéliser cette courbe.
Modèle linéaire
Demandons à notre tableur de calculer une courbe de tendance qui approxime la caractéristique T(Vt). Sur LibreOffice : clic droit sur la courbe puis « Insérer une courbe de tendance ».
T(Vt) et courbe de tendance linéaire
L’équation fournie par le tableur est (avec arrondi) :
T(°C) = -20,1 Vt + 75,69
C’est l’équation d’une droite.
Facile maintenant pour l’Arduino de calculer la température avec cette formule magique. Mais la courbe linéaire ne « colle » pas parfaitement avec la courbe réelle. En analysant les résultats donnés par le tableur, on constate une erreur de température comprise entre -4°C et +2 °C. On ne respecte pas notre cahier des charges puisque nous voulions une erreur inférieure à 1°C !
Modèle du second degré
On demande maintenant à notre tableur de calculer une courbe de tendance polynomiale de degré 2.
T(Vt) et courbe de tendance de degré 2
L’équation fournie par le tableur est :
T(°C) = -0,82.Vt2-15,22.Vt+69,4
C’est mieux mais l’équation ne colle pas encore parfaitement à la courbe. On constate une erreur comprise entre -2.6°C et + 2°C. On ne respecte toujours pas le cahier des charges ! Il faut trouver autre chose !
Modèle du troisième degré
On demande maintenant à notre tableur de calculer une courbe de tendance de degré 3.
T°C(Vt) et courbe de tendance de degré 3
T°C = -1,634.Vt3 + 13,66.Vt2 – 54.93.Vt +102,43
Le modèle colle maintenant parfaitement à la courbe.
On constate maintenant une erreur comprise entre -0,6°C et +0,5°C. Notre cahier des charges est respecté. Notre Arduino pourra maintenant calculer précisément la température en fonction de Vt.
Le programme
Le programme est réalisé à partir de l’exemple AnalogReadSerial. Voici un exemple d’implémentation avec le rendu sur le terminal :
Code Arduino et visualisation sur terminal Arduino
Le TP complet
Comment on le fait alors notre thermomètre ? Le TP complet est disponible si dessous. Enjoy !
J’ai testé pour vous l’IA ChatGPT d’OpenAI dont tout le monde parle en ce moment. Moi qui suis fan de S-F, j’ai trouvé cela vraiment intéressant, je n’ai pas été déçu ! J’ai essayé de voir si cet IA avait ou pas le niveau d’un étudiant de BTS Systèmes numériques sur du codage en C ou un exercice d’électronique. Je vous raconte ça ici…
OpenAI
Après avoir vu passer plusieurs articles intéressants, je me suis inscrit sur le site OpenAI. Il faut laisser une adresse mail et un numéro de téléphone. Cela permet d’accéder gratuitement à plusieurs outils dont ChatGPT, l’IA avec laquelle on peut converser et DALL-E 2 une IA qui produit une image correspondant à la description que vous écrivez. L’inscription est très rapide. J’ai d’abord essayé ChatGPT.
ChatGPT en BTS SN ?
J’ai demandé à ChatGPT de se présenter :
Je me suis demandé : « Est-ce que ChatGPT pourrais faire un bon étudiant de BTS Systèmes numériques ?« .
Lettre de motivation
Il faudrait d’abord passer la première étape : ParcourSup ! J’ai donc demandé à l’IA de rédiger une lettre de motivation. Voici ce que ca donne
Lettre de motivation BTS SN-EC
Alors là, chapeau ! J’ai été impressionné. Rien à dire sur le style, c’est clair et concis. Aucune faute d’orthographe. Sur le fond, rien à dire non plus, franchement, la plupart des lettres de motivation que nous recevons sont moins intéressantes que celle-ci. Du coup, je vais être bien embêté cette année lorsque il va falloir trier les dossiers à la prochaine commission Parcoursup. Si une lettre de motivation est pertinente et sans faute d’orthographe est-ce le candidat qui l’a rédigé ou ChatGPT ?
Une question d’électronique
Et les connaissances ? J’ai fait un test avec une question d’électronique simple, avec une LED, une question du genre de celle qu’on pose en devoir :
Voila une réponse intéressante ! J’aimerais bien que mes étudiants rédigent comme cela lors des devoirs surveillés ! C’est bien expliqué. Bon, le schéma c’est léger, il ne sait pas dessiner mais c’est juste, bien qu’il ne précise pas où sont l’anode et la cathode. Pareil pour les résistances proposées 630 et 640 ne sont pas des valeurs normalisées mais franchement, c’est pas mal du tout ! Mon collègue et moi travaillons dur pour que nos étudiants arrivent à faire ce calcul juste en première année.
Coder en C
J’ai demandé à l’IA de résoudre des exercices simples en langage C que je pose en évaluation de TP en milieu de première année.
Le code est juste, bien aéré. La variable temporaire qui permet de stocker la donnée a été judicieusement nommée temp. L’énoncé a été bien compris. L’IA complète sa réponse avec un petit commentaire décrivant le fonctionnement du programme. C’est parfait !
On en essaye un plus dur ? Voici l’énoncé :
Voici le programme que j’ai obtenu (je l’ai mis en forme avec Carbon).
Le programme est commenté (ce que ne font pas souvent les étudiants). Les variables portent des noms pertinents. Le programme est juste. Il fait juste deux fois l’affichage du nombre de caractères avec deux méthodes mais c’est vrai que l’énoncé pourrait le laisser croire.
À chaque fois, la réponse est quasi instantanée…
Ces deux manips nous montrent que l’IA code aussi bien, voire mieux qu’un étudiant de BTS en milieu de première année et surtout beaucoup plus vite !
Analyser un programme
OK, l’IA code bien mais est-elle capable d’analyser un programme ? Je l’ai fait plancher sur un exercice posé en devoir écrit. Voici l’exercice.
Et voici la réponse de ChatGPT :
Bravo ! Le programme est bien analysé. Il n’a juste pas très bien répondu à la question 1 : compte est un entier et chaine est une chaine de 100 caractères maximum. Mais c’est bien rédigé, et il a bien compris ce que faisait le programme, ce qui n’était pas le cas de la plupart de mes étudiants lorsque j’avais posé cette question en devoir !
Et qui on est, hein ?
Je termine souvent les articles par l’expression « Et qui on est, hein ? ». C’est une expression qu’on emploie souvent en Corse. L’IA est-elle capable de comprendre ce qu’elle veut dire ?
Une exclamation qui sous entend que la personne qui parle est confiante ou sure d’elle-même. C’est plutôt bien vu !
Le sens de l’humour ?
Est-ce que ChatGPT a le sens de l’humour ? J’ai testé.
Blagues d’IA
Vous trouvez, ça drôle ? Moi, non. C’est nul !
Heureusement, mes étudiants ont bien plus d’humour !
DALL-E 2
J’ai aussi essayé DALL-E 2. Je lui ait demandé de me dessiner un professeur d’électronique et d’informatique (Digital art). Voici l’image que j’ai obtenu.
Un professeur d’électronique et d’informatique Digital Art
Est-ce que cette image me ressemble ?
Le gars a un peu la gueule de travers, c’est un défaut courant lorsque l’IA invente des visages. Sinon, la coupe de cheveux, les lunettes et la barbe de quelques jours matchent assez bien ! Les écrans et le prototype improbable aussi ! Que ceux qui me connaissent donnent leur avis !
Bravo l’artiste !
Et maintenant, qu’est-ce qu’on fait ?
Oui, après cette expérience, que fait-on ?
On continue à enseigner comme avant, comme si ce truc n’existait pas ?
Personnellement, lorsque je lirai une bonne lettre de motivation, je ne pourrais m’empêcher d’avoir un doute. Qui a écrit cette lettre : un jeune humain ou une IA ?
Est-ce pertinent de demander à un étudiant un exercice de codage à la maison ?
Doit-on continuer à coder comme avant ? À apprendre à coder comme avant ?
Et cette IA va progresser. Ca va très vite dans ce domaine. Et plus on l’utilise, plus elle progresse !
Quelles tâches seront sous-traitées aux IA dans le futur ?
Quels seront les boulots des humains dans le futur ?
Je vous laisse méditer cela en cette période de vœux et de nouvelle année !
Non, ce n’est pas une histoire de fantômes, il s’agit bien d’électronique ! C’est un TP sur un analyseur de spectres. On va faire ici des mesures radio. Des mesures de puissance et de bande passante en RF.
Le TP
C’est un TP de BTS SN (Systèmes numériques) 2° année. Le texte du TP est ici :
En plus des fonctions classiques de l’analyseur de spectre, nous utilisons ici deux fonctions de mesures spécifiques : la fonction « channel power » et la fonction « occupied bandwidth » .
La fonction « Channel power »
Mesurer une puissance à l’analyseur ? Facile, me diriez-vous, il suffit de mesurer l’amplitude de la raie avec un marqueur ! Certes, sur un signal CW (continuous wave, un sinus quoi), c’est facile : il n’y a qu’une seule raie et on mesure l’amplitude de cette raie. Mais quand on a plusieurs raies ou un spectre compact ? On fait comment, chef ?
C’est là qu’on utilise la fonction « Channel power » . Cette fonction permet de mesurer toute la puissance dans une bande de fréquence donnée (dans un canal).
Voici la mesure effectuée sur un signal FM. Le générateur FM est configuré comme suit :
P = 0 dBm ; fréquence porteuse = 100 MHz ; modulation FM ; Excursion de fréquence Δf = 100 kHz ; fréquence du signal modulant 10 kHz.
Générateur HF
Voici le spectre obtenu et la mesure de puissance.
Mesure puissance signal FM
L’analyseur mesure -0.35 dBm (pour 0 dBm affichés). La bande de mesure est visualisée par la flèche à deux pointes. Bien entendu, tout le signal doit être compris dans la bande de mesure.
Voici un autre exemple de mesure sur un signal TNT.
Mesure puissance modulateur TNT
La source est un modulateur TNT réglé à -16 dBm. Joli, non ?
La fonction « Occupied bandwidth »
Une autre fonction utile est la mesure de la bande occupée par un signal. On peu faire ça à vue de nez (a bisto de nas, comme on dit en Occitanie), en comptant les carreaux mais on peut faire plus scientifique !
C’est la fonction « Occupied Bandwidth » .
Voyons ce que ca donne avec le signal modulé en fréquence.
Mesure de la bande utile d’un signal FM
L’appareil donne deux mesures. La mesure à 99% : l’analyseur détermine la bande dans laquelle on trouve 99% de la puissance totale et la largeur à -26 dB du maximum du spectre.
La mesure est elle cohérente ? Vous souvient-il de la règle de Carson ? Non ? Voici ce que nous dit Wikipedia :
La règle de Carson, énoncée en 1922 par l’ingénieur d’AT&T John R. Carson, permet d’évaluer la largeur de bande passante d’un signal modulé en fréquence.
Dans le cas d’un signal modulant sinusoïdal, le signal modulé présente un spectre en raies (signal périodique). En ne gardant alors que les raies contenant au moins 98 % de la puissance du signal modulé, on obtient l’expression: B = 2(Δf+fm)
Alors ça marche ? IciΔf = 100 kHz et fm = 10 kHz, on devrait trouver B = 2(100+10) = 220 kHz. On en mesure 236 ! C’est pas trop mal (on est à 99% pas à 98%).
Voyons ce que cela donne avec notre modulateur TNT.
Mesure bande utile modulateur TNT
On mesure 7,955 MHz à -26 dB pour une bande donnée à 8 MHz.
Intéressant ces mesures, non ?
Notre analyseur de spectre n’est pas tout neuf. On sauvegarde les mesures sur une diskette 3,5 pouces. Mais il marche encore très bien !
Nous allons voir ici comment mettre en œuvre une interface homme-machine (IHM) à l’aide d’une machine à états (MAE). La solution est implémentée dans un Arduino Uno.
Dans nos projets et mini-projets de BTS SN, nous avons souvent besoin de mettre en œuvre des interfaces homme-machine simples. Bien souvent, on utilise un petit écran LCD avec deux lignes et quelques boutons-poussoirs.
Pour bien gérer les différents menus et la navigation entre ceux-ci, rien de mieux qu’une machine à états ! C’est une méthode rigoureuse et efficace.
Ici nous allons le mettre en œuvre sur une carte Arduino, mais la méthode est transposable à n’importe quelle autre plateforme ou microcontrôleur.
Un minuteur Arduino
Au cours de ce TP, nous allons réaliser un minuteur en utilisant un Arduino et un shield LCD-RGB Adafruit. Cette carte comprend un afficheur 2 lignes de 16 caractères et 6 boutons poussoirs (←;↓;↑;→;Sélection; et un bouton Reset).
Minuteur Arduino
Dans ce TP, nous allons implémenter les menus d’affichage de ce minuteur. Ces menus s’enchainent selon le diagramme d’état suivant.
Le codage se fait en utilisant une structure switch – case. Le switch se fait sur la variable d’état.
En BTS Systèmes numériques au lycée Cabanis de Brive, nos étudiants travaillent en mini-projet à la réalisation d’un multimètre rudimentaire.
Ce multimètre est construit autour d’un kit PSoC 5 (KIT-059). Il réalise les fonctions Voltmètre continu (0 à 50V) et Ohmmètre (1 Ω à 1MΩ) avec des calibres automatiques, bien entendu !
Ce projet est découpé en plusieurs phases entre la fin de la première année (avant de partir en stage) et le début de la deuxième année.
Pré-requis : avoir pris en main PSoC. C’est fait sur ce TP.
PSoC KIT-059
Phase 1 : saisie du schéma
Le schéma structurel est donné aux étudiants dans sa version papier. Les étudiants doivent le saisir sous KiCAD qu’ils découvrent à ce moment-là. KiCAD est un très bon outil de CAO électronique gratuit et libre.
Schéma multimètre PSoC
Il n’y a pas beaucoup de composants : le kit PSoC-059, un afficheur LCD, un petit interrupteur (pour basculer Voltmètre/Ohmmètre), 2 leds (dont 1 témoin d’alimentation), un buzzer, quelques composants pour l’alimentation. La carte est alimentée par un boitier d’alimentation en sortie jack (V> environ 8V). Le pont de diode à l’entrée permet de s’affranchir de la polarité de la tension d’entrée (et d’éviter de « griller » notre PSoC par inversion de polarité). Sur l’entrée Voltmètre, un pont diviseur /11 permet de mesurer des tensions jusqu’à 50V. Les résistances sont à calculer par les étudiants !
Après la saisie du schéma vient la phase d’affectation des empreintes et passage au routage.
Phase 2 : routage
Le routage se fait avec KiCAD. Pour les étudiants, c’est leur premier routage, les contraintes ne sont pas trop sévères :
taille de la carte < 1/2 page A4 ( max 10 cm x 15 cm)
le placement des composant doit respecter le bon sens et un minimum d’esthétisme.
Les tailles des pistes et vias sont imposés.
La carte étant réalisée localement, il n’y a pas de trous métallisés : toutes les pistes des composants doivent partir de dessous.
Le routage se termine avec la remise des fichiers GERBER.
Phase 3 : câblage
Les étudiants récupèrent le circuit imprimé nu. Ils câblent les composants. La plupart des composants sont traversants, à l’exception des résistances et des condensateurs <100 nF qui sont des composants CMS. Généralement, cette phase est effectuée en fin de première année. Ils n’oublient pas de câbler les traversées (vias). La plupart des composants (afficheur LCD, PSoC, douilles, etc…) sont récupérés d’une année sur l’autre. C’est aussi ça le développement durable !
Phase 4 : programmation
C’est l’essentiel du développement. Il faut concevoir le circuit interne au PSoC et écrire le code C. Cette phase se déroule normalement à la rentrée de deuxième année.
L’architecture interne est la suivante :
Architecture interne circuit multimètre PSoC
L’architecture interne est articulée autour d’un CAN 12 bits (ADC_SAR).
Un multiplexeur analogique permet de commuter entre les voies Ohmmètre et Voltmètre sur l’entrée du CAN .
Sur l’entrée Ohmmètre, un CNA (DAC) 8 bits à sortie en courant injecte un courant dans la résistance de mesure. En jouant sur plusieurs valeurs du courant, on obtient plusieurs calibres de mesure de résistance. La résistance est calculée en appliquant la loi d’ohm R = Umesuré/Iinjecté.
Sur l’entrée Voltmètre, un amplificateur programmable PGA (programmable Gain Amplifier) permet d’amplifier le signal avant de le mesurer. En jouant sur plusieurs gains, on obtient plusieurs calibres. Ainsi, le CAN travaille toujours à niveau important, on obtient alors une meilleure précision.
L’afficheur LCD permet d’afficher les mesures.
Un PWM permet de piloter le buzzer (il doit sonner si la résistance mesurée est faible).
Le code C permet de gérer l’IHM (comme la gestion du switch) et les algorithmes de calibres automatiques. Pour chaque calibre, un étalonnage et réalisé ce qui permet d’obtenir une précision <5%.
Phase 5 : recette
A la fin du projet, les étudiants effectuent la recette de leur produit et rédigent un rapport où ils expliquent les solutions retenues et les résultats obtenus.
Ca ressemble à quoi ce multimètre ?
Voici la photo d’une carte multimètre réalisée par un binôme d’étudiants.
Cet été, je suis rentré de Corse en passant par l’Italie. Nous avons choisi de passer par le Val d’Aoste et le tunnel du Mont-Blanc. La route passait par Ivrea (Ivrée en français). Je me suis dit que c’était l’occasion d’un pèlerinage arduinesque… Oui, la fameuse carte Arduino a ses origines dans le coin. C’est une longue histoire…
Ivrea
Ivrea est une petite ville dans le nord de l’Italie. C’est dans le Piémont, pas bien loin de Turin (Torino). La ville d’Ivrea marque l’entrée de la vallée d’Aoste. Ivrea est connu pour être le berceau de la société Olivetti.
Olivetti, ca ne dit pas grand chose aux jeunes d’aujourd’hui, mais pour les boomers comme moi, Olivetti, c’était d’abord des machines à écrire.
Machine à écrire Olivetti
C’est sur une machine comme celle-ci que j’ai tapé avec deux doigts mon rapport de projet en Terminale F3 ! C’était en 1984. (Ohlala, presque 40 ans !).
Deux ans après, je voyais pour la première fois un IBM-PC, c’était un Olivetti !
Une petite carte
En l’an 2001, s’est ouvert à Ivrea une école nommée IDII : Interaction Design Institut Ivrea. Si j’ai bien compris, il s’agissait d’une école financée par Olivetti et Telecom Italia qui dispensait une formation à bac+2 orientée design et technologie.
C’est dans cette école qu’intervenait Massimo Banzi, un prof d’élec un peu fou génial (comme tous les profs d’élec, non ?). Massimo a eu l’idée de développer pour ces étudiants une petite carte électronique facile à programmer et à mettre en œuvre. Aidé par quelques collègues, le projet open-source s’est rapidement développé et à un moment donné, il a fallu donner un nom à ce projet…
C’est qui cet Arduino ?
Autour de l’an 1000, Arduin, un nobliau d’Ivrée (Arduino d’Ivrea en italien) a très brièvement régné sur l’Italie.
À Ivrea, c’est la vedette locale, un peu comme Napoléon à Ajaccio. Et donc, la rue principale d’Ivrea s’appelle la Via Arduino, et dans cette rue, il y a le bar Arduino.
Comme Massimo et ses amis allaient boire des bières au bar Arduino, ils ont appelé leur projet Arduino.
Un pèlerinage arduinesque
C’est avec ces informations que je me suis rendu à Ivrea, à la recherche du bar Arduino.
La via Arduino est assez facile à trouver. C’est une longue rue piétonne qui traverse la vieille ville.
Via Arduino à Ivrea
Et finalement, j’ai bien trouvé le bar Arduino. C’est à vrai dire une cafétéria qui ressemble à une librairie. Aucune mention de la carte Arduino.
Pas de chance, c’était fermé. De toute manière à 10h du matin, c’était trop tôt pour la bière.
Un peu plus bas, nous avons dégusté un très bon expresso. Ristretto !