Robotique : Commande d'un moteur pas à pas avec un Oric Atmos
L'idée
Il y a quelque temps j'ai ressorti mon vieux Oric Atmos, mon premier ordinateur des années 1984, avec l'idée d'en faire quelque chose. Après une recherche sur internet, j'ai trouvé des pages le Club Europe Oric avec des adeptes, de la documentation, des jeux et des programmes à charger.
Comme l'Oric possède un connecteur 2 x 17 br qui permet un accès direct au Bus du processeur 6502, cadencé à 1 MHz, pourquoi ne pas essayer une application de robotique ? Comme la commande d'un moteur pas à pas (récupéré sur une vielle imprimante).
Le principe Il n'est pas nécessaire de démonter l'Oric ! il faut relier un connecteur 2 x17 contacts HE 10 femelle au connecteur du bus d'extension de l'oric. |
|
Réalisation de la carte P.I.A. Le 6502 contenu dans l'Oric ne peut pas commander directement une entrée ou une sortie. Il faut une carte PIA ( Périphérique Interface Adaptateur ) :
Les numéros des connexions sur le schéma structurel et sur le dessin de câblage des composants indiquent les broches du connecteur 2 X 17 contacts. Un câble plat à 34 conducteurs sera utilisé mais seul 22 liaisons seront réalisées sur la carte P.I.A. Il faudra ne pas oublier de brancher la masse ( connexion 34), mais ne pas relier le + 5V de l'Oric. |
|
Le connecteur sera branché à l'arrière de l'Oric sur le bus d'extension, en respectant le sens |
Commande d'un interrupteur et d'une LED
Pour tester le fonctionnement de cette carte on pourra connecter un interrupteur et une LED avant d'y relier une carte de commande pour moteur pas à pas. |
On réalise le branchement ci-contre. La DEL peut être branchée sur n'importe laquelle des sorties PA0 à PA7 car c'est l'ensemble du Port A qui sera commuté. Il en va de même pour l'interrupteur sur le Port B.
|
Le programme ci-contre se contente de faire clignoter la led lorsque l'on ferme l'interrupteur.
|
1 REM " Test P.I.A." |
|||||||||||||||
10 POKE#3F1,0 | Mise à 0 du registre de contrôle pour l'accés au registre de transfert du port A | |||||||||||||||
20 POKE#3F0,255 | Bits du port A en sorties | |||||||||||||||
30 POKE#3F1,255 | Mise à 1 du registre de contrôle pour l'accés au registre de données du port A | |||||||||||||||
40 POKE#3F3,0 | Mise à 0 du registre de contrôle pour l'accés au registre de transfert du port B | |||||||||||||||
50 POKE#3F2,0 | Bits du port B en entrées | |||||||||||||||
60 POKE#3F3,255 | Mise à 1 du registre de contrôle pour l'accés au registre de données du port B | |||||||||||||||
70 A=PEEK(#3F2) | Attente de la mise à 0 d'un interrupteur | |||||||||||||||
80 IF A=0 THEN GOTO 100 | ||||||||||||||||
90 GOTO 70 | ||||||||||||||||
100 POKE #3F0,0 | Boucle pour le clignotement de la LED | |||||||||||||||
110 WAIT50 | ||||||||||||||||
120 POKE#3F0,255 | ||||||||||||||||
130 WAIT50 |
||||||||||||||||
140 GOTO 70 |
Commande d'un moteur Pas à Pas
Un moteur pas à pas nécesite une certaine puissance pour être commandé. On utilise le plus souvent un montage en pont
|
Principe de commande d'un moteur pas à pas : Pour la commande un moteur pas à pas nécesite 2 signaux rectangulaires déphasés de pi/2 |
|
PA6 et PA7 sont des sorties connectées aux entrées de la carte de puissance A et B PB0 est une entrée connectée à l'interrupteur fin de course avec une résistance de rappel de 10 kohms au + 5V |
||
2 types de moteurs existent : bipolaire avec 4 fils de branchements et unipolaire avec 6 fils.
|
Le programme demande l'angle de rotation, trace à l'écran la position de l'axe du moteur dans un cercle et actionne le moteur pas à pas. Il est aussi possible d'ajouter la prise en compte de la position de départ à l'aide de l'interrupteur à lame souple.
|
10 REM " commande moteur " |
|||||||||
20 POKE#3F1,0 | Mise à 0 du registre de contrôle pour l'accés au registre de transfert du port A | |||||||||
30 POKE#3F0,255 | Bits du port A en sorties | |||||||||
40 POKE#3F1,255 | Mise à 1 du registre de contrôle pour l'accés au registre de données du port A | |||||||||
50 CLS : HIRES | Tracé d'un cercle à l'écran | |||||||||
60 CURSET 50,100,0 | ||||||||||
70 CIRCLE 44,1 | ||||||||||
80 PRINT"ANGLE DE ROTATION" | Entrée de l'angle de rotation en degrés | |||||||||
90 INPUT C | ||||||||||
100 CURSET 50,100,0 : DRAW B,A,0 | Effacement de la droite précédente à l'écran | |||||||||
110 A=INT(40*SIN((C/180)*PI)) | Tracé de la droite correspondante à l'angle de rotation | |||||||||
120 B=INT(40*COS((C/180)*PI)) | ||||||||||
130 CURSET 50,100,0 | ||||||||||
140 DRAW B,A,1 |
||||||||||
150 D=C/15 : FOR T=0 TO D-1 | Boucle avec les valeurs décimales sur le Port A du tableau ci-contre | |||||||||
160 POKE#3F0,64 | ||||||||||
170 WAIT2 | ||||||||||
180 POKE#3F0,192 | ||||||||||
190 WAIT2 | ||||||||||
200 POKE#3F0,128 | ||||||||||
210 WAIT2 | ||||||||||
220 POKE#3F0,0 | ||||||||||
230 WAIT2 | ||||||||||
240 NEXT T | ||||||||||
250 GOTO 80 |