Actionner un moteur pas à pas avec un PIC

pont Messages postés 198 Date d'inscription samedi 2 mai 2009 Statut Membre Dernière intervention 16 novembre 2010 - 10 nov. 2009 à 20:56
pont Messages postés 198 Date d'inscription samedi 2 mai 2009 Statut Membre Dernière intervention 16 novembre 2010 - 12 nov. 2009 à 21:59
Bonjour,
C'est curieux qu'il n'y a pas de rubrique de PIC, alors qu'il y en a de microprocesseurs inconnus, et que toutes les écoles des lycées aux classes d'ingénieurs utilisent des PIC et exclusivement. Enfin bon...

Je prends le PIC16F88, qui est quasi le même que le PIC16F84, car il peut être débugué, c'est à dire corriger les erreurs plus facilement.
Le moteur pas à pas a deux bobinages décalés magnétiquement de 90°, la bobine 1-3 et la bobine 2-4 donc il faut une séquence pour l'alimenter.
Il y a donc du +, du - et du zéro o. Chaque ligne représente une étape.

A) 1+ 2o 3- 4o
B) 1o 2+ 3o 4-
C) 1- 2o 3+ 4o
D) 1o 2- 3o 4+ et on recommence en A.

Mais si à partir de D on change de sens, il faut repartir en sens inverse, c'est à dire remonter à C, B, A, comme cela:

E) 1- 2o 3+ 4o =C
F) 1o 2+ 3o 4- =B
G) 1+ 2o 3- 4o =A
H) 1o 2- 3o 4+ =D
I) 1- 2o 3+ 4o =C
J) 1o 2+ 3o 4- =B
K) 1+ 2o 3- 4o =A etc...

Il faut réserver des broches pour la programmation et le débugage, donc elles restent connectées au connecteur, ce sont la 4 pour la programmation, la 12 pour la "clock" et la 13 pour les données du dialogue in situ (ICSP) Que reste-t-il?

Il faut 4 diodes rouges pour représenter les 4 états +, ce seront RB0, RB1, RB2, RB3, donc les broches 6,7,8,9, et 4 vertes pour représenter les - : RA0, RA1, RA2, RA3, les broches 17,18,1,2.
Total 8 broches alimenteront 8 diodes, par précaution il ne faut pas alimenter 8 diodes de 10mA sur le PIC, aussi on intercale un ULN2803A, juste un ampli à 8 voies qui peut supporter pas mal, des diodes bicolores à 3 broches sont idéales, mais en accolant une verte et une rouge on s'en sortira, à condition de mettre les 4 petits couples en rond. avec des résistances, ou un réseau de 8 résistances de 470 ohms.

Il ne reste plus alors qu'à programmer, et j'attends vos réflexions...
Amicalement
pont

4 réponses

edfed Messages postés 69 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 22 mars 2010 1
11 nov. 2009 à 15:16
trop facile

il faut une table de 2^n etapes et un compteur 8bits.

les 2 enroulements sont en fait:
PR & QS
ça fait un cercle PQRS

là, pour tourner, il faut 4 signaux binaires comme tu dis. cette partie ne pose pas de probleme.

par contre, il faut etre clair quand aux etats:
quand c'est de P vers R, on dit +, quand les deux sont au meme potentiel (depreference 0), on dit, 0
quand c'est de R vers P, ça veut dire -.


pour tourner dans un sens, incrementer le compteur qui sert a pointer dans le tableau de 8 pas (par exemple).
un tableau qui ressemble
à ça:

P Q R S

0000
1001
0000
1100
0000
0110
0000
0011

pour tourner dans l'autre sens, il faut decrementer.

avec une sorte de compteur 32bits, on peu faire aussi un comptage tres precis de l'angle du moteur sur un tres grand nombre de tours.

avec une broche CLK et une autre, Sens, on peu
piloter

ou alors, avec une broche pour envoyer un mot de consigne, on pire selon les delires du codeur.

etc etc.

allez, au boulot, tu veu pas qu'on, le fasse pour toi non plus?

en attendant, tu peu aussi essayer en asm X86 pour piloter les 8 sorties du port paralelle sous dos, c'est assez sympa à faire ça aussi.

