Commande des maquettes FischerTechnik


Sommaire


L'interface de commande FischerTechnik:

Cette interface permet de piloter les maquettes electromecaniques de fischertenik a partir d'un ordinateur ou comme ici a l'aide d'un kit 68010. Elle constitue le lien, dans les deux sens, entre les signaux de l'ordinateur et les composants electriques des maquettes, car les signaux logiques du kit 68010 sont trop faibles pour allumer une lampe ou actionner un moteur. L'interface est capable d'alimenter 8 lampes ou 4 moteurs (en effet un moteur occupe deux lignes de sortie de l'interface). Elle permet aussi de connaitre l'etat de 8 lignes d'entrees "tout-ou-rien" et de 2 lignes d'entrees analogiques pour les differents types de capteurs (Interrupteur de position, potentiometre, photoresistance, ...). Enfin l'interface protege le port d'entree-sortis du kit 68010 contre les surtensions et autres parasites electriques. Elle possede sa propre gestion des temps morts, lui permettant de s'arreter si elle de recoit plus l'ordre du kit 68010 dans un delai raisonnable (environ 1/2 seconde). Cela permet de proteger les maquettes contre le depassement de leur resistance mecanique en cas d'erreurs de programmation.

Alimentation electrique:

La puissance electrique est apportee par une source separee de celle du kit68010. Vous devez donc brancher une alimentation entre 5v et 8v maximum sur l'une ou l'autre paire de fiches (+ et -) de l'interface (les deux plus et les deux moins sont connectes en parallele dans l'interface). Attention: l'interface est realisee a partir de circuits integres en technologie CMOS. Il convient donc de prendre garde a ne pas etre electostatiquement charge avant de la toucher surtout si elle est ouverte. Le plus simple est de toucher quelques instants une masse metallique reliee a la terre. Vous veillerez a faire les operations de connexion ou de deconnexion seulement apres avoir coupe l' alimentation de l'interface et l'alimentation du kit 68010. 

Connectique Station HP->kit 68010->inteface->maquette:

                     -------------------
 ---------          |       | Extension |     ----------      -------- 
| Station | Liaison |  Kit  |   68230   |    |Interface |    |maquette|
|         |<=======>|       |     +     |<==>|          |<==>|        |
|   HP    |  Serie  | 68040 | Carte TP  |    | Fischer  |    |Fischer |
 ---------          |       |           |     ----------      --------
                     -------------------




Les signaux de commande de l'interface FischerTechnik:

 ----------- 
|           |-----                    -----------
|           |     |>--- Load Out --->| Interface |
|           |  6  |>--- Load In ---->|           |
|           |  8  |>--- Data Out---->|  Fischer  |
|    KIT    |  2  |>--- Clock ------>|           |
|           |  3  |>--- Trigger X -->|    de     |
|           |  0  |>--- Trigger Y -->|           |
|           |     |<--- Data IN ----<| puissance |
|           |-----                    ----------- 
 ----------- 

Les donnees entre le kit et l'interface sont transmises les unes apres les
autres (transmission serielle). Chaque operation de commande utilise donc
trois lignes: une pour la commande ( Load In ou Load Out) l'autre pour les
donnees (Data In ou Data Out) et la derniere Clock pour synchroniser les
transmissions:

CLOCK, est le signal d'horloge de l'interface de puissance.
Les fronts de ce signal permettent de synchroniser les bits qui circulent
sur les lignes series Data In et Data Out (voir les chronogrammes). Pour
avoir un fonctionnement continu des actionneurs de la maquette il faut
generer une impulsion d'horloge au moins toute les 0,5 secondes: la led
rouge de l'interface doit s'allumer alors en permanence.

LOAD OUT, tant que ce signal est a l'etat bas le registre tampon
reste inchange. Le dispositif de commande (le kit68000) peut donc envoyer
ses 8 bits de commande dans le registre a decalage via DataOut et
ClOCK. Le registre a decalage est recopie dans le registre tampon
tant que Load Out est a l'etat haut.

