Go Down

Topic: moteur pas à pas bipolaire (Read 27860 times) previous topic - next topic

Vincent

#45
May 15, 2008, 08:19 pm Last Edit: May 15, 2008, 08:19 pm by Vincent Reason: 1
Houla   ;D
Oui, y'a moyen que ça le fasse, mais c'est un peu compliqué et pas très pratique. De toute façon il devrait y avoir maximum 1 ou 2 pas d'écart non ? comme il y 'a 2 pôles.

jfs

Qu'entends tu part 1-2 pas d'écarts ?
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

Vincent

Bin je trouve bizarre qu'il faille attendre 4 pas pour que le moteur se mette à tourner. Dans le pire des cas, si tu veux y faire tourner en continu, l'écart entre les pas est négligeable non ?

jfs

En continu c'est vrai que ça n'a pas d'importance, mais si tu veux faire un arrêt "précis" à 966 pas, les 6 derniers pas ne seront pas pris en compte.
Par exemple si tu montes ton moteur sur une tige filetée avec un pas de 4mm cela fait une erreur de 1.2 dixième.

Et lorsque le moteur repart l'erreur risque de se cumuler sur l'arrêt suivant.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

jfs

#49
May 15, 2008, 10:29 pm Last Edit: May 15, 2008, 10:30 pm by jfs Reason: 1
Je constate un truc à l'instant, lorsque je fais fonctionner le moteur avec 96 pas programmé (il fait 1/2 tour), il part à 12hoo (position cadran) et fini à 6hoo, 6hoo à 12hoo.
lorsque les pas sont programmés à 48 (1/4 de tour) le moteur part à ~12ho5 et fini à ~6h35....
A 24 pas on est de nouveau à 12hoo.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

jfs

#50
May 17, 2008, 08:09 pm Last Edit: May 18, 2008, 12:04 pm by jfs Reason: 1
J'ai imprimé les séquences pour voir ce que cela donne, il y a le N° du pas et le temps en millisecondes affiché à chaque pas :




En tout cas de ce coté cela semble correcte...
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

jfs

#51
May 18, 2008, 12:07 pm Last Edit: May 18, 2008, 12:09 pm by jfs Reason: 1
En faisant un test tout bête je m'aperçois que cela ne marche pas, normalement le moteur devrais avancer de 1 pas par seconde :

Code: [Select]
int pinA = 13;
int pinB = 9;
int pinC = 12;
int pinD = 10;

// ici il y a les séquences des différentes pin pour faire un tour
int etatPinA[8] = {1,0,0,0};
int etatPinB[8] = {0,0,1,0};
int etatPinC[8] = {0,1,0,0};
int etatPinD[8] = {0,0,0,1};

int nbPas = 96;
int i = 0;

int delaiEntrePas = 1000 ;  

void setup()
{
 pinMode(pinA, OUTPUT);
 pinMode(pinB, OUTPUT);
 pinMode(pinC, OUTPUT);
 pinMode(pinD, OUTPUT);
}

void loop()
{
 // ici on écrit sur la pin la séquence correspondante
 digitalWrite(pinA, etatPinA[0]);
 digitalWrite(pinB, etatPinB[0]);
 digitalWrite(pinC, etatPinC[0]);
 digitalWrite(pinD, etatPinD[0]);
 delay(delaiEntrePas);
 
  digitalWrite(pinA, etatPinA[1]);
 digitalWrite(pinB, etatPinB[1]);
 digitalWrite(pinC, etatPinC[1]);
 digitalWrite(pinD, etatPinD[1]);
 delay(delaiEntrePas);
 
 digitalWrite(pinA, etatPinA[2]);
 digitalWrite(pinB, etatPinB[2]);
 digitalWrite(pinC, etatPinC[2]);
 digitalWrite(pinD, etatPinD[2]);
 delay(delaiEntrePas);
 
 digitalWrite(pinA, etatPinA[3]);
 digitalWrite(pinB, etatPinB[3]);
 digitalWrite(pinC, etatPinC[3]);
 digitalWrite(pinD, etatPinD[3]);
 delay(delaiEntrePas);

 
}


Le moteur oscille entre deux pas et va en avant et en arrière un peu comme un pendule.

J'ai tenter de changer mes n° de pin, de changer l'ordre des séquences, mais rien à faire....  :-?
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

jfs

J'avais trouvé une séquence ou ça marche en 2 bobines alimentées :

Code: [Select]
int etatPinA[8] = {1,0,1,1};
int etatPinB[8] = {1,1,0,0};
int etatPinC[8] = {0,0,1,0};
int etatPinD[8] = {0,1,0,1};


Ca marche et je peux m'arrêter au pas près, et programmeer le nombre de pas que je veux...

Mais ce que je trouvais bizarre c'est que je me retrouvais avec 3 "1" dans la même ligne (pin A).

