Deux moteurs pas-à-pas.

Pererobert

New Member
Bonjour. Pensionné je fais des petits bricolages pour m'occuper. J'utilise régulièrement des petits moteurs PAP sans problèmes. J'aimerais savoir s'il existe une possibilité de contrôler simultanément et avec un Picaxe, deux moteurs PAP simultanément (déplacement en X et Y). Je sais le faire avec des servos moteurs mais j'ignore si c'est faisable avec des PAP.
Grand merci d'éclairer ma lanterne (vacillante).
 

PieM

Senior Member
Bonjour,

A priori, même si cela est réalisable sous certaines conditions de vitesse des moteurs, éventuellement par l'utilisation des pseudo multitaches qu'offrrent les M2, je serais plutôt partisan d'utiliser un picaxe par moteur, chacun gérant ses séquences accélération, vitesse, nombre de pas en fonction d'une instruction reçue.

Mais il faut savoir si le fonctionnement des moteurs doit être synchrone compte tenu du type d'application!

A toutes fins utiles, voir ici le code que j'utilise pour mes moteurs PaP : http://www.picaxeforum.co.uk/showthread.php?19286-commande-moteur-pas-a-pas-a-l-attention-de-pieM

Il est peut être possible d'imbriquer les codes pour deux moteurs en utilisant les pauses entre pas mais cela risque d'être du sport!
Par contre l'essai avec un M2 en traitant deux taches "simultanées" serait peut être à tenter ...
Petit problème très intéressant !! tenez nous au courant. :)
 

Pererobert

New Member
Merci d'avoir cherché. Comme je le pensais, ce n'est guère évident de commander deux moteurs PaP en même temps. Je vais continuer à réfléchir sur le problème.
 

Pererobert

New Member
Bonjour. Je me permets de revenir sur le sujet. Serait-il, à votre avis, possible d'utiliser un Picaxe-18 avec branché sur les outputs 0, 1, 2, 3 un circuit L293D suivi d'un moteur pas-à-pas et sur les outputs 4, 5, 6, 7 un second
L293D avec son moteur pas-à-pas. Les deux moteurs ne sont pas appelés à fonctionner simultanément. Ce que je cherche c'est un déplacement successif en un axe Y et axe X.
Si c'est impossible avec un Picaxe-18 cela est-il réalisable avec un Picaxe-28 ?
 

PieM

Senior Member
Bonjour,

Bien sûr, il est tout à fait possible de commander deux moteurs PaP avec un 18M ( pas un 18M2 ?) en utilisant les sorties 0 à 7.
Comme déjà dit, la seule difficulté aurait été de les faire fonctionner simultanément, en respectant une loi Y= f(X) entre les deux.
 

Pererobert

New Member
Bonjour. J'ai réalisé le montage et utilisé deux moteurs PaP unipolaires. Le système fonctionne bien avec le programme test suivant :
stepdemo:
for b0= 1 to 250 'moteur 1
pulsout 0,1000: pause 1
pulsout 1,1000: pause 1
pulsout 2,1000: pause 1
pulsout 3,1000: pause 1
next b0

for b1= 1 to 250
pulsout 3,1000: pause 5
pulsout 2,1000: pause 5
pulsout 1,1000: pause 5
pulsout 0,1000: pause 5
next b1

for b0= 1 to 250 'moteur 2
pulsout 4,1000: pause 1
pulsout 5,1000: pause 1
pulsout 6,1000: pause 1
pulsout 7,1000: pause 1
next b0

for b1= 1 to 250
pulsout 7,1000: pause 1
pulsout 6,1000: pause 1
pulsout 5,1000: pause 1
pulsout 4,1000: pause 1
next b1
goto stepdemo
 

Pererobert

New Member
Bonjour. J'ai réalisé la commande deux moteurs unipolaires. Le tout fonctionne sans problème avec le programme test ci-jpoint :

stepdemo:
for b0= 1 to 250 'moteur 1
pulsout 0,1000: pause 1
pulsout 1,1000: pause 1
pulsout 2,1000: pause 1
pulsout 3,1000: pause 1
next b0

for b1= 1 to 250
pulsout 3,1000: pause 5
pulsout 2,1000: pause 5
pulsout 1,1000: pause 5
pulsout 0,1000: pause 5
next b1

for b0= 1 to 250 'moteur 2
pulsout 4,1000: pause 1
pulsout 5,1000: pause 1
pulsout 6,1000: pause 1
pulsout 7,1000: pause 1
next b0

for b1= 1 to 250
pulsout 7,1000: pause 1
pulsout 6,1000: pause 1
pulsout 5,1000: pause 1
pulsout 4,1000: pause 1
next b1
goto stepdemo


Le problème est que je trouve les instructions "Pulsout" un peu lourde ! N'existe-t-il pas une instruction plus courte évitant de mettre a chaque fois quatre lignes de texte ?
 

Pererobert

New Member
Correction : mettre pause 1 partout

tepdemo:
for b0= 1 to 250 'moteur 1
pulsout 0,1000: pause 1
pulsout 1,1000: pause 1
pulsout 2,1000: pause 1
pulsout 3,1000: pause 1
next b0

for b1= 1 to 250
pulsout 3,1000: pause 1
pulsout 2,1000: pause 1
pulsout 1,1000: pause 1
pulsout 0,1000: pause 1
next b1

