Systèmes numériques, électronique et communications

Catégorie : Electronique embarquée (Page 1 of 2)

CIEL, mon BTS ! À vélo avec Arduino…

À la rentrée de septembre 2023, le BTS SN (Systèmes Numériques) va laisser la place au BTS CIEL (Cybersécurité, Informatique et réseaux, ELectronique). Ce BTS aussi se décline en deux options l’option ER (Electronique et Réseaux) et l’option IR (Informatique et Réseaux).

Ce nouveau BTS remet la fabrication électronique à l’honneur. Dans ce contexte, je vous présente ici une activité à réaliser avec des étudiants de BTS CIEL 1ere année, en tout début d’année scolaire.

Il s’agit de câbler et de tester un « shield » Arduino « fait maison » réalisant la fonction compteur de vélo. J’ai appelé ça Véloduino !

Un compteur de vélo

Le schéma de la carte est donné ci-après.

Schéma structurel du compteur de vélo
Schéma structurel du compteur de vélo Véloduino

C’est assez minimaliste : la carte comprend l’emplacement pour l’Arduino, un afficheur LCD de 2 lignes de 16 caractères, deux boutons-poussoirs et un petit bornier à vis. Ce bornier à vis permet de connecter un interrupteur type ILS de vélo. On rencontre aussi quelques petits composants : résistances, condensateurs, diode.

À chaque tour de roue, l’aimant présent sur un rayon de la roue passe devant le capteur ILS, et ferme l‘interrupteur à lames souples. Le signal récupéré passe alors de 1 à 0.

Capteur ILS de vélo pour compteur de vélo

ILS et aimant de compteur de vélo

Pour déterminer la distance parcourue, l’Arduino doit incrémenter la distance affichée de la longueur d’un tour de roue.

La mesure de la durée entre deux impulsions successives permet de déterminer la vitesse.

Le circuit imprimé

Le schéma a été saisi et le circuit routé sous KiCAD. Le circuit a été sous-traité en externe.

Circuit imprimé du compteur de vélo
Circuit imprimé Véloduino – vue de dessus et vue de dessous

Câblage de la carte

Les étudiants de BTS CIEL doivent donc câbler le circuit à partir des documents techniques fournis.

Carte du compteur de vélo cablée
Circuit imprimé câblé

Cette séance de câblage est aussi l’occasion d’une « leçon de choses ». Qu’est ce qu’un composant traversant ? Un composant CMS ? À quoi ressemble une résistance ? Un condensateur ? Est que la LED à un sens ? (Réponse : oui, il y a une anode et une cathode).

Test unitaire du circuit

Une fois que le circuit est câblé, les étudiants doivent valider le fonctionnement du circuit.

Dans un premier temps, on valide le matériel avec un logiciel de test qui permet de s’assurer que le circuit a bien été cablé, que les composants sont bien reliés entre eux.

Voici comment se présente l’écran de l’afficheur LCD avec l’Arduino équipé du logiciel de test. Quand on appuie sur un des bouton-poussoir, la valeur affichée passe de 1 à 0. Remarque : la photo a été faite avec le prototype réalisé au lycée.

Programme de test du compteur de vélo
Test unitaire de la carte avec le programme de test

A l’issue de cette phase, on sait que la carte est fonctionnelle : toutes les entrées sont reconnues, toutes les sorties fonctionnent : la LED s’allume, l’afficheur affiche correctement.

Test intégré de la carte

Une fois ces étapes validées, on peut maintenant tester le produit avec son programme définitif et vérifier qu’il mesure correctement la vitesse du vélo et la distance parcourue.

Voici le diagramme d ‘état correspondant au logiciel interne du compteur de vélo.

Diagramme d'état du programme du compteur de vélo
Diagramme d’état du compteur de vélo

Le programme de test et le programme du compteur sont disponibles sur Github.

Lien vers les programmes

Une procédure de test est donnée : les étudiants doivent suivre cette procédure et remplir un PV de test correspondant.

Cette séance de test est l’occasion d’un premier contact avec les appareils de mesure : un générateur basse fréquence permet de générer des impulsions calibrées correspondant à une vitesse donnée. On observe le signal de test du compteur à l’oscilloscope.

Et voila, une fois ces opérations effectuées, il n’y a plus qu’à installer ce compteur sur votre vélo et aller faire un petit tour.

Et qui on est, hein ?

Gravé dans le marbre

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 :

Design PSoC

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 :

Programme en C

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.

Démonstration programme. Affichage des deux ecrans

Sur PSoC, l’EEPROM est donnée pour 1 million de cycles d’écriture et 20 ans de rétention d’info !

