Aller au contenu


Photo
- - - - -

Programme arduino moteur pas à pas et carte de contrôle micro pas

Arduino moteur pas à pas micropas Carte de contrôle machine

  • Veuillez vous connecter pour répondre
7 réponses à ce sujet

#1 Mmaatthhiieeuu

Mmaatthhiieeuu

    Nouveau membre

  • Membres
  • 2 messages

Posté 21 septembre 2014 - 01:52

Bonjour à tous!

Je suis nouveau sur le forum, je m'appel Mathieu et je suis en master 2 aux beaux arts de Montpellier.

Je travail en ce moment sur une pièce pour laquelle je dois créer un déplacement de haut en bas avec un systeme de bièle et un moteur pas à pas ! Un artist pour qui je travail et qui construit des machines m'a récement donné un carte de contrôle micropas du type CW-215

 

 

Le controle se fait donc avec du PWM sur ma arduino uno, qui correspond à la sortie CP(control pulse) de la carte. Seulement je n'arrive pas à faire ne serait-ce que vibrer mon moteur, il me semble que mes connexions sont bonnes : Enable, Direction et CP vers mes pines digitales arduno (pine PWM pour le CP), et le 5v sur le 5v arduino. Du coté moteur c'est un unipolaire 6 fils que j'utilise en bipolaire 4fils, j'ai repéré les bobines et fait le branchement A-A+ B-B+, puis l'alime 12v sur GND et VCC,...Je ne suis pas très expérimenté en programmation mais il me semble avoir compris la logique pour les carte micro pas sauf que........bin non apparement !^^

voici un petit bout de code si quelqu'un peut me donner un coup de main ce serait super !

Bien à vous !

Mat

void setup(){


pinMode(17,OUTPUT);  //M2  Dir
pinMode(18,OUTPUT);  //E2 pwm
pinMode(19,OUTPUT);  //E2 enable

delay(2000);
}

void loop(){


digitalWrite(19,HIGH);
delay(2000);
                                         //direction cw
digitalWrite(17,LOW);
  delay(400);

for (int i=0;i<2;i=i+1){

 
 
  digitalWrite(17,LOW);
 for (int i=0;i<400;i=i+1){
 digitalWrite(18,HIGH);  
 delayMicroseconds (310);
 digitalWrite(18,LOW);
 delayMicroseconds(310);
 }  
 
 digitalWrite(17,HIGH);delay(20);
 for (int i=0;i<400;i=i+1){
 digitalWrite(18,HIGH);  
 delayMicroseconds (310);
 digitalWrite(18,LOW);
 delayMicroseconds(310);
 }
delay(100);

 for (int i=0;i<2;i=i+1){
 digitalWrite(17,LOW);
 for (int i=0;i<150;i=i+1){
 digitalWrite(18,HIGH);  
 delayMicroseconds (310);
 digitalWrite(18,LOW);
 delayMicroseconds(310);
 }


}
//ENABLE
digitalWrite(19,LOW);
for (int i=0;i<2;i=i+1){
delay(30000);
}
}
}



      
 
 



#2 Piquillos64

Piquillos64

    Membre

  • Membres
  • 23 messages
  • Gender:Male
  • Location:Biarritz

Posté 27 novembre 2014 - 10:41

euh c'est normal tes multiples déclarations de i dans tes boucles for??



#3 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 28 novembre 2014 - 12:15

euh c'est normal tes multiples déclarations de i dans tes boucles for??

 

Les déclarations dans les boucles permettent d'utiliser une variable i qui est locale à chaque boucle, donc oui, c'est normal.

 

EDIT suite à la remarque de Léon : il faut faire attention à la portée des variables : une variable existe dans le bloc où elle est déclarée. Il faut donc utiliser un nom de variable différent pour la variable d'iteration d'une boucle imbriquée dans une autre (et ainsi de suite).


R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 968 messages
  • Gender:Male
  • Location:Anglet

Posté 28 novembre 2014 - 06:05

Bonjour à tous!

Je suis nouveau sur le forum, je m'appel Mathieu et je suis en master 2 aux beaux arts de Montpellier.

Je travail en ce moment sur une pièce pour laquelle je dois créer un déplacement de haut en bas avec un systeme de bièle et un moteur pas à pas ! Un artist pour qui je travail et qui construit des machines m'a récement donné un carte de contrôle micropas du type CW-215

 

 

Le controle se fait donc avec du PWM sur ma arduino uno, qui correspond à la sortie CP(control pulse) de la carte. Seulement je n'arrive pas à faire ne serait-ce que vibrer mon moteur, il me semble que mes connexions sont bonnes : Enable, Direction et CP vers mes pines digitales arduno (pine PWM pour le CP), et le 5v sur le 5v arduino. Du coté moteur c'est un unipolaire 6 fils que j'utilise en bipolaire 4fils, j'ai repéré les bobines et fait le branchement A-A+ B-B+, puis l'alime 12v sur GND et VCC,...Je ne suis pas très expérimenté en programmation mais il me semble avoir compris la logique pour les carte micro pas sauf que........bin non apparement !^^