for b0= 1 to 250 'moteur 2
pulsout 4,1000: pause 1
pulsout 5,1000: pause 1
pulsout 6,1000: pause 1
pulsout 7,1000: pause 1
next b0

for b1= 1 to 250
pulsout 7,1000: pause 1
pulsout 6,1000: pause 1
pulsout 5,1000: pause 1
pulsout 4,1000: pause 1
next b1
goto stepdemo
 

PieM

Senior Member
Bonjour,

le principe d'utiliser pulsout pour commander un moteur pas à pas n'est pas à conseiller.
Cela tient au fait que le moteur est sous tension pendant la durée du pulsout, puis, hors tension pendant la pause. Donc si vous voulez ralentir le moteur en allongeant la pause, vous risquez tout simplement de perdre des pas s'il y a un couple résistant !

D'autre part, cette méthode ne vous permet pas de commander un moteur au couple maxi (deux enroulements sous tension), ni en mode demi pas.

Inspirez vous du programme que je vous ai indiqué en #3. Il est facilement extensible à deux moteurs.
Si vous avez des difficultés, dites le et précisez quel picaxe vous utilisez, et quel type de commande vous souhaitez pour vos moteurs ( paramètres: nombre de pas à exécuter , vitesse, éventuellement accéleration ? )

Vous parlez dans un post de circuits L293D et maintenant de PaP unipolaires ?? Je pense qu'il y a une erreur quelque part ...
 
Last edited:

Pererobert

New Member
Bonjour et merci pour votre réponse. Voici un résumé de mes problèmes.
J'ai utilisé un Picaxe 18M2. Sur les Outputs 0, 1, 2, 3 j'ai branché un L293D et branché sur les Outputs 4, 5, 6, 7 un second L293D.
Au départ j'ai branché sur le premier circuit un moteur bipolaire le 35BYG304 acheté chez Gotronic. Le moteur à quatre fils donc 2 enroulements facilement repérables. J'ai utilisé un tas d'instructions trouvées à gauche et à droite dans la littérature et le moteur n'a jamais tourné ! Parfois le saut d'un pas parfois une vibration mais rien de plus ! Commençant à m'énerver sérieusement et me disant que ce serait ridicule d'avoir une crise cardiaque pour un moteur à 19 euros j'ai laissé le tout sur un coin du bureau durant quelques jours. Le troisième jour, inspiration divine, je me suis dis que peut-être le circuit n'aimait pas le moteur bipolaire et j'ai donc essayé un petit unipolaire à 6 fils le ST 35 toujours de chez Gotronic. Et là, miracle, le moteur a tourné avec les instructions Pulsout. Les deux sorties fonctionnent sans problèmes (apparents). Première question pourquoi l'un tourne et pas l'autre ? J'ai acheté le livre "Programming and customizing the Picaxe Microcontroler" ou il est spécifié page 238 que " same code for unipolar and bipolar" ! ben non..
Mon problème, et d'après mes recherches dans la littérature je suis très loin d'être le seul à ne pas comprendre ! Je fais tourner un moteur sans savoir pourquoi ou comment. Je m'explique : je sais qu'il faut donner des impulsions dans un ordre bien défini pour avancer vite, moins vite etc.. mais je n'arrive pas à comprendre comment interpréter en basique les tableaux donnant les séquences ! Si vous avez le livre cité plus haut j'ai à la page 236 les tableaux pour Step, Single -step high torque et Half-step. Pour le moteur unipolaire je vois dans le cas le plus simple de Single-step quatre lignes disposées comme suit :
0001 0001
0010 1000
0100 0100
1000 0010

Et dans le cas du moteur bipolaire quatre lignes disposées ainsi pour Single step:

---+ ---+
--+- +---

J'ai aussi rencontré des tableaux du style
Step Q1 Q2 Q3 Q4
1 1 0 1 0
2 1 0 0 1
3 0 1 0 1
4 1 0 1 0



Etc.. j'ai bien vu que les 1 étaient remplacé par des + mais déjà au départ pourquoi mettre des signes différents si c'est la même chose ? Ensuite comment passer de ces tables pour le traduire en langage basique ? Faut-il écrire 4 lignes reprenant les instructions deux par deux ? Doit-on écrire les 8 groupes à la queue-leu-leu sur une seule ligne ? Quelle instruction en basic faut-il utiliser ? J'ai parcouru la littérature et je trouve comme instructions :
Pulsout
(0, $01, $10, $.....)
Toggle
(%1010, %1000 ….)
High , low ..
J'en oublie certainement mais tout cela est loin d'être clair pour un amateur seul dans son coin ! J'ai la naïveté de croire qu'il n'y a qu'une bonne façon de faire mais laquelle ?
Désolé d'avoir été si long mais je suis un peu perdu dans les moteurs PaP.
 

PieM

Senior Member
Bon, on va y arriver ....

Comme indiqué, il ne faut pas utiliser des instruction du type Pulsout, ou toggle etc ... mais affecter directement les sorties du picaxe par l'image binaire qu'elles doivent avoir.
par exemple les sorties du port B du 18m2 se nomment outpinsB.
si j'écris outpinsB = % 11110000, les sorties B.4 à B.7 seront à l'état haut, les autres à l'état bas.

Voici un programme qui doit vous faire touner un moteur bipolaire branché sur le L293D connecté sur les Outputs 4, 5, 6, 7. du picaxe.

Chaque séquence est l'image de l'état des sorties B.4 à B.7 du picaxe. Avec %1010 par exemple B.4 et B.6 seront à l'état bas, et B.5 et B.7 seront à l'état haut.

