Aller au contenu


Jean-François

Inscrit(e) (le) 05 janv. 2008
Déconnecté Dernière activité déc. 07 2009 09:56
-----

Sujets que j'ai initiés

Programmer Arduino pour piloter un moteur pas à pas

16 mai 2008 - 08:06

Bonjour,

Depuis quelques jours j'essaye de piloter un moteur PaP d'imprimante avec la carte Arduino.

Le fil de discussions à ce sujet sur le forum Arduino .

J'arrive à le faire tourner en continu, mais si je veux le faire avancer d'un nombre de pas déterminés, en dessous de 16 pas ça ne marche pas.

C'est un moteur bipolaire 48 pas que je tente d'utiliser en demi-pas.

Je n'arrive pas à trouver plusieurs choses:

-Lorsque je programme le nombre de pas à 96, seul un demi-tour est effectué, il me semble que le moteur devrait faire un tour ?

-Lorsque je programme 100 pas, le moteur fait seulement 96 pas et non 96 + 4 (100) ?

-Lorsque je programme un nombre de pas inférieur à 16, rien ne se passe ou du moins pas grand chose ?


Voici le code sur la carte Arduino :

int pinA = 9;
int pinB = 13;
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,1,0,0,0,0,0,1};
int etatPinB[8] = {0,1,1,1,0,0,0,0};
int etatPinC[8] = {0,0,0,1,1,1,0,0};
int etatPinD[8] = {0,0,0,0,0,1,1,1};

int nbPas = 96;
int i = 0;

int delaiEntrePas = 1350;   
							 
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[i]);
  digitalWrite(pinB, etatPinB[i]);
  digitalWrite(pinC, etatPinC[i]);
  digitalWrite(pinD, etatPinD[i]);
  delayMicroseconds(delaiEntrePas);
   
  nbPas--;
   
  if(nbPas != 0 && i != 7) // si nbPas différent de 0 et i différent de 3, on passe au pas suivant
  {
	i++;
  }
  else if(nbPas != 0 && i == 7) // si nbPas différent de 0 et i égal à 3, on retourne au premier pas 
  {
	i = 0;
  }
  else // si nbPas égal à 0 fin
  {
	while(1)
	{
	  // fin
	}
  }
  
}