28/08/2013

Analyseur logique 8 voies

1 - Introduction
Combien de fois auriez vous aimez scruter ce qui se passe sur un bus de communication, ne serait-ce que bifilaire : une liaison V24 plus connue sous RS232, examiner le protocole I2C à des fins de débogage  ou encore les signaux circulant sur un bus système ?
Il faut se rendre à l'évidence : l'oscilloscope dépanne de se genre de situation mais ne donne jamais entière satisfaction, il n'a pas été concue dans ce but, le déclenchement n'est pas facilement réalisable et l'instant T est souvent hors de l'écran !
C’est la que l’analyseur logique entre en scène : il est capable de mémoriser une quantité d’informations plus importantes, et de déclencher sa capture selon des critères bien précis : front montant, état haut, sur octet…
L’appareil que je vous propose de réaliser est un analyseur logique bon marché a base de microcontroleur ATMEGA8535, n’ayant aucune prétention de rivaliser avec les appareils professionnels dédiés ne serait-ce que par sa vitesse d'échantillonnage. Cependant ses caractéristiques suffiront à analyser les signaux les plus courants et rendra bien des services.
 Voici le résumé de ses caractéristiques :
  • Analyseur logique 8 canaux 0 / 5 volts
  • Mode de communication : Bus USB
  • Alimentation : autoalimenté par le bus USB
  • Vitesse d’échantillonnage maximum de 1 Mhz (réglable)
  • Tampon mémoire : 32 Ko maximum (réglable)
  • Déclenchement multi critères : état haut et bas, front montant et descendant, sur octet défini
 Un logiciel spécifique accompagne l’analyseur afin d’exploiter les données enregistrés :
  • Paramétrages de la capture et de la taille mémoire tampon
  • Affichage complet et défilant de la capture
  • Sauvegarde d’un fichier de capture avec possibilité d’inclure des annotations
  • Ouverture d’un fichier de capture pour consultation et analyse
  • Export des données au format CSV pour exploitations externes
  • Impression de la capture afficher à l’écran
  • Curseur informatif sur les signaux logique (temps, fréquence, valeur décimale, hexa et binaire)

 2 - Schéma et circuit imprimé
Schéma électronique :
 
L’USB est totalement géré par un module USBMOD3 à base de chip FTDI232BM. Le module est configuré pour tirer son alimentation du bus et ainsi alimenter le reste du montage. Si vous souhaitez avoir plus de renseignements concernant cette interface, je vous invite à visiter la section cours du site.
Le cœur du dispositif repose sur un microcontrôleur Atmel de type ATMEGA8535 16PI. La vitesse maximale sera exploitée pour
l’acquisition des données, car les méthodes de déclenchements et la fonction compteur pour l’adressage de la RAM sont entièrement gérées par lui-même.L’ordre de liaison des broches du microcontrôleur à la mémoire n’à aucune importance pour les adresses, elles ont étés optimisés pour le dessin du circuit imprimé.
Le Buffer de bus 74HCT541 est inséré entre le bus de données commun au microcontrôleur à la mémoire, pourquoi ? : Pendant la phase d’enregistrement des signaux, le Buffer les laisses passés pour qu’ils arrivent à la mémoire ou ils sont enregistrés, puis pendant la phase de restitution, comme l’architecture de cet analyseur est peu commune, il isole les signaux provenant de l’extérieur afin que le programme puisse lire les données stockées dans la RAM. Sans lui aucun résultat correct ne serait à espérer.
On comprend mieux le rôle du microcontrôleur : piloter le Buffer, générer les signaux sur le bus d’adresse de la mémoire (il fonctionne en compteur), attendre une condition programmée pour le départ de l’enregistrement et restituer les signaux par le biais de l’interface USB.On retrouve sur le circuit d’entré un réseau de résistance qui force au niveau bas, à condition que JP1 soit fermé, les broches qui serait éventuellement « en l’air » : le Buffer est très sensible et les signaux non connecté se copie facilement d’une broche à l’autre. La LED 3 indique que la condition de départ à été trouvé est que l’enregistrement est en cours.
Les LED 1&2 sont une indication d’activité de communication avec l’interface : la LED 1 signale la  réception de signaux et la LED 2 une émission.
La liste des composants :
R1, R2, R3 : 330 ohms
Respack : réseau de 8 résistances de 10 K + 1 commun
C1, C2 : 22 pF
C3 : 10 uf / 16V
C4, C5, C6 : 100nF
D1 : LED verte 3.5 mm
D2 : LED rouge 3.5 mm
D3 : LED de tout autre couleur 3.5 mm
IC1 : ATMEGA8535 16 PI
IC2 : Ram statique 32 Ko (256*8)
IC3 : 74HCT541
IC4 : Module USBMOD3 dispo chez Lextronic
Divers :
Barrette mâle simple droite et un cavalier
Les supports pour les circuits intégrés ne sont pas obligatoires mais recommandé, sauf pour le module USB qui sera directement soudé.
Le circuit imprimé et l'implantation des composants :

 
 Vérifier après gravure qu’aucune piste n’est en cours circuit avec une autre et rechercher au multimètre les micro-coupures éventuelles