Les deux enroulements moteur doivent être l'un sur 3 et 6 et l'autre sur 11 et 14 du L293D
Si votre moteur vibre, il faut inverser deux fils d'un même enroulement.

Remarque: votre moteur demande 1A sous 3.5V ce qui est très limite pour le L293D ... :rolleyes:

Code:
'===================================================
'Commande moteur PAP bipolaire 
'18M2 sur CHI035 Driver L293D
' connections moteur : sur A et B du L293D 
'===================================================
#picaxe 18M2
'===================================================

symbol MOT = outpinsB	'MOT correspond au portB du 18M2
symbol period = W1 	'temps entre pas en 1/100 de ms
symbol nbpas = W2		'Nombre de pas	
dirsB= %11110000		'affectation B.4 à B.7 en sortie vers le L293

'mémorisation de la sequence de commande pour le moteur en demi pas
eeprom 0,(%1010,%1000,%1001, %0001,%0101,%0100,%0110,%0010)

'prg principal ==============================
princ: 

do
	'mise hors tension du moteur pendant 3 sec.
	Mot = Mot & $0f | %00000000 
	pause 3000
	
	'actionne 100 demi-pas dans un sens avec une vitesse donnée
	period = 5 : nbpas = 100
	for w10 = 1 to nbpas
	inc b0
	gosub PAS
	next
	
	'actionne 100 demi-pas dans l'autre sens avec une autre vitesse
	period = 20 : nbpas = 100
	for w10 = 1 to nbpas 
	dec b0
	gosub PAS
	next
	
	pause 500
	
	'actionne 50 pas dans un sens avec une vitesse donnée
	period = 50  :nbpas = 50: b0 = 0 'va lire une séquence (paire) sur deux (mode 2 enroulements alimentés)
	for w10 = 1 to nbpas  
	b0 = b0+2
	gosub PAS
	next
	
	'actionne 50 pas dans l'autre sens avec une autre vitesse
	period = 50 :nbpas = 50: b0 = 1'va lire une séquence (impaire) sur deux (mode 1 enroulement alimenté)
	for w10 = 1 to nbpas  
	b0 = b0-2
	gosub PAS
	next
	
loop


PAS: ' Commande  pas / demi pas******************

	b0 = b0 & %00000111 'la valeur de b0 est limitée à 3 bits, soit 0 à 7 
	read b0, b1		' va lire la séquence 0 à 7 dans l'eeprom.
	b1 = b1*16		'decale de de 4 bit pour être au niveau de b.4 à b.7
	Mot = Mot & $0f | b1 	'envoi de cette séquence au moteur en masquant  les b.0 à b.3 
	pause period 		'pause en ms
return



Je vous expliquerais après comment ça fonctionne ...
On essayera le même programme (ou presque) avec un unipolaire (mais pas avec un L293D!), et après on se lancera sur deux moteurs sur un 18M2 !
 

PieM

Senior Member
En complément, je crois qu'il faut préciser que le mode de fonctionnement d'un moteur bipolaire, nécessite un circuit d'interface du type pont en H, c'est à dire un circuit capable d'alimenter chaque enroulement dans les deux sens de courant. Ce qui est le cas du L293D.
Par contre, un moteur unipolaire voit ses enroulements traversés par un courant qui est toujours dans le même sens. d'où un commun connecté au + et les enroulements connectés à un circuit collecteur ouvert, type ULN2003, ou des transistors Mosfet par exemple.

Je ne comprends pas comment vous avez fait fonctionner des unipolaires avec un L293D, à moins de les avoir connectés en bipolaires, ce qui est possible avec un moteur 6 fils

Un petit schéma de votre montage aiderait à y voir clair.
 

PieM

Senior Member
Bonjour,

Suite à mes essais, il est donc tout à fait possible de commander deux moteurs PaP indépendamment avec un seul Picaxe en utilisant les tâches pseudo parallèles d'un 18M2.
Chaque moteur peut être commandé en sens, vitesse, accélération.

La configuration nécessaire se limite donc à un 18M2 suivi de
- un ULN2803 (ou 8 Mosfet selon puissance) pour deux moteurs unipolaires.
- deux L293D pour deux moteurs bipolaires.

Les vitesses sont toutefois minimisées par le fait qu'en multitâche le picaxe se configure en 4MHz par tâche.

Je mettrais les schémas (simples) correspondants avec un programme de principe, en ligne sous peu ... s'il ne fait pas trop beau temps.


Le programme lié à la vidéo ci dessus est par contre un mono tâche à 16 MHz avec imbrication des pas des 2 moteurs. Mais cela demande une programmation un peu complexe.

La solution optimum, à mon avis, reste de commander chaque moteur par son propre picaxe...
 

Pererobert