J'ai contrôlé ce que j'avais en sortie de mon motor-control-shield  en mettant directement des "HIGH" "LOW" sur la pin que je voulais localiser.... et surprise, Elle ne sont pas toujours alimentée lorsque je suis à "HIGH", certaines sont à +10v et d'autres restent à 0v.
Par contre lorsque je mets à "HIGH" à A et B , la polarité est inversée (-10v).

En cherchant un peu et en localisant bien les pin, j'ai put déterminer les séquences pour une bobine alimentée et la séquence pour 2 bobines alimentées :

1 bobine:

Code: [Select]
int etatPinA[8] = {1,0,1,0};
int etatPinB[8] = {0,0,1,0};
int etatPinC[8] = {0,1,0,0};
int etatPinD[8] = {0,1,0,1};



2 bobines :

Code: [Select]
int etatPinA[8] = {1,0,1,1};
int etatPinB[8] = {1,1,0,0};
int etatPinC[8] = {0,0,1,0};
int etatPinD[8] = {0,1,0,1};


Pour les deux configurations ça marche au pas près et pour le nombre que je veux (de 1 à ......).

Pour l'instant je n'arrive pas à mixer les deux pour faire du 1/2 pas..... mais j'y travaille  ;)
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

jfs

#53
May 21, 2008, 01:49 pm Last Edit: May 21, 2008, 07:14 pm by jfs Reason: 1
Voilà :

Code: [Select]
int etatPinA[8] = {1,0,   1,1,   1,0,   1,1};
int etatPinB[8] = {1,1,   0,0,   0,0,   1,1};
int etatPinC[8] = {0,0,   0,1,   1,1,   1,0};
int etatPinD[8] = {1,1,   1,0,   1,1,   1,0};


Arrêt au demi-pas près, ça tourne vite ou lentement et les vibrations sont moindres.

Mais si on fait par exemple 2 pas et que l'on repart sur 2 pas le moteur reste immobile reste immobile, car la séquence redémarre au pas 1 et nous remet au pas 2, il faut asservir le moteur sur 8 positions qui correspondent aux pas.

:)
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

jhoepffner

Bonjour,
Il y a quelque chose que je ne comprend pas dans votre montage. Contrairement aux L293 et L298, qui sont des H-Bridge et auxquels ils faut envoyer un train de comman de sur 4 entrées pour les amplifier, le L297 (comme le L6208), est un driver est a comme entrée (entre autres), une horloge, un inverseur de sens, le choix Full/Half etc.
Cela m'intéresse de savoir à quelles entrées vous envoyez les séquences dont vous parlez? Cela pourrait expliquer les aller-retour du moteur car en même temps vous envoyez un rythme d'horloge et d'autre part vous activez les signaux d'inversion etc.

Dans mon cas je n'arrive pas à envoyer un signal d'horloge compris par le moteur, c'est à dire qu'il ne bouge pas mais se bloque quand j'active le "enable". Peut-être pouvons-nous partager nos connaissances?

Pouvez-vous m'envoyer un schéma de vos branchement (ou me dire sur quels N° de pins vous envoyez vos 4 signaux)?

Merci par avance

jhoepffner

jfs

#55
May 29, 2008, 07:34 am Last Edit: May 29, 2008, 07:37 am by jfs Reason: 1
j'utilise un motor control shield  v1.1.a et normalement c'est ce schéma :

motor control

Ce module comporte un L293D.

Les pin 9, 10, 12, 13 de l'Arduino correspondent à DirA, DirB, PWMA, PWMB sur le schéma.


Dans le message #53, la séquence que j'utilise me fait du demi pas et fonctionne parfaitement pour ce module de contrôle.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

melka

Hello
Je viens de lire (très rapidement) les 4 pages et je me posait une question : le problême ne serait pas une histoire de temps d'execution?
Je m'explique : on veut passer les pins de l'etat 1010 à l'état 0110 (par exemple). N'ayant aucune compétences en matières de timing, temps de réponse des pins, etc..., ce que je vais dire est certainement inutile, mais n'y a t-il pas forcement un moment ou l'on va se retrouver avec les pins dans l'etat 0010?
J'avais un problème avec une matrice de leds en charliplexing, qui me demandait justement d'alterner mes pins entre 3 etats (INPUT, OUTPUT HIGH, OUTPUT LOW, pb un poil plus complexe) et j'observais qu'avec certaines combinaisons, une led "parasite" s'allumait moins fort, comme si elle recevait une PWM.
D'ou l'idée : entre 1010 et 0110, il ya forcement un passage par 0010 ou 1110, non? techniquement, le delai est très faible, mais n'est-il pas suffisant pour entrer en conflit avec le fonctionnement du moteur / matrice de led?

jfs

Maintenant,ça marche...

Le timing entre les "alimentations" des Pin est ce qui va te permettre de varier la vitesse du moteur.

Le problème que j'avais provenais de 2 source (3 si on prend en compte mes début en "C" ... merci Vincent  ;)) :

- le shield que j'ai et peut-être également le L293, travaillent avec deux polarités et un état "0" (+V, -V, 0V).

-Mes séquences n'était pas correctes tant que je n'avais pas cerné le premier problème.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

Go Up