Un allumage progressif pour ampoules de 12 V en courant continu

Avec le système PWM, c’est-à-dire à modulation de largeur d’impulsion, il est possible d’allumer graduellement une ampoule 12 V continu en un laps de temps réglable de 2 à 25 secondes. Très utile en voiture (si vous avez un peu l’esprit “tuning”) ou à la maison si vous utilisez des ampoules basse tension en courant continu (maison solaire) ou si vous voulez augmenter encore l’esthétique rétro de votre ampli à lampes.


Si nous relions un générateur d’onde en dent de scie et un générateur de rampe aux entrées d’un comparateur, on obtient un circuit PWM (Pulse Width Modulation) permettant d’allumer graduellement une ampoule en 12 Vcc. Ce montage permet également de régler à volonté le laps de temps que mettra l’ampoule pour passer de l’extinction à sa complète luminosité (réglable entre 2 et 25 secondes).
Ce circuit pourra être installé, par exemple, à l’intérieur d’un amplificateur (l’un de ceux que nous vous avons proposé, pourquoi pas ?) de telle manière que l’ampoule éclairant le Vu-mètre s’illumine progressivement (dans un amplificateur à lampes, cela s’impose presque !). Après tout les audiophiles ont aussi deux yeux entre les oreilles.
Mais c’est peut-être dans votre voiture que vous voudrez le monter : vous pourrez alors allumer les plafonniers ou même les feux de position et les lanternes de manière progressive (vous aurez même la satisfaction d’éviter aux ampoules du véhicule tout choc thermique pouvant abréger leur durée de vie). Là encore, si vous avez une voiture de collection, cela va presque de soi…Malades du “tuning”, vous nous avez compris.

Figure 1 : Ce dessin représente l’allumage d’une lampe à trois moments différents. Sa luminosité est inversement proportionnelle à la durée pendant laquelle le rapport cyclique du signal reste au niveau logique haut. En d’autres termes, la lampe augmente progressivement sa luminosité au fur et à mesure que le niveau logique haut du signal rétrécit.

Le schéma électrique
Dès que l’alimentation est fournie au circuit, le générateur de courant LM334 IC1 (voir le schéma électrique de la figure 2) charge C3 au maximum et produit à ses bornes une rampe de tension allant de 0 à 12 V en une durée variable de 2 à 25 secondes en fonction de la position du curseur du trimmer R5. Quand nous coupons cette alimentation, le transistor TR1 entre en conduction et décharge C3 de telle manière qu’à la mise sous tension suivante le cycle recommence avec le même laps de temps, fonction de R5.
L’opérationnel IC2/A, contenu dans le LM358, est utilisé comme oscillateur pour produire des ondes en dent de scie à une fréquence d’environ 1 600 Hz. C’est la valeur mesurée sur notre prototype, mais le vôtre aura peut-être quelques centaines de Hz en plus ou en moins (cela n’affectera en rien le bon fonctionnement du montage). L’onde en dent de scie présente aux bornes de C4 est acheminée à l’entrée non-inverseuse 3 de IC2/B, un comparateur de tension constitué du second amplificateur opérationnel contenu dans le LM358. La rampe de tension, acheminée par l’entrée inverseuse 2 de ce même comparateur, détermine le rapport cyclique variable du signal PWM à onde carrée à la sortie 1 de IC2/B.
La luminosité de la lampe est inversement proportionnelle au temps pendant lequel le rapport cyclique du signal PWM demeure au niveau logique haut, comme le montre la figure 1 : plus large est l’impulsion du rapport cyclique, plus longtemps le signal reste au niveau logique haut et plus faible est la luminosité de l’ampoule ; au fur et à mesure que la largeur de l’impulsion de niveau logique haut rétrécit, la luminosité de l’ampoule augmente jusqu’à atteindre la valeur maximale. Nous avons utilisé un MOSFET P IRF9540 “costaud” : il est en effet capable de supporter une charge jusqu’à 10 A, ainsi nous pourrons utiliser une ampoule très gourmande (plus de 100 W ! Attention à la batterie du véhicule tout de même).
En outre, grâce au système PWM, nous pouvons relier à notre circuit des ampoules assez puissantes (et voraces…) sans que le MOSFET ne chauffe excessivement car, travaillant comme interrupteur et non dans sa zone linéaire, il dissipe une puissance minimale et seulement pendant la phase de mise sous tension.
Que cela ne vous empêche pas toutefois, si vous pensez utiliser des ampoules consommant plusieurs ampères, de monter le MOSFET sur un dissipateur (type ML26) ou bien, comme le montre la figure 8, contre la paroi du boîtier métallique. Mais cette dernière considération nous fait sortir du schéma électrique pour entrer de plain pied dans la réalisation pratique.

Figure 2 : Schéma électrique du circuit à PWM variable pour allumer progressivement une ampoule 12 V en un temps réglable à volonté de 2 à 25 secondes (à l’aide du trimmer R5). Pour obtenir un système PWM, nous avons relié aux entrées du comparateur IC2/B un générateur d’onde en dent de scie (l’opérationnel IC2/A) et un générateur de rampe (le circuit intégré IC1 avec le condensateur C3).

Figure 3 : Brochages du circuit intégré LM358 (double amplificateur opérationnel) vu de dessus, du MOSFET IRF9540 vu de face et du transistor BC557 et du circuit intégré LM334 (tous deux en boîtiers TO 92) vus de dessous.

Figure 4a : Schéma d’implantation des composants de la platine de l’allumage progressif pour ampoule 12 V. Le MOSFET canal P que nous avons choisi supporte une charge jusqu’à 10 A. Pour un montage correct, sa semelle métallique doit “regarder” R1-R2.

Figure 4b-1 : Dessin, à l’échelle 1, du circuit imprimé double face à trous métallisés de la platine de l’allumage progressif pour ampoule 12 V EN1648, côté soudures.

Figure 4b-2 : Dessin, à l’échelle 1, du circuit imprimé double face à trous métallisés de la platine de l’allumage progressif pour ampoule 12 V EN1648, côté composants.

Figure 5 : Photo d’un des prototypes de la platine de l’allumage progressif pour ampoule 12 V EN1648. Le trimmer visible en bas sert à régler la durée de l’allumage entre 2 et 25 secondes.

Liste des composants
R1 ........ 47
R2 ........ 10 k
R3 ........ 10 k
R4 ........ 1 k
R5 ........ 10 k trimmer
R6 ........ 100
R7 ........ 10 k
R8 ........ 10 k
R9 ........ 100 k
R10 ....... 47 k
R11 ....... 10 k
R12 ....... 100 k
R13 ....... 47
C1 ........ 100 μF électrolytique
C2 ........ 10 μF électrolytique
C3 ........ 10 μF électrolytique
C4 ........ 3,3 nF polyester
C5 ........ 100 nF polyester
DS1 ....... 1N4150
DS2 ....... 1N4150
TR1 ....... PNP BC557
MFT1 ...... MOSFET P IRF9540
IC1 ....... LM334
IC2 ....... LM358

Note : les résistances sont des 1/4 de W.


La réalisation pratique
Ce montage est à la portée d’un débutant.
Pour construire ce petit (mais puissant) appareil, il vous faut le circuit imprimé double face à trous métallisés EN1648, sur lequel tous les composants seront montés, hormis peut-être le MOSFET de puissance (voir figure 8) que vous pourrez fixer contre une paroi du boîtier métallique, à l’intérieur : la figure 4b-1 et 2 donne les dessins des deux faces à l’échelle 1. Fabriquez-le ou procurez-vous le.
Quand vous l’avez devant vous, montez d’abord le support de IC2 et vérifiez bien ce premier travail (ni court-circuit entre pistes ou pastilles ni soudure froide collée) ; puis montez tous les autres composants en allant des plus bas (résistances, diodes) aux plus hauts (trimmer, condensateurs, transistor et LM334 en boîtiers TO 92, MOSFET –voir figures 7 et 8– et borniers).
Contrôlez avant soudure l’orientation des composants polarisés (électrolytiques, diodes –bagues vers R7 et vers C5–, transistor et LM334 –méplats vers la gauche– et circuit intégré, n’insérant ce dernier dans son support qu’après le montage dans le boîtier et la dernière connexion réalisée).
Aucune difficulté si vous regardez bien les figures 4a à 8 et la liste des composants.
Vérifiez bien, plusieurs fois, l’identification et l’orientation des composants et la qualité de toutes les soudures, puis passez à l’installation dans le boîtier.

L’installation dans le boîtier
Bien sûr, ce montage dans un boîtier métallique est facultatif : si vous l’utilisez, comme nous vous l’avons suggéré, pour l’allumage progressif du rétro-éclairage des Vu-mètres de votre amplificateur, vous monterez la petite platine directement dans ce dernier.
Si ce n’est pas le cas, prenez le petit boîtier en aluminium (voir figures 6 et 8) et percez quatre trous au fond en vous servant de la platine (déjà percée) comme gabarit de perçage ; dans la foulée, percez deux trous de 10 mm environ dans les deux grands côtés opposés.
Dans les quatre trous, montez quatre entretoises métalliques de 5 mm ; dans les deux trous insérez deux passe-fils en caoutchouc; fixez la platine sur les entretoises avec ses quatre vis et faites entrer/sortir les deux fils d’alimentation 12 Vcc et les deux fils allant à l’ampoule à piloter. Utilisez du fil dont le diamètre soit en rapport avec l’intensité consommée par la charge (ne lésinez pas sur le diamètre).
Si vous avez choisi l’option “fixation du MOSFET contre la paroi intérieure” ou si vous dotez ce MOSFET d’un dissipateur, n’oubliez surtout pas d’interposer entre sa semelle métallique et le métal du support dissipateur un kit d’isolation composé d’un canon isolant pour le boulon et d’un mica pour la surface de la semelle.
Toutes les connexions étant faites et vérifiées, vous pouvez insérer le circuit intégré dans son support avec beaucoup de soin et dans le bon sens –repère-détrompeur en U vers C5. Si vous êtes débutant, prenez tout de suite cette excellente habitude.

Figure 6 : Photo d’un des prototypes de la platine de l’allumage progressif pour ampoule 12 V EN1648 installée dans son boîtier MOX30 (vous devrez le percer pour fixer la platine au fond à l’aide de quatre entretoises, pour laisser entrer les deux fils d’alimentation 12 V et pour laisser sortir les deux fils allant à la charge).

Figure 7 : Pour assurer au MOSFET MFT1 une dissipation de chaleur élevée, montez-le directement sur le boîtier métallique (figure 8), sans oublier d’utiliser le kit d’isolation (canon isolant et mica).