Nos projets méritent bien ça, non ?

Et qui on est, hein ?

Si carré et pourtant… sinus !

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 :

Schéma PWM PSoC
Onduleur sinus PWM

On utilise un composant PWM 8 bits attaqué par une horloge Clock_1.

La configuration du PWM est la suivante :

Configuration du PWM PSOC
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 et sinus
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 en C du PWM sinus
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 !

Signal PWM et sinus obtenu
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
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 !

Alors, pas mal, non ?

Et qui on est, hein ?

Thermoduino, un thermomètre Arduino

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 thermistance R en fonction de T°C
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 diviseur de tension thermistance résistance
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) du capteur de température à thermistance
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 à tehrmistance
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 ».

Caractéristique du capteur et modélisation par courbe de tendance linéaire
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.

Caractéristique du capteur et modélisation par 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.

Caractéristique du capteur et modélisation 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 thermomètre  et visualisation mesure température
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 !

Fabriquer un thermomètre avec un Arduino et deux composants de fond de tiroir ? Précis au degré près ? Facile !

Et qui on est, hein ?

Une IHM avec une MAE !

IHM ? MAE ? Késaco ?

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.

Le document complet est ici :

En bonus, les étudiants peuvent coder le minuteur complet, mais c’est un peu plus long. Et ça fonctionne !

C'est fini
C’est fini !

Et qui on est, hein ?

Un multimètre PSoC

Un mini projet

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
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 structurel multimètre PSoC
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.

Maquette Multimètre PSoC
Multimètre PSoC

Pas mal, non ? Et qui on est, hein ?

Aux origines d’Arduino…

Carte Arduino

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.

https://en.wikipedia.org/wiki/Interaction_Design_Institute_Ivrea

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.

https://fr.wikipedia.org/wiki/Arduin_d%27Ivr%C3%A9e

À 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 !

Et qui on est, hein ?

Microbit

Prise en main de la carte microbit

La carte microbit est une petite carte (petite par la taille) très intéressante. Nous l’utilisons en début de première année avec nos étudiants de BTS SN-EC. En effet, le langage de programmation graphique (qui ressemble à Scratch) est idéal pour des débutants. C’est une très bonne initiation à l’électronique embarquée.

Le premier TP permet la prise en main de la carte, de l’environnement de développement outil MakeCode.

Le second TP permet de réaliser l’équivalent d’un niveau à bulle électronique 2D en utilisant l’accéléromètre intégré à la microbit.

Nous avons même utilisé la carte microbit dans un projet de seconde année. Il s’agissait d’une application de mesure de mouvement à distance d’un mobile en utilisant l’accéléromètre et la liaison radio.

Et qui on est, hein ?

Modulation et démodulation FSK avec PSOC 5

Est-il possible de réaliser un modulateur et un démodulateur FSK dans un PSoC ? Voilà un TP qui permettrait d’illustrer les modulations numériques ! Et bien regardons ensemble comment s’y prendre.

Pour ce TP, je me suis rajouté une contrainte. Je ne voulais pas faire une carte qui démodule directement le signal qu’elle génère. L’idée était d’enregistrer un signal FSK sous forme de fichier audio puis de le démoduler.

Caractéristique de la modulation FSK :

Débit = 300 bauds ; fréquence « 0 » = 1300 Hz ; fréquence « 1 » = 2100 Hz.

Modulateur FSK

Facile de faire un modulateur FSK avec PSoC Creator !

Modulateur FSK PSOC. UART + WaveDAC + PGA
Modulateur FSK PSoC

L’UART sert à générer le signal binaire. Il transmet en boucle une chaine de caractères.

Le WaveDAC8 est un composant extraordinaire. Il permet de générer pratiquement n’importe quel signal. Voici comment il est configuré.

Configuration du WaveDAC

C’est tout simple, si le signal sur l’entrée ws est à 0, on transmet le signal Waveform 1 : ici un sinus à 1302 Hz d’amplitude c-à-c = 2V centré sur 1,024 V et si le signal ws est à 1, on transmet le signal Waveform 2 : ici un sinus à 2101 Hz de même amplitude.

Le PGA derrière est programmé avec un gain de 2 pour exploiter toute la dynamique 0/5V.

Il ne reste plus qu’à numériser le signal avec une carte son. Je connecte la sortie du PSoC sur l’entrée line puis REC pendant une quinzaine de secondes ! J’utilise Audacity, voilà le résultat !

Signal FSK numérisé. fenetre Audacity temporel + spectre
Signal FSK numérisé

