commande de deux moteurs pas a pas sur le port parallele avec Delphi

Le pilotage des moteurs pas à pas constituant actuellement un élément essentiel pour une petite robotique de précision, nous vous proposons pour ce nouvel article de découvrir une méthode pour créer un éditeur de programmes de déplacements sous Windows extrêmement simple grâce à Delphi.

Le projet
Cette maquette permet d'actionner deux moteurs pas à pas de type unipolaire à partir de la sortie imprimante parallèle du P.C.. Les signaux qui entraînent chaque moteur en rotation sont délivrés directement par les huit lignes de données du port de sortie, ce qui constitue une configuration matérielle suffisamment pratique pour que l'essentiel du travail soit reporté vers la programmation. L'interface graphique est constituée de quatre boutons qui correspondent respectivement aux rotations gauche et droite de chaque moteur. Le contrôle de la valeur correspondant au nombre de pas pour chaque moteur est effectué avec deux zones de saisie, une par moteur. Une zone d'édition permet l'affichage des séquences, une séquence consistant à ajuster une valeur qui est automatiquement attribuée au mouvement correspondant aux boutons de rotation. Il est possible de corriger la dernière valeur entrée, de dérouler toute la séquence affichée ou de l'effacer.
La maquette
Conformément à notre souhait de privilégier avant tout l'initiation à la programmation sous Windows avec DELPHI, notre maquette reste simple bien que parfaitement efficace. Les deux circuits intégrés représentent la fonction commande et la fonction puissance. En effet, le 74HCT573 transmet les niveaux logiques qui correspondent à la mise sous tension ou pas de chaque enroulement des moteurs. Les valeurs sont verrouillées sur les sorties Q1 à Q8 grâce au transistor T3 via le signal STROBE provenant du port de contrôle de l'imprimante (voir le schéma).
schéma
Chaque moteur pas à pas nécessitant une tension de 12V pour fonctionner correctement, un ULN 2803A (qui constitue l'étage de puissance) est intercalé directement entre les sorties du 74HCT573 et les enroulements. Sa réalisation pratique ne comporte aucune difficulté en raison du nombre tout à fait restreint de composants. Comme chaque fois, accordez-vous quelques instants pour vérifier qu'il n'y a pas de coupures ou de courts circuits au niveau des pistes, puis procédez à l'implantation dans l'ordre des résistances, des supports de circuits intégrés, du transistor et finalement des divers connecteurs. Placez un repère de couleur sur la borne qu'il vous faut relier au pôle positif de l'alimentation afin d'éviter des erreurs malencontreuses, puis procédez aux branchements. L'alimentation 5V se trouve à côté du connecteur relié au P.C. alors que le 12V se situe à proximité des barrettes sur lesquelles vous devez placer les connecteurs des moteurs pas à pas. Attention au sens de branchement de ces derniers , car les communs (fils blancs sur les moteurs de type 55 SI) sont orientés vers l'extérieur de la carte.
Le programme
La méthode pour bien débuter une séquence de travail reste la même. Commencez par créer un répertoire sur votre disquette (le nôtre se nomme DELPH05), puis lancez Delphi à partir de Windows. Ouvrez un nouveau projet puis sélectionnez dans le menu FICHIER l'option APPLICATION en cliquant simplement sur le bouton OK. Donnez ensuite un nouveau nom à la feuille de travail qui s'est affichée. Modifiez pour cela la propriété Caption en entrant " Pilotage programmable de moteurs pas à pas ".
S'agissant des différents composants, il est toujours préférable de créer des zones distinctes qui permettent d'identifier aisément leur fonction, c'est pourquoi vous devrez placer 3 boîtes de groupes (GroupBox) en modifiant leurs propriétés Caption avec " Moteur 1 ", " Moteur 2 " et " Editeur ".
Toujours dans la barre d'outils STANDARD, allez chercher les boutons (Button) que vous disposerez dans les boîtes de groupe de Moteur 1 et Moteur 2. Le bouton gauche de Moteur 1 correspond au Button1, droite à Button2 alors que gauche de Moteur 2 doit être Button3 et droite Button4.
Les valeurs de réglage sont données par le composant SpinEdit qui se trouve sous l'onglet EXEMPLES de Delphi 2 et que vous déposerez entre les boutons "droite" et "gauche".
Dans la liste des propriétés de l'inspecteur d'objet, vérifiez que mini est égal à zéro, ce qui limitera le choix du nombre de pas aux valeurs positives. Revenez ensuite à l'onglet STANDARD de la palette de composants pour sélectionner une boîte de liste (ListBox) que vous déposerez dans la boîte de groupe EDITEUR de votre feuille de travail.
Cette boîte de liste a la particularité de contenir une liste d'items (qui correspondront aux mouvements de notre programme) repérés par un index. En positionnant correctement cet index on peut donc lire la chaîne de caractères qui lui correspond (le mouvement). Il reste enfin à placer les boutons qui permettront d'initialiser, d'exécuter ou d'effacer les lignes de programme des mouvements de chaque moteur. Pour cela, vous trouverez sous l'onglet SUPPLEMENT de la barre d'outils des boutons BitBtn que vous déposerez sur la feuille. Pour qu'ils affichent ce que nous
désirons, commencez par modifier leurs propriétés Caption dans l'inspecteur d'objet pour que s'inscrive " Exécute ", " Nouveau " et " Corrige ". Pour que chaque bouton à image Bitmap (BitBtn) affiche le dessin correspondant, sélectionnez la propriété Kind de l'inspecteur d'objet de chaque BitBtn. Pour le bouton "Corrige", prenez BkNo puis BkRetry pour "Exécute" et BkAbort pour "Nouveau". Votre écran est maintenant prêt, il ne reste plus qu'à entrer le programme en commençant par l'inscription automatique du corps de chaque procédure associée à un bouton. Pour les boutons "droite"' et "gauche" des moteurs 1 et 2, les noms que vous devrez entrer sous l'onglet EVENEMENTS de l'inspecteur d'objet sont:
Moteur_1_gauche
Moteur_1_droite
Moteur_2_gauche
Moteur_2_droite
Viennent ensuite corrige pour le bouton "Corrige", vide_la_liste pour le bouton "Nouveau" et enfin execute pour le bouton "Exécute". Il est bon de conserver à l'esprit que les soulignés sont indispensables et que vous ne devez pas utiliser de caractères accentués pour donner vos noms de procédure. Ce programme a l'avantage de vous permettre de vous familiariser avec les boîtes de listes (ListBox) qui sont plus simples à manipuler qu'il n'y paraît. En effet, comme cela a déjà été évoqué, elles peuvent contenir des chaînes de caractères alphanumériques repérées par un index. Ces chaînes, pour être reconnues comme des nombres, doivent être transformées à l'aide de l'instruction StrToInt( ) comme c'est le cas pour l'extraction de la valeur dans la procédure exécute.
Un mouvement de moteur est repéré par des initiales (l'ordre) et une valeur, qui seront affichés sous la forme M1G.12 , ce qui signifie que le moteur 1 tourne à gauche de 12 fois 4 pas . Le point entre l'ordre et la valeur fait office de séparateur.
valeur:=StrToInt(copy((ListBox1.Items[i]),5,L-4)); signifie qu'on prend les caractères à partir du cinquième jusqu'au dernier (ce qui est calculé par L) de l'item repéré par i dans la boîte de liste puis qu'on les convertisse en nombres avant de les ranger dans valeur (donc valeur dans notre exemple est égal à 12).
Pour extraire l'ordre, il n'y a pas besoin d'effectuer une conversion. Nous écrirons simplement: ordre:=copy((ListBox1.Items[i]),1,3); qu'on peut traduire par "prendre les 3 caractères à partir du premier de l'item repéré par i dans la boîte de liste", ce qui nous donne M1G. En fonction de l'ordre ainsi récupéré dans la procédure exécute, on peut aiguiller le programme vers la séquence d'action des enroulements de chaque moteur pas à pas.
Afin de simplifier le programme, le choix s'est porté vers le déroulement complet d'un cycle d'action sur les enroulements d'un moteur, ce qui signifie que les valeurs de rotation auront pour unité un angle de 30 degrés avec un moteur de 48 pas par tour. Si par exemple vous exécutez l'ordre M1D.6, le moteur 1 effectuera une rotation à droite de 180 degrés. Pour effectuer des tours complets, vous utiliserez donc des multiples de 12. Pour en venir aux aspects matériels de ce programme, il est rappelé que l'adresse du port imprimante vers lequel nous enverrons les données correspond au port 2. Pour un autre port, modifiez les adresses en conséquence.
La procédure d'action des moteurs reprend le code que nous avons abordé au cours des précédents articles et qui est développé ci-dessous pour mémoire. Le codage employé est hexadécimal (h) et binaire (b) pour les valeurs chargées dans les registres.
A l'exécution du programme, vous devez obtenir une page conforme à l'écran :



Publie sue Magazine Electronique Pratique N°210 - Janvier 1997

Aucun commentaire:

Enregistrer un commentaire