New Member
Bonjour. Merci de me consacrer du temps et pardonnez-moi si je laisse passer un grand laps de temps entre chaque réponse mais je m'occupe de différentes associations sans rapport avec l'électronique et reviens à mes moteurs dès que j'ai le temps.
Au niveau des bonnes nouvelles j'ai appliqué votre programme sur mon moteur bipolaire et cela a fonctionné du premier coup.
Je confirme votre avis concernant l'échauffement. Le L293D est limite et chauffe. Je suppose que je peux mettre un transistor du genre BD139 sur chaque sortie du L293D ? A moins qu'il existe un circuit équivalent mais plus costaud.
Votre programme fait tourner mon moteur bipolaire et aussi mes deux moteurs unipolaires . Mais vous avez raison car dans le cas des moteurs unipolaires seuls quatre fils sont utilisés, les autres sont à la masse.
J'ai évidemment essayé de décortiquer le programme et ma question est prévisible puisque c'est mon soucis depuis le début, d'où provient la séquence de commande de la ligne 7 et aussi les codes d'affectations des sorties ligne 4 et les lignes 52 et 53.
J'ai été voir sur Google pour le code binaire et essayer de transformer la séquence en quelque chose de logique (la mienne ) ce qui donne en décimal:

eeprom 0,(10, 8, 9, 1, 10, 6, 2) rien de bien transcendant !

J'ai essayé en décimal ce qui donne : eeprom 0, (12, 10, 11, 1, 12, 6, 2) . Pas plus avancé !

Pour la ligne 4 aucune idée. Bien que, je me suis dis que c'était peut être en vue d'utiliser la même instruction (ligne 7) pour le premier ou le second moteur. On spécifie au Picaxe où va la séquence.
Voilà où j'en suis. Tout n'est pas perdu puisque le moteur tourne (grâce à vous) mais je vais me plonger dans le binaire. Je précise que je ne suis pas électronicien mais chimiste jusqu'à ma pension (déjà 10 ans).
Encore merci.
 

PieM

Senior Member
Bonjour,


Le L293D est limite et chauffe.
Il est normal que le L293D chauffe ! c'est son problème bien connu. Mais là, c'est l'intensité de votre moteur qui dépasse les limites du circuit (600mA)

Je suppose que je peux mettre un transistor du genre BD139 sur chaque sortie du L293D ?
Surtout pas !! Le L293D est un pont en H, qu'on utilise pour un moteur bipolaire. ou vos moteurs unipolaires 6 fils utilisés en bipolaires en ne connectant pas les fils centraux des bobinages...
Si vous voulez disposer de plus de courant, utilisez alors un L298 en prévoyant des diodes sur les sorties.

Un moteur pas à pas unipolaire ne se commande pas avec un pont en H, mais avec un circuit tel l'ULN2803, ou 4 transistors Mosfet de préférence.
Chaque fil milieu de bobinage est relié à la tension V+ (et non à la masse) qui peut être supérieure aux 5 V du Picaxe, et les autres fils sont reliés aux sorties de l'ULN ou aux drains des Mosfets.

J'ai été voir sur Google pour le code binaire et essayer de transformer la séquence en quelque chose de logique (la mienne ) ce qui donne en décimal:
La logique informatique étant binaire, je ne vois pas en quoi ça va vous avancer de raisonner en décimal !
Je pense que la première démarche est de vous documenter sur le binaire, et les rudiments de l'algèbre de Boole.
Ensuite, lisez attentivement les manuels du Picaxe, et http://etronics.free.fr/dossiers/num/num50/mpap.htm car vous y trouverez des explications sur le mode de fonctionnement des moteurs PaP, uni et bipolaires.
d'où provient la séquence de commande de la ligne 7 et aussi les codes d'affectations des sorties ligne 4
dirsB= %11110000 'affectation B.4 à B.7 en sortie vers le L293
Les Picaxe série M2 ont l'avantage d'avoir certaines broches configurables en entrée ou en sortie. Cette config se fait par la variable dirs
dirsB= %11110000 signifie que les broches B.7,B.6,B.5,B.4 sont configurées en sorties, et les autres en entrées. (Manuel2 - p15)

eeprom 0,(%1010,%1000,%1001, %0001,%0101,%0100,%0110,%0010)
C'est la séquence de l'état des sorties B.7 à B.4 pour une commande en demi-pas. voir #13

en pas complet , ce serait %1000, %0001,%0100,%0010 ce qui correspond à l'ordre près à ce que vous faites avec vos pulsin.

Mais le fait d'écrire la séquence en mémoire sous cette forme permet dans le programme de commander le moteur :
- en demi pas %1010,%1000,%1001, %0001,%0101,%0100,%0110,%0010
- en pas complet une phase %1000, %0001,%0100,%0010
- en pas complet deux phases (couple maxi) %1010,%1001, %0101,%0110,

simplement en allant lire la mémoire différemment, à chaque adresse mémoire, ou une adresse mémoire sur deux, en commençant à 0 (%1010) ou en commençant à 1 (%1000)

Je crois qu'il est important de bien comprendre tout d'abord comment sont alimentés les moteurs PaP bipolaires et unipolaires, pour utiliser les bons composants d'interface avec le Picaxe,
et ensuite, d'avoir un minimum de connaissance sur le binaire, et les fonctions booléenne ET, OU, NON .

Et restez avec l'écriture binaire ! lire %1001 OU %0100 = %1101 est plus parlant que 9 OU 4 = 13 au niveau de l'état d'activation des sorties du picaxe !

J'expliciterai ensuite le reste du programme.

Quel type d'applications avez vous avec les moteurs PaP ?
 

Pererobert

New Member
Merci pour les précisions et votre patience. Je crois que je me suis mal expliqué et que j'ai fini par comprendre ce qui était très (trop ?) simple. Mon problème n'est pas de comprendre comment fonctionne le moteur ce qui est élémentaire mais comment on passe des tableaux représentant les séquences de pas à la création de la ligne de texte en basic pour programmer le Picaxe.
J'ai fini, j'espère que je en me trompe pas, de comprendre ce qui est tellement élémentaire et jamais expliqué dans la littérature.
Si j'ai un tableau de pas qui indique :