3 - Réalisation et cablage
Si vous le pouvez, effectuer une opération d’étamage manuelle et dans tout les cas nettoyer bien le circuit à l’aide d’alcool non parfumé ou d’acétone..
Implantation des composants :
  • Dans un premier temps, insérez en priorité les straps, il y en à 7
Mis en place des straps
  • Soudez ensuite les supports de circuits intégrés si vous le souhaitez. Une exception pour le module USB : je ne l’ai pas soudé afin de parfaire la rigidité mécanique lors de la connexion au PC.
  • Finissez avec le reste des composants en commencent par les plus petits et faite attention au sens de la bague de repérage du réseau de résistance.
  • Concernant la sortie des LEDs, je vous conseille de souder des broches sécables afin de pouvoir effectuer un report facile de signalisation. Insérez le Jumper JP1 afin de tirer à la masse les entrées de l’analyseur.
  • Dernière opération : relier les broches TX et RX du module USBMOD3 au microcontrôleur à l’aide de fils souples. Lors de
    l’opération de  routage manuel du circuit imprimé je n’ai pas trouvé d’autre solution !

Vérifiez bien la qualité de vos soudures et les éventuels courts-circuits avant d’implanter le microcontrôleur et les autres circuits. Concernant la ram statique 32 K, je n’ai pas mentionné de référence particulière : il en existe tellement que je vous laisse choisir.
L’implantation des composants étant terminée vous obtiendrez cela :

 4 - Programmation de l' ATMEGA8535
Il faut impérativement programmer les fusibles du microcontrôleur afin de sélectionner son mode de fonctionnement : horloge externe 16 MHz par quartz.
Ci-dessous une copie d’écran de la programmation usine de l’ATMEGA réalisé avec PONY-PROG :

Pour notre application, programmez les fusibles comme indiquer ci-dessous
Compilez le programme à l’aide d’AVR STUDIO et flashez le microcontrôleur.
 5 - Le programme ASM
Bien qu’il ne vous soit d’aucune utilité pour l’emploi de l’analyseur logique, j’ai mis à titre d’informations la méthode de communication entre l’analyseur et le logiciel.
Comme toujours, le PC envoie une trame contenant les informations suivantes :
Le protocole de communication avec l’interface
1 - Sélection de la fréquence d’échantillonnage
 Taille : 1 octet
Caractère Période (ms) Fréquence (KHz)
a
1
1
b
0.5
2
c
0.2
5
d
0.1
10
e
0.05
20
f
0.02
50
g
0.01
100
h
0.005
200
i
0.002
500
j
0.001
1000
2 - Type de déclanchement
 Taille : 1 octet
0 = Sur niveau Bas
1 = Sur niveau Haut
2 = Sur front Montant
3 = Sur front Descendant
4 = Sur octet prédéfini
3 - Voie ou octet de déclenchement
 Taille : 2 octets
Premier octet : contient le numéro de la voie (0…7) ou l’octet de poids fort codé en hexadécimal permettant d’effectuer le début de la capture
Deuxième octet : contient l’octet de poids faible. Dans le cas ou le type de déclanchement choisi se fait par rapport à un état logique sur une voie d’entrée, il faut nécessairement envoyer cette chaîne, l’analyseur logique n’en tiendra pas compte, mais elle est nécessaire pour le protocole de communication. Donc sa valeur n’a aucune importance.
4 - Taille du tampon d’enregistrement
 Taille : 1 octet
caractère
Taille du tampon
1
2028
2
4096
3
8192
4
16384
5
32768
Le programme :
Le code source est commenté  chaque fois que nécessaire.
Une précision tout de même sur certains points :
Il y à 2 routines d’échantillonnage :
La première est gérée par une interruption du TIMER 2 à intervalle prédéfinie
La seconde ne passe pas par l’interruption, il s’agit de la routine d’acquisition à 1 Mhz car le temps que met le microcontrôleur à sauter à l’interruption, l’exécuter et revenir au programme principal est bien trop long. Ne modifier en aucun cas cette routine (ligne 577), elle est calibrée de manière bien précise.Autres point concernant l’émission des données vers le PC : toutes les informations ne sont pas envoyées d’un seul trait : elles sont défragmentées en paquet pour évité de saturer le Buffer de réception de la carte mère.
La vitesse de communication est réglée sur 500 000 Bds grâce à l’emploi du module USB. Remarquez que c’est une vitesse de communication peu commune.
 6 - Installation du Driver USB
Comme tout périphérique PC, le module USB requiert un driver afin que le système d’exploitation puisse le reconnaître et l’utiliser. Si vous souhaitez en savoir un peu plus sur la mise en œuvre du module, je vous invite à parcourir sur le site la section cours.Avant de connecter l’analyseur au PC, procurez vous les drivers dont le lien est donné dans la section cours --> Module USB, il s'agit du driver de type VCP
Dès la connection du module, Windows détecte la présence du nouveau périphérique et demande le driver correspondant. Dirigez le vers le répertoire FTDI que vous aurez préalablement décompacter ou bon vous semble !.
 
Recommencer l’opération si nécessaire. Apres installation du driver, redémarrer la machine est vérifier bien qu’un nouveau port de communication est disponible et retenez son numéro d’attribution (Démarrer, paramètres, panneaux de configuration, système, cliquez sur l’onglet matériel puis le bouton gestionnaire de périphérique et parcourez l’arborescence de la machine jusqu’a trouver Ports COM et LPT)
Ici on remarque bien la présence d’un nouveau port virtuel série. Le système à attribuer le numéro de port COM4
 7 - Le Logiciel d'exploitations de l'analyseur
Lancer le fichier SETUP.EXE et suivez les instructions.
Une fois installé, lancez le logiciel qui se trouve dans le menu « analyseur logique W8 ». Son interface reste des plus simple et nous allons aborder son utilisation
 
La première opération à faire avant toute acquisition est de sélectionner le port série sur lequel est connecté l'interface. (B)
Ensuite il faut choisir la méthode de déclenchement de l’enregistrement. (A) Le déclanchement par octet permet de démarrer la capture si la valeur rentrée en A est présente sur le bus connecté à l’analyseur. Respecter bien l’ordre logique des sondes lors de la connexion au bus à analyser. Vous avez aussi la possibilité de choisir sur quel type de voie la condition de départ doit s’opérer.
Choisissez ensuite la vitesse d’échantillonnage ainsi que la taille de la mémoire tampon. Je tiens à attirer votre attention sur le fait suivant : Plus la taille de la mémoire tampon sélectionnée est grande plus la mise en forme du graphique sera longue. Elle est forcément relative à la puissance de calcul de votre ordinateur.
La zone C permet de regler l'echelle de temps sous le graphique.
Une fois ces paramètres réglés, lancez la capture en cliquant sur « échantillonner »
 Nous allons travailler avec le fichier exemple fourni avec le logiciel. Ce fichier se nomme Sample.
