Un lecteur de cartes magnétiques avec sortie RS232C

Le système que nous vous proposons dans cet article est étudié pour fonctionner avec les lecteurs de cartes magnétiques ISO781 grâce à un simple bus à trois fils. Il est possible de connecter plusieurs dispositifs sur une seule entrée série RS232C. Un commutateur électronique et une ligne de contrôle permettent d’autoriser la communication entre l’ordinateur et la carte en cours d’acquisition des données, en bloquant les autres. La sortie fournit une liaison pour chaque lecture en ajoutant éventuellement une identification de l’unité concernée.

Les serrures électroniques et les contrôles d’accès par cartes magnétiques, sont parmi tous les systèmes, les meilleurs pour l’automatisation des passages et la commande des systèmes de sécurité. Leur diffusion est sans aucun doute due au côté pratique, à la facilité d’utilisation et à la fiabilité des codages permis avec ces “badges”.
Ce n’est pas par hasard, si nous trouvons aujourd’hui une myriade de portes, de tourniquets (accès métro), de barrières ainsi que des services comme le téléphone, les caisses de supermarché, etc., chacun fonctionnant avec une carte.
Le développement de ces systèmes nous a conduits à parler plusieurs fois de ce sujet, en proposant des circuits adaptés pour lire des codes plus ou moins longs sur des cartes magnétiques préalablement programmées, en les utilisant pour activer des relais, des sonneries, mais aussi pour envoyer des données à un ordinateur de façon à les visualiser à l’écran, ou à les décoder pour réaliser un contrôle d’accès dans un atelier, ou un immeuble, etc.
Pour pouvoir décoder les données avec un ordinateur, nous avons décrit des circuits à microcontrôleur capables de gérer les informations lues par le lecteur de carte pour les envoyer ensuite, par l’intermédiaire d’un convertisseur adéquat, sur le port série de ce dernier.
Jusqu’à présent, nous nous étions limités à des interfaces conçues pour utiliser un seul lecteur par ordinateur. Mais, dans la pratique, nous rencontrons des situations pour lesquelles il devient nécessaire d’acquérir des données en provenance de plusieurs lecteurs. C’est le cas lorsque, par exemple, nous devons contrôler trois ou quatre tourniquets ou un certain nombre de portes à accès réglementé.
C’est également le cas lorsque l’on veut pouvoir superviser des opérations exécutées loin de l’emplacement de contrôle.
Dans tous ces cas, il est impensable de devoir utiliser un ordinateur par point de lecture, ou de devoir introduire dans un seul ordinateur autant de cartes série qu’il y a de lecteurs. Notre solution prévoit ainsi une unité de commande principale et quelques artifices sur les platines de lecture. En substance, rien n’est changé dans le programme ni dans le mode d’acquisition des données par l’ordinateur. Ce dernier reçoit les trains d’impulsions contenant les données lues sur la car te magnétique avec, en plus, les codes indiquant quelle est la platine active au moment de la lecture.
Notre circuit d’interface dispose d’un double interrupteur électronique sur les canaux TXD et RXD du port série du PC de façon à se désactiver lorsque c’est un autre appareil qui fonctionne.
En outre, avec le système proposé, un seul ordinateur peut permettre de gérer jusqu’à 64 platines de lecture qui lui sont raccordées par un bus de trois fils. Deux lignes représentent la liaison série émission et réception et la troisième , la validation du port série. Le microcontrôleur de chaque unité détermine la priorité et désactive la ligne série, en laissant exclusivement la connexion entre l’ordinateur et la platine en lecture à ce moment là. Ce système est sûr et fiable car il est structurellement simple. En effet, il n’y a pas d’unité de contrôle et chaque circuit se gère tout seul.

Figure 1 : Schéma électrique du lecteur de cartes magnétiques avec sortie RS232C.

Figure 2 : Plan d’implantation des composants du lecteur de cartes.

Figure 3 : Dessin du circuit imprimé du lecteur de carte, échelle 1.

