Pages: [1] 2 3 4   Go Down
Author Topic: moteur pas à pas bipolaire  (Read 7801 times)
0 Members and 1 Guest are viewing this topic.
Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dans une imprimante j'ai récupéré des moteur PAP, 48 steps, 24volts bipolaire (4 fils).
J'ai essayer d'utiliser la librairie Stepper.h avec l'exemple sur Arduino-Playground, mais ça ne fonctionnait pas correctement.
J'ai trouvé un site sur le quels sont décrites les séquences de fonctionnement d'un PAP :

http://www.positron-libre.com/electronique/moteurpasapas/rappel-cours-moteur-pas-pas.htm

En m'inspirant du mode "demi-pas", j'ai fait ce petit code :

Code:
int A_Pin = 13;    // H-bridge patte 1
int B_Pin = 9;     // H-bridge patte 2
int C_Pin = 12;    // H-bridge patte 9
int D_Pin = 10;    // H-bridge patte 15

 void Step_0();
 void Step_1();
 void Step_2();
 void Step_3();
 void Step_4();
 void Step_5();
 void Step_6();
 void Step_7();
 void Step_8();
 
 void Step_0(){

    digitalRead(A_Pin);  
    digitalRead(B_Pin);  
    digitalRead(C_Pin);  
    digitalRead(D_Pin);  

  }

void Step_1(){
    digitalWrite(A_Pin, HIGH);  
    digitalWrite(B_Pin, LOW);  
    digitalRead(C_Pin);  
    digitalRead(D_Pin);  
  }
void  Step_2(){
    digitalWrite(A_Pin, HIGH);  
    digitalWrite(B_Pin, LOW);  
    digitalWrite(C_Pin, HIGH);  
    digitalWrite(D_Pin, LOW);  
  }
void  Step_3(){
    digitalRead(A_Pin);  
    digitalRead(B_Pin);
    digitalWrite(C_Pin, HIGH);  
    digitalWrite(D_Pin, LOW);
    }
void  Step_4(){
    digitalWrite(A_Pin, LOW);  
    digitalWrite(B_Pin, HIGH);  
    digitalWrite(C_Pin, HIGH);  
    digitalWrite(D_Pin, LOW);
    }
void  Step_5(){
    digitalWrite(A_Pin, LOW);  
    digitalWrite(B_Pin, HIGH);  
    digitalRead(C_Pin);  
    digitalRead(D_Pin);  
    }
void  Step_6(){    
    digitalWrite(A_Pin, LOW);  
    digitalWrite(B_Pin, HIGH);  
    digitalWrite(C_Pin, LOW);  
    digitalWrite(D_Pin, HIGH);  
    }
void  Step_7(){  
    digitalRead(A_Pin);  
    digitalRead(B_Pin);  
    digitalWrite(C_Pin, LOW);  
    digitalWrite(D_Pin, HIGH);
    }
void  Step_8(){
    digitalWrite(A_Pin, HIGH);  
    digitalWrite(B_Pin, LOW);  
    digitalWrite(C_Pin, LOW);  
    digitalWrite(D_Pin, HIGH);
    }


void setup() {
  pinMode(A_Pin, OUTPUT);                                                                    
  pinMode(B_Pin, OUTPUT);
  pinMode(C_Pin, OUTPUT);                                                                    
  pinMode(D_Pin, OUTPUT);
  }

void loop() {
  
               Step_1();
              
  delay(2);
  
               Step_2();
              
  delay(2);
  
               Step_3();
              
  delay(2);
  
               Step_4();
              
  delay(2);
 
               Step_5();
              
  delay(2);
 
               Step_6();
            
  delay(2);
 
               Step_7();
              
  delay(2);
  
               Step_8();
              
  delay(2);
  
}



Ce que je trouve bizarre c'est que tout les 5 tours environ le moteur me fait un "accrochage".
De plus j'aimerais trouver le moyen de le faire tourner sans vibrations, pour cela j'avais pensé à un truc du style :

Code:
....
  
               Step_1();
               Step_0();
               Step_1();
               Step_1();
  delay(2);
  
               Step_2();
               Step_0();
               Step_2();
               Step_2();
  delay(2);


...

Le Step_0 me permet de mettre les pins à zéro afin de faire une sorte de "hachage" du signal, style PWM, mais c'est pas trop concluant.

Si quelqu'un à une piste à me fournir... :-?
« Last Edit: May 01, 2008, 05:27:01 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut
Qu'appel tu par vibration ? tu veux dire sans à coup ?
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, le fait d'utiliser le mode "demi pas" fait un à coup à chaque pas, suivant la vitesse de rotation cela devient une vibration.
Pour pallier à ce problème il faudrait passer en mode "micro pas", les polarité sont toujours alternée de la même manière, mais le courant augmente et diminue progressivement.
Cela devrait être possible à faire en PWM, mais je ne sais pas comment.

J'ai oublié de préciser que j'utilise un motor-shield v.1.1a


C'est ce moteur que j'utilise pour mes essais (4 fils):