On remarque bien les 0 (durées ou la fréquence est basse) et les 1 (durées où la fréquence est haute). Le spectre montre bien 2 pics à 1300 Hz et 2100 Hz.

Vous pouvez écouter, ce n’est guère mélodieux !

Voilà, mon signal est généré et sauvegardé sous forme de fichier wav sur mon PC. Il ne reste plus qu’à le démoduler !

Démodulateur

Principe

Pour réaliser le démodulateur, je me suis inspiré de deux notes d’applications publiées par Cypress (Infineon maintenant).

Simplified FSK detection – PSoC1

Low-Frequency FSK Modulation and Demodulation – PSoC5

Le principe est le suivant : on multiplie le signal FSK par le signal FSK retardé :

multiplication signal par signal retardé
Démodulateur FSK à retard

Si notre signal est sin(ω.t) et notre retard d, on obtient en sortie du multiplieur :

sin(ω.t).sin(ω(t+d)) = 1/2. [cos(2.ω.t+ω.d)-cos(ω.d) ]

Si on ne s’intéresse qu’au terme basse fréquence, il reste -1/2.cos(ω.d)

L’idée est de choisir le retard d optimum tel que l‘écart entre cos(ω0.d) et cos(ω1.d) soit le plus grand possible (idéalement, il faudrait un cos à -1 pour ω=ω0 et un cos à +1 pour ω=ω1).

Traçons avec un tableur cos(ω0.d)-cos(ω1.d) en fonction de d (avec ω0= 2π.1300 et ω1=2π.2100) :

cos(wo.d)-cos(w1.d) en fonction de d

La fonction est maximale pour un retard d = 0,727 ms = 727 µs. Voyons maintenant comment mettre tout ça en œuvre.

Mise en œuvre

Le schéma du démodulateur sous PSoC Creator est le suivant :

Schéma du démodulateur FSK

L’étage d’entrée est constitué d’un comparateur qui va transformer notre signal FSK sinusoïdal en signal carré. Pour cela le signal entrant est décalé par un circuit C-R (composants extérieurs) à Vdda/2 puis comparé à cette valeur avec le comparateur Comp_1. Remarquez l’utilisation du suiveur sur la tension de référence Vdda/2 (Vdda/2 = la moitié de la tension d’alimentation analogique, ici Vdda = 5V).

On échantillonne ensuite le signal. Comment choisir la fréquence d’échantillonnage ? L’idéal est d’avoir une fréquence à la fois multiple de 1300 Hz et de 2100 Hz. Calculons le PPCM de 1300 et 2100, on obtient 27300. En effet 27300 = 21*1300 = 13*2100. Vous voyez que ca sert à quelque chose le PPCM (le plus petit commun multiple) vu au collège ! On utilise donc une fréquence d’échantillonnage de 27300 Hz.

Le fameux retard de 727 µs est réalisé par un registre à décalage. L’horloge de 27300 Hz a une période de 36,63 µs. Pour obtenir 727 µs, on utilise un registre à décalage de longueur 20. 20 périodes de 27300 Hz font un retard de 732,6 µs pas bien loin de nos 727 µs.

On réalise la multiplication des deux signaux avec le ou exclusif, c’est assez classique. Enfin, on utilise un « glitch filter » ou « déglitcheur » de taille N=5. J’avoue que le 5 a été choisi un peu au pif, on doit pouvoir optimiser. Ce composant permet d’éliminer par « filtrage » tout bit parasite. Son principe est expliqué ici : lien vers la doc.

Cette structure génère un «1» uniquement lorsque les N échantillons actuels et précédents sont «1», et un «0» uniquement lorsque les N échantillons  actuels et précédents sont «0». Sinon, la sortie est inchangée par rapport à sa valeur actuelle.

L’UART, enfin permet de décoder le signal et on affiche les caractères reçus sur l’afficheur LCD.

Résultats

Et ça marche ? Relions la sortie de la carte son (jack) à l’entrée de la maquette.

Regardons ici les résultats obtenus sur mon vieux scope analogique.

Relevé à l'oscilloscope signal FSK et signal démodulé
Relevé oscilloscope démodulateur FSK

En haut, le signal modulé FSK à l’entrée, en bas le signal numérique démodulé. La démodulation FSK est fonctionnelle !

Quelques signaux intermédiaires relevés à l’analyseur logique :

relevé signaux logiques démodulateur FSK

De haut en bas : Le signal FSK en sortie du comparateur (fsk_comp), le signal de sortie du Ou exclusif (xor) et le signal en sortie du « déglitcheur » (data_out). La sortie du ou exclusif est plein d’impulsions parasites (normal, ce sont les termes en 2.ω !). Admirez l’intérêt du « déglitcheur ».

Et voila ce que l’on obtient sur l’afficheur LCD de la maquette :

Affichage du message reçu
Maquette démodulateur FSK

Je vous laisse découvrir le message décodé !

Et voilà ! Un modulateur – démodulateur (un modem) FSK dans un PSoC ? C’est possible ! Il n’y a que deux composants extérieurs : une résistance et un condensateur.

Et qui on est, hein ?

Un amplificateur de jauge avec PSoC

Psoc cypress - structure modulaire

Présentation du problème

Cette année, avec nos étudiants de BTS SN2 sur un projet, nous avons voulu lire directement une jauge de contrainte avec un circuit PSoC sans utiliser d’amplificateur d’instrumentation extérieur. Tout dans le PSoC. Oui, on a peur de rien. Et qui on est, hein ?

Notre cahier des charges 

On veut mesurer une masse d’environ 500 g avec une précision de 1 g. On utilise le capteur de force suivant :

Capteur utilisé

Le capteur est alimenté en 5V et donc délivre (5×800µV) = 4 mV pour 780 g soit environ 4 mV pour 800 g donc 2,5 mV pour 500 g. Cette tension différentielle est centrée autour de 2.5 V (c’est un pont de Wheatstone). 1 gramme correspond à 2,5mV/500 = 5 µV.

Structure retenue

La structure retenue et dessinée sous PSoC Creator est la suivante :

Le capteur de force est alimenté en 5V. Les deux sorties du capteur sont reliées à Vplus et Vmoins. On entre sur un multiplexeur analogique AMux. On utilise ensuite 4 PGA (Amplificateur à gain programmable) connectés en amplificateur différentiel à 2 étages. Enfin, un convertisseur analogique-numérique mesure cette tension amplifiée (présente entre OutPlus et OutMoins).

Principe de la mesure

La mesure se fait en deux temps avec le multiplexeur analogique . Posons G = gain total de l’amplificateur différentiel.

1° temps : AMux sur voie 0, on amplifie et mesure Vplus – V moins. On obtient V1 = G(Vp – Vm + offset)

2° temps : AMux sur voie 1, on amplifie et mesure Vmoins – Vplus. On obtient V2 =G (Vm-Vp + offset)

V1 et V2 sont stockés après numérisation. On effectue le calcul suivant dans la foulée :

V1 – V2 = G(Vp – Vm + offset) – G(Vm-Vp + offset) = 2.G.Vp – 2 .G.Vm + G.offset – G.offset

= 2 G.(Vp – Vm)

L’offset des amplificateurs s’annule par magie cette astuce !

Le gain de la structure totale est 2.G = 2 (Gain_PGA1 * Gain_PGA3)

Bien entendu, pour que cela fonctionne correctement il faut PGA1 = PGA2 et PGA3=PGA4

Tester la structure

Comment tester facilement la structure sans jauge de contrainte sous la main ?

En utilisant l’accessoire suivant :

Cette petite bidouille permet d’obtenir une tension (Vplus – Vmoins) comprise entre 0 et 6,5 mV environ centrée autour de 2,5 V. Ça simule très bien électriquement la jauge de contrainte. La tension est négative si l’on permute Vplus et Vmoins.

J’ai testé dans les conditions suivantes :

PGA1 = PGA2 = 24 et PGA3=PGA4 = 32

Tension d’entrée : environ -2,5 mV. CAN : Convertisseur Sigma-delta 20 bits. Mesure sur 16 échantillons. Kit PSoc050

Mesure obtenue PSOC 5
Manip effectuée

1 : Tension mesurée par le CAN, multiplexeur en position 1 = -2060 mV

2 : Tension mesurée par le CAN, multiplexeur en position 2 = 1756 mV

A = (V1-V2) = -3816 mV ce qui correspond à 496 grammes (avec signe <0)

2.G(Vp-Vm) = -3816 mV donc G.(Vp-Vm) = -1908 mV et l’offset ramené à la sortie est de -152 mV !

A l’entrée, le signal est de 2,484 mV et l’offset de 0,198 mV.

Attention, le système ne fonctionne correctement que si les tensions 1 et 2 sont inférieures à la tension d’alimentation !

Testé avec les étudiants et la jauge. Ça marche aussi. On a baissé un peu les gains car on saturait une des sorties.

Conclusion

Faire un amplificateur d’instrumentation avec tous les étages analogiques dans le PSoC ? Ça marche, on sait faire !

Et qui on est, hein ?

« Older posts

© 2024 Louis Reynier

Theme by Anders NorenUp ↑

Bannière de Consentement aux Cookies par Real Cookie Banner