Au passage, les menus du haut permettent d’ouvrir un fichier de données, d’enregistrer une acquisition, d’exporter les données au format CSV et d’imprimer le graphique. Le menu Help permet d’avoir la version courante du logiciel.
Le fichier sample1 est en fait une acquisition faite sur la sortie d’un compteur 8 bit. Remarquer que lors du survol du curseur sur le graphique, des informations s’affiche dans la zone de données.
Cliquez sur le début d’un front sur la voie 0, à ce moment le curseur se fige et un deuxième apparaît. Cliquez une deuxième fois sur la fin du front : a ce moment l le champ de données T1 se rempli et des informations supplémentaires, comme la différence de temps et la fréquence s’affichent à droite. Cliquez une troisième fois pour revenir au mode normal.
Le réglage de l’unité du graphique permet de changer les unités sur l’échelle de temps.Vous pouvez aussi explorer la suite du graphique à l’aide de la barre de défilement.
La possibilité d’entrer une annotation est offerte dans la zone observation E, celles-ci seront alors enregistrées avec le graphique
Il peut arriver que la communication avec l’interface se bloque, dans ce cas fermez le logiciel, débranchez l’interface pendant 5 secondes. Ceci du à la gestion de l’USB qui n’est pas toujours très stable.
Si vous avez des suggestions concernant l’amélioration du logiciel, ou aussi des bugs rencontrés lors de son utilisation, n’hésiter pas à m’en faire part, rien n’est définitivement figé.

TELECHARGEMENT DES FICHIERS
Le téléchargement des fichiers implique votre totale acceptation des conditions ci-dessous :
Toute reproduction, diffusion ou distibution en dehors de ce site et par quelque procédé que ce soit du contenu et des programmes téléchargeables sont strictement interdite sans l’accord préalable de l’auteur.
Les circuits mentionnés ne peuvent être exécutés qu’a des fins particulières ou scientifiques et non pas dans ou pour une entreprise ; ces exécutions et / ou applications se font en dehors de toute responsabilité de l’auteur. L’auteur ne pourra en aucun cas être tenu pour responsable des préjudices ou dommages de quelque nature que se soit pouvant résulter de l’utilisation de ces exemples ou programme.
Tous les noms de produits ou autres marques cités dans ce document sont des marques déposées par leurs propriétaires respectifs.
Ces programmes et applications sont des sharewares, ils sont en libre téléchargement. Si vous en faites usages merci de bien vouloir visiter les liens associatifs présentés en bas de la page d'index, et pourquoi pas, soutenir certaines actions...
La liste des mise à jours ansi que le support technique s'effectue directement sur le forum
02/08/2013

Détecteur sonnerie réveil 002

Présentation

Le détecteur de sonnerie décrit ici permet de commander un appareil à partir de la sonnerie électronique d'un petit réveil ou d'un téléphone portable.

detecteur_sonnerie_reveil_002_pcb_3d_a

Il convertit le "bip.bip...bip.bip" ou "tu.tu.tu.tu...tu.tu.tu.tu" en une tension continue apte à commander un appareil quelconque, via une interface logique appropriée. Contrairement au détecteur de sonnerie 001, celui présenté ici fonctionne aussi avec des signaux d'amplitude faible, de quelques mV. Un détail, et non des moindres : ce détecteur n'est pas réservé à la détection d'un bip.bip de réveil électronique. Vous pouvez parfaitement l'utiliser pour détecter n'importe quel type de signal électrique alternatif dont la fréquence est comprise dans la bande des sons audibles. Un bip bref enregistré sur une bande magnétique, qui servait à l'origine pour synchroniser une bande sonore avec un projecteur de diapos, par exemple... Deux schémas sont proposés :
- Schéma 002 : schéma de base, pour commande d'une LED ou d'un petit relais.
- Schéma 002b : schéma de base adapté pour commande d'un moteur à courant continu, avec transistor MOSFET de puissance.
Un même et unique circuit imprimé est proposé pour les deux schémas.

Schéma 002