Liste des composants
R1 : 4,7 kΩ
R2 : 1 kΩ
R3 : 100 kΩ
R4 : 1 kΩ
R5 : 1 kΩ
R6 : 22 kΩ
R7 : 22 kΩ
R8 : 220 kΩ
C1 : 100 nF multicouche
C2 : 470 μF 35 V chimique
C3 : 1 μF 50 V chimique
C4 : 1 μF 50 V chimique
C5 : 1 μF 50 V chimique
C6 : 1 μF 50 V chimique
C7 : 1 μF 50 V chimique
C8 : 22 pF céramique
C9 : 22 pF céramique
C10 : 220 μF 16 V chimique
C11 : 100 nF multicouche
C12 : 4,7 nF céramique
C13 : 100 nF multicouche
C14 : 100 μF 25 V chimique
D1 : Diode 1N4007
D2 : Diode 1N4148
DZ1 : Diode zener 12 V 1/2 W
U1 : Circuit intégré HCF4016B
U2 : Circuit intégré MAX232
U3 : μcontrôleur ST62T65B (MF221)
U4 : Régulateur de tension 7805
DS1 : Dip-switch 8 interrupteurs
Q1 : Quartz 6 MHz
BZ : Buzzer sans électronique
T1 : Transistor NPNBC547B
LD1 : LED rouge 5 mm
LD2 : LED verte 5 mm
BADGE : Lecteur manuel de carte magnétique mod. LSB12

Divers :
- Bornier 3 emplacements (2 pièces)
- Support 14 broches
- Support 16 broches
- Support 28 broches
- Connecteur 25 broches femelle mod. Canon pour circuit imprimé
- Prise alimentation pour circuit imprimé
- Circuit imprimé réf. S221. Sauf spécification contraire, toutes les résistances sont des 1/4 W à 5 %.



