Aller au contenu


jpbbricole

Inscrit(e) (le) 12 nov. 2020
Déconnecté Dernière activité mars 12 2021 09:05
-----

Messages que j'ai postés

Dans le sujet : Un simple compteur.

02 février 2021 - 02:06

Bonjour Nico

Nulle part dans le code il n'est précisé le nombre d'impulsion par tour.

En général, ce type d'encodeur a 11 pas par tour donc 11 impulsions/tour à l'axe du moteur, en quadrature, 44.
Après, il faut multiplier ce nombre d'impulsions par le rapport du réducteur pour avoir le nombre d'impulsions par tour de roiue.

 

Cordialement

jpbbricole


Dans le sujet : Géré la vitesse de mon moteur pas a pas

23 janvier 2021 - 08:30

Bonjour Vitctorien

 

Voilà la version avec boutons marche et arrêt:
 

/*
    Name:       Vitesse MPAP
    Auteur:     jpbbricole
*/
#define tempoDepart 2080;
int tempo = 0;                         // Moteur arrete
int tempoAccelerer = -500;
int tempoRalentir = 700;
int tempoAddition = 0;

#define driverDirPin 4
#define driverStepPin 5    
#define boutonAccelererPin 6    
#define boutonRalentirPin 7
#define boutonMarchePin 8
#define boutonArretPin 9

void setup()
{
	pinMode(driverDirPin, OUTPUT);
	pinMode(driverStepPin, OUTPUT);

	pinMode(boutonAccelererPin, INPUT_PULLUP);  // L'autre cote du bouton au GND
	pinMode(boutonRalentirPin, INPUT_PULLUP);   //         "        "        "
	pinMode(boutonMarchePin, INPUT_PULLUP);
	pinMode(boutonArretPin, INPUT_PULLUP);

	digitalWrite(driverDirPin, LOW);            // On met la broche DIR a l'etat bas
}

void loop()
{
	for (int i = 0; i <= 200; i++)
	{
		tempoAddition = 0;
		if (digitalRead(boutonAccelererPin) == LOW)      // Si le bouton accelerer est presse
		{
			tempoAddition = tempoAccelerer;
		}
		else if (digitalRead(boutonRalentirPin) == LOW)  // Si le bouton freiner est presse
		{
			tempoAddition = tempoRalentir;
		}
		else if (digitalRead(boutonMarchePin) == LOW)    // Si le bouton marche est presse
		{
			tempo = tempoDepart;
		}
		else if (digitalRead(boutonArretPin) == LOW)     // Si le bouton arrêt est presse
		{
			tempo = 0;
		}

		if (tempo > 0)
		{
			digitalWrite(driverStepPin, LOW);
			delayMicroseconds(tempo + tempoAddition);
			digitalWrite(driverStepPin, HIGH);
			delayMicroseconds(tempo + tempoAddition);
		}
	}
}

Et pourquoi pas, avec marche avant et marche arrière?

/*
    Name:       Vitesse MPAP
    Auteur:     jpbbricole

	https://www.robot-maker.com/forum/topic/13336-gere-la-vitesse-de-mon-moteur-pas-a-pas/
*/
#define tempoDepart 2080;
int tempo = 0;                         // Moteur arrete
int tempoAccelerer = -500;
int tempoRalentir = 700;
int tempoAddition = 0;

#define driverDirPin 4
#define driverStepPin 5   
 
#define boutonAccelererPin 6    
#define boutonRalentirPin 7
#define boutonMarchePin 8
#define boutonArretPin 9
#define boutonAvantPin 10
#define boutonArrierePin 11

void setup()
{
	pinMode(driverDirPin, OUTPUT);
	pinMode(driverStepPin, OUTPUT);

	pinMode(boutonAccelererPin, INPUT_PULLUP);  // L'autre cote du bouton au GND
	pinMode(boutonRalentirPin, INPUT_PULLUP);
	pinMode(boutonMarchePin, INPUT_PULLUP);
	pinMode(boutonArretPin, INPUT_PULLUP);
	pinMode(boutonAvantPin, INPUT_PULLUP);
	pinMode(boutonArrierePin, INPUT_PULLUP);

	digitalWrite(driverDirPin, LOW);            // On met la broche DIR a l'etat bas
}