Figure 8 : Avant d’insérer la platine dans le boîtier métallique, percez quatre trous au fond de ce dernier (utilisez la platine comme gabarit de perçage) et vissez quatre entretoises métalliques de 5 mm (cette légère surélévation de la platine par rapport au fond du boîtier métallique évitera tout court-circuit).
Percez les deux trous de passage des fils d’entrée et de sortie de la tension dans les deux grands côtés et placez des passe-fils en caoutchouc. Reliez les pattes du MOSFET aux points SDG de la platine avec des fils de couleurs différentes afin de ne pas les intervertir (voir figure 7).


Figure 9 : La tension12 V pour alimenter ce circuit est appliquée au bornier de gauche et la lampe à celui de droite.

Figure 10 : Si vous prélevez la tension 12 V sur la batterie du véhicule, les fils négatifs de l’entrée comme de la sortie peuvent être reliés au châssis (masse) de celui-ci.

Le réglage
Avec un petit tournevis réglez le curseur du trimmer à mi course : ainsi, dès la mise sous tension du circuit vous pourrez vérifier l’allumage progressif de l’ampoule.
Cette dernière est bien sûr une 12 V et vous l’alimentez en courant continu (par exemple, batterie du véhicule ou alimentation stabilisée de l’amplificateur : dans ce dernier cas, au besoin, montez un régulateur 7812). Voir figure 9.
Mettez sous tension : la luminosité de l’ampoule augmente graduellement à une vitesse fonction du réglage du trimmer. Pour régler cette durée (temps que met l’ampoule pour atteindre sa luminosité maximale), vous allez procéder par essais successifs en agissant chaque fois sur le trimmer, mais procédez toujours à ce réglage appareil éteint.
Tournez la vis du trimmer puis alimentez l’appareil et jugez si ce réglage vous convient ; sinon coupez l’alimentation et retouchez le trimmer dans un sens ou dans l’autre puis remettez l’appareil sous tension, etc.
Si vous envisagez une utilisation automobile, pour un allumage graduel des plafonniers, voire aussi des feux de position et pourquoi pas des phares, voyez la figure 10 : pour les fils de masse (en entrée comme en sortie), pensez à les relier à la carrosserie, mais faites une bonne connexion de masse (le métal doit être dépourvu de peinture et de rouille). Si vous appliquez l’allumage graduel au circuit des phares de la voiture, montez deux circuits (avec un vous risqueriez de faire fondre le MOSFET) et réglez la durée au minimum.
Si vous n’êtes par féru, faites-vous aider par un garagiste aimable (si si ça existe !) ou par un électricien auto : cela vous évitera peut-être des déboires (à bord du véhicule, ce qu’il y a de plus dangereux, juste après le conducteur, c’est le réservoir à carburant et le circuit électrique).

Un lecteur / enregistreur de données sur carte SD pour port USB

Ce petit montage permet d’écrire des données sur une mémoire Secure Digital et de les relire, tout cela à partir du port USB d’un PC. Voyons comment cet appareil a été développé sur les plans matériel et logiciel, grâce à la mise en oeuvre d’un microcontrôleur doté d’un Universal Serial Bus.


Depuis quelques temps, on trouve dans le commerce, en tant que dispositifs autonomes ou fournis avec les APN, des appareils de lecture/écriture sur SDCard à interface USB ou, plus rarement, IEEE1394. Comme il s’agit d’appareils économiques, nous vous proposons ici une autoconstruction qui vous reviendra le même prix qu’un achat commercial, mais qui vous procurera la satisfaction d’une initiation à cette technologie sophistiquée.

Notre réalisation
Cet article vous propose en effet le schéma électrique et la réalisation pratique d’un tel lecteur/enregistreur de données sur carte SD pour port USB ; lisez-le, car c’est une bonne occasion d’expérimenter les concepts théoriques de la SD-Card (et que vous devez commencer à connaître puisque nous avons déjà publié maints montages utilisant une SD comme mémoire de données). Notre objectif est cette fois de réaliser un petit circuit qui permette d’écrire et de lire les blocs d’une SD en utilisant une interface USB. Le résultat final a été atteint grâce à la mise en oeuvre d’un PIC18F2550, entouré de quelques rares composants coomplémentaires, mais doté d’un remarquable programme résident. Sans parler du programme en Delphi tournant sur le PC. Il s’agit, une fois encore, d’une expérimentation didactique…mais dont les possibilités d’évolution sont multiples puisque, d’un côté nous intégrons un PIC à une énorme mémoire et que de l’autre nous l’interfaçons avec un système de communication rapide et efficace comme l’USB.
Ce sera une manière utile et passionnante de saisir sur le vif tout ce qu’on a acquis précédemment en théorie, ou même pour certains d’apprendre très simplement de façon concrète tout ce qu’une SD peut faire.