voici un petit bout de code si quelqu'un peut me donner un coup de main ce serait super !

Bien à vous !

Mat

 

 

Alors le but premier est de décomposer ton système en sous système pour analyser où se trouve ton problème. 
Décomposition : 

  • Alimentation 
  • Câblage ( côté carte moteur/ Alim )
  • Carte Moteur 
  • Câblage ( côté carte moteur/ moteur )
  • Moteur 
  • Câblage ( côté carte moteur / carte de commande )
  • Carte de commande
  • Code

Il faut que tu vérifies tout ces points indépendamment puis sous forme de sous ensemble.
Je te recommande pour les test de le faire dans l'ordre que je viens de te proposer en y allant progressivement.

 

exemple :

tu teste ton alim 

puis tu test les cables qui te servent à relier l'alim à ta carte moteur 
Puis tu branches tes fils sur l'alim et teste que tu as toujours la bonne tension à l'autre bout des fils 
Puis tu branche l'autre bout sur ta carte moteur puis tu test l'ensemble 
Puis tu teste le fonctionnement de ta carte en simulant à la main les signaux d'entrée directement sur ta carte 

Puis tu branche le moteur à ta carte moteur et vérifie qu'il fonctionne bien
Tu test les câble qui normalement font le lien entre les signaux et la carte de commande 

a part tu teste ta carte de commande et simule les tests que tu as fais à la main 
Tu branche ta carte de commande (avec le code simulant ce que tu fais à la main ) à ta carte moteur et tu vérifie que tu as bien les même résultat que quand tu as testé à la main
Enfin à ce moment là tu éventuellement adapte ton code pour qu'il fonctionne avec ce que tu découvre avec l'ensemble des étapes précedents et teste ton code et normalement ça marche. 

 

Ne sauter aucune étape. 

ça paraît peut être long et fastidieux mais ça te prendra peut être moins de temps que cela m'a pris de l'écrire ... Et en suivant cette méthode tu es obliger de buter sur le problème précis ce qui te permettra de le résoudre :

Si tu as des soucis tu peux poster des photo avec tes questions, et mettre un lien vers la datasheet de ta carte moteur. 

 

Bonne journée

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#5 Piquillos64

Piquillos64

    Membre

  • Membres
  • 23 messages
  • Gender:Male
  • Location:Biarritz

Posté 28 novembre 2014 - 10:26

ok alors.

Je suppose que tu as essayé plusieurs positions des switches s1-s3?

Tes sorties peuvent bien délivrer les 15mA nécéssaires pour les entrées du CW-215?

Par contre tes pulses sont à 330us soit une horloge à 3225Hz.... essaie de descendre vers les 100Hz pour commencer en pas entier (s4-s5-s6 = 0).

Si ca tourne pas regarde manuellement si la sortie de ton moteur est dure ou si elle est aussi libre que quand il est débranché. Ca te donnera une idée si il se passe quelque-chose.



#6 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 30 novembre 2014 - 07:06

 

Les déclarations dans les boucles permettent d'utiliser une variable i qui est locale à chaque boucle, donc oui, c'est normal.

Non, regarde bien, ça n'est pas normal. Piquillos64 a parfaitement raison.

Il y a des boucles imbriquées qui utilisent toutes i comme compteur. Donc ça ne peut pas fonctionner!

OK pour les boucles "de même niveau", ça peut marcher, mais là, non.

 

Leon.


BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#7 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 30 novembre 2014 - 07:25

Non, regarde bien, ça n'est pas normal. Piquillos64 a parfaitement raison.

Il y a des boucles imbriquées qui utilisent toutes i comme compteur. Donc ça ne peut pas fonctionner!

OK pour les boucles "de même niveau", ça peut marcher, mais là, non.

 

Leon.

 

Effectivement, j'avais mal lu ! D'où l'importance d'indenter correctement son code ! (j'ai corrigé mon post)


R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#8 Piquillos64

Piquillos64

    Membre

  • Membres
  • 23 messages
  • Gender:Male
  • Location:Biarritz

Posté 30 novembre 2014 - 11:03

Après c'est du code Arduino... que je ne connais pas du tout.

Je ne comprends toujours pas l’intérêt d'avoir réinventé (très mal) le langage C.... mais bon.

Ceci dit, as-tu baissé ta fréquence aux alentours des 100Hz??







Aussi étiqueté avec au moins un de ces mots-clés : Arduino, moteur pas à pas, micropas, Carte de contrôle, machine

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users