Single step

---+ ---+
--+- +---
-+-- -+--
+--- --+-

Cela je suppose peut s'écrire :

Eeprom0, (%0001, %0001, %0010, %1000, %0100, %0100, %1000, %0010)

Je n'avais nullement l'intention de travailler en décimal, octal etc.. mais de comprendre l'origine de cette ligne de commande.
J'ai pratiqué un peu d'algèbre de Boole il y a une quarantaine d'année à la sortie des circuits logique de la série 7400 mais cela est devenu bien lointain.
Si je cherche à commander deux moteurs c'est pour venir en aide à quelques membres de mon club de magie qui cherche à déplacer un objet (un gros vase… en polystyrène) verticalement et en hauteur.
Et, plus spécialement pour moi. J'ai fabriqué un OUIJA en partant d'un vieux scanneur dont j'ai gardé le moteur et le chariot. Une tablette mobile indique, par programmation, les lettres de l'alphabet disposées en arc de cercle pour former un mot. L'ennui c'est que les lettres sont trop petites si l'on veut mettre 26 lettres et des chiffres sur un seul arc de cercle. J'envisage un modèle avec deux voire trois arcs de cercles concentriques comme un vrai OUIJA. Il me faut donc le moteur de l'ex-scanner pour les déplacements de gauche à droite mais aussi un moteur qui choisira sur quel arc de cercle il doit se positionner. Je pourrai utiliser comme second moteur un servomoteur mais c'est beaucoup trop bruyant.
Je termine en précisant qu'au départ c'était aussi pour arriver à utiliser le Picaxe que je trouve génial et "simple" d'utilisation. Un regret c'est le manque de littérature et d'applications sur le Picaxe. Un bon livre ne serait pas de refus.
 

PieM

Senior Member
Bonjour,

Si le fonctionnement d'un moteur pas à pas est pour vous tellement élémentaire, vous n'auriez pas écrit cette séquence
Eeprom0, (%0001, %0001, %0010, %1000, %0100, %0100, %1000, %0010)
:rolleyes:

vous avez écrit que le moteur doit faire 8 pas dans n'importe quel ordre, et en doublant certains pas !

Si vous commandez un PaP sur une seule phase (single step) (un enroulement à la fois) il n'y a que 4 combinaisons par sens de marche.
Il y en a 8 si vous êtes en mode demi pas. Auquel cas il y a deux 1 dans la même séquence, un pas sur deux.

J'ignore d'où vient votre tableau de pas, mais à mon avis vous en faites une mauvaise lecture! Moi je le lirais par colonne, chaque colonne représentant un sens de marche.

soit sens 1 : 0001, 0010, 0100, 1000 ....
sens inv : 0001, 1000, 0100, 0010 ....

ce qui est plus logique.

Mais le problème que vous rencontrez n'est pas lié au Picaxe ! vous rencontreriez le même avec n'importe quel µC.

Dites moi avec quel moteur PaP vous allez faire votre projet (uni ou bi polaire) et je vous ferai passer un programme avec le schéma pour actionner vos deux moteurs avec un seul 18M2...
 

Pererobert

New Member
Merci et effectivement j'ai lu horizontalement le tableau au lieu de verticalement ! Donc ma séquence doit être comme vous me l'indiquez ! Je sais que je ne suis pas doué mais la littérature ne fait rien pour arranger le choses. J'ai un tableau devant les yeux qui pour tout compliquer dit ceci :

step Coil A Coil B

1 South Off
2 South North
3 Off North
4 North North
5 North Off
6 North South
7 Off South
8 South South
9 South Off

Vous comprendrez la douleur du débutant car maintenant j'ai 3 possibilités Off, South, North !!

Après quelques essais j'ai opté pour les moteurs unipolaires. Les moteurs ont un réducteur de vitesse, sont silencieux et ne font pas chauffer mon L293D. J'ai essayé de mettre le schéma de base mais j'utilise ImageShack et bizarrement je n'arrive pas à charger l'image URL dans ce texte alors que je n'ai jamais eu de problèmes ailleurs. Il doit y avoir une condition que je ne remplis pas ?
En résumé, et grâce à vous, je pense avoir compris comment passer d'un tableau de séquence à la programmation du programme et l'essentiel j'ai mes deux moteurs qui tournent. Parmi mes interrogations restent les questions suivantes : lorsqu'il n'y a pas de tableau de séquences je suppose que l'on peut utiliser les pas vu plus haut. Le mystère de Off, south, north mais c'est par curiosité (je suppose qu'il s'agit d'un changement de polarité ?).
Dans mon schéma et pour l'utilisation d'un moteur unipolaire sur un L293D le/les communs vont bien à la masse.
Je serai absent une quinzaine de jours aussi ne vous étonnez pas si je ne répond pas.
Encore merci.
 

PieM

Senior Member
Bonjour,

Visiblement certains on fait un PaP avec une boussole ! je plaisante ...
En fait ce tableau doit correspondre à une commande par demi pas.
Si vous remplacez North par 01 South par 10 et Off par 00, vous devriez vous y retrouver.

Mais ne vous fixez pas sur les différents tableaux que vous pourrez rencontrer. Ils sont de 3 types de base (il y en a d'autres mais hors sujet ici ), toujours les mêmes : pas entier, pas entier 2 bobinages (couples maxi) , ou demi pas. Toutes les séquences que vous trouverez se traduiront par ces trois de base.

Si vous utilisez des moteurs unipolaires, généralement on les utilise avec le commun au plus et un driver du type collecteur ouvert qui met les enroulement à la masse.
Cela vous permet de commander 2 moteurs avec un seul circuit ULN2803 au lieu d'utiliser 2 circuit L293D, ou bien d'utiliser des transistor Mosfet, et autoriser ainsi des moteurs PaP très puissants, non compatibles avec ces circuits intégrés.
 

filuso

New Member
Bonjour,/87
Enfin je peux poster... merci aux modos !
Comme je le disais à PieM en mp, je suis enseignant de techno en collège et je viens chercher le savoir qu'il me manque afin d'initier nos élèves à Picaxe... une petite présentation est de rigueur sur pas mal de forums, c'est fait. Je n'ai pas trouvé la rubrique consacrée.
Donc, je me permets de faire un petit up à ce post qui date déjà un peu.
Pour solliciter votre bienveillance et surtout savoir comment je peux adapter le petit bout de programme de PieM trouvé sur la page précédente afin de le faire piloter un moteur pas à pas sur les sorties B.0 à B.3 au lieu de B.4 à B.7. J'ai bien essayé de le comprendre, c'est très bien expliqué par PieM mais quelque m'échappe car je n'y parviens pas.
Celui ci fonctionne à merveille avec un moteur pap bipolaire, un pic 28x2/40x2 et L293D mais je souhaite en piloter un deuxieme. En fait j'ai récupéré une potence articulée sur 2 axes de camera de surveillance et je souhaite l'utiliser.
J'ai bien compris qu'il serait souhaitable d' utiliser 2 PICs, mais je veux tester avec 1 seul... je ne crois que ce que je vois ou expérimente. Et je passerai à 2 si nécessaire.
J'essaie aussi de l'adapter pour la variation de la vitesse grâce une entrée analogique type resistance de joystick...
Voilà mon souci et je vous remercie d'éclairer ma lanterne.
Bien à vous
Filuso
 

PieM

Senior Member
Bonjour et bienvenue,

Il est utile de préciser si le deuxième moteur est bien un bipolaire, et s'il doit fonctionner sur le même port B que le premier. Car cela implique le masquage des sorties de l'un par rapport à l'autre. Ce qui n'est peut être pas simple pour les élèves....
 

filuso

New Member
Bonjour,
les 2 moteurs sont identiques, bipolaires. Et puis ce n'est pas pour les élèves avec lesquels je vais travailler sur les organigrammes de programmation, c'est pour ma culture personnelle. Peut être un jour avec les lycéens pour participer aux nombreux concours robotiques organisés par ci par là...
Je pensais essayer de brancher un moteur sur B.0 à B.3 puis l'autre sur B.4 à B.7.
Merci
 

PieM

Senior Member
Bonjour,
les 2 moteurs sont identiques, bipolaires. Et puis ce n'est pas pour les élèves avec lesquels je vais travailler sur les organigrammes de programmation, c'est pour ma culture personnelle. Peut être un jour avec les lycéens pour participer aux nombreux concours robotiques organisés par ci par là...
Je pensais essayer de brancher un moteur sur B.0 à B.3 puis l'autre sur B.4 à B.7.
Merci
Code:
[COLOR=Green]'===================================================
'Commande moteur PAP bipolaire 
'28X2  Driver L293D
'===================================================[/COLOR]
[COLOR=Navy]#picaxe [/COLOR][COLOR=Black]28X2[/COLOR]
[COLOR=Green]'===================================================[/COLOR]

[COLOR=Blue]symbol  [/COLOR][COLOR=Purple]MOT [/COLOR][COLOR=DarkCyan]=  [/COLOR][COLOR=Purple]outpinsB   [/COLOR][COLOR=Green]'MOT correspond au  portB du 28X2[/COLOR]
[COLOR=Blue]symbol  [/COLOR][COLOR=Purple]period [/COLOR][COLOR=DarkCyan]=  [/COLOR][COLOR=Purple]W1   [/COLOR][COLOR=Green]'temps entre pas en  ms[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Purple]nbpas  [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]W2     [/COLOR][COLOR=Green]'Nombre de pas [/COLOR]
[COLOR=Purple]dirsB[/COLOR][COLOR=DarkCyan]=  [/COLOR][COLOR=Navy]%11111111     [/COLOR][COLOR=Green]'affectation B.0  à B.7 en sortie vers le L293

'mémorisation de la sequence de commande pour le moteur en demi pas[/COLOR]
[COLOR=Blue]eeprom   [/COLOR][COLOR=Navy]0[/COLOR][COLOR=Black],[/COLOR][COLOR=Blue]([/COLOR][COLOR=Navy]%1010[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1000[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1001[/COLOR][COLOR=Black],   [/COLOR][COLOR=Navy]%0001[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%0101[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%0100[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%0110[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%0010[/COLOR][COLOR=Blue])[/COLOR]

[COLOR=Green]'prg principal ==============================[/COLOR]
[COLOR=Black]princ: [/COLOR]

[COLOR=Blue]do
   [/COLOR][COLOR=Green]'mise hors tension du moteur1 pendant 3 sec.
    [/COLOR][COLOR=Purple]Mot [/COLOR][COLOR=DarkCyan]=  [/COLOR][COLOR=Purple]Mot [/COLOR][COLOR=DarkCyan]&  [/COLOR][COLOR=Navy]$0F[/COLOR][COLOR=Navy]
   [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]3000
   [/COLOR][COLOR=Green]'mise hors tension du moteur2 pendant 3 sec.
    [/COLOR][COLOR=Purple]Mot [/COLOR][COLOR=DarkCyan]=  [/COLOR][COLOR=Purple]Mot [/COLOR][COLOR=DarkCyan]&  [/COLOR][COLOR=Navy]$F0[/COLOR][COLOR=Navy]
   [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]3000
   
   [/COLOR][COLOR=Green]'actionne 100 demi-pas dans un sens avec une vitesse donnée
    [/COLOR][COLOR=Purple]period [/COLOR][COLOR=DarkCyan]=  [/COLOR][COLOR=Navy]5 [/COLOR][COLOR=Black]: [/COLOR][COLOR=Purple]nbpas  [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy]100
    [/COLOR][COLOR=Blue]for [/COLOR][COLOR=Purple]w10  [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy]1 [/COLOR][COLOR=Blue]to  [/COLOR][COLOR=Purple]nbpas
   [/COLOR][COLOR=Blue]inc [/COLOR][COLOR=Purple]b10 [/COLOR][COLOR=Green]'(inc b12)
   [/COLOR][COLOR=Blue]gosub [/COLOR][COLOR=Black]PAS_mot1 [/COLOR][COLOR=Green]'(ou mot2)
   [/COLOR][COLOR=Blue]next
   [/COLOR][COLOR=Green]'.......
   
   [/COLOR]
[COLOR=Blue]loop[/COLOR]


[COLOR=Black]PAS_mot1: [/COLOR][COLOR=Green]' Commande  pas / demi pas moteur b4- b7******************

    [/COLOR][COLOR=Purple]b10 [/COLOR][COLOR=DarkCyan]=  [/COLOR][COLOR=Purple]b10 [/COLOR][COLOR=DarkCyan]&  [/COLOR][COLOR=Navy]%00000111 [/COLOR][COLOR=Green]'la valeur de b0 est  limitée à 3 bits, soit 0 à 7 
   [/COLOR][COLOR=Blue]read  [/COLOR][COLOR=Purple]b10[/COLOR][COLOR=Black],  [/COLOR][COLOR=Purple]b11     [/COLOR][COLOR=Green]' va lire la séquence  0 à 7 dans l'eeprom.
   [/COLOR][COLOR=Purple]b11  [/COLOR][COLOR=DarkCyan]=  [/COLOR][COLOR=Purple]b11[/COLOR][COLOR=DarkCyan]*[/COLOR][COLOR=Navy]16       [/COLOR][COLOR=Green]'decale de de 4 bit pour être au niveau de b.4 à  b.7
   [/COLOR][COLOR=Purple]Mot [/COLOR][COLOR=DarkCyan]=  [/COLOR][COLOR=Purple]Mot [/COLOR][COLOR=DarkCyan]&  [/COLOR][COLOR=Navy]$0F [/COLOR][COLOR=Black]|  [/COLOR][COLOR=Purple]b11   [/COLOR][COLOR=Green]'envoi de cette  séquence au moteur en masquant  les b.0 à b.3 
   [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Purple]period      [/COLOR][COLOR=Green]'pause en ms[/COLOR]
[COLOR=Blue]return[/COLOR]

[COLOR=Black]PAS_mot2: [/COLOR][COLOR=Green]' Commande  pas / demi pas moteur b0 - b3 ******************

    [/COLOR][COLOR=Purple]b12 [/COLOR][COLOR=DarkCyan]=  [/COLOR][COLOR=Purple]b12 [/COLOR][COLOR=DarkCyan]&  [/COLOR][COLOR=Navy]%00000111 [/COLOR][COLOR=Green]'la valeur de b0 est  limitée à 3 bits, soit 0 à 7 
   [/COLOR][COLOR=Blue]read  [/COLOR][COLOR=Purple]b12[/COLOR][COLOR=Black],  [/COLOR][COLOR=Purple]b13     [/COLOR][COLOR=Green]' va lire la séquence  0 à 7 dans l'eeprom.
   
   [/COLOR][COLOR=Purple]Mot  [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]Mot  [/COLOR][COLOR=DarkCyan]& [/COLOR][COLOR=Navy]$F0  [/COLOR][COLOR=Black]| [/COLOR][COLOR=Purple]b13    [/COLOR][COLOR=Green]'envoi de cette séquence au moteur en masquant  les  b.4 à b.7 
   [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Purple]period      [/COLOR][COLOR=Green]'pause en ms[/COLOR]
[COLOR=Blue]return[/COLOR]
Voir PAS_mot1 et PAS_mot2. la différence est dans le masquage des sorties avec $F0 (%11110000) ou $0F (00001111).
et pour le moteur sur B4 - B7, le décalage de la séquence, de 4 bits vers la gauche. (Fait par /16)

Par contre le fonctionnement simultané des deux moteurs est loin d'être évident...
La vitesse maxi peut être augmentée par un programme ne recourant pas à la séquence en EEprom mais en utilisant l'instruction lookup, et en evitant l'utilisation de gosub qui est chronophage.
 

BESQUEUT

Senior Member
Par contre le fonctionnement simultané des deux moteurs est loin d'être évident...
.
La variable "period" est le PGCD des pauses de chaque moteur (et bien sur, n'incrémenter que le b10/b12 concerné)
Ça semble jouable si on se limite à des directions de base ; par exemple pour 8 directions
1) mot1 en marche, mot 2 à l'arrêt
2) mot1 et mot2 en marche à la même vitesse
3) mot1 à l'arrêt, mot 2 en marche
4) mot1 en arrière, et mot 2 en avant, même vitesse que mot 1
5) etc...
A noter que déjà dans ce cas, on a un problème car le robot va 1.414 fois plus vite quand il se déplace sur les diagonales...


Avec 16 directions, ça commence à devenir amusant :
1) mot1 en marche, mot 2 à l'arrêt
2) mot1 en marche, mot2 avec des pauses 2 fois plus longues que mot1
3) mot1 et mot2 à la même vitesse
4) etc...