http://www.eminebea.com/content/html/en/motor_list/pm_motor/pm42m048.shtml

La datasheet :

http://www.eminebea.com/content/html/en/motor_list/pm_motor/pdf/pm42m048.pdf
« Last Edit: May 01, 2008, 08:48:14 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait tu veux alimenter progressivement la bobine si je comprend bien, donc au lieu de mettre 0V ou 5V sur la sortie il faudrait un PWM qui augmente jusqu'à 5V, reste un petit moment à 5V puis redescend.

Code:
for(i=0;i<=255;i++)
{
  analogWrite(pin, i);
}

delay(dureePas);

for(i=255;i>=0;i--)
{
  analogWrite(pin, i);
}

Après tu peux intégrer ça dans une fonction "alimenteBobine" mais du coup tu n'utilise plus la lib. Après faut voir comment marche la motor-shield, si c'est juste des buffers ou si c'est un driver de moteur.
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

L'idéal en fait serai d'avoir une sinusoïde, donc si c'est pas assez "lisse" tu peux mettre circuit RC mais je pense que c'est pas la peine.
« Last Edit: May 01, 2008, 06:45:40 am by Vincent » Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
...
Après tu peux intégrer ça dans une fonction "alimenteBobine" mais du coup tu n'utilise plus la lib. Après faut voir comment marche la motor-shield, si c'est juste des buffers ou si c'est un driver de moteur.


En fait je n'utilise pas de lib (ça ne fonctionnait pas  :smiley ).

J'essaye le bout de code que tu me proposes  smiley-wink


EDIT:

Arfff j'avais pas vu que c'était "analogWrite" , le motor shield à les sorties moteur branchées sur les pins digitaux....

« Last Edit: May 01, 2008, 07:00:04 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je mettrais pas ma main à couper, mais il me semble que le motor-shield ne prend que du digital en entrée... :-/
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 
:o

en cherchant un peu plus d'info sur internet je m'aperçois qu'il y a  ça (ce que j'ai, en version v1.1a pour 2 moteurs) :

http://www.nkcelectronics.com/freeduino-arduino-motor-control-shield-kit.html


Et ça qui a l'air franchement mieux :

http://ladyada.net/make/mshield/index.html


Les noms prêtent bien à confusion, la première ne semble pas être faite pour des moteur PaP, bien que le mien tourne dessus ( :smiley mal d'accord, mais quand même...).

Je vais voir si je peux me bidouiller un truc comme le premier avec mon bread-board.
« Last Edit: May 01, 2008, 08:51:36 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai remplacé delay() par delayMicroseconds() que j'ai fixé à 1200, le moteur tourne sans avoir de "bug".
Pour démarrer je mets à 2000 pendant 10 boucles puis je passe à 1200.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Et il y a des vibrations ?
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Les vibrations sont toujours là, je travaille encore avec des impulsions.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait certain pin digitaux permettent de faire du PWM, dont le digital 10 et digital 9.

En partant du fait que le bobinage d'un pôle est alimenté avec du + d'un coté et du - de l'autre ( :o incroyable  non...??) le fait de changer le - en + serait similaire à une déconnection... donc en alternant ++ et +- on devrait pouvoir faire varier le magnétisme de la bobine.

Par contre, lorsque c'est la pin PWM qui est en + il faut la faire varier dans l'autre sens.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

De toute façon d'un côté tu met la bobine à la masse et de l'autre l'alim. Il suffit donc de faire varier la tension.
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait ce que je voulais dire c'est que comme je ne peux pas débrancher la bobine, le fait de mettre les deux sorties de cette même bobine sur le + ferait la même chose que de la débrancher.
« Last Edit: May 02, 2008, 04:41:06 pm by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai fait un test avec ça :

Code:
...
void  Step_4(){
  H=0;
 for(L=255;L>=0;L=L-freq)
{
    digitalWrite(A_Pin, LOW);  
    analogWrite(B_Pin, H);  
    digitalWrite(C_Pin, HIGH);  
    analogWrite(D_Pin, L);
  H=H+freq;
}  
    }
void  Step_5(){
  H=0;
 for(L=255;L>=0;L=L-freq)
{
    digitalWrite(A_Pin, LOW);  
    analogWrite(B_Pin, H);  
    digitalRead(C_Pin);  
    digitalRead(D_Pin);
  H=H+freq;
}
...

C'est censé incrémenter les "H" jusqu'à 255 et décrémenter les "L" jusqu'à 0, ainsi il me semble que les bobines travaillent simultanément.

Mais après plusieurs essais, il semble que les boucles d'incrément/décrément prennent trop de temps, j'agis la dessus avec la variable "freq".
Pour l'instant les résultat ne sont pas très concluant  :-/

Je ne pense pas que ce soit de cette façon que l'on fait une modulation PWM, car ça à l'air trop lent alors si quelqu'un sait comment utiliser les PWM sur cette carte(sur la page référence du site c'est très vague)  smiley-wink
« Last Edit: May 03, 2008, 03:46:35 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Pages: [1] 2 3 4   Go Up
Jump to: