Résolu Asservir moteur sur vis-mère, pour fileter

  • Auteur de la discussion fraiddy
  • Date de début
F

fraiddy

Nouveau
Bonjour a tous
Pour etre plus précis je recherche a asservir un moteur pas a pas (qui lui fera tourner la vis mére d'un tour) pour fileter .
pour cela je me suis beaucoup inspirer de cette discussion :
  • asservir un moteur en position pour piloter un diviseur crée par Fauxjetons et bien aidé par Jpbbricole donc j'ai repris le code
/*'************************************************************************************************
'* Name : USIN_RotencToStepMotor *
'* Author : jpbbricole *
'* *
'* Date : 01.04.2020 *
'* Version : projectVersion *
'* Notes : Un codeur incrémental commande un moteur pas à pas *
'* *
'* *
'**************************************************************************************************
*/
//------------------------------------- Codeur rotatif
#define rotencInpQuadApin 2 // 2 pin pour A et B du CR
#define rotencInpQuadBpin 3 // Ces 2 pin sont des entrees avec interrupt sur le UNO ou Nano

struct rotaryEncoderDef
{volatile word stepsCounter; int mpapRatio;};
rotaryEncoderDef rotEnc;

//------------------------------------- Moteur pas à pas (MPAP)
#define mpapEnaPin 8 // Pin pour A4988 ENA*
#define mpapStepPin 7 // Pin pour impulsions
#define mpapDirPin 4 // Pin pour Direction

struct stepmotorDef
{byte stepLevel; byte dirCwLevel; uint16_t pulseLowUsec; uint16_t pulseHighUsec; int freqHz;};
stepmotorDef mpap;

void setup()
{
Serial.begin(115200);
delay(500);
//--------------------------------- Codeur rotatif
rotEnc.stepsCounter = 0; // Compteur de pas du codeur
rotEnc.mpapRatio = 3; // Rapport entre les pas du codeur et les pas du MPAP
// Nema17 = 200 pas, codeur = 600 pas
//--------------------------------- MPAP
mpap.stepLevel = 1; // Niveau logique pour commander un pas (Step A4988)
mpap.dirCwLevel = 1; // Niveau logique pour le sens de rotation (DIR A4988)
mpap.freqHz = 80; // Frequence des pas
mpap.pulseHighUsec = 5; // Durée du niveau HAUT l'impulsion
mpap.pulseLowUsec = 10000/mpap.freqHz - mpap.pulseHighUsec; // Calcul du niveau BAS l'impulsion
//--------------------------------- Initialisation des ports
pinMode(mpapEnaPin, OUTPUT);
pinMode(mpapStepPin, OUTPUT);
pinMode(mpapDirPin, OUTPUT);
digitalWrite(mpapEnaPin, LOW);
digitalWrite(mpapStepPin, !mpap.stepLevel);
digitalWrite(mpapDirPin, mpap.dirCwLevel);

//--------------------------------- Interruptions
pinMode(rotencInpQuadApin, INPUT_PULLUP); // Pin d'entrée A codeur
pinMode(rotencInpQuadBpin, INPUT_PULLUP); // Pin d'entrée B codeur
attachInterrupt(digitalPinToInterrupt(rotencInpQuadApin), quadraAchangeHandling, FALLING); // Interrupt traitement

Serial.println("MPAP Frequence\t" + String(mpap.freqHz));
Serial.println("MPAP Puls.H\t" + String(mpap.pulseHighUsec));
Serial.println("MPAP Puls.L\t" + String(mpap.pulseLowUsec));
Serial.println("MPAP/Rotenc\t" + String(rotEnc.mpapRatio));
}

void loop()
{
Serial.println(rotEnc.stepsCounter);
}

/*-----------------------------------------------------------------------------
'* Routine d'interruption réagit à chaque flanc descendant de l'entrée A
'* du codeur rotatif
'*-----------------------------------------------------------------------------
*/
void quadraAchangeHandling()
{
byte mpapDir;

if (digitalRead(rotencInpQuadApin) == digitalRead(rotencInpQuadBpin)) // Si A = B
{mpapDir = mpap.dirCwLevel; rotEnc.stepsCounter ++;} // Incrémenter + direction
else
{mpapDir = !mpap.dirCwLevel; rotEnc.stepsCounter --;}

if (rotEnc.stepsCounter % rotEnc.mpapRatio == 0) // Rapport de division rotenc MPAP (rotEnc.mpapRatio)
{
digitalWrite(mpapDirPin, mpapDir); // Direction moteur

digitalWrite(mpapStepPin, mpap.stepLevel); // Impulsion moteur
delayMicroseconds(mpap.pulseHighUsec); // Impulsion moteur durée
digitalWrite(mpapStepPin, !mpap.stepLevel); // Fin mpulsion moteur
delayMicroseconds(mpap.pulseLowUsec); // Pause fin periode
}
}
ET ça marche vidéo:




mais voila dans mon projet j'aurai aimer qu' avec le clavier pouvoir y mettre la pas désiré et qu'en plus il s'affiche sur l'écran.
pour cela j'ai un oler 128x128 monochrome qui marche avec la bibliotheque U8g2lib.h (il est en i2C)
et le clavier serie touche sensitive capacitive (j'ai trouvé que ce serait mieux pour éviter que des copeaux ne s'y mettent) microcontroleur ATtiny1616

wiki.jpg
10402050_Main-02.png



Si quelqu'un pouvait m'aider ce serait sympa


au plaisir de vous lire
 
Dernière édition par un modérateur:
J

jpbbricole

Compagnon
Bonjour fraiddy

En fait tu aimerai pouvoir modifier le rapport entre les pas de l'encodeur et les pas du MPAP, au moyen d'un clavier et d'afficher tout ça?

Si oui, comme je n'y connais pas grand chose en mécanique, donnes moi quelques rapports, comme ordres d'idée.

Cordialement
jpbbricole
 
P

PatG21

Nouveau
Bonjour,
Voici un autre montage qui semble bien étudier.
A suivre.
Cordialement...https://youtu.be/Vp7WyxNo7Zo
 
F

fraiddy

Nouveau
Bonjour a tous
je vous remercie de votre réactivité et a priori le projet de mr kachurovskiy que m'a communiquer pascalp semble me convenir
puisque a priori il peut faire plus que ce que je désirais (comme on dit:" qui peut le plus ,peut le moins" )

Pour répondre a jpbbricole oui tu as bien compris ce que je voulais (vis mére pas de 2 ;moteur pas a pas de 200 pas par tour en prise directe ou avec un rapport de 1/1 et encodeur de 400 fronts par tour sur la broche ,mais la avec un rapport de 3 ce qui me feras 1200 fronts par tour de broche)
mais ne perds pas de temps puisque je vais "copier" je pense la méthode de MR Kachurovskiy (juste essayer de mettre mon Oled monochrome 128x128 a la place de son lcd ).

en tout cas j'avais essayer de trouver cela avec moteur de recherche et je n'avais que trouvé le projet cité dans la demande (Fauxjetons)

mais je ne savais pas que ce genre de système s'appelait un ELS...
merci a tous
 

Sujets similaires

V
Réponses
3
Affichages
923
vibram
V
Moi33
Réponses
3
Affichages
47 955
speedjf37
S
G
Réponses
123
Affichages
19 013
gaston83
G
Mcar
Réponses
65
Affichages
11 571
Mcar
V
Réponses
62
Affichages
5 195
vibram
V
U
Réponses
85
Affichages
7 099
Hubert86
H
shodan47
Réponses
7
Affichages
9 669
shodan47
shodan47
01power
Réponses
3
Affichages
13 742
01power
01power
G
Réponses
65
Affichages
9 195
rokag3
R
J
Réponses
113
Affichages
23 357
sabeldom
S
V
Réponses
7
Affichages
1 954
vibram
V
M
Réponses
185
Affichages
24 592
wika58
wika58
V
Réponses
4
Affichages
2 909
wika58
wika58
Haut