Pour creuser plus, il faudrait savoir si cette approche est suffisante ou si il faut calculer un mouvement "toutes directions"
De même, il faut savoir si la vitesse doit être "exacte" ou si on peut se contenter de quelque chose d'approximatif.
 

filuso

New Member
Merci à vous, j'avais pourtant essayé cette modif mais en oubliant autre chose sans doute !
Maintenant il faut que je prenne le temps d'explorer tout ça.
Je vous tiens au courant
Bien à vous
 

filuso

New Member
Bon, en remaniant le programme à PieM, les 2 moteurs tournent. Cool !
Et en y réfléchissant bien, vous avez raison, difficile de gérer des vitesses différentes pour chaque moteur même "si on peut se contenter de quelque chose d'approximatif". Chaque vitesse est gérée par une "pause" qui va perturber celle de l'autre moteur ...
ou moi je ne sais pas faire à mon petit niveau.
Plus facile avec 2 picaxes, surtout s'il faut gérer le nombre de pas d'un des 2 moteurs.
J'arrive a faire varier la vitesse d'un seul moteur de 0 à 30ms en pas entier avec un potentiomètre. Il faut que j'arrive à basculer en demi pas pour les faibles vitesses.
C'est pour une potence de caméra de surveillance récupérée que je ne sais pas piloter par le RS485 mais je cherche aussi en parallèle...
J'apprends, en tout cas, merci.
 