DATA OUT, les 8 bits de commandes sont envoyes en serie par ce signal
en synchronisation avec CLOCK. A chaque commande il faut envoyer les
8 bits donc commander tous les actionneurs a la fois. Il y a 4 actionneurs
et 2 bits par actionneur, exemple: 

                      12   34   56   78  <--- numero de bit

  mot de commande = | 01 | 10 | 11 | 00 |
                     -------------------
                      M1   M2   M3   M4

        | tensions aux bornes 
   bits |  de l'actionneur
  ----------------------------
   0 0  |       0     0       
   0 1  |       0    +V     
   1 0  |      +V     0       
   1 1  |      +V    +V

LOAD IN est le signal indiquant a l'interface de puissance que le
dispositif de commande lui demande d'envoyer l'etat des 8 interrupteurs
(tout-ou-rien). Il faut envoyer une impulsion a 1 pendant une periode
d'horloge pour que l'interface commence a envoyer les 8 bits de donnees
en synchronisation avec CLOCK.

DATA IN au repos ce signal est a l'etat 1. C'est la ligne par laquelle
l'interface de puissance envoi ses donnees en serie apres reception du signal
LOAD INen synchronisation avec le signal d'horloge CLOCK.





Commande des sorties M1 a M4.

Les signaux DATA OUT, LOAD OUT et CLOCK sont utilises pour commander les sorties M1 a M4. L'etat des 4 sorties est transmis sur 2 bits (l'un pour marche/arret, l'autre pour la polarite + et 0 ou 0 et + sur les 2 fils qui composents une sortie Mx). L'interface recoit donc 8 bits. L'etat courant des 4 sorties est conserve dans un registre tampon qui pilote directement les amplificateurs des sorties. Ces 8 bits doivent etre transmis en serie sur la ligne DATA OUT (poids forts d'abord donc M4) en synchronisation avec le signal CLOCK. Chaque front montant du signal CLOCK provoque la copie de l'etat du signal DATA OUT dans le registe a decalage apres l'avoir decale de 1 bit. Des que les 8 bits ont ete transmis il faut metre le signal LOAD OUT a l'etat haut pour provoquer le recopie du registre a decalage dans le registre tampon. Puis pour maintenir l'etat du registre tampon, il faut remetre a niveau bas le signal LOAD OUT avant la prochaine impulsion du signal CLOCK.

Remarque: Le maintient au niveau bas du signal LOAD OUT empeche la recopie du registe a decalage dans le registre tampon. Ce qui permet de maintenir l'etat des actionneurs.

          __      _     _     _     _     _     _     _     _______
CLOCK    1  |    |1|   |2|   |3|   |4|   |5|   |6|   |7|   |8      |
         0  |____| |___| |___| |___| |___| |___| |___| |___|       |__
                _______________________________________________
DATA OUT 1     |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  
         0_____|_____|_____|_____|_____|_____|_____|_____|_____|______
                                                                __
LOAD OUT 1                                                     |8 |
         0_____________________________________________________|  |___
La mise en marche des amplis des sorties M1 a M4 est controllee par une bascule monostable pilotee par le signal CLOCK. Ce monostable delivre un signal vers les amplis d'une duree d'environ 0,5 seconde. Ainsi, 0,5 seconde apres la derniere impulsion d'horloge, le monostable retombe dans son etat stable ce qui stoppe les amplis et provoque l'arret de la maquette. Il faut donc generer periodiquement une impulsion d'horloge CLOCK inferieur a 0,5s pour empecher la retomber du monostable. Ce systeme permet de protege la maquette en verifient via le signal CLOCK que le programme de commade ne s'est pas arrete innormalement. 

Lecture des entrees "tout-ou-rien" E1 a E8.

Le principe est le meme, le sens de la transmision etant inverse (de l'interface vers le kit 68000). Une impulsion sur la ligne LOAD IN provoque le transfert des valeurs dans un registre a decalage ; ces valeurs binaires sont envoyees en serie au kit 68010 au rythme des impulsions d'horloges (poids forts d'abord, c'est-a-dire l'entree numero 8 en tete). Le kit68010 peut alors traiter ces bits. Attention Comme c'est le meme signal d'horloge qui est utilise, la lecture des entrees cause egalement le basculement du monostable de protection des amplificateurs ; il faut donc maintenir le signal LOAD OUT au niveau bas pour ne pas modifier le registre a deacalage des sorties. Ce fonctionnement est resume dans le diagramme si dessous:
          ____   ___   ___   ___   ___   ___   ___   ___   ___   _
CLOCK    1    | |1  | |2  | |3  | |4  | |5  | |6  | |7  | |8  | |
         0    |_|   |_|   |_|   |_|   |_|   |_|   |_|   |_|   |_|
          ________________________________________________________
DATA IN  1      |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |   
         0      |_____|_____|_____|_____|_____|_____|_____|_____|
               _____
LOAD IN  1    |0    |
         0____|     |_____________________________________________

Lecture des entrees analogique EX et EY.

La lecture des entrees analogiques doit etre effectuee a l'aide de la la carte d'extension 68230 et son ADC 804 developpee en TP imipro. 

Description de la librairie iofischer40 pour kit68040

Le source se trouve dans /user/info_lib/Kit68k/src/FischerTec/kit68040 Cette librairie contient un ensemble de fonctions qui permettent de piloter une maquette Fischer via un kit 68040 comme vu precedemment (Les signaux).

Sur ce kit nous disposons d'un circuit d'entrees/sorties paralleles compteur de temps programmable, le PIT 68230. La partie TIMER est utiliser pour generer periodiquement les impulsions d'horloge du signal CLOCK de l'interface Fischer. Les autres signaux sont generes par les ports du 68230.

La fonction InitFISCHER()

Elle initialise les ports et le compteur de temps du 68230. Et doit met en place le sous-programme de gestion d'interruption du 68230.

Rappel: La programmation du 68230 en mode 0 Submode 1X.


La fonction controle( dispositif, action ):

dispositif (1,2,3 ou 4) identifie un actionneur (moteur, lampe ou electo-aimant) d'une maquette Fischer. action specifie les potentiels appliques aux bornes des actionneurs:
         ____ 
        /    \       Action |   LED (*) | tension en sortie
     --*  MX  *--   --------------------------------------
    |   \____/   |      0   |  eteinte  |      0     0   
    |            |      1   |  verte    |      0    +5V     
    |            |      2   |  rouge    |     +5V    0     
    *            *      3   |  orange   |     +5V   +5V    
    S0           S1 

(*) n'existe pas sur toutes les interfaces Fischer

Le parametre dispositif accepte 4 valeurs: 1, 2, 3 ou 4.

La fonction inter( num ):

num (de 1 a 8) identifie un interrupteur d'une maquette. Le nombre d'interrupteurs peut aller jusqu'a 8 sur une meme maquette. Cette fonction doit retourner l'etat (0 ou 1) de l'interrupteur specifie.


La fonction potar( num ):

num (1 ou 2) identifie un potentiometre de la maquette. Cette fonction doit retourner la position courante du potentiometre soit une valeur comprise entre 0 et 255 (1 octet).


Les sources.

Fichier        Contenu
-------        -------
fischer.k      Est le fichier de commande pour l'edition de liens.
               Il contient en particulier les adresses et l'ordre d'implentation
               dans la memoire du kit68010 des differentes sections de code.

Makefile       Classique: permet de generer le code pour le kit68000.
               commande make.

fischer.h      Contient les declarations et prototypes des fonctions
               publiques du module iofischer.c

iofischer40.c    Contient les routines de bas niveaux: Initialisation
               du PIT; routine de traitement de l'It timer;
               fonctions de generations des signaux "commande moteur",
               "etat des interrupteurs" et "etat des potentiometres.

Programme de diagnostique pour maquette fischer:

Ce programme permet de controler le fonctionnement d'une maquette Fischer. Apres telechargement et execution ce programme vous montre l'etats des interrupteurs, les niveaux des potenetiometres et avec l'aide du clavier de la station, vous pouvez tester les actionneurs M1, M2, M3 ou M4. Le source se trouve dans $kits68k/FischerTech/Diag :

Un Feu de signalisation.

Pas disponible. 

Machine-outil.

Pas disponible. 

Un Ascenceur.

Cette maquette offre une commande simple d'ascenseur a` priorite' ou bien une commande par me'moire de touche d'appel.
Trois interrupteurs (E3, E4 et E5) signalent la position de la cabine d'ascenseur. Trois autres interrupteurs (E6, E7 et E8)
sont place's en tant que touches d'appel aux diffe'rents e'tages. L'ascenseur, dans sa commande la plus simple, n'est pas
difficile a` programmer. Une position de consigne est obtenue a` partir des touches d'ordres (E6, E7 ou E8). C'est la varable PositionConsigne qui indique a` quel e'tage la cabine doit aller. 0 correspond ici au rez-de- chausse'e, 1 et 2 aux premier et second e'tages. La position re'elle de la cabine est donnee par la variable PositionCabine. Le codage des e'tages s'effectue avec les me'mes chiffres que pour la position de consigne. Le reste est a` pre'sent simple : si la position de consigne est infe'rieure a` la position re'elle, l'ascenseur doit se de'placer vers le bas, dans le cas contraire, l'ascenseur doit se de'placer vers le haut. Si les positions re'elle et de consigne sont conformes, le moteur d'ascenseur est arr^te'. Pour la phase d'initialisation, si la cabine ce trouve entre deux etages le moteur est actionne' pour faire descendre la cabine jusqu'a un etage. Nous pouvons utiliser ce mouvement de de'part pour e'tablir le sens de rotation du moteur. En effet si vous constatez que la cabine monte c'est qu'il faut inverser les polaritees du moteur de cabine. Nous vous proposons comme variante de programme un ascenseur avec une me'moire des touches d'appel. A pre'sent, il ne faut plus attendre que l'ascenseur s'arr^te pour entrer un nouvel appel. Vous pouvez aussi ame'liorer encore l'ascenseur avec une commande de priorite' de direction. La seconde touche de l'e'tage central entre ici en action. La touche de gauche est exploite'e en tant que touche d'appel vers le haut, celle de droite en tant que touche d'appel vers le bas Vous pouvez noter aise'ment ceci, vu que la saillie d'actionneme'nt se trouve en haut pour la touche de gauche. Pour la touche de droite, la saillie d'actionnement est oriente'e vers le bas. Le programme doit a` pre'sent commander l'ascenseur de telle sorte qu'il ne s'arre'te pas a` l'e'tage central, si le sens de de'placement intervenant n'est pas conforme a` la direction souhaite'e. Et celui qui recherche encore un autre champ d'activite' peut comple'ter les touches d'appel qui sont place'es normalement a` l'inte'rieur de la cabine par des touches du clavier de la station. Le source se trouve dans $kits68k/FischerTech/Ascenseur :


Le Rotor d'antenne.

Le rotor d'antenne a pour ta^che d'oriente' une antenne. Afin que le kit68000 sache dans quel sens l'antenne est oriente'e, on a incorpore' a` son pied un potentiome`tre EY. La roue dente'e sur laquelle repose l'antenne est actionne'e par le moteur M1. L'orientation de consigne re'sulte de la position du second po- tentiome`tre EX. Le sens de rotation du moteur re'sulte de la diffe'rence entre les positions de consigne et re'elle. En cas de conformite' des deux, le moteur est arr^te'. Des effets curieux apparaissent dans les positions extremes des potentiome`tres. En effet les plages de valeurs des deux poten- tiome`tres ne sont pas identiques et les valeurs extremes du potentiometres de rotor ne peuvent pas etre atteintes. Il est alors naturellement inutile de faire fonctionner le moteur contre les bute'es du potentiome`tres. Le source se trouve dans $kit68k/FischerTech/Rotor : Vous pouvez visualiser le fichier:
  • source Rotor.c,
  • le Makefile pour compiler et son
  • fichier de commande LinkCom.k pour l'edition des liens. Mais, qu'est ce qu'un fichier de commande
  • La Tour de Hanoi.

    Ce robot peut tourner autour de son axe vertical a l'aide du moteur M1 et monter et descendre son bras a l'aide du moteur M2. Gra^ce a` un electro-aimant M3 en guise de main, il peut recueillir des disques qui sont place'es devant lui en arc de cercle et les de'poser a` un autre endroit. le processus de mouvements pour ce robot repose sur un sport ce're'bral ancien: les Tours de Hanoi. D'apre`s la tradition, des moines d'un cloitre boudhiste sont occupe's a` une ta^che qui exige une dose extraordinaire de patience. Trois piliers de cuivre, d'argent et d'or sont place's sur une planche. Il y a tre`s longtemps de cela, cent disques troue's e'taient empile's, tous de diam- e`tres diffe'rents et dispose's par ordre de grandeur, sur le pilier de depart en cuivre. La ta^che consiste a` de'placer le tas sur le pilier d'arrive'e en or, en ob-servant les re`gles suivantes:

    L'histoire nous conte aussi que lorsque le but est atteint, c'est la fin du monde. Dans notre exemple, nous avons renonce' aux piliers de cuivre, d'argent et d'or et n'utilisons tout au plus que 5 disques, pour ne pas provoquer de'- libe're'ment la fin du monde. Pour les emplacements des tas, nous trouvons respectivement une position sur le bord avant et arrie`re ainsi qu'au centre du chassis (voir photo). Algorythme: Il est pre'fe'rable de tenir compte de l'observation suivante: afin de faire passer le disque du dessous du pilier de depart au pilier d'arrive'e, vous devez tout d'abord d'une facon ou d'une autre de'placer tous les disques du dessus sur le pilier interme'diaire. Alors le disque du dessous peut e'tre de'place'. Puis de nouveau, il ne reste plus qu'a` de'placer le tas restant du pilier interme'diaire sur le pilier d'arrive'e. Comment re'aliser le de'placement du tas restant ? Si nous avons 5 disques le tas restant fait 4 disques. Nous pouvons comme pre'cedemment de'placer le quartie`me disque le plus bas: Nous placons le tas de 3 disques sur le pilier libre (celui de de'part). Ainsi nous de'placons le proble'me d'un tas a` 4 disques a` un tas a` 3 puis a` 2 disques. En fin de compte nous ommes parvennus dans la re'flexion a` la situation avec un seul disque. Et de la` il est simple de de'placer ce disque. Nous pouvons a` pre'sent de nouveau suivre cette conclusion et affirmer ainsi que nous maitrisons le jeu de la Tour de Hanoi pour un nombre infini de disques. C'est exactement selon cette reflexion que fonctionne le programme qui est propose' ci-apre's. Le nombre de pas necessaire pour n disques est donnees par la formule (2 puissance n - 1). Donc pour 5 disques, le robot doit re'aliser ainsi 31 pas. Pour 100 disques, il faut exactement 126 765 060 000 000 000 000 000 000 000 de pas. Me'me le moine le plus rapide (1 seconde par coup) devrait travailler environ 40 mille millions de billions d'annees pour provoquer la fln du monde. Dans un premier temps le programme demande de reperer la position des trois piliers. Puis le nombre de disques. Il commence alors le traitement, il affiche le nombre de pas restant et le deplacement encours. La fonction de gestion de l'eletro-aimant presente une particularite'. apres chaque mise hors tension de l'electro-aimant on aliment brie'vement dans le sens contraire l'electro-aimant. Ce qui permet de reduire la magnetisation d'un disque. Le source se trouve dans $kits68k/FischerTech/TeachIn :

    Le Robot Teach-in.

    Robot Teach-in Les robots industriels sont utilise's lorsqu'il importe d'exe'cuter une suite de mouvements de facon imperturbable et avec une pre'cision constante. Lorsque s'a- joute a` cela le fait que le travail doit e^tre re'alise' dans un environnement nocif pour l'e^tre humain, par exemple avec des rayons radioactifs, de la chaleur, de la poussie`re, des bouees de peinture, etc., le robot est alors l'instrument de travail approprie'. Une autre condition pre'alable a` l'utilisation des robots est aussi cependant le fait que les ta^ches changent de temps a` autre. Sinon, il serait certainement plus profitable de construire une machine spe'cialement concue. Et ceci nous ame`ne au point central des ta^ches : un robot peut e^tre librement programme' dans sa sequence de mouvements. Deux me'thodes de programmation des robots sont aujourd'hui courantes. D'une part, nous pouvons nous asseoir a` une table de travail et e'laborer le programme depuis le debut. Lorsque le programme est e'tabli, il est entre' dans l'ordinateur de com- mande du robot et teste' avec ce dernier. Eventuellement, le programme doit e^tre ensuite corrige' et ame'liore' jusqu'a` ce que l'on obtienne en fin de compte le re'sultat souhaite'. Ce processus exige certes un investissement de temps important, mais il est toujours applique' lorsque les mouvements de robot sont fonction de n'importe quel re'sultat de calcul. Bien plus fre'quemment est toutefois applique'e le fameux proce'de' "Teach-in". Dans ce cas, le robot est commande' manuellement par l'utilisateur au moyen d'un clavier de commande. Le programme installe' dans l'ordinateur enregistre les mouvements. Au terme de la ta^che, l'ordinateur peut faire renouveler aussi souvent que souhaite' au robot les mouvements me'morise's. L'avantage du proce`de' est manifestement la programmation directe du robot, pouvant e^tre re'alise'e me^me sans connaissances de l'ordlnateur et de son langage de pro- grammation. L'inconve'nient re'side dans la limitation a` des sequences de mouvements simples et non ramifie's. Nous voulons a` pre'sent pre'senter dans ce qui suit un tel programme. Le robot est ici commande' au moyen de six touches de la console de commande. Les touches ont, dans le detail, la signification suivante : Bras leve' (E1) Bras baisse' (E2) Rotation a` gauche (E3) Rotation a` droite (E4) Marche aimant (E5) Arre^t aimant (E6) Deux touches ont une fonction particulie`re. La touche Apprentissage (E7) entraine la me'morisation de la position du robot par l'ordinateur. La dernie`re touche de'marre ensuite le robot : Start/stop (E8) Elle sert simultane'ment a` stopper la suite de mouvements inde'finiment renouvele'e du robot. Il ressort de cette introduction que le programme se de'compose en deux parties: le module d'apprentissage pour l'enregistrement des mouvements, et le module d'execution pour la re'pe'tition des mouvements. Le module d'apprentissage contto^le constamment l'ensemble des huit touches du pupitre de commande. Si l'une des touches de commande de moteur est appuye'e, le moteur correspondant est actionne' dans le sens de rotation exige'. Dans un tel cas, la touche est constamment ve'rifie'e jusqu'a` ce qu'elle soit relache'e. Le robot peut ainsi e^tre posltionne' de facon tre's pre'cise et l'on empe'che un actionnement multiple des touches. Une le'ge`re diffe'rence intervient lors de la commande de l'e'lectroaimant servant de main. La pression des touches est ici me'morise'e. L'aimant a une fonction durable. La touche d'apprentissage de'clenche une me'morisation de la position venant d'e^tre atteinte. Les deux positions des potentiome`tres ainsi que l'e'tat de commutation de l'aimant sont me'- morise's. Une pression sur la touche Start fait passer le robot dans le mode exe'cution. Une nouvelle pression sur cette touche et le robot s'arrete. Le source se trouve dans $kits68k/FischerTech/TourHanoi