Le schéma électrique
Le circuit dont la figure 1 donne le schéma électrique est décidément fort simple ! Le seul problème que nous ayons rencontré concerne la réalisation d’un système qui puisse gérer au mieux la communication avec le PIC : celui-ci travaille, on le sait, avec des signaux en 0/5 V, alors que la SD nécessite des tensions comprises entre 0 et 3,6 V. Nous l’avons résolu une fois de plus (ce problème en effet n’est pas nouveau) de manière fort élégante : pour les lignes allant du PIC à la carte on utilise une diode schottky et une résistance de tirage.
Ainsi, quand le microcontrôleur présente à la SD le un logique, la diode est bloquée et la tension sur la broche de la carte est celle due à la résistance de tirage, soit 3,3 V (même si le PIC fournit 5 V). Quand le micro engendre un niveau logique bas, la diode conduit, ce qui porte à environ zéro volt également la broche de la carte. En ce qui concerne la connexion dans le sens inverse, de la SD vers le PIC, la chose est légèrement différente : pour rendre la traduction des niveaux logiques simple tout en restant efficace et précise, nous avons utilisé un “buffer/line driver” (pilote de ligne/tampon) en technologie HCT ; il s’agit d’un circuit intégré très économique mais d’une efficacité totale.
Nous en avons utilisé la version la plus courante, le 74HCT125 ; pour en habiliter les sorties, quatre broches OE1 à OE4 (Output Enable) sont utilisées : le signal d’entrée est présenté en sortie quand la ligne OE est au zéro logique. Comme nous voulons que le passage E vers S se fasse le plus rapidement possible, nous avons relié les broches OE directement à la masse. Par conséquent, chaque pilote de ligne est toujours actif. Les lignes d’entrée sont pleinement compatibles avec les signaux provenant des cartes SD, car les circuits intégrés basés sur la logique ACT/HCT acceptent en entrées des niveaux inférieurs aux TTL (par exemple 0/3V) et présentent en sortie des niveaux 0/5 V ; quand ils sont alimentés en 5 V, ils “voient” un niveau de 3 V comme si c’était un niveau TTL 5 V normal et fournissent en sortie 5 V, tension idéale pour commander directement les lignes d’entrée du PIC18F2550. La tension d’alimentation pour le PIC est prise directement sur le port USB (rappelons que ce standard prévoit la fourniture de 5 V 500 mA aux périphériques connectés). Le régulateur LM1086-CT-3.3, à partir de ce 5 V, engendre une tension de 3,3 V, suffisante pour faire fonctionner la SD.
Pour mettre en évidence les opérations que le micro doit accomplir, nous avons doté la platine de trois LED de couleurs différentes : la jaune indique que le circuit est bien alimenté ; la rouge qu’une opération de lecture ou d’écriture est en cours et la verte que la platine est prête à élaborer une commande envoyée par l’hôte. Si les deux LED rouge et verte sont allumées ensemble, c’est qu’une condition d’erreur a été détectée et qu’un transfert de données depuis ou vers la SD s’est produit (le “reset” du système doit par conséquent avoir lieu).
Vous vous êtes sans doute aperçus qu’aucune mémoire temporaire FRAM ou EEPROM n’est présente dans le circuit ; c’est parce que nous nous servons de la rapidité du bus US (Universal Serial Bus) pour envoyer directement à l’hôte les valeurs lues sur la carte ; de même, durant l’écriture, nous faisons en sorte que l’hôte envoie directement à la SD les données que nous voulons y inscrire. L’universalité de ce bus série (Universal Serial Bus) nous permet donc d’éviter d’alourdir le circuit avec un composant supplémentaire.
En outre, afin de rendre le système suffisamment efficace, nous aurions dû utiliser un “buffer” rapide, puisque sur une EEPROM traditionnelle chaque octet nécessite une pause de stabilisation de 10 ms. La lecture/écriture de données sur SD ne peut se faire que par blocs d’au moins 512 octets : par conséquent pour chaque opération de lecture/écriture le PIC attend l’arrivée des 512 octets, avec lesquels il forme un paquet qu’il envoie séquentiellement à la SD (ce qui crée de ce fait un interfaçage direct entre le bus SPI et le bus USB. La communication avec la SD se fait en mode SPI, au moyen de deux lignes de données série (une en entrée et une en sortie) synchronisées par un signal d’horloge et une ligne de “Chip Select” utile, dans le cas où l’on connecterait plusieurs cartes en même temps, pour indiquer avec laquelle on veut communiquer.

Figure 1 : Schéma électrique du lecteur/enregistreur de données sur SD-Card en USB.

Figure 2a : Schéma d’implantation des composants du lecteur/enregistreur de données sur SD-Card en USB.

Figure 2b : Dessin, à l’échelle 1, du circuit imprimé du lecteur/enregistreur de données sur SD-Card en USB.

Figure 3 : Photo d’un des prototypes du lecteur/enregistreur de données sur SDCard en USB.

Liste des composants
R1 ...... 4,7 k
R2 ...... 4,7 k
R3 ...... 4,7 k
R4 ...... 1,5 k
R5 ...... 1 k
R6 ...... 1 k
R7 ...... 1 k
C1 ...... 15 pF céramique
C2 ...... 15 pF céramique
C3 ...... 100 nF multicouche
C4 ...... 220 μF 25 V électrolytique
C5 ...... 100 nF multicouche
C6 ...... 220 μF 25 V électrolytique
C7 ...... 220 nF multicouche
D1 ...... BAT85
D2 ...... BAT85
D3 ...... BAT85
LD1 ..... LED 3 mm verte
LD2 ..... LED 3 mm rouge
LD3 ..... LED 3 mm jaune
U1 ...... PIC18F2550-ET611
U2 ...... LM1086-3.3
U3 ...... 74HC125
Q1 ...... quartz 20 MHz
SD1 ..... lecteur pour carte SD

Divers :
1 support 2 x 14
1 support 2 x 7
1 connecteur USB-B
Sauf spécification contraire, toutes les résistances sont des 1/4 W à 5 %.


Le programme résident
La complexité de ce projet vient, non pas du matériel, mais du programme résident et du “front-end” rédigé en Delphi. Pour le programme résident, nous avons utilisé le PICBasic afin de rendre plus simples les explications que nous vous devons ! Si vous avez suivi un cours de PICBasic, cela vous paraîtra même simpliste et constituera un exercice vous permettant de mettre en pratique la théorie acquise.
Commençons par analyser les parties les plus remarquables du dispositif, soit le fichier SDUSBdsc.asm. Pour ceux qui n’ont aucune idée de ce qu’est un descripteur, il faut préciser que le PIC18F2550 sera reconnu par le PC comme un périphérique HID (Human Interface Device) et que pour pouvoir communiquer de manière correcte au moyen de l’interface USB, il est nécessaire que l’ordinateur l’identifie comme tel. Le descripteur est une structure fournissant à l’hôte toutes les informations générales sur le dispositif et sur ses modes de fonctionnement.
Rappelons qu’en effet, sur le bus USB, c’est toujours l’ordinateur qui commande.
De plus, le descripteur établit quels et combien sont les ports de communication utilisables (les fameux “end-points”) : il est donc fondamental pour que le logiciel puisse envoyer les données au PIC et en recevoir de lui.
Dans le “Listing” 1 nous voyons les points les plus importants : nous établissons la taille (en octets) du “buffer” pour l’Endpoint0 (pour les dispositifs à faible vitesse la seule valeur est 8), la dimension du tableau (“array”) gardant la trace des configurations alternatives de chaque interface (rappelons qu’un dispositif peut avoir plusieurs interfaces, chacune avec plusieurs configurations, ou “settings”, que l’hôte peut sélectionner), le nombre maximum de “end-points” utilisables dans le projet (un seulement et on ne doit pas prendre en compte l’Endpoint0), le nombre de configurations et d’interfaces du dispositif, le mode de gestion des “buffers” associés à chaque “end-point”, la configuration du registre UCFG (USB Configuration Register) et la classe d’appartenance du dispositif (HID).
En particulier, en ce qui concerne le registre UCFG, nous avons décidé d’utiliser le transpondeur interne de la puce et une configuration de type “Low-Speed” (vitesse lente). Dans le tableau définissant les paramètres de la classe, nous avons précisé l’utilisation de l’Endpoint1 IN/OUT, avec un “buffer” à 8 octets (“Listing” 2).
Dans le descripteur Interface nous précisons le nombre de “end-points” utilisés (l’Endpoint0 ne comptant pas, car c’est celui de service). En outre, nous utiliserons deux ports de communication, un en sortie et l’autre en entrée (“Listing” 3).
Dans le descripteur des “end-points” (“Listing” 4) nous établissons que celui d’émission aura une longueur maximale de 8 bits (1 octet) et celui de réception de 5 octets. En effet, nous avons établi que le logiciel envoie au PIC des commandes de type CODAGE + 4 PARAMETRES (nous nous sommes inspirés de la structure définie dans les spécifications de Secure Digital pour les CMD17 et CMD24, soit les commandes de lecture/écriture qui sont suivies de l’adresse à 32 bits du bloc à lire/écrire. De l’autre côté, la carte répondra à travers des séquences d’octets. L’intervalle de “polling” (demande de la part de l’ordinateur) est fixé à 10 ms, ce qui est plus que suffisant pour les buts que nous nous sommes fixés.
Dans le descripteur Report (“Listing” 5) nous avons utilisé une structure hiérarchique. Les définitions des champs d’entrée et de sortie, dimensionnées en fonction de ce que nous avons dit plus haut, sont mises en évidence. On le voit, il s’agit de structures à 8 bits pour lesquelles on a fixé des limites logiques ordinaires (0-255).
Passons vite sur les Usage.
En ce qui concerne le descripteur String, nous avons utilisé les valeurs décrites dans le “Listing” 6. Ces valeurs sont reportées dans un panneau du logiciel dès que le dispositif achève le processus d’énumération.
Pour les néophytes, précisons que ce processus sert à faire en sorte que l’hôte (“host”) et le périphérique (“device”) fassent connaissance et puissent ensuite instaurer un canal de communication. Rappelons aussi que le nom du fichier contenant les descripteurs doit être inséré dans le fichier usbdesc.asm afin que le compilateur PBP l’inclue correctement dans la structure du .HEX que nous insèrerons ensuite dans la mémoire du PIC.
Nous avons entre autres utilisé, pour la compilation correcte du projet logiciel, un fichier p18f2550.inc dûment modifié, prévoyant une division de la fréquence d’oscillation en entrée égale à 5 et une division de la fréquence d’horloge du système égale à 4.
Ainsi, nous pouvons monter dans le circuit un quartz de 20 MHz et maintenir (grâce à l’activation d’un PLL) une horloge interne de 24 MHz. Pour la programmation du PIC nous utilisons le Melabs Programmer de microEngineering Labs et maintenons les configurations visible dans la fenêtre de dialogue de la figure 4.
Ceci dit, le moment est venu de passer au code proprement dit. Jetons un coup d’oeil au “Listing” 7, lequel comporte des déclarations : pour la communication avec la carte, nous utilisons le mode SPI comprenant un sous ensemble de commandes du protocole SD standard et c’est le plus simple à implémenter. Il n’utilise en effet que trois lignes pour communiquer : une pour l’horloge (SCK), une pour les données entrantes (SDI) et une autre pour les données sortantes (SDO) ; en plus, bien sûr, du signal CS (Chip Select) servant surtout à entrer en mode SPI et pour établir le commencement et la fin d’une transaction.
Nous avons en outre précisé les broches utilisées pour l’allumage et l’extinction des deux LED de signalisation.
Enfin vient la séquence des variables nécessaires pour le processus.
La paire IND0, IND1 sert à établir l’adresse du bloc à lire/écrire et compose la séquence des 32 bits envoyés par l’hôte comme liste de paramètres.
Le vecteur CMD, constitué de 5 octets, contient la séquence CODAGE + 4 PARAMETRES.
Le choix est dû à ce qui a été établi dans le descripteur report.
Comme le montre le “Listing” 8, le code d’initialisation est fort simple. Le PORTA est mis tout en sortie car nous n’utilisons que deux lignes pour commander les LED ; dans le PORTB on a prévu la broche RB2 comme ligne d’entrée pour les données provenant de la carte. L’extinction des deux LED est effectuée et on passe au code de mise en route du dispositif d’abord et de la SD ensuite.
Initialement la procédure d’énumération du dispositif est réclamée et une pause de stabilisation d’une demi seconde a lieu. A la fin de la procédure, le PIC est reconnu par le système d’exploitation de l’ordinateur et il est prêt à entrer en communication avec le logiciel que nous utiliserons pour la lecture/écriture de la carte. A la fin de cette procédure nous lançons une phase d’initialisation de la SD qui nous permettra d’abord de passer en mode SPI, puis d’établir les limites dimensionnelles des blocs de lecture/écriture. Pour résumer : nous pouvons distinguer deux phases fondamentales, RESET CARD (CMD0) et INITIALISATION (CMD1).
Dans le “Listing” 9 vous voyez comment se présente le code correspondant.
Notez que le “reset” est précédé d’une séquence de cycles d’horloge “à vide” (ou “Dummy Clock”, horloge fictive) comme le veulent les spécifications Secure Digital.
En particulier, le CMD0 est envoyé en maintenant la ligne CS à 0 : cette procédure permet d’entrer en mode SPI.
Une fois entrés, on lance l’initialisation du dispositif et on attend que la SD ait terminé cette phase (on vérifie l’arrivée de la réponse qu’elle envoie).
Rappelons qu’en mode SPI la carte est en mesure d’envoyer exclusivement deux types de réponse, une à 8 bits (RISP1) et une à 16 bits (RISP2), qui ont chacune une structure particulière de signalisation des erreurs. Notez que dans ces séquences un délai (“time-out”) a été prévu afin d’éviter qu’en cas d’erreur le système ne se bloque.
Dans ce cas, à travers un compteur (CONTA1), on établit la limite de répétition au delà de laquelle on suppose que la carte refuse de répondre ou que l’initialisation a échoué.La phase de définitions du nombre d’octets qui composeront le bloc de lecture/écriture de la SD est sautée, car on se sert de la longueur standard de 512 octets (“Listing” 10). Quand cette première procédure est terminée, nous allumons la LED verte (pour signaler que le dispositif est initialisé et qu’il est prêt à recevoir des commandes du logiciel tournant dans l’ordinateur).
Nous entrons en particulier dans une boucle d’attente sur le port USB, à travers lequel nous nous attendons à recevoir une séquence de 5 octets, dont le premier contiendra les codes de la commande à exécuter.
Dans le “Listing” 11 on voit clairement la séquence logique utilisée pour établir quelles instructions exécuter en fonction du premier octet reçu. Nous avons intentionnellement maintenu le codage utilisé dans la description du protocole SPI pour SD : la 17 lance la lecture (dans le protocole on utilise la CMD17) et la 24 l’écriture (CMD24). Si une quelconque autre commande arrive, elle est écartée et nous retournons à la lecture d’une nouvelle séquence de 5 octets. Notez que la fonction USBService, qui gère le module d’interface USB, est régulièrement appelée. Le code résultant, en effet, n’est plus basé sur la gestion des signaux d’interruption (“interrupt”), mais exclusivement sur une interrogation continue des registres associés au port devant identifier les diverses opérations à accomplir.
En ce qui concerne la procédure de lecture, nous avons convenu de recevoir l’adresse du bloc à lire dans les 4 derniers octets de la séquence de 5.
Nous lançons alors la commande de lecture en transférant les 512 octets sur le bus USB à travers l’instruction USBOUT. Les instructions résultantes sont visibles dans le “Listing” 12. Nous allumons la LED rouge pour signaler que l’élaboration de la commande est en cours. La CMD17 est envoyée à la SD en lui passant comme paramètres les 4 derniers octets reçus de l’ordinateur.
Quand la commande est acceptée, la carte envoie une séquence de bits particulière nommée “Start-Block”, après quoi l’émission commence en une séquence de 512 octets ; à chaque octet correspond immédiatement un envoi. A la fin, à travers la CMD13, le registre de Status de la carte est lu, afin de vérifier si l’opération a réussi ou si une erreur s’est produite.
Ensuite, un saut (“jump”) est fait jusqu’à l’étiquette AVVIOP où est localisé le code qui s’occupera d’attendre une nouvelle commande de l’hôte. La LED rouge est éteinte, la verte rallumée pour signaler à l’usager la possibilité d’envoyer une nouvelle demande de lecture/écriture. Et nous arrivons à l’étiquette SCRIVI contenant le code de l’écriture d’un bloc de 512 octets sur SD (“Listing” 13).
Nous allumons la LED rouge et nous valorisons adéquatement IND0 et IND1 avec l’adresse du secteur à écrire. A travers la CMD24 nous initialisons la transaction d’écriture et envoyons le “Start Block” (“Listing” 14).
L’hôte (“host”) nous envoie 104 paquets de 5 octets chacun : le premier se compose de l’identifiant de la commande à exécuter suivi de l’adresse du secteur correspondant. Les 103 restants sont constitués des valeurs à écrire sur la carte. Le dernier paquet a 3 octets de fermeture et donc, comme le montre le “listing”, nous ne déposons que les deux premiers dans la carte. Nous concluons donc l’opération d’écriture (“Listing” 15).
Signalons l’opération de AND logique pour l’extraction dudit “Data Response Token” envoyé pour chaque bloc de données écrit.
Cette séquence de bits devient très importante dans le cas d’opérations comme l’écriture de plusieurs blocs contigus (ici nous ne l’utiliserons pas). Si, en effet, un erreur se produit, le PIC doit bloquer la transaction à travers une CMD12.
Nous ne faisons pas autre chose que signaler l’erreur en allumant ensemble les LED rouge et verte (étiquettes ERRORE, ERRORE2) et en réinitialisant la carte. Ainsi, le circuit ne se bloque pas et retourne au cycle d’attente de la commande de la part de l’hôte. Comme pour l’opération de lecture, dans ce cas également nous utilisons la CMD13 pour connaître le Status de la SD. A la fin nous revenons à l’étiquette AVVIOP pour attendre la prochaine séquence de commande à travers l’USB.

"Listing" 1.

; **********************************************************************
; TABLEAU PARAMETRES GENERAUX
; **********************************************************************

#define EP0_BUFF_SIZE 8
#define MAX_NUM_INT 1
#define MAX_EP_NUMBER 1
#define NUM_CONFIGURATIONS 1
#define NUM_INTERFACES 1

#define MODE_PP _PPBM0
#define UCFG_VAL _TRINT|MODE_PP ; Low-Speed

#define USB_USE_HID

zzz L02 p38 zzz


"Listing" 2.

; **************************************************
; TABLEAU PARAMETRES CLASSES HID
; **************************************************

#define HID_INTF_ID 0x00
#define HID_UEP UEP1
#define HID_BD_OUT ep1Bo
#define HID_INT_OUT_EP_SIZE 8
#define HID_BD_IN ep1Bi
#define HID_INT_IN_EP_SIZE 8
#define HID_NUM_OF_DSC 1


"Listing" 3.

; **************************************************
; TABLEAU 3 DESCRIPTEUR INTERFACE
; **************************************************
Interface1
retlw (HIDDescriptor1-Interface1)/2 ; bLength
retlw DSC_INTF ; bDescriptorType
retlw 0x00 ; bInterfaceNumber
retlw 0x00 ; bAlternateSetting
retlw 0x02 ; bNumEndpoints
retlw 0x03 ; bInterfaceClass
retlw 0x01 ; bInterfaceSubClass
retlw 0x02 ; bInterface Protocol
retlw 0x05 ; iInterface


"Listing" 4.

; ******************************************************************
; TABLEAU 5 DESCRIPTEUR «END-POINTS»
; ******************************************************************
Endpoint1
retlw (Endpoint2-Endpoint1)/2 ; bLength
retlw DSC_EP ; bDescriptorType
retlw 0x81 ; bEndpointAddress
retlw 0x03 ; bmAttributes
retlw 0x01 ; wMaxPacketSize (low-b)
retlw 0x00 ; wMaxPacketSize (high-b)
retlw 0x0A ; bInterval
Endpoint2
retlw (EndConfig1-Endpoint2)/2 ; bLength
retlw DSC_EP ; bDescriptorType
retlw 0x01 ; bEndpointAddress
retlw 0x03 ; bmAttributes
retlw 0x05 ; wMaxPacketSize (low-b)
retlw 0x00 ; wMaxPacketSize (high-b)
retlw 0x0A ; bInterval
EndConfig1


"Listing" 5.

ReportDescriptor
retlw 0x06 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x01 ; Usage Page (low-b) (“Vendor Defined Page 1”)
retlw 0xFF ; Usage Page (high-b) (“Vendor Defined Page 1”)
retlw 0x09 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x01 ; Usage (“Vendor Defined Usage 1”)
retlw 0xA1 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x01 ; Collection (“Application”)
retlw 0x09 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x02 ; Usage (“Vendor Defined Usage 2”)
retlw 0xA1 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x00 ; Collection (“Physical”)
retlw 0x06 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x02 ; Usage Page (low-b) (“Vendor Defined Page 2”)
retlw 0xFF ; Usage Page (high-b) (“Vendor Defined Page 2”)
retlw 0x09 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x03 ; Usage (“Vendor Defined Usage 3”)
retlw 0x09 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x04 ; Usage (“Vendor Defined Usage 4”)
retlw 0x15 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x00 ; Logical Minimum (0)
retlw 0x26 ; Octet de préfixe (bTag,bType,bSize)
retlw 0xFF ; Logical Maximum (low-b) (255)
retlw 0x00 ; Logical Maximum (high-b)
retlw 0x75 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x08 ; Report Size (8 bits)
retlw 0x95 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x01 ; Report Count (1 campo dati)
retlw 0x81 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x02 ; Input (Data, Var, Abs)
retlw 0x09 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x05 ; Usage (“Vendor Defined Usage 5”)
retlw 0x15 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x00 ; Logical Minimum (0)
retlw 0x26 ; Octet de préfixe (bTag,bType,bSize)
retlw 0xFF ; Logical Maximum (low-b) (255)
retlw 0x00 ; Logical Maximum (high-b)
retlw 0x75 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x08 ; Report Size (8 bits)
retlw 0x95 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x05 ; Report Count (5 campi dati)
retlw 0x91 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x02 ; Output (Data, Var, Abs)

retlw 0xC0 ; End Collection (“Physical”)
retlw 0xC0 ; End Collection (“Application”)
end_ReportDescriptor


"Listing" 6.

DEVICE NAME: Lecture/Ecriture SDCARD
MANIFACTURER: Microchip
SERIAL NUMBER: TAU333
CONFIGURATION: CFG1
INTERFACE: EP1/INOUT


"Listing" 7.

‘*********************************
‘*Connexion avec la SDCard
‘*********************************
SCK var PORTB.6 ‘CLOCK-CARD PIN5 (27 PIC)
SDI var PORTB.5 ‘DONNEES-ENTREE-CARD PIN2 (26 PIC)
SS var PORTB.4 ‘SELECTION-CARD PIN1 (25 PIC)
SDO var PORTB.2 ‘DONNEES-SORTIE-CARD PIN7 (23 PIC)
‘********
‘* LED
‘********
ROSSO var PORTA.3 ‘LED ROUGE
VERDE var PORTA.5 ‘LED VERTE
‘***************
‘* Application
‘***************
RISP1 var byte ‘REPONSE TYPE R1 PAR CARD (8bit)
RISP2 var word ‘REPONSE TYPE R2 PAR CARD (16bit)
IND1 var word ‘ADRESSE SDCARD WORD HAUTE BIT 16-31
IND0 var word ‘ADRESSE SDCARD WORD BASSE BIT 0-15
CAR var byte ‘CARACTERE A ECRIRE
CONTA VAR BYTE ‘compteur octets reçus
CMD VAR BYTE[5] ‘Séquence Commande+IND0+IND1
CONTA1 var word ‘COMPTEUR
CONTA2 var word ‘COMPTEUR
CTL var byte ‘OCTET DE CONTROLE FRAM
QX var byte ‘ANALYSE 4 BITS Réponse Données


"Listing" 8.

ADCON1 = 001111 ‘PIN RA Numériques
TRISA = 000000 ‘ PORTA en sortie
TRISB = 000100 ‘ RB6=CLOCK RB5=VERSO CARD
‘ RB4=SELEC CARD RB2=PAR CARD
PORTA = 0 ‘ Reset LED
ROSSO = 1
VERDE = 0

USBInit ‘ Processus d’énumération à la fin le dispositif ‘ entre dans l’état Configuré

Pause 500 ‘ Attente


"Listing" 9.

RESET:
SS=1
FOR CONTA1 = 1 TO 10
SHIFTOUT SDI,SCK,MSBFIRST,[$FF] ‘Envoie cycles d’horloge à vide
NEXT CONTA1
SS=0
PAUSE 50
‘********************************
‘* CMD0 maintenant SS à 0
‘********************************
SHIFTOUT SDI, SCK, MSBFIRST, [$40,$00,$00,$00,$00,$95] ‘Envoie CMD0
SHIFTIN SDO, SCK, MSBPRE, [RISP1] ‘Lis réponse R1 à partir de la Card
CONTA1 = 0
WHILE RISP1 <> 1
SHIFTIN SDO, SCK, MSBPRE, [RISP1] ‘Lit réponse R1 à partir de la Card
CONTA1 = CONTA1 + 1
IF CONTA1 >= 255 THEN ‘Time-Out écoulé, il sort
GOTO ERRORE
ENDIF
WEND
SS=1
PAUSE 50
SS=0


"Listing" 10.

‘********************************************************
‘* Envoie à répétition CMD1 jusqu’à réponse = 0
‘********************************************************
CONTA1 = 0
RISP1 = 1
WHILE RISP1 <> 0
SS=1
SHIFTOUT SDI,SCK,MSBFIRST,[$FF]
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
SS=0
PAUSE 50
SHIFTOUT SDI,SCK,MSBFIRST,[$41,$00,$00,$00,$00,$FF,$FF] ‘Envoie CMD1
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
CONTA1 = CONTA1 + 1
IF CONTA1 >= 255 THEN ‘Time-Out écoulé, il sort
GOTO ERRORE
ENDIF
WEND


"Listing" 11.

AVVIOP:
ROSSO = 0 ‘Extinction LED Rouge
VERDE = 1 ‘Allumage LED Verte
RICEVI:
USBService
CONTA = 5
USBIN 1,CMD,CONTA,RICEVI ‘Reçoit séquence commande
USBService
IF CMD[0] = 17 THEN ‘CMD17 = Lecture Secteur
GOTO LEGGI
ENDIF
IF CMD[0] = 24 THEN ‘CMD24 = Ecriture Secteur
GOTO SCRIVI
ENDIF
GOTO AVVIOP


"Listing" 12.

LEGGI:
ROSSO = 1 ‘Allumage LED Rouge
VERDE = 0 ‘Extinction LED Verte
IND0.BYTE1 = CMD[1] ‘Valorisation Adresse à lire
IND0.BYTE0 = CMD[2]
IND1.BYTE1 = CMD[3]
IND1.BYTE0 = CMD[4]



Initialisation de l’adresse du bloc à lire sur la carte à travers les 4 derniers octets de la séquence de 5.


‘* LECTURE 512 OCTETS SUR SDCARD
SS=1
SHIFTOUT SDI,SCK,MSBFIRST,[$FF]
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
SS=0
SHIFTOUT SDI,SCK,MSBFIRST,[$51,IND1.BYTE1,IND1.BYTE0,IND0.BYTE1,IND0.BYTE0,$FF]


Adresse du bloc à lire passé à la carte comme paramètre de CMD17.


‘Envoie CMD17
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
CONTA1 = 0
WHILE RISP1<> 0
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
CONTA1 = CONTA1 + 1
IF CONTA1 >= 255 THEN ‘Time-Out écoulé, il sort
GOTO ERRORE
ENDIF
WEND
‘Réception START BLOCK
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
CONTA1 = 0
WHILE RISP1<> $FE


Réception du Start-Block 11111110.


SHIFTIN SDO,SCK,MSBPRE,[RISP1]
CONTA1 = CONTA1 + 1
IF CONTA1 >= 255 THEN ‘Time-Out écoulé, il sort
GOTO ERRORE
ENDIF
WEND
‘Réception BLOC DONNEES
FOR CONTA2= 0 TO 511
SHIFTIN SDO,SCK,MSBPRE,[CAR]
INVIA: USBService
USBOUT 1,CAR,1,INVIA
‘Envoie par USB


Réception de 1 octet et écriture sur FRAM.


NEXT CONTA2
‘Réception CRC
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
‘Dès que la carte a fini de lire vérifie l’état de la carte
‘Envoie le CMD13
SS=1
SHIFTOUT SDI,SCK,MSBFIRST,[$FF]
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
SS=0
SHIFTOUT SDI,SCK,MSBFIRST,[$4D,$00,$00,$00,$00,$FF]


Réception du statut de la carte à travers la réponse à 16 bits.


‘Reçois le status à 16 bits réponse format 2
SHIFTIN SDO,SCK,MSBPRE,[RISP2\16]
CONTA2=0
WHILE RISP2.BYTE0 <> 0
SHIFTIN SDO,SCK,MSBPRE,[RISP2\16]
CONTA2 = CONTA2 + 1
IF CONTA2 >= 255 THEN
GOTO ERRORE2
ENDIF
WEND
GOTO AVVIOP



"Listing" 13.

SCRIVI:
ROSSO = 1 ‘Allumage LED Rouge
VERDE = 0 ‘Extinction LED Verte
IND0.BYTE1 = CMD[1] ‘Valorisation Adresse à écrire
IND0.BYTE0 = CMD[2]
IND1.BYTE1 = CMD[3]
IND1.BYTE0 = CMD[4]

‘------------------------------------------------------------
‘* ECRITURE 512 OCTETS SUR SDCARD
‘------------------------------------------------------------

USBService
SS=1
SHIFTOUT SDI,SCK,MSBFIRST,[$FF]
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
‘Envoie CMD24 écriture bloc sur SDCard
SS=0
SHIFTOUT SDI,SCK,MSBFIRST,[$58,IND1.BYTE1,IND1.BYTE0,IND0.BYTE1,IND0.BYTE0,$FF]


Passage de l’adresse du bloc à écrire.


SHIFTIN SDO,SCK,MSBPRE,[RISP1]
CONTA2 = 0
WHILE RISP1 <> 0


Vérifie si la carte est prête à recevoir des données.


SHIFTIN SDO,SCK,MSBPRE,[RISP1]
CONTA2 = CONTA2 + 1
IF CONTA2 > 10000 THEN
GOTO ERRORE
ENDIF
WEND
‘Envoie Start Block %11111110=$FE
SHIFTOUT SDI,SCK,MSBFIRST,[$FE]


"Listing" 14.

FOR CONTA1 = 1 TO 102
RX5:
USBService
CONTA = 5
USBIN 1,CMD,CONTA,RX5


Réception bloc 5 octets.


USBService
‘Commence Ecriture sur SDCARD
FOR CONTA = 0 TO 4
CAR = CMD[CONTA]
SHIFTOUT SDI,SCK,MSBFIRST,[CAR]



Ecriture 5 derniers octets reçus.


NEXT CONTA
NEXT CONTA1
RX6: USBService
CONTA = 5
USBIN 1,CMD,CONTA,RX6
USBService
CAR = CMD[0]
SHIFTOUT SDI,SCK,MSBFIRST,[CAR]
CAR = CMD[1]
SHIFTOUT SDI,SCK,MSBFIRST,[CAR]



Fermeture du secteur.




"Listing" 15.

SHIFTOUT SDI,SCK,MSBFIRST,[$FF,$FF]
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
QX = 000000
QX = RISP1 & $0F


4 derniers bits réponse de la commande d’écriture :
0101 DONNEES ACCEPTEES
1011 DONNEES REFUSEES ERREUR CRC
1101 DONNEES REFUSEES ERREUR ECRITURE


IF QX <> 000101 THEN
GOTO ERRORE
ENDIF
‘Reçois le bit busy de la carte pendant l’écriture
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
CONTA2=0
WHILE RISP1 = 0
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
CONTA2 = CONTA2 + 1
IF CONTA2 >= 255 THEN
GOTO ERRORE
ENDIF
WEND
‘Envoie le CMD13
SS=1
SHIFTOUT SDI,SCK,MSBFIRST,[$FF]
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
SS=0
SHIFTOUT SDI,SCK,MSBFIRST,[$4D,$00,$00,$00,$00,$FF]
SHIFTIN SDO,SCK,MSBPRE,[RISP2\16]


Réception status de la carte.


CONTA2=0
WHILE RISP2.BYTE0 <> 0
SHIFTIN SDO,SCK,MSBPRE,[RISP2\16]
CONTA2 = CONTA2 + 1
IF CONTA2 >= 255 THEN
GOTO ERRORE2
ENDIF
WEND
GoTo AVVIOP


Le logiciel pour PC
Voyons maintenant le logiciel que nous ferons tourner sur l’ordinateur pour commander la lecture/écriture de la SD.
Il a été écrit en Delphi et utilise principalement l’objet TJvHidDevice-Controller : il s’agit d’un composant conçu lors d’un projet du JEDI (Joint Endeavour of Delphi Innovators), c’est-à-dire une communauté internationale d’un millier de développeurs Delphi, dont le but est de diffuser cet environnement et de son frère cadet Kylix. L’interface du programme est très simple à utiliser et elle permet d’expérimenter immédiatement les fonctions que nous avons introduites dans le programme.
L’écran principal (figure 5) visualise trois panneaux : l’un contient les données concernant l’USB, un autre permet de choisir la dimension de la carte et le troisième comporte les poussoirs nécessaires aux fonctions de lecture/écriture. Le tout est complété par une simple grille de 512 cellules divisée en 32 lignes de 16 éléments.
Il est ainsi possible de contrôler et de modifier les valeurs. Afin d’éviter les erreurs, on a prévu une procédure de contrôle de la congruence des données insérées, dès qu’une lecture/écriture ou une export/importation est lancée.
En cas d’insertion d’une valeur non admissible (incongrue), un message indiquant le numéro de la ligne et celui de la colonne (soit les coordonnées de la cellule fautive) est visualisé.
Si nous relions le circuit au port USB (la SD étant déjà insérée dans le lecteur) à la suite du processus d’énumération, les champs identifiants sont chargés dans ce panneau (valeur insérées dans le descripteur String).
Dans la liste des dispositifs apparaît le mot lecture/écriture SD-Card. Le Status de la communication est mis à jour (Relié ou Débranché) et si nous regardons notre platine, nous voyons que la LED jaune s’allume la première (la tension d’alimentation arrive bien), suivie de la LED verte (la carte a dépassé la phase de “reset”, l’entrée en mode SPI et le processus d’initialisation). Notez que si on relie le circuit sans SD dans le lecteur, les LED verte et rouge s’allumeront ensemble (pour signaler l’erreur).
Après cette première phase, on peut se positionner sur le panneau Paramètres Card pour sélectionner à travers les deux petites flèches la capacité de la carte.
Ainsi, la limite maximale des secteurs accessibles est recalculée. Le nombre se réfère à la quantité de sections de 512 octets utilisables pour stocker les données.
On peut alors se positionner sur le panneau Procedure. Ici nous insérons le nombre de secteurs que nous voulons élaborer ; naturellement, la modification de ces champs est liée à la limite dimensionnelle de la carte que nous venons d’établir. Au moyen des poussoirs du panneau, nous pouvons lancer 5 fonctions fondamentales (nous les analysons ci-dessous).
Leggi : un clic sur ce poussoir lance une lecture du secteur que nous avons précisé dans le champ (Blocco Let/Scr) ; l’avancement de la procédure est contrôlable au moyen de la fenêtre d’applet rouge (voir figure 5) ; au fur et à mesure de l’arrivée de la séquence d’octets au PC, les valeurs sont insérées dans la grille et sont directement visibles et modifiables.
Scrivi : lance une information d’écriture du secteur que nous avons précisé dans le champ (Blocco Let/Scr) et charge directement les données de la grille.
Cancella : vide la grille en insérant la valeur FFh dans toutes les cellules.
Importa : charge les données dans la grille à partir d’un fichier externe.
Esporta : envoie les données de la grille vers un fichier externe. En ce qui concerne les deux dernières fonctions, songez que les fichiers utilisés ont une extension de type .sdc, ce ne sont toutefois que des fichiers texte.
Leur structure est des plus simples : à chaque ligne correspond une valeur à insérer dans la grille.
La séquence est produite en lisant chaque ligne de gauche à droite et de haut en bas, comme on le ferait en lisant une feuille de papier. Avec un clic sur le poussoir Importa on ouvre une fenêtre de dialogue, comme le montre la figure 6.
Il est donc possible de sélectionner le fichier et de le charger par un clic sur Apri. Un contrôle des données insérées est effectué pour signaler éventuellement une ligne erronée. La procédure d’exportation fonctionne de manière essentiellement complémentaire.
Là encore, une fenêtre de dialogue s’ouvre, dans laquelle on peut insérer le nom du fichier que l’on veut créer.
Après quoi, avec un clic sur le poussoir Salva, la grille est transférée dans le fichier sélectionné.

Figure 4 : Pour la programmation du PIC nous utilisons le Melabs Programmer de MicroEngineering Labs, en maintenant la configuration visible dans cette fenêtre de dialogue.

Figure 5 : L’écran principal du programme présente trois panneaux.

Figure 6 : Un clic sur le poussoir Importer ouvre cette fenêtre de dialogue.

La réalisation pratique
La réalisation pratique de ce lecteur/enregistreur de données sur SD-Card en USB est des plus simples et des plus rapides (toute la complexité de l’appareil venant du programme résident et du logiciel pour PC). La platine est constituée d’un petit circuit imprimé simple face, dont la figure 2b donne le dessin à l’échelle 1. Fabriquez-le au moyen de la méthode dite de la “pellicule bleue” et, quand vous l’avez devant vous, gravé, percé, étamé, commencez par insérer les deux supports de circuits intégrés et les deux “straps” (sous R3 et entre C4 et C6). Vérifiez attentivement vos soudures (ni court-circuit entre pistes ou pastilles ni soudure froide collée). Insérez et soudez ensuite tous les composants (comme le montrent les figures 2a et 3), en poursuivant par les résistances, condensateurs, diodes schottky, LED, quartz (debout) et régulateur (debout sans dissipateur et semelle métallique tournée vers l’extérieur de la platine) et en terminant par le “périphériques” : à savoir le connecteur USB-B pour circuit imprimé. Attention à l’orientation des composants polarisés : circuits intégrés (repère-détrompeurs en U bien orientés vers le bas, mais insérez-les à la toute fin), diodes, LED, régulateur et électrolytiques.
N’oubliez pas de souder aussi les languettes de blindage du connecteur USB-B. Vérifiez bien toutes les polarités et (encore une fois) la qualité des soudures.
Voilà pour la face “ composants”.
Retournez la platine et soudez très minutieusement (directement sur les pistes du “côté cuivre”) le lecteur de carte (ou porte-SD) SD1. Insérez les circuits intégrés. Le microcontrôleur est disponible déjà programmé en usine (voir nos annonceurs). Vérifiez tout encore une fois.
Vous pouvez maintenant installer la platine dans un boîtier plastique de dimensions appropriées : le couvercle sera percé de 3 trous pour le passage des LED ; l’un des petits côtés d’un évidement carré pour le connecteur USB et l’autre petit côté d’une fente pour insérer la SD-Card. L’alimentation en 5 V se fait donc par le port USB de l’ordinateur. Pour relier la platine à l’ordinateur, utilisez un banal câble USB.

Conclusion
Quoique fort simple matériellement, cet appareil permet de se familiariser avec ce nouveau support de mémoire et de réaliser des expérimentations formatrices avant d’aborder des arguments plus complexes : par exemple, ce circuit vous aidera à anlyser les secteurs clés du formatage FAT16 comme le “boot-sector” et la “root-directory” (voir les précédents articles consacrés à des montages mettant en oeuvre une SD-Card).
Mais en dehors de cet aspect didactique (qui, il est vrai, nous a une fois de plus guidés), ce lecteur/enregistreur de données USB vous sera utile pour acheminer vers un ordinateur des données écrites par des appareils de tous types dans une carte SD ; ou bien pour transférer dans cette même SD des fichiers présents dans le PC.

Un microphone sans fil 863-865 MHz

Avec deux modules UHF 863 à 865 MHz, un émetteur et un récepteur, nous acheminons le signal d’un microphone vers un ampli ou un mélangeur distant (jusqu’à 40 m). Ce système à deux unités TX et RX est idéal pour quelqu’un qui veut pouvoir se déplacer dans un studio, un gymnase ou sur une scène, un stade, etc., en parlant ou en chantant dans le micro. Bref, il s’agit d’un micro sans fil de grande qualité.


Caractéristiques techniques :
- Fréquence de travail : 863 à 865 MHz.
- Portée maxi : 40 m.
- Modulation : FM.
- Sélectivité : + ou – 10 kHz.
- Réponse en fréquence : 50 à 15 000 Hz.
- Distorsion harmonique : 2%.
- Gamme dynamique : 50 dB.
- Expanseur sur TX et RX.

L’association entre le monde du spectacle et les appareils sans fil (pour ne pas dire “wireless”, ce qui signifie exactement la même chose) est désormais bien établie et depuis une décennie. On ne peut nier que la disponibilité de tels microphones HF et autres transmetteurs de signal pour instruments de musique –comme les guitares ou les basses ou les claviers portatifs– a changé la vie des musiciens, surtout en concert, ainsi que des présentateurs de manifestations artistiques ou de plateaux de télévision. Avec les microphones traditionnels (fil à la patte), il fallait en effet toujours être attentif aux mouvements qu’on allait faire, ce qui excluait fantaisie et spontanéité, pourtant si prisées par le public ! On risquait à tout moment, dans le feu du discours ou la passion du jeu de scène, d’emporter la table de mixage ou du moins d’arracher le fil, à moins de s’étaler soi-même de tout son long ! Le micro sans fil a rendu à l’artiste ou au professionnel du spectacle toute sa liberté. Et pas seulement au professionnel : la disponibilité sur le marché de l’électronique grand public de produits à bas prix, a permis en dix ans un développement sans précédent de ce genre de matériel.
Récemment nous avons eu l’occasion d’essayer les modules RF de Circuit Design (distribué par Sylcom Service, www.sylcom.it) avec lesquels nous avons réalisé le radiomicrophone professionnel que cet article décrit et propose de construire : deux unités, émettrice et réceptrice. La majeure partie des radiomicrophones fonctionne avec une porteuse située dans la bande de fréquence standard, d’utilisation libre, celle qui s’étend autour de 434 MHz. D’autres produits homologués émettent dans la bande des 40 MHz ou bien entre 174 et 854 MHz (voir tableau de la figure 9). Le nôtre émet entre 863 et 865 MHz, fréquence librement utilisable à condition de rester dans la limite de puissance légale (et les modules Circuit Design s’y conforment).

L’unité émettrice
L’unité conçue pour envoyer dans l’éther le signal audio est si simple et compacte (voir figures 1 à 3) qu’elle peut être aisément installée (pile 9 V comprise) dans la “poignée” d’un micro cardioïde magnétique ou autre micro dit “de scène” ; ou bien elle peut être montée dans un minuscule boîtier à dissimuler dans une poche (un electret à pince croco épinglé au col de la veste achemine alors la parole à l’entrée jack du boîtier). Le schéma électrique de la figure 1 vous semble “spartiate” car quasiment toutes les fonctions sont dévolues au module U1 WA-TX-01 de Circuit Design (un constructeur japonais). Analysons donc ce circuit qui, on le voit, se compose de deux blocs fonctionnels : un préamplificateur à transistor et le module RF.
L’étage d’entrée sert à élever le niveau faible de la BF prélevé à la sortie du microphone, surtout si on se sert d’une capsule electret non préamplifiée ou d’un microphone magnétique, lesquels normalement fournissent des tensions R.M.S. de quelques millivolts.
Le préampli est constitué d’un transistor monté en configuration émetteur commun : ce NPN, polarisé par la base au moyen de R3, restitue sur son collecteur le signal amplifié. Le microphone est à relier aux points IN ; pour adapter l’unité émettrice à un micro “electretcondenser” (à condensateur electret) ou magnétique, nous avons prévu la possibilité de fournir au conducteur “chaud” une polarisation modeste en prenant sur le pont R1/R2 la tension qu’il nous faut. Quand on se sert d’un microphone electret (une capsule “nue et crue” ou bien un microphone à pince croco à clipser au revers de la veste ou au col de la chemise), il faut donc fermer J1 pour obtenir la polarisation voulue (l’électrolytique C3 découple en continu le réseau de polarisation et le trimmer TR1) ; le cavalier doit en revanche rester ouvert quand le microphone relié au jack IN est de type magnétique.
Le condensateur électrolytique C4 sert à filtrer la composante de polarisation, de façon à la nettoyer des éventuels parasites présents sur la ligne 9 V, lesquels parasites, s’ils n’étaient pas atténués, seraient amplifiés avec le signal utile du microphone ; ce qui aurait pour effet de dégrader le rapport signal/bruit. C4 filtre aussi d’éventuels retours par le positif d’alimentation du signal audio amplifié par T1. Avant d’être amplifié par le transistor, le signal arrivant du microphone peut être réglé en amplitude à l’aide du trimmer TR1, afin d’éviter d’introduire dans le module émetteur des niveaux de BF pouvant présenter une distorsion importante.
Le condensateur C5 découple en continu le réseau de polarisation de la base de T1 par le trimmer, tandis que C6 achemine le signal audio vers U1, tout en découplant la broche 1 de ce dernier du collecteur du transistor.
Et nous voilà arrivés à l’émetteur proprement dit : le WA-TX-01 ; il s’agit d’un composant comportant un oscillateur SAW interne, un modulateur de fréquence à réactance capacitive variable (à diodes varicap...) et un filtre d’antenne passe-bas. L’étage modulateur est piloté par le signal audio, mais non pas par celui appliqué entre le point I et la masse (G), du moins pas toujours : en effet, la composante BF introduite dans le module passe par un compresseur de dynamique –un circuit électronique particulier conçu pour limiter la gamme dynamique, soit l’excursion entre le niveau minimal du signal et son niveau maximal.
La compression sert essentiellement à deux choses : augmenter la rapport S/B et éviter la surmodulation ; pour comprendre la surmodulation, songez que dans les émetteurs FM la porteuse oscille autour de la fréquence centrale et que la déviation de part et d’autre de cette dernière (l’excursion ou profondeur de modulation) est directement proportionnelle à l’amplitude du signal modulant. Comme dans chaque bande radio on définit un certain espacement entre les canaux, il est indispensable que, durant l’excursion produite par la modulation, la fréquence d’émission n’empiète pas sur l’un des deux canaux adjacents : par exemple, si on émet sur 500 MHz et si les canaux sont distants l’un de l’autre de 200 kHz, l’excursion due à la modulation doit rester en dessous de ±100 kHz (100 kHz de part et d’autre de la fréquence centrale). Disons que la déviation de fréquence d’une émission FM doit être toujours inférieure à la moitié de la distance entre les canaux ; inférieure, car la sélectivité des oscillateurs et l’émission des fréquences indésirables interdit de moduler jusqu’à la moitié de la distance, vu que la courbe d’émission ne peut avoir des fronts perpendiculaires (atténuation infinie hors du champ des fréquences).
A propos de ce compresseur, ajoutons qu’il limite la tension modulante responsable de l’excursion de fréquence de l’oscillateur à des valeurs permettant à la déviation de rester dans les limites admises. A la rigueur, on aurait pu obtenir cette limitation en écrêtant la tension modulante, à part que ce procédé occasionnerait une distorsion non négligeable du signal démodulé au niveau du récepteur ; alors qu’avec le compresseur on a un circuit amplificateur à gain variable, dont l’amplification est progressivement réduite quand un capteur de niveau détecte que l’amplitude de l’audio en entrée devient excessive et en revanche augmentée lorsque le niveau du signal est trop bas.
Le compresseur de dynamique compresse donc le signal (si si) et ne le décapite pas nettement, de manière à permettre (pour peu qu’en réception on mette en oeuvre un circuit symétrique) une compensation de l’aplatissement de la dynamique et d’obtenir à nouveau le signal d’origine. La compression se fait entre –60 et –10 dB, ce qui permet une gamme de 50 dB ; par conséquent les signaux en dessous de –60 dB sont amplifiés jusqu’à ce niveau et ceux qui sont supérieurs à –10 dB sont atténués pour en restituer l’amplitude à ce niveau.
Sur le plan du rapport S/B, le compresseur permet d’amplifier les signaux faibles que le bruit de fond de la FM (typiquement –60 dB) pour les mettre au dessus de ce niveau ; par conséquent lorsque, dans le récepteur, l’expanseur décompresse le signal modulant, même l’audio du niveau le plus faible peut être utilisé, car son amplitude est au moins égale à celle du bruit superposé à la composante démodulée. Le module WA-TX-01 est fourni avec l’oscillateur à quartz réglé sur l’une des trois fréquences proposées : 863.125, 863.625, 864.500 et 864.875 kHz ; il travaille en somme dans la gamme 863 à 865 MHz, réservée, en Europe, aux applications audio. Il suffit de choisir la fréquence qui vous convient et de la préciser au moment de commander le module chez le revendeur.
Dans la gamme 863÷865 MHz l’émission doit avoir une puissance réduite : c’est pourquoi l’émetteur émet seulement 2 mW, ce qui suffit largement pour constituer un micro HF, pour peu que l’on utilise aussi le module récepteur très sensible proposé par Circuit Design : on peut alors compter sur une portée de quelque 40 m en espace dégagé (sans obstacle et en utilisant comme antennes réceptrice et émettrice un bout de fil de cuivre de 8,5 cm ou 17 cm de long).
L’émetteur (module TX et transistor d’entrée) est alimenté par une tension continue de 9 V prélevée sur une pile parallélépipédique type 6F22 ; la ligne d’alimentation est protégée contre une inversion accidentelle de polarité par la diode D1 et filtrée par C1 et C2.
Un interrupteur nous permet d’allumer et d’éteindre l’émetteur du radiomicrophone sans avoir à débrancher la pile.

Figure 1 : Schéma électrique de l’émetteur.

Figure 2a : Schéma d’implantation des composants de l’émetteur.

Figure 2b : Dessin, à l’échelle 1, du circuit imprimé de l’émetteur.

Figure 3 : Photo d’un des prototypes de la platine de l’émetteur.

Liste des composants
R1 ...... 1 k
R2 ...... 4,7 k
R3 ...... 1,5 M
R4 ...... 4,7 k
TR1 ..... 10 k trimmer MO
C1 ...... 100 nF multicouche
C2 ...... 220 μF 16 V électrolytique
C3 ...... 4,7 μF 100 V électrolytique
C4 ...... 47 μF 35 V électrolytique
C5 ...... 1 μF 100 V électrolytique
C6 ...... 10 μF 100 V électrolytique
D1 ...... 1N4007
T1 ...... BC547
U1 ...... WATX01
SW1 ..... inverseur à glissière 90°

Divers :
1 connecteur jack stéréo femelle pour ci
1 antenne accordée 863-865 MHz
1 cavalier
1 prise de pile 9 V
1 boîtier plastique éventuel

N’oubliez pas de souder toutes les broches et les languettes de fixation du module émetteur.


L’unité réceptrice
Voir figures 4 à 6. Le signal émis par le WA-TX-01 est capté par l’antenne du récepteur et il atteint le module récepteur WA-RX-01 de Circuit Design. Ce dernier contient un récepteur superhétérodyne à quartz et à filtre SAW inséré entre l’entrée d’antenne (broche 6) et le “front-end” (amplificateur HF) afin de ne laisser passer que la seule fréquence choisie (une des trois indiquées plus haut).
Pratiquement, si le module est accordé sur 863,625 MHz, le résonateur est lui aussi syntonisé sur cette valeur. Le filtre remplace le circuit d’accord à varicap.
Le signal radiofréquence sortant du SAW entre en battement dans un mélangeur HF avec celui produit par l’oscillateur local, lui aussi à quartz et accordé sur une fréquence différant de celle du SAW d’antenne de 10,7 MHz. C’est là bien sûr la valeur de la MF résultant de la conversion due au battement dans le mélangeur, soit la différence entre la fréquence de travail de l’oscillateur local et celle d’accord du résonateur SAW.
La MF est filtrée par un filtre céramique à 10,7 MHz, de façon à la débarrasser des éventuels parasites, puis amplifiée, filtrée à nouveau par un second filtre à 10,7 MHz, pour être ensuite détectée par un discriminateur FM à quartz également.
Le signal audio ainsi obtenu, avant d’atteindre la broche (1) de sortie, passe par un expanseur de dynamique : il s’agit d’un circuit remplissant la fonction symétrique à celle du compresseur monté dans le module émetteur et servant à compenser l’éventuelle atténuation du signal au delà du seuil de niveau paramétré, afin d’éviter la saturation.
L’expanseur dispose lui aussi d’un amplificateur à gain variable, qu’il contrôle afin de maintenir le niveau de l’audio de sortie à une valeur prédéfinie ; par conséquent si la BF démodulée est trop faible, il l’amplifie et il l’atténue si elle est trop forte. L’expanseur permet d’obtenir à la sortie un signal audio d’amplitude constante, de manière à éviter à l’utilisateur du micro HF d’avoir à agir sans cesse sur le contrôle de volume du mélangeur ou de l’amplificateur auquel on a relié le récepteur. Au moyen d’un “buffer”, l’audio qui sort de l’expanseur est acheminée vers la broche 1.
Notez que le module WA-RX-01 possède un circuit de silencieux (“muting”) interne, servant à couper le signal BF de sortie lorsque le signal radio reçu est trop faible pour être exploité dans de bonnes conditions ; le silencieux se base sur le niveau de la MF en amont du second filtre céramique à 10,7 MHz.
Le circuit détectant l’amplitude du signal MF et interrompant la ligne audio éventuellement pilote, au moyen d’un transistor interne, la broche 3 : cette dernière sert à allumer une LED quand le récepteur s’est verrouillé sur la fréquence de l’émetteur.
Donc, si la LED est allumée, c’est que TX et RX sont en liaison, sinon c’est que le récepteur ne peut capter le signal de l’émetteur. La signalisation est utile durant l’installation du radiomicrophone, pour contrôler la portée du système.
Jetons enfin un coup d’oeil au reste du récepteur du radiomicrophone : l’audio prélevé sur la broche 1 est amplifié en tension par opérationnel TL081 monté en configuration non inverseuse, dont le gain dépend de la position du curseur du trimmer TR1 et peut varier entre 1 (curseur tourné complètement vers la broche 2) et un peu plus de 3 (curseur vers la sortie).L’amplification est nécessaire pour élever le niveau de l’audio sortant du module WA-RX-01, lequel niveau normalement ne dépasse pas –10 dBV (environ 230 millivolts) ; l’étage à opérationnel sert à abaisser l’impédance de sortie du module récepteur, qui est de 10 kohms. La BF amplifiée par le TL081 est disponible entre la broche 6 et la masse : à partir de là, à travers la résistance R5 et l’électrolytique C5, elle atteint la sortie du circuit, sortie à laquelle on peut relier une entrée de table de mixage ou d’amplificateur ou d’enregistreur audio. Notez la résistance R6, servant à charger l’électrolytique C5 quand le circuit est au repos : le but de ceci est d’éviter que, lorsque le récepteur est relié à un autre appareil audio, on n’entende l’habituel “bump” provoqué par l’impulsion dérivant du transfert du potentiel de polarisation de la sortie de l’opérationnel (exactement la moitié de la tension d’alimentation, ce que réalise le pont R2/R3...) au moment de la connexion.

Figure 4 : Schéma électrique du récepteur.

Figure 5a : Schéma d’implantation des composants du récepteur.

Figure 5b : Dessin, à l’échelle 1, du circuit imprimé du récepteur.

Figure 6 : Photo d’un des prototypes de la platine du récepteur.

Liste des composants
R1 ...... 560
R2 ...... 220 k
R3 ...... 220 k
R4 ...... 4,7 k
R5 ...... 47
R6 ...... 1 k
TR1 ..... 10 k trimmer MO/MV
C1 ...... 100 nF multicouche
C2 ...... 220 μF 16 V électrolytique
C3 ...... 470 nF 63 V polyester
C4 ...... 10 μF 100 V électrolytique
C5 ...... 4,7 μF 100 V électrolytique
LD1 ..... LED 3 mm verte
D1 ...... 1N4007
U1 ...... WARX01A
U2 ...... TL081
SW1 ..... inverseur à glissière 90°

Divers :
1 support 2 x 4
1 connecteur jack stéréo femelle pour ci
1 antenne accordée 863-865 MHz
1 prise de pile 9 V
1 boîtier plastique éventuel

N’oubliez pas de souder toutes les broches et les languettes de fixation du module récepteur.


La réalisation pratique de l’émetteur et du récepteur
La réalisation pratique de ce radiomicrophone est assez simple bien qu’il faille réaliser les deux platines, une pour le TX (que l’on associera plus ou moins intimement au microphone proprement dit) et l’autre pour le RX (que l’on placera près de la table de mixage, de l’amplificateur ou de l’enregistreur).

Figure 7 : Les modules émetteur et récepteur.

Le TX.

Le module WA-TX-01 est basé sur un oscillateur (stabilisé par un résonateur SAW) dont la fréquence peut être modifiée, dans certaines limites, au moyen d’un modulateur de fréquence à diodes varicap polarisées par le niveau du signal audio. A la sortie de l’oscillateur se trouve un amplificateur HF et à la sortie de ce dernier on a monté un filtre d’antenne de type passe-bas, afin de limiter l’émission de fréquences indésirables. Afin d’éviter tout phénomène de surmodulation, le signal audio est traité par un compresseur de dynamique –il s’agit en fait d’un circuit électronique structuré pour limiter la gamme dynamique, c’est-à-dire l’excursion entre des niveaux minimal et maximal du signal. Le module est disponible en quatre versions, que ne distingue que la fréquence de travail de l’oscillateur : 863,125 MHz, 863,625 MHz, 864,5 et 864,875 MHz. La puissance émise est de 2 mW et la stabilité en fréquence est de ±10 kHz ; les fréquences indésirables émises dans un spectre de ±15 kHz autour de la fréquence d’oscillation, sont maintenues à 1 μW. En ce qui concerne l’audio, l’entrée a une impédance de 5 kohms et accepte des signaux dont l’amplitude est comprise entre –115 et –15 dBv (@1 kHz) ; la section de compression de la dynamique a une préaccentuation de 50 μs. Le module réclame une tension d’alimentation continue comprise entre 3 et 9 V ; il consomme un courant de 25 mA. La réponse en fréquence s’étend de 50 Hz à 15 kHz, ce qui est plus que suffisant pour la plupart des applications (voix et musique).

Le RX.

Le module WARX-01 est un récepteur super hétérodyne complet dans lequel l’étage d’accord est un peu différent de ce que l’on trouve d’habitude : comme il est à fréquence fixe, on a monté en série dans l’entrée d’antenne un filtre SAW accordé sur la fréquence de travail du module et ne laissant passer qu’elle ; suit un amplificateur HF, dont la sortie est reliée à un mélangeur HF.
Dans ce dernier la composante RF (radiofréquence) est mélangée à la fréquence de l’oscillateur local (à quartz, donc très stable) et l’on obtient la moyenne fréquence, égale à 10,7 MHz, élaborée par un filtre céramique, ensuite amplifiée et à nouveau filtrée par un deuxième filtre accordé lui aussi sur 10,7 MHz. La moyenne fréquence est démodulée par un discriminateur à quartz qui extrait l’audio, puis envoyée à l’expanseur de dynamique et à un “buffer” de sortie. Le module comporte aussi un capteur de niveau du signal radio, prenant comme référence l’amplitude de la composante moyenne fréquence ; il contrôle un interrupteur statique qui interrompt la ligne audio quand la RF est trop faible pour permettre une écoute de qualité acceptable. Il s’agit d’un “squelch”, qui coupe la BF si le signal d’antenne est inférieur à 17 dBμV (la sensibilité du RX est de 21 dBμV). L’alimentation est une tension continue entre 3 à 12 V (30 mA de consommation).

Figure 8 : Comprimer et expanser.

Ce dessin montre comment fonctionne le “compander”, c’est-à-dire le compresseur et expanseur (“expander”) de dynamique du signal audio : la section de gauche concerne le processus en émission et celui de droite la réception. Comme vous le voyez, dans le module émetteur un amplificateur à gain variable restitue une gamme dynamique étendue de 0 à –100 dB dans une plage de 50 dB (entre –10 et –60 dB) : il comprime donc une gamme de 100 dB en la réduisant à seulement 50 dB. Ce procédé permet d’émettre des signaux de grande dynamique en modulant la porteuse radio tout en limitant la déviation de fréquence (ou excursion, n’oubliez pas que nous sommes en FM). Le choix de la plage de compression n’a rien de fantaisiste : il a été pensé par le concepteur pour maintenir le signal le plus faible au dessous du seuil de bruit déterminé par l’émission FM à la sortie du démodulateur situé à la sortie du récepteur (–60 dB). Dans la partie gauche du dessin nous voyons comment le signal reste inaltéré quand il a un niveau de –20 dB et qu’il est en revanche atténué lorsqu’il est plus fort ou amplifié s’il est plus faible (par exemple –100 dB deviennent –60 dB). La composante audio compressée est émise par le TX et captée par l’antenne du RX : là, après la démodulation l’expansion a lieu, grâce à un second amplificateur à gain variable. En fait les amplitudes jusqu’à –10 dB sont portées à 0 dB, celles de –50 dB à –60 dB et celles de –60 dB à –100 dB. Ne restent inaltérées que les seuls signaux à –20 dB. Le premier effet de cette expansion est que le bruit de fond qui apparaît à la sortie du démodulateur FM avec un niveau de –60 dB (typique), est atténué à –100 dB et devient donc pratiquement imperceptible ; notez que, le bruit FM étant de –60 dB, sans cette opération d’expansion sa présence serait fastidieuse, ce qui n’est pas le cas lorsqu’on le réduit à –100 dB.

La réalisation pratique de l’émetteur
La platine est constituée d’un petit circuit imprimé simple face, dont la figure 2b donne le dessin à l’échelle 1. Réalisez-le par la méthode de la “pellicule bleue” et, quand il est gravé, percé et étamé, commencez par insérer le cavalier J1 (deux pôles au pas de 2,54), puis insérez et soudez tous les composants (comme le montrent les figures 2a et 3), en poursuivant par les résistances (montées debout, repliées en trombone), les condensateurs, la diode, le transistor (en boîtier demi lune), le trimmer et en terminant par les “périphériques” : le socle jack, l’interrupteur à glissière, et la prise de pile 9 V. Montez enfin le module hybride émetteur (à monter couché, soudez les broches et les languettes de fixation).
Attention à l’orientation des composants polarisés : la diode, les électrolytiques et le transistor (méplat vers C6). Placez la pile 9 V (attention à la polarité). Un fil de cuivre de 8,5 centimètres (1/4 d’onde) ou 17 cm (1/2 onde), soudé au point ANT, constitue l’antenne émettrice.
Vérifiez attentivement vos soudures (ni court-circuit entre pistes ou pastilles ni soudure froide collée) et l’identification des composants, le respect des valeurs, les polarités au moins deux fois systématiquement, vous ne le regretterez pas car le montage fonctionnera du premier coup.

La réalisation pratique du récepteur
La platine est également un petit circuit imprimé simple face, dont la figure 5b donne le dessin à l’échelle 1. Réalisez-le par la méthode de la “pellicule bleue” et, quand il est gravé, percé et étamé, commencez par insérer le support du circuit intégré U2 TL081, puis vérifiez attentivement vos soudures (ni court-circuit entre pistes ou pastilles ni soudure froide collée).
Insérez et soudez ensuite tous les composants (comme le montrent les figures 5a et 6), en poursuivant par les résistances, les condensateurs, le trimmer, la diode, la LED et en terminant par les “périphériques” : le socle jack, l’interrupteur à glissière, et la prise de pile 9 V. Montez enfin le module hybride récepteur (à monter couché, soudez les broches et les languettes de fixation).
Attention à l’orientation des composants polarisés : la diode, les électrolytiques et le circuit intégré (à installer à la fin, repère-détrompeur en U orienté vers R3). Placez la pile 9 V (attention à la polarité). Un fil de cuivre de 8,5 centimètres ou 17 cm, soudé au point ANT, constitue l’antenne réceptrice. Vérifiez encore vos soudures et l’identification des composants, le respect des valeurs, les polarités au moins deux fois systématiquement, vous ne le regretterez pas car le montage fonctionnera du premier coup. Et voilà pour la platine récepteur.Pour les antennes TX et RX, vous pouvez aussi utiliser les antennes fouets souples accordées sur 868 MHz du commerce : reliez-les au point ANT.
Alimentez le TX avec une pile 6F22 de 9 V et installez le tout (platine et pile) dans la “poignée” du microphone utilisé (genre micro de scène) ; ou alors installez-les dans un petit boîtier que vous glisserez dans votre poche, le micro cravate étant alors fixé au col de la chemise ou de la veste (à défaut de cravate !).
Le récepteur fonctionne sous une tension continue entre 9 à 12 Vcc à appliquer aux points 9 V BATTERY ; le courant consommé est d’au moins 60 mA. Alimentez-le avec une pile 9 V (comme l’émetteur) ou bien par une petite alimentation bloc secteur stabilisée (cette tension pourra peut-être prise sur la table de mixage ou l’ampli ou l’enregistreur audio). D’ailleurs la platine elle-même peut être incorporée à l’un de ces derniers appareils. Ne vous inquiétez pas : le module récepteur est protégé contre les parasites, notamment ceux provenant de l’alimentation.

BANDE (MHz)Utilisation
40,980 à 45Radiomicrophones pour utilisation amateur.
174 à 223Radiomicrophones professionnels en extérieur.
470 à 854Radiomicrophones professionnels en studio de radio et télédiffusion, en studio d’enregistrement et pour instruments de musique.
862 à 876Radiocommande et applications audio sans fil.
Figure 9 : Les fréquences des radiomicrophones (ou microphones sans fil ou micros HF).

Actuellement les microphones HF du commerce émettent sur des bandes de fréquence attribuées par le Ministère de tutelle des télécommunications pour l’utilisation de dispositifs à court rayon de portée, c’est-à-dire de faible puissance (habituellement réservées aux communications TX/RX dans un studio ou une manifestation artistique, mais aussi utilisables en radiodiffusion). Le tableau récapitule les bandes de fréquences autorisées pour cet usage ; pour toutes, la puissance de l’émetteur ne doit pas dépasser 50 mW. Notre radiomicrophone opère dans une gamme comprise entre 862 et 876 MHz, destinée à la radiocommande, à la transmission des données et aussi à l’émission/réception des signaux audio et par conséquent tout-à-fait adaptée à la réalisation d’un micro HF. Au sein de cette gamme de fréquences, notre micro sans fil peut fonctionner, grâce aux modules sélectionnés, de 863 à 865 MHz.

Le choix du microphone
Notre système peut être associé à tous les types de microphones : les magnétiques (on en trouve pour quelques euros) représentent la solution idéale si vous souhaitez tenir le micro à la main (parce que vous voulez pouvoir le tendre à un interlocuteur ou le faire circuler dans la salle). Les capsules electret constituent les micros cravate (minuscules micros montés sur une petite pince croco) les plus élégants et les plus pratiques.
Vous choisirez ce type de microphone si vous souhaitez avoir les mains libres. Si vous voulez utiliser une capsule electret préamplifiée à deux fils, l’unité émettrice peut fournir la polarisation nécessaire : il suffit alors de fermer le cavalier J1, afin d’insérer le pont résistif et d’appliquer la polarisation à la capsule. Si l’on prend un microphone magnétique ou un “electret condenser” (microphone à condensateur electret) non préamplifiée, le cavalier sera en revanche laissé ouvert : en effet, ces microphones n’ont besoin d’aucune polarisation et produisent eux-mêmes directement une tension de sortie d’origine électromagnétique ou piézo-électrique.

Les essais
Il ne reste qu’à vérifier si tout fonctionne normalement : reliez le récepteur à la table de mixage ou l’ampli, etc., avec un câble blindé terminé par un jack mono de 3,5 mm (l’entrée AUX d’un ampli hi-fi par exemple...) et, dans la prise jack de l’émetteur, insérez le jack du microphone choisi.
Normalement les microphones ont un jack de 6,35 mm et vous devrez donc peut-être utiliser un adaptateur 6,35 à 3,5 mm. Mettez les curseurs des trimmers de l’émetteur et du récepteur à mi course et baissez le volume de l’amplificateur puis alimentez les deux unités, après avoir placé le TX à quelques mètres de distance du RX. La LED du récepteur s’allume tout de suite : cela signifie que la liaison radio a bien lieu et que la porteuse de l’émetteur a un niveau permettant une écoute de qualité ; si la LED est éteinte, contrôlez les circuits.
Parlez alors près du micro et vérifiez que l’amplificateur reproduit bien le son de la voix ; agissez au besoin sur le réglage du volume de l’émetteur (attention de ne pas produire de “larsen”) et sur le gain du récepteur (avec les trimmers correspondants) : tournez le curseur dans le sens horaire pour augmenter le niveau sonore et viceversa.
Puis éloignez-vous avec le TX et vérifiez jusqu’à quelle distance la LED reste allumée, afin d’établir le rayon de portée de votre système de micro HF.

Related Posts Plugin for WordPress, Blogger...