PieM

Senior Member
Et en y réfléchissant bien, vous avez raison, difficile de gérer des vitesses différentes pour chaque moteur même "si on peut se contenter de quelque chose d'approximatif". Chaque vitesse est gérée par une "pause" qui va perturber celle de l'autre moteur ...
ou moi je ne sais pas faire à mon petit niveau.
Plus facile avec 2 picaxes, surtout s'il faut gérer le nombre de pas d'un des 2 moteurs.
J'arrive a faire varier la vitesse d'un seul moteur de 0 à 30ms en pas entier avec un potentiomètre. Il faut que j'arrive à basculer en demi pas pour les faibles vitesses.
C'est pour une potence de caméra de surveillance récupérée que je ne sais pas piloter par le RS485 mais je cherche aussi en parallèle...
J'apprends, en tout cas, merci.
La solution d'un picaxe par moteur est de loin préférable, car elle permet de gérer facilement vitesse et déplacement . J'avais mis dans le forum un prog qui permettait également les phases d'accélération/décélération tout en respectant le nombre de pas.
Par exemple vous donnez la consigne de déplacement et le picaxe va définir les rampes de vitesse... (principe adopté sur les robots)

Vous devriez essayer de rester en demi pas même pour les vitesses grandes. La marche est plus souple et le couple plus important.
 

BESQUEUT

Senior Member
Je ne comprends pas le rapport entre le protocole Pelco et les moteurs pas à pas ...
une tourelle ptz n'est pas équipée de moteurs pas à pas.
Voir post #31, si c'est une tourelle de surveillance et du RS485, c'est probablement du PELCO...
 

PieM

Senior Member
Voir post #31, si c'est une tourelle de surveillance et du RS485, c'est probablement du PELCO...
Oui, je sais, encore que le probablement n'est pas sûr; il y a 7 ou 8 protocoles avec du 485! Et le rapport avec des moteurs pas à pas ?
 

BESQUEUT

Senior Member
Oui, je sais, encore que le probablement n'est pas sûr; il y a 7 ou 8 protocoles avec du 485! Et le rapport avec des moteurs pas à pas ?
Ben c'est filuso qui dit qu'il ne sait pas piloter sa tourelle en RS485, mais qu'il cherche en // sur les moteurs PAP.
 

filuso

New Member
@PieM
la potence de la camera de surveillance est équipée de 2 moteurs pap.
J'ai récupéré 2 caméras PTZ dont une que j'ai démontée pour me faire la main sur les moteurs pap et les PIC. Je mettrais une web cam dessu ou un laser pour amuser mon fils !
L'autre je compte bien la réutiliser avec sa caméra (zoom 35x !) et pourqoui pas pilotée par pc et pas par une console dédiée (que je n'ai pas, enfin si, une qui ne fonctionne pas sur laquelle j'ai récupéré le joystick) . Les cameras de surveillance sont souvent pilotées par du rs485 et le protocole PELCO D entre autres, je cherche donc un convertisseur rs232/485... je pourrai normalement accéder à toutes les fonctions de la camera dont le pilotage du zoom en plus de l'orientation de celle ci. Et un convertisseur analogique/numérique pour adapter le signal video à mon pc.
 
Top