void loop()
{
	for (int i = 0; i <= 200; i++)
	{
		tempoAddition = 0;
		if (digitalRead(boutonAccelererPin) == LOW)      // Si le bouton accelerer est presse
		{
			tempoAddition = tempoAccelerer;
		}
		else if (digitalRead(boutonRalentirPin) == LOW)  // Si le bouton freiner est presse
		{
			tempoAddition = tempoRalentir;
		}
		else if (digitalRead(boutonMarchePin) == LOW)    // Si le bouton marche est presse
		{
			tempo = tempoDepart;
		}
		else if (digitalRead(boutonArretPin) == LOW)     // Si le bouton arrêt est presse
		{
			tempo = 0;
		}
		else if (digitalRead(boutonAvantPin) == LOW)     // Si le bouton avant est presse
		{
			digitalWrite(driverDirPin, LOW);             // On met la broche DIR a l'etat bas marche avant
		}
		else if (digitalRead(boutonArrierePin) == LOW)   // Si le bouton arrière est presse
		{
			digitalWrite(driverDirPin, HIGH);            // On met la broche DIR a l'etat haut marche arriere
		}

		if (tempo > 0)
		{
			digitalWrite(driverStepPin, LOW);
			delayMicroseconds(tempo + tempoAddition);
			digitalWrite(driverStepPin, HIGH);
			delayMicroseconds(tempo + tempoAddition);
		}
	}
} 

Je te laisse jouer au jeu des différences, il n'y en a pas beaucoup  :)

 

Cordialement

jpbbricole


Dans le sujet : Géré la vitesse de mon moteur pas a pas

22 janvier 2021 - 09:39

Bonsoir Victorien

 

Oui, certainement, je regarde ça demain.

 

Cordialement 

jpbbricole 


Dans le sujet : Géré la vitesse de mon moteur pas a pas

07 janvier 2021 - 11:40

Bonjour Victorien

 

Voilà une solution qui s'intègre à ton programme.

Il y a 2 boutons,  

boutonAccelerer sur pin 6

boutonRalentir sur pin 7

 

Ils sont câblés au GND, donc on lit LOW quand pressé.

Pour modifier la vitesse du MPAP ce sont les variables:

int tempoAccelerer= -500;

int tempoRalentir = 1000;
 
et le programme qui "s'inspire" de la copie d'écran du post #7.
 
/*
    Name:       Vitesse MPAP
    Auteur:     jpbbricole
*/
int tempo = 2080;
int tempoAccelerer = -500;
int tempoRalentir = 700;
int tempoAddition = 0;

#define driverDirPin 4
#define driverStepPin 5    
#define boutonAccelererPin 6    
#define boutonRalentirPin 7 

void setup()
{
	pinMode(driverDirPin, OUTPUT);
	pinMode(driverStepPin, OUTPUT);

	pinMode(boutonAccelererPin, INPUT_PULLUP);  // L'autre cote du bouton au GND
	pinMode(boutonRalentirPin, INPUT_PULLUP);   //         "        "        "

	digitalWrite(driverDirPin, LOW);     // On met la broche DIR a l'etat bas
}

void loop()
{
	for (int i = 0; i <= 200; i++)
	{
		tempoAddition = 0;
		if (digitalRead(boutonAccelererPin) == LOW)        // Si le bouton accelerer est presse
		{
			tempoAddition = tempoAccelerer;
		}
		else if (digitalRead(boutonRalentirPin) == LOW)  // Si le bouton freiner est presse
		{
			tempoAddition = tempoRalentir;
		}

		digitalWrite(driverStepPin, LOW);
		delayMicroseconds(tempo + tempoAddition);
		digitalWrite(driverStepPin, HIGH);
		delayMicroseconds(tempo + tempoAddition);
	}
}

Cordialement

jpbbricole

 

 


Dans le sujet : Géré la vitesse de mon moteur pas a pas

25 décembre 2020 - 09:23

Bonjour Victorien

 

C'est possible d'ajouter des boutons pour modifier la vitesse, mais pas sans modifier, un petit peu, ton programme.

Le mieux c'est que tu le mettes en ligne.

 

Par contre, je n'ai pas compris l'utilité des bouton à propos du jeu dans les pignons.

 

Cordialement

jpbbricole