Description du fonctionnement
Voyons à présent de quelle façon le système fonctionne. Le schéma électrique, donné en figure 1, décrit l’inter face du lecteur de car te. Elle est étudiée pour fonctionner avec des dispositifs de lecture manuelle de la société KDE (KDR1000). Les trois lignes pour la connexion avec ce dernier (CLS, PCL, RPD) vont directement à trois broches du port A du microcontrôleur U3. L’alimentation +5 volts par rapport à la masse (–) est prélevée à la sortie du régulateur intégré U4. Le microcontrôleur utilisé est un ST62T65.
A ce microcontrôleur est connectée une série de dip-switchs dont le rôle est de différencier une unité par rapport aux autres. En pratique, nous avons un dipswitch à 8 interrupteurs qui correspondent à autant de broches (configurées en entrées) de U3. Les 6 premiers interrupteurs (1 à 6, raccordés aux broches 16, 17, 18, 19, 28, 26) servent à donner un “nom” au circuit en lui attribuant un identifiant qui sera ensuite transmis en série avec les données lues sur la carte magnétique. Cela permet d’indiquer à l’ordinateur de quelle unité arrivent les données. Pour ce qui est du code, un interrupteur fermé correspond à un niveau logique 0, ouvert, à un niveau logique 1.
Avec ces 6 bits disponibles, il est possible d’exploiter un maximum de 64 combinaisons, ce qui permet donc d’utiliser 64 lecteurs. Les possibilités d’utilisation sont nombreuses, même avec la limitation du nombre de circuits, étant donné que, dans la pratique, rares sont les cas où il faille gérer plus de 64 lecteurs ! Il faut également considérer que si 64 appareils étaient montés en parallèles, les capacités parasites des circuits intégrés commenceraient à devenir importantes et dégraderaient les fronts montants des signaux. Dans le cas présent, il n’y a pas de gros problèmes mais, par contre, cela pourrait s’amplifier avec un nombre plus élevé de lecteurs.
Toujours à propos du dip-switch DS1, le huitième interrupteur sert à préciser si l’on doit activer ou désactiver l’envoi du code d’identification vers l’ordinateur.
Fermé pour activer, ouvert pour désactiver. Si l’envoi du code est activé, à chaque train d’impulsions le microcontrôleur ajoute aux données lues sur la carte magnétique le code binaire correspondant à l’unité en fonctionnement, qui est le code imposé avec les 6 premiers dip-switchs.
Notre platine dispose de deux connecteurs, un à 25 points, pour la liaison série avec l’ordinateur et un second à 5 points pour la connexion avec le lecteur.
A propos de ce dernier, précisons que le circuit utilise un lecteur du commerce, fabriqué par KDE, précisément le modèle LSB12. Ce dispositif est composé d’un coffret en plastique muni d’une fente dans laquelle la car te magnétique est glissée. A l’intérieur du capteur, nous trouvons une tête magnétique et un circuit d’amplification, permettant de lire les données présentes sur la piste ISO2 du badge et de les convertir en impulsions numériques.
Le lecteur est alimenté par une tension de 5 volts et dispose de trois points de sortie pour les signaux. Sur le schéma, ces points sont nommés “A”, “B” et “C”. Ils coïncident respectivement avec les lignes CLS (Card Loading Signal), RCL (Read Clock) et RDP (Read Data Pulse).
Voyons en détail la signification de ces sigles.
- La ligne CLS indique la présence ou non d’une carte dans le lecteur. Lorsqu’une carte est présente devant la tête de lecture, CLS est au niveau bas (0).
- La ligne RCL représente l’horloge des données en sortie. En pratique cette broche est au niveau logique bas (0) lorsqu’elle détecte la présence d’un bit sur la piste magnétique d’une carte.
- La ligne RDP indique la donnée. Elle exprime ainsi l’état du bit lu sur la carte. L’indication fournie dans cette situation est l’inverse du cas de la lecture : si la donnée est à 1, la ligne présente un niveau logique bas (0), dans le cas contraire (donnée à 0), le niveau est haut (1).
En conclusion, lorsque nous glissons une carte dans la fente de lecture, sur les trois lignes nous trouvons un train d’impulsions correspondant aux données mémorisées sur le badge. Tous ces signaux sont lus par le microcontrôleur qui les mémorise temporairement dans son espace mémoire interne RAM. A ce point, il active la ligne de priorité en portant au niveau logique bas (0) la broche 8 et par là même la sortie “LINE CONTROL” (ligne de contrôle), commune à toutes les unités.
Simultanément, les microcontrôleurs des autres unités, relèvent la situation par l’intermédiaire de leur broche 9 (entrée de priorité) et s’inhibent, ou bien traitent et mémorisent les données en provenance de leurs lecteurs respectifs, afin de les transmettre dès que la ligne aura été libérée.
Notez une particularité : pour simplifier le bus et utiliser un fil seulement, nous avons réuni l’entrée et la sortie de priorité du microcontrôleur. Ceci est possible car le port PB6 étant à collecteur ouvert, il peut fournir tout seul un niveau logique bas en utilisant la résistance R8 comme résistance de pull-up pour maintenir, au repos, l’entrée PB7 à un niveau haut. De cette façon, on utilise une seule ligne pour communiquer avec les unités connectées et pour recevoir la demande de priorité.
Pour mieux comprendre ce type de fonctionnement, considérons ce qu’il advient en imaginant avoir un certain nombre de dispositifs, tous reliés par les lignes “TXD” et “RXD” (broche 2 et 3 du connecteur série) et par la ligne “LINE CONTROL” (ligne de contrôle).
Voyons, en premier lieu, les caractéristiques des broches 8 et 9.
La première (PB6) fonctionne en sortie à collecteur ouvert et se met au zéro logique lorsque le lecteur de badge, relié à son microcontrôleur, envoie des données. Ainsi, elle détecte la présence d’une carte. Elle s’active ensuite si l’entrée PB7 n’a pas déjà été excitée en premier.
La seconde (PB7) est une entrée compatible TTL. Portée au niveau logique zéro elle demande au microcontrôleur de ne pas activer la transmission jusqu’à ce que le lecteur reçoive une carte.
Maintenant que nous avons compris la gestion de la priorité, voyons ce qu’il advient dans le dispositif qui prend la communication et dans ceux qui, par conséquent, sont inhibés.
Ayant à disposition un port série, celui de l’ordinateur, toutes les lignes TXD et RXD des circuits sont reliées entre elles par deux fils, qui aboutissent sur les broches 2 et 3 du connecteur DB25 femelle, unique pour tous les appareils.
L’activation de la ligne de contrôle (LINE CONTROL) force les microcontrôleurs des différentes unités à désactiver la communication. Autrement dit, à mettre au niveau logique zéro la broche 6 (PB4, configuré comme sortie), désactivant ainsi deux des quatre interrupteurs CMOS contenus dans le CD4016 référencé U1. Cela permet d’isoler du connecteur les lignes d’émission et de réception dédiées au conver tisseur TTL/RS232C (U2) un MAX232. Naturellement ceci se produit pour tous les lecteurs, sauf pour celui qui, en premier, a reçu les données de son lecteur de badge. En effet, ayant déjà mis au niveau bas la ligne de contrôle, il ignore l’état de cette ligne en entrée et laisse actif l’interrupteur CMOS concerné, étant donné qu’il doit envoyer les données sur le port série RS232C.
Cela se passe de façon simple et transparente.
Quand un lecteur reçoit une carte, il commande la ligne CLS en la maintenant au niveau logique zéro, puis il envoie les données qu’il lit sur la bande magnétique sous forme série sur la ligne RDP (Read Data Pulse) parfaitement synchronisées avec l’horloge présente sur la RCL (Read Clock). Le microcontrôleur acquiert les données et, si elles sont reconnues valides, les mémorise en RAM après les avoir converties en caractères ASCII. A ce point, le microcontrôleur s’assure que le bus n’est pas occupé et si cela est vérifié, il l’utilise pour charger les données dans la RAM de l’ordinateur par le port série.
Les données issues de la broche 10 du microcontrôleur U3 sont converties en niveaux RS232C du type +12 V / –12 V par le circuit intégré U2, un MAX232 de la société Maxim, conçu spécialement pour cet usage. En réalité, ce circuit a deux sections et ne fait pas seulement la conversion TTL/RS232C, mais également le contraire (RS232C/TTL). La partie RS232C/TTL de la ligne de réception est reliée à la broche 5 du microcontrôleur.
Toutefois, il faut noter que, pour l’instant, la réception n’est pas utilisée.
Notre système n’attend donc pas de réponse de l’ordinateur.
La section de commutation, autrement dit la section de connexion et de déconnexion des lignes de données, est réalisée avec un commutateur électronique U1, un CD4016, dont les broches de contrôles sont directement gérées par la sortie PB4 du microcontrôleur ST6265. Lorsque les broches 6 et 12 sont au niveau haut, les interrupteurs CMOS internes au circuit intégré sont conducteurs et présentent une résistance de quelques centaines d’ohms. Si ces mêmes broches sont au niveau bas, les interrupteurs sont ouverts et la résistance entre les points 10/11 et 8/9 et de plusieurs dizaines de millions d’ohms. Notez que les interrupteurs CMOS peuvent êtres tranquillement utilisés avec des niveaux RS232C car ils fonctionnent indépendamment des niveaux et de leur nature. En somme, ils commutent des impulsions logiques et non des signaux linéaires.
Pour ce qui concerne l’alimentation, chaque unité demande 12 à 15 volts avec un courant d’environ 150 milliampères.
La diode D1 protège l’ensemble contre les inversions de polarité accidentelles. Le régulateur intégré U4 stabilise à 5 volts la tension de fonctionnement de la partie logique. La tension d’alimentation filtrée par les condensateurs C1 et C2, est appliquée directement sur le buzzer BZ qui sonne chaque fois qu’une carte est lue et que le format des données est valide et compatible avec le modèle standard mémorisé dans le microcontrôleur. La diode zener DZ1, avec laquelle est obtenu un potentiel stable à travers la résistance R1, garde au niveau haut la ligne de transmission de la platine lorsque l’interrupteur CMOS U1 est désactivé.