me:
nop
ret
0
edfed Messages postés 69 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 22 mars 2010 1
11 nov. 2009 à 15:20
et ce forum est trop craignos car on peu meme pas editer les messages.
decidement, il est temps que je crée un forum asm français plus convivial.

me:
nop
ret
0
pont Messages postés 198 Date d'inscription samedi 2 mai 2009 Statut Membre Dernière intervention 16 novembre 2010 1
11 nov. 2009 à 19:25
Bonjour edfed,

Merci de ta participation, c'est vrai que l'éditeur de ce forum n'est pas prévu pour de la programmation, mais je doute que tu trouves mieux car c'est tout copié sur le même système. Mais au cas où tu trouverais préviens-moi, car un vrai forum en français en asm, ça manque vraiment.

Concernant le contenu de ton message, je n'ai pas tout compris, donc je risque de mal interprèter certains points qui sont peut-être parfaits parce que je n'ai pas tout vu. A ce jour j'ai pu faire tourner un moteur pas à pas unipolaire, et effectivement cela ressemble à ce que tu dis. Mais en bipolaire, c'est tout différent car il n'y a pas que deux états zéro et un, mais trois: plus, moins et zéro, un état doit donc se coder sur deux bits et non un seul.

J'ai fait un dessin de tous les branchements, pour une carte d'essai; ce n'est pas un circuit imprimé, c'est intermédiaire, l'avantage est que chacun peut s'en servir comme ça en câblage à la main, ou faire un circuit imprimé, car tout est "précâblé", il n'y a d'ailleurs pas grand chose, le moteur est représenté par 4 leds rouges et 4 vertes, il n'y a que 2 circuits intégrés, le PIC16F88, et le buffer ULN2803A et quelques petites pièces.
J'aimerais mettre ce dessin sur le forum, mais comment faire, c'est du jpeg d'environ 60ko, c'est + facile de discuter sur la base d'un dessin, que l'on peut donc critiquer en connaissance de cause. J'ai déjà expliqué le branchement mais le voir c'est mieux.

Dans la prochaine étape, j'essaierai de présenter le programme. Si tu veux une copie du dessin à ton mail je peux te l'envoyer.

Cordialement
pont
0
pont Messages postés 198 Date d'inscription samedi 2 mai 2009 Statut Membre Dernière intervention 16 novembre 2010 1
12 nov. 2009 à 21:59
Bonjour,

J'ai regardé cela, il n'y a pas besoin de table ni de compteur 8 bits.
En fait il n'y a que 4 états, chacun codé sur 8 bits, la difficulté étant le changement de sens de parcours des états, car il faut que le programme puisse se parcourir en descendant, ce qui est habituel et facile, mais aussi en remontant, ce qui est moins évident.

Mais j'ai réussi ce tour de force, et je l'ai essayé sur une plaque d'essai de MiKroelektronica, qui est criticable mais a le mérite d'exister en attendant mieux et elle montre que le programme va très bien, la seule critique que je ferais c'est qu'il n'y a pas mémorisation visible de la dernière position, par contre on voit qu'elle redémarre bien de la position précédente, soit en avant, soit en arrière,et sans perte de pas ce qui est très important; c'est la fonction effacement qu'il faudrait certainement mettre ailleurs.

C'est assez difficile de modifier un truc qui marche bien, on risque de tout casser, surtout que la logique que j'ai trouvée est assez tordue et si je ne l'avais pas vue tourner aussi bien, je n'aurais pas cru qu'elle tienne la route, c'est la 1e fois que je suis confronté à une lecture de programme en avant et en arrière, à première vue cela paraît impossible, et pourtant je vous assure que ça marche sans jamais d'erreurs; il faudrait une vidéo pour voir cela tourner.

Je fais de l'autosatisfaction car c'était un problème qui me turlupinait, je me demandais si j'allais le résoudre. Et l'avantage de cet effacement c'est qu'en arrêt le moteur pas à pas ne consomme rien, ce qui est intéressant aussi.

Cordialement
pont
0
Rejoignez-nous