J'aurais bien aimé que Picasso découvre l'électronique, rien que pour voir ce qu'il aurait pû peindre en pensant à des condensateurs ou à des circuits intégrés. Le schéma qui suit n'est pas de lui mais bien de moi, je crois qu'on peut encore assez facilement différencier ses oeuvres des miennes.

detecteur_sonnerie_reveil_002
Signal à détecter et étage d'entrée
Le signal que l'on souhaite détecter peut avoir une amplitude aussi faible que quelques dizaines de mV, il sera parfaitement détecté. Pour celà, pas de miracle, il faut l'amplifier, ce qui est fait ici par l'AOP U1 dont le gain (taux t'amplification) est fixé par le rapport de valeur existant entre le potentiomètre RV1 et la résistance R1. RV1 est monté en résistance variable, de telle sorte que le gain puisse être ajusté. Quand le potentiomètre est à fond - curseur du côté de C2, le gain est maximal et vaut 100 (1 MO divisé par 10 KO), ce qui correspond à +40 dB. Quand le curseur de RV1 est en position centrale, le gain est de 50, ce qui correspond à +34 dB. Et quand le potentiomètre est au minimum - curseur du côté de R1, le gain est de... attention piège, ce n'est ni 1, ni 0. Non, dans ce cas, la résistance de RV1 ne fait plus que quelques ohms (parce qu'un potentiomètre n'est pas parfait et qu'en bout de course on n'a pas une valeur parfaitement nulle), et le montage se comporte alors comme un atténuateur et non plus comme un amplificateur. Pratiquement, on constate un affaiblissement dans un rapport de 10 à 100.
De combien de fois amplifier le signal d'entrée pour que la détection soit assurée ?
Voilà une excellente question ! Pour y répondre, nous allons prendre un exemple pratique. Vous venez de dégoter un petit réveil, et vous branchez un appareil de mesure sur son transducteur de sortie (vous savez, le petit buzzer piezo) pour voir "combien il sort" quand le réveil sonne. Vous mesurez 30 mV. Je ne mets pas en doute la mesure, même si celà me paraît un peu faible. Mais partons donc du principe que l'appareil de mesure utilisé a fourni une valeur correcte. Nous connaissons donc l'amplitude du signal source, mais pour savoir de combien l'amplifier, il faut bien avoir une idée de ce qu'il faut après amplification, n'est-il pas ? Je vous annonce tout de suite qu'il nous faut un signal dont l'amplitude est d'au moins 1,2V en sortie de l'amplificateur (nous verrons pourquoi cette valeur au prochain paragraphe). Le gain de l'amplificateur doit donc être de 1200 / 30 (1,2 V divisé par 30 mV), soit 40. Bien, 40 est compris dans la fourchette de la capacité d'amplification de notre système, ce qui nous évite tout travail supplémentaire de ce côté là.
Redresseur à diode et commande
Le redresseur à diode est composé des deux diodes D1 et D2 et des deux condensateurs C2 et C3. Il permet d'obtenir une tension continue fixe à chaque fois qu'un bip retentit. Cette tension continue, disponible aux bornes de C3, pilote ensuite le transistor Q1 au travers de la résistance de limitation de courant R5, transistor qui lui-même se voit confier la tache d'allumer la led D3 au travers de la résistance de limitation de courant R6. La commande se résume ici à allumer une led, mais à chaque fois qu'on est en mesure d'allumer une led, on est aussi en mesure de mettre en service bien d'autres choses : une lampe 230V (moyennant la mise en place d'un optocoupleur ou un optotriac à la place de la led), un moteur électrique (en utilisant un relais à la place de la led et de sa résistance de limitation de courant, ou en mettant un transistor de puissance à la place de Q1 - voir aussi page Interfaces logique 001).
Attention : si vous souhaitez commander une charge inductive telle qu'un moteur ou un relais au travers de Q1, il faut penser à deux choses :
- Q1 doit être capable de supporter le courant consommé par la charge. S'il s'agit d'un "petit" relais 9 V, un 2N2222 suffira. S'il s'agit d'un moteur, vous pouvez penser à utiliser un TIP122, mais à partir de là, c'est vous qui devez chercher ce qui convient le mieux à votre application et à votre bourse.
- Q1 doit être protégé contre les surtensions provoquées par la charge quand le courant arrête d'y circuler. Pour cela, câbler une diode de type 1N4007 en parallèle sur la charge (sur l'élement commandé), cathode au +Alim et anode sur collecteur de Q1. Si vous la branchez dans l'autre sens, elle grillera surement dès la première commutation de Q1, faites donc attention à son orientation.
Et les 1,2 V minimal syndical requis en sortie de l'ampli ?!
Oh, désolé, j'avais oublié. Il nous faut 1,2 V au minimum, simplement parce que la diode D2 en garde 0,6 V pour elle, et qu'il faut au moins 0,6 V pour faire conduire le transistor Q1.
Autres utilisations
Comme je le disais en présentation, ce montage peut répondre à bien des besoins, dès l'instant où il est question de détecter un signal sonore fixe ou intermittent. En fonction du caractère (de la forme) du signal à détecter, vous devrez sans doute ajuster la valeur des composants suivants : C2, C3, R4. Si les bips à détecter sont très espacés dans le temps et que vous ne souhaitez pas que la sortie repasse à l'état de repos entre chacun, vous pouvez augmenter la valeur de C3. Mais en même temps, il ne faut pas que le bip soit trop bref car si le condensateur à une valeur plus élevée, il va mettre plus de temps pour se charger, et la détection peut ne plus être assurée, à moins de compenser par un gain plus important de l'amplificateur. La seule chose que je peux dire avec quasi-certitude, c'est que vous avez tout interêt à expérimenter et à voir de vous-même en quoi différentes valeurs jouent sur le comportement du montage. Dans certaines situations, il peut être interressant d'ajouter un monostable en sortie du redresseur à diode, de telle sorte que l'on ait une impulsion de sortie dont la durée est fixe (calibrée), quelque soit la forme ou la durée du signal entrant. Le schéma 002b qui suit est un exemple d'adaptation qui permet de commander un moteur à courant continu, ce dernier ne tournant qu'en présence d'un son.