Organigramme du programme principal


Le logiciel
La gestion de chaque unité de lecture et confiée a un microcontrôleur ST6 de SGS-Thomson, convenablement programmé pour exécuter les fonctions illustrées dans l’organigramme.
Comme on peut l’observer, après la mise en service et la remise à zéro initial, le microcontrôleur procède à l’initialisation des I/O (entrées, sorties) broches 16, 17, 18, 19, 28, 26, 25, 24 en les définissant en entrées avec des résistances de pull-up (maintient d’un niveau haut) et comme des entrées normales pour les broches 5, 9, 13, 14, 15. Les sorties PB0, PB2 et PB6 (broches 1, 4, 8) sont du type collecteur ouvert, PB1 est actif et il en est de même pour les broches 6 et 10 (respectivement PB4 et PA0).
Après cette phase, les ports PB0 et PB2 passent au niveau bas pendant une seconde allumant ainsi les deux LED, LD1 et LD2. Simultanément, la broche 2 passe au niveau haut (1 logique), ce qui permet à T1 de devenir conducteur et au buzzer d’émettre un bip d’une seconde. A partir de ce moment, tout est prêt pour fonctionner.
Le logiciel attend le signal de la présence d’une carte dans le lecteur, ou bien un front descendant sur la broche 15 du microcontrôleur (ligne CLS). Lorsque cela arrive, le microcontrôleur vérifie la présence de l’impulsion d’horloge et autorise la lecture de la bande magnétique. S’il venait à manquer quelque chose ou si les données présentes étaient déformées par rapport au standard, la procédure de lecture serait suspendue. Par contre, si les données sont valides, le microcontrôleur attend les caractères, chacun formé de 5 bits. Ensuite, il les convertit en un nombre décimal et procède au contrôle de la parité.
L’opération est répétée jusqu’à la lecture des 40 caractères (ce que peut contenir une piste ISO7811-2) et chaque caractère valide est converti dans sa valeur correspondante en ASCII, puis sauvegardé en RAM. Les groupes de 5 bits (caractères) non valides ou altérés activent l’inscription du message “nul” en RAM, dans la position correspondante. Le contrôle des données et leur mémorisation terminés, la routine de transmission sur le port série est appelée, comme cela est représenté sur l’organigramme.

