A.M.F.N. |
Commande
d'accessoires simples: relais, lampes ou LEDs:
Le 74HCT245 a 3 rôles:
- remettre en forme les signaux TTL déformés par leur parcours dans le câble, - fournir un peu plus de courant pour pouvoir commander plusieurs circuits (ici il n'y en a qu'un, mais ça ne va pas durer), - isoler le port parallèle du PC de nos bricolages, par mesure de sécurité. L'ULN2804 est conçu
pour commander 8 charges sous 50V, 500mA.
|
Exemple de programmation en BASIC: (voir principe sur la page "principes de programmation") |
DEFINT A-Z
'toutes les variables sont entières
... DEF SEG=&h40 'chargement du pointeur de segment A0=PEEK(8)+256*PEEK(9) 'lecture de la valeur entière sur 2 octets DEF SEG 'restauration du pointeur de segment A1=A0+1: A2=A1+1 'calcul des adresses des 2 autres registres ... 'la variable ValeurDuPort0 conserve l'état des sorties entre deux commandes ... 'On veut allumer la lampe: Bit=3 'rang du bit en commençant à 0 ValeurDuPort0=ValeurDuPort0 OR 2^Bit 'mise à 1 du bit 3 OUT A0,ValeurDuPort0 'écriture dans le registre A0 ... ... 'On veut faire retomber le relais: Bit=6 'idem... ValeurDuPort0=ValeurDuPort0 AND NOT 2^Bit 'mise à 0 du bit 2 OUT A0,ValeurDuPort0 'écriture dans le registre A0 ... |
Commande
d'un moteur pas-à-pas:
Ce schéma est celui
que nous avons utilisé à plusieurs reprises pour commander
des plaques tournantes.
Le moteur utilisé
est du type unipolaire: les quatre enroulements ont un point commun (connecté
ici, au "plus") et sont alimentés avec la même polarité.
|
Exemple de programmation en BASIC: |
DEFINT A-Z
'toutes les variables sont entières
... DEF SEG=&h40 'chargement du pointeur de segment A0=PEEK(8)+256*PEEK(9) 'lecture de la valeur entière sur 2 octets DEF SEG 'restauration du pointeur de segment A1=A0+1: A2=A1+1 'calcul des adresses des 2 autres registres ... 'phases d'alimentation des enroulements DIM PHASE(7)'les phases sont numérotées de 0 à 7 Phase(0)=1 'binaire 00000001 Phase(1)=3 'binaire 00000011 Phase(2)=2 'binaire 00000010 Phase(3)=6 'binaire 00000110 Phase(4)=4 'binaire 00000100 Phase(5)=12 'binaire 00001100 Phase(6)=8 'binaire 00001000 Phase(7)=9 'binaire 00001001 ... ... 'rotation de N pas dans le sens positif 'la variable NbPas contient le nombre de pas à exécuter for N=1 to NbPas gosub UnPasPositif 'déplacement d'un pas gosub Temporisation 'attente avant de faire le pas suivant Next ... ... UnPasPositif: 'déplacement de un pas dans le sens positif Phase=Phase+1 'la variable Phase conserve la position du moteur if Phase=8 then Phase=0 out A0, Phase 'exécution du mouvement return ... ... UnPasNegatif: 'idem dans l'autre sens Phase=Phase-1 'la variable Phase conserve la position du moteur if Phase<0 then Phase=7 out A0, Phase 'exécution du mouvement return ... |
Commentaires sur ce programme:
Deux fonctions essentielles n'ont pas été détaillées dans cet exemple:
1: la fonction qui conserve la position du mécanisme entraîné par le moteur, et qui permet donc de calculer de combien de pas il faut tourner. Par exemple, s'il s'agit de faire tourner une plaque tournante d'une voie à une autre, il faut savoir où est la plaque au départ et où elle doit se retrouver à l'arrivée. La différence entre ces deux positions, exprimée en pas, donne le déplacement à effectuer.
2: la fonction temporisation, qui définit combien de temps le moteur va rester dans une même position, et donc sa vitesse de rotation. On peut réaliser cette temporisation de différentes façons, et il est impossible de rentrer ici dans le détail. Dans le cas le plus compliqué, on peut souhaiter avoir des démarrages et des arrêts progressifs, et la temporisation est donc variable, et fonction du nombre de pas déjà parcourus.
Note
sur les moteurs pas-à-pas:
Il existe toutes sortes
de moteurs pas-à-pas. Ils se distinguent par le nombre de pas par
tour, la tension d'utilisation, la façon dont ils sont alimentés
(unipolaires et bipolaires) et bien sûr par la puissance.
En attendant une page sur
le sujet, disons qu'il est plus facile de bricoler avec des moteurs:
- unipolaires (pas besoin
de composants spéciaux pour les commander),
- de tension "élevée"
(12 et 24V, d'où courant réduit. Eviter les moteurs en 2,
3 et 5V),
- avec un grand nombre de
pas par tour (p.ex. 200)
Commande d'un convertisseur numérique-analogique:
Commande d'un convertisseur simple:
Ce schéma utilise
comme convertisseur un vieux classique à 8 bits: l'AD558, d'Analog
Devices.
L'AD558 est une convertisseur monolithique, c'est-à-dire qu'il intègre dans un seul boîtier: le registre d'entrée, une référence de tension, le convertisseur proprement dit, et l'ampli de sortie. En jouant sur les connexions, on peut lui faire délivrer une tension comprise entre 0 et 2,56V, ou bien une tension comprise entre 0 et 10V. C'est ce dernier montage qui est représenté ici. Télécharger les spécifications de l'AD558 La page suivante donne des exemples d'utilisation de ce convertisseur pour commander une alimentation traction pour train. |
Exemple de programmation en BASIC: |
DEFINT A-Z
'toutes les variables sont entières
... DEF SEG=&h40 'chargement du pointeur de segment A0=PEEK(8)+256*PEEK(9) 'lecture de la valeur entière sur 2 octets DEF SEG 'restauration du pointeur de segment A1=A0+1: A2=A1+1 'calcul des adresses des 2 autres registres ... 'la tension de sortie est égale à 10V x (X/255) out A0, X 'affichage de la valeur out A1, 1 'validation par C0 out A1, 0 'fin de validation ... |
Commentaires sur ce programme:
Lorsqu'on charge dans le
registre d'entrée du convertisseur une valeur binaire X comprise
entre 0 et 255, il délivre en sortie une tension égale à
10V x (X/255) (dans la configuration ci-dessus).
Le registre est validé par -CS, actif bas, commandé par la ligne -C0 du port parallèle. Comme cette ligne inverse les signaux, il faut écrire un 1 pour valider le registre.
Commande d'un convertisseur quadruple:
Le convertisseur utilisé
ici est un des plus récents de Texas
Instruments.
C'est également un convertisseur monolithique, mais dont la référence de tension est externe. Il peut également fonctionner comme un potentiomètre. Cette caractéristique le rend extrêmement intéressant pour la réalisation d'alimentations traction pour train. Le montage ci-contre permet de délivrer en sortie des tensions comprises entre Vdec (p.ex. 5V) et Vref (p. ex. 10V). L'alimentation Vdd doit être supérieure d'au moins 4V à Vref. Un autre de ses avantages est son prix: le boîtier coûte cinq fois moins qu'un AD558, mais comme il est quadruple, le convertisseur revient 20 fois moins cher que le précèdent. Télécharger les spécifications du TLC7226 La page suivante donne des exemples d'utilisation de ce convertisseur pour commander une alimentation traction pour train. |
Exemple de programmation en BASIC: |
DEFINT A-Z
'toutes les variables sont entières
... DEF SEG=&h40 'chargement du pointeur de segment A0=PEEK(8)+256*PEEK(9) 'lecture de la valeur entière sur 2 octets DEF SEG 'restauration du pointeur de segment A1=A0+1: A2=A1+1 'calcul des adresses des 2 autres registres ... 'on utilise un sous-programme pour commander le convertisseur 'les arguments passés à l'appel du sous programme sont: '1: le numéro du convertisseur (0 à 3) '2: la valeur X à écrire dans le registre d'entrée (0 à 255) 'la tension de sortie obtenue est égale à Vdec + (Vref-Vdec)x(X/255) ... call Commande7226 (N, X) ... Sub Commande7226(Numéro, Valeur) Static Shared A0, A1 out A0, Valeur 'affichage de la valeur out A1, (3-Numéro) 'affichage du numéro de convertisseur sur -C0/-C1 out A1, (3-numéro) +8 'validation par -C3 out A1, (3-Numéro) 'fin de validation End Sub |
Commentaires sur ce programme:
Lorsqu'on charge dans le
registre d'entrée d'un convertisseur une valeur binaire X comprise
entre 0 et 255, il délivre en sortie une tension égale à
Vdec + (Vref-Vdec)x(X/255) (dans la configuration ci-dessus).
Le même registre A1 du port parallèle est utilisé pour sélectionner l'un des 4 convertisseurs du TLC7226 et pour valider le registre d'entrée correspondant.
La sélection se fait par les lignes C0- et C1-. Comme ces lignes inversent la valeur du bit correspondant, il faut complémenter la variable Numéro avant utilisation.
La validation se fait par la ligne C3-, inversée comme précédemment.
Utilisation des CNA pour la commande d'alimentations tractions: voir notre page sur le sujet.
Commande
d'un grand nombre d'accessoires:
Voici une façon simple de commander
5x8=40 sorties à niveaux TTL (0/5V) avec des registres adressables
74HCT259.
Le numéro du point à commander est donné par les bits D0 à D5, et l'état de ce point par le bit D7. Les bits D0 à D2 sont décodés par le 259 lui-même, et les bits D3 à D5 par le 138 en tête. La valeur à charger dans le registre est donnée par le bit D7. Ce montage est extensible à 64 points simplement en rajoutant trois autres 74HCT259. On a été limité ici par la taille du dessin. Bien entendu, derrière les sorties TTL on doit ajouter l'interface de puissance adéquat pour commander l'accessoire correspondant. Des ULN2804 conviennent bien pour des lampes, des relais, ou même des LEDs. |
Exemple de programmation en BASIC: |
DEFINT A-Z
'toutes les variables sont entières
... DEF SEG=&h40 'chargement du pointeur de segment A0=PEEK(8)+256*PEEK(9) 'lecture de la valeur entière sur 2 octets DEF SEG 'restauration du pointeur de segment A1=A0+1: A2=A1+1 'calcul des adresses des 2 autres registres ... out A0, 0 'au départ, l'interface est inhibé: -C0 = 1 ... 'on utilise un sous-programme pour commander les sorties 'les arguments passés au sous-programme sont: '1: le numéro de la ligne d'entrée-sortie à commander (0 à 39) '2: l'état dans lequel on veur mettre cette ligne (0/1) ... call CommandeES (N, E) ... Sub CommandeES(Numéro, Etat) Static Shared A0, A1 out A0, Numéro + 128*Valeur 'la valeur correspond au bit D7, de poids 128 out A2, 1 'validation par -C0 out A2, 0 'fin de validation End Sub |
Page suivante: utilisation
des lignes d'entrée.
sommaire pages techniques | sommaire port parallèle | page suivante |