Schéma 002b

Jeu des deux différences...

detecteur_sonnerie_reveil_002b

Comme on utilise ici un transistor MOSFET dont l'impédance d'entrée est très élevée Q1/IRFZ44N), on peut dire que la durée de maintien de conduction du transistor après disparition de la source sonore n'est liée qu'à la valeur des deux composants C3 et R4. Plus la valeur de R4 sera grande et plus lente sera la décharge de C3, et donc plus le temps de maintien sera élevé. La LED D3 et sa résistance R5 sont bien entendu facultatives. Je dis bien entendu mais je ne vois pas en quoi c'est évident. Le transistor IRFZ44N permet de commuter un courant de quelques dizaines d'ampères en régime permanent, avec une faible chute de tension entre ses deux broches Drain et Source. Il convient donc pour la commande de moteur de moyenne puissance (restons raisonables et disons jusqu'à 8 ou 10 A). Attention, ce transistor peut tout de même chauffer un petit peu si le courant du moteur est très élevé et s'il tourne souvent. Dans ce cas, prévoir un petit dissipateur thermique sur la semelle du transistor (dissipateur pour boîtier TO220).

Circuit imprimé

Le circuit présenté ici convient pour les deux schémas 002 et 002b.

detecteur_sonnerie_reveil_002_pcb_composants

Il suffit de mettre le transistor que vous voulez, "gros" IRFZ44N (Q1) ou "petit" 2N2222 (Q1'). Ne pas mettre les deux en même temps ! Notez que dans chacun des deux schémas que j'ai proposés il n'y a qu'un seul transistor et qu'il est noté Q1 à chaque fois. Sur le circuit imprimé, le transistor nommé Q1' correspond au transistor Q1 du premier schéma (je ne pouvais pas les appeler tous deux Q1 sur le circuit imprimé, ça ne se fait pas et je n'avais pas envie de me faire punir encore une fois).