La transmission série


L’acquisition des données envoyées par le lecteur de badge terminée, le microcontrôleur vérifie l’état de la ligne de contrôle (broche 9) ; ainsi, si elle est au niveau haut, il sélectionne le bus en mettant au zéro logique la broche 8. A ce point, il vérifie l’état de l’interrupteur 8 du dip-switch et si ce dernier est ouvert, il active la transmission série sur la broche 10; si l’interrupteur est fermé, le microcontrôleur ajoute au message série, le code de la carte, sélectionné par l’intermédiaire des interrupteurs DS1 à DS6. Après transmission du train d’impulsions un bip est émis et la LED verte est allumée, indiquant que la procédure de transmission s’est déroulée avec succès. Nous reportons ci-dessous le listing d’un programme en QBASIC en mesure de lire un train de 41 caractères sur le port série et de l’afficher sur l’écran du moniteur.

REM QBASIC PROGRAM FOR SERIAL SMART
REM CARD READER WITH LINE-CONTROL
REM (C) 1998 BY FUTURA ELETTRONICA SNC

CLS
OPEN “com1:300,N,8,1” FOR RANDOM AS #1
LABEL1:
C$ = INPUT$(41, #1)
CLS
C = ASC(LEFT$(C$, 1))
C$ = RIGHT$(C$, 40)
CLS
LOCATE 14, 15: PRINT “CODE CARTE =”
LOCATE 14, 33: PRINT C$
LOCATE 15, 15: PRINT “CODE CIRCUIT =”
LOCATE 15, 32: PRINT C; : PRINT “ “
GOTO LABEL1
CLOSE #1
END

Pour étalonner notre lecteur de badge, il faut charger dans le PC le listing en QBASIC transcrit ici. Notez que le programme procède à l’extrapolation du train de 41 caractères, le premier à gauche, qui coïncide avec le code de la platine sélectionnée par l’intermédiaire des dip-switchs.

En pratique
Après avoir décrit tout ce qu’il est utile de savoir du fonctionnement du circuit, voyons comment réaliser une unité, étant entendu que pour en réaliser d’autres, il suffit de suivre les mêmes instructions et d’interconnecter ensuite les lignes 2 et 3 du connecteur série, sans oublier le point LINE CONTROL de chacune d’elles. A ce propos, vous observerez que les liaisons entre les platines et le PC sont effectuées avec un ou plusieurs câbles qui ne font pas l’inversion entre les broches 2 et 3 de la sortie série.
En figure 2, vous trouverez le plan d’implantation des composants qui prennent tous place sur le circuit imprimé S221 donné à l’échelle 1 en figure 3. Vous pouvez réaliser ce dernier selon votre méthode habituelle ou l’acquérir prêt à l’utilisation (voir publicités dans la revue).
Une fois en possession de votre circuit, vous pouvez monter les composants en commençant par les résistances et les diodes, pour lesquelles il est impératif de respecter la polarité indiquée sur le plan d’implantation des composants. Montez ensuite les supports des circuits intégrés en orientant leur repère-détrompeur dans le sens indiqué clairement sur le schéma d’implantation des composants. Poursuivez le montage par le dip-switch à 8 interrupteurs, les condensateurs (en veillant à la polarité des électrolytiques), les deux LED, le quartz, le transistor T1 et le régulateur. Pour ces deux derniers, il faut respecter le sens indiqué.
Il reste à présent à terminer le montage par la mise en place du buzzer (attention à la polarité), du connecteur 25 points femelle pour circuit imprimé et des borniers à vis permettant la liaison du lecteur et de l’alimentation. Prenez les circuits intégrés et insérez-les dans leur support respectif, en veillant à ne pas plier malencontreusement leurs broches. Le microcontrôleur ST6265 est préprogrammé et porte la référence MF221 (voir publicité dans la revue).
A présent, le circuit est prêt et pour le compléter il suffit de lui relier le lecteur de cartes.
Vous pouvez alimenter le montage en le reliant à une alimentation de 12 à 15 volts, pouvant débiter 150 milliampères.
Si tout a été correctement monté, les deux LED doivent s’allumer environ une seconde et le buzzer doit émettre un bip. Ensuite, tout passe au repos et le lecteur est prêt pour lire la première carte.
Avant d’utiliser le système, il faut positionner les interrupteurs du dip-switch.
Pour cela, coupez l’alimentation. Il faut décider ce que vous voulez faire. Si vous utilisez un seul lecteur, le code est superflu, vous pouvez donc laisser ouvert le huitième interrupteur du dipswitch.
En faisant cela, à chaque lecture sur le port série, seul le contenu de la piste magnétique de la carte sera envoyé à l’ordinateur.
Si vous disposez de plusieurs unités, ou si vous voulez tout simplement envoyer le code d’identification à l’ordinateur, il faut fermer le huitième interrupteur du dip-switch, et positionner les 6 premiers pour obtenir la combinaison voulue.
Naturellement, l’utilisation d’un nombre de dispositifs supérieur à l’unité requiert la mise en parallèle de tous les points relatifs aux broches 2 et 3 du connecteur du port série. De façon analogue, reliez tous les points LC (LINE CONTROL). A ce propos, si les unités sont distantes entre elles de plus de quelques mètres, nous vous conseillons d’utiliser du câble coaxial avec son blindage (tresse métallique) reliée à la masse, afin d’éviter les interférences qu’elles pourraient générer en fonctionnement.


Notre lecteur contient un microcontrôleur qui s’occupe de toutes les fonctions logiques. Le tableau indique la signification de chaque broche de ce circuit intégré.

Le jeu de caractères des cartes magnétiques


Le tableau illustre le protocole de lecture et d’écriture de la piste magnétique ISO2, qui présente une densité de 29,5 bits/cm et une capacité maximale de 40 caractères.
Chacun d’eux est représenté par l’ensemble de 5 bits.
Les quatre premiers, nommés b1 à b4, expriment vraiment le caractère, le dernier est utilisé pour le contrôle de la parité.
Les six symboles restants sont utilisés comme codes de contrôle.

L’unité de lecture manuelle
Le circuit proposé dans cet article utilise comme clé un lecteur commercial produit par la société KDE, dont voici les principales caractéristiques :

Standard de lecture                : ISO 7811
Piste de travail : ISO 2 (ABA)
Méthode de lecture : F2F (FM)
Alimentation : 5 volts
Consommation maximale : 10 mA
Vitesse de lecture : de 10 à 120 cm/sec
Durée de vie de la tête de lecture : < 300000 lectures
Température de fonctionnement : de 0 à 50° C
Dimensions : E 30 mm x L 99 mm x H 29 mm
Poids : 45 grammes


A lire ou à relire
Jeu de piste
Contrôleur d’accès à carte magnétique

0 commentaires:

Enregistrer un commentaire

Related Posts Plugin for WordPress, Blogger...