Le guide

Un shield de pilotage pour 4 moteurs à courant continu ou 2 moteurs pas à pas, qui permet une alimentation sur 12V et qui n'utilise que 4 sorties Pwm (sur 6) et 2 entrées analogiques (sur 6) de l'Arduino

Le guide

Message non lude fred » Lun 2 Mai 2011 16:27

Documentation bibliothèque snootor par A.S. (le codeur ;) )

Description
Cette bibliothèque est une représentation objet du ou des moteurs, pas à pas ou à courant continu (Stepper/DC) attachés à l'arduino avec son RotoShield.

Elle implémente une gestion multitache basique, en gérant les délais issus de la communication i²c.

Organisation

snootor.h
fichier d'en-tête à inclure dans le sketch


snootor_common.h
snootor.cpp

Définition de l'objet global Snootor : SC (comme SnootorController) c'est dans snootor_common.h que l'on active le mode de débogage


snootor_defines.h
Constantes communes


snootor_motor.cpp
snootor_motor.h

Interface abstraite exposant les méthodes communes de tous les moteurs


snootor_dc.cpp
snootor_dc.h

Code spécifique moteur courant continu


snootor_step.cpp
snootor_step.h

Code spécifique moteur pas à pas


Utilisation
Préalable
Pour utiliser la bibliothèque snootor, il faut commencer par inclure la bibliothèque i²c fourni avec arduino, e.g :

#include "Wire.h"
#include "snootor.h"


Moteur pas-à-pas
Configuration
  • lancer l'exemple frequency_test et ouvrir le moniteur série.
  • ce sketch va tester différentes fréquences (délai) de pas élémentaire. Différents modes de fonctionnement sont disponibles :
    • MOTOR_MODE_HALFSTEP - demi-pas
    • MOTOR_MODE_FULLSTEP - pas complet
    surveiller le moniteur série et prendre la valeur qui fait tourner le moteur de manière correspondante aux besoins

Utilisation


// dans la partie globale
SnootorStep M

// dans la fonction setup()
M.init(<FREQ>,<NB PAS>,<NUMERO MOTEUR>, <MOTOR_MODE>);

// dans la fonction loop()
M.forward(nbpas);



  • FREQ :
    • la fréquence obtenue avec le sketch frequency_test
  • NB PAS :
    • nombre de pas du moteur
  • NUMERO MOTEUR
    • numéro du moteur (1 ou 2 dans le cas du stepper)
  • MOTOR_MODE :
    • MOTOR_MODE_HALFSTEP
    • MOTOR_MODE_FULLSTEP


Moteur à courant continu
[en cours]
Avatar de l’utilisateur
fred
 
Messages: 214
Inscription: Lun 20 Déc 2010 15:32
Localisation: Toulouse

Re: Le guide

Message non lude semtou » Ven 1 Juil 2011 15:59

Salut
Une fois que l'on a fait le test de la fréquence on obtient ceci :
Code: Tout sélectionner
start loop...
Round 0
 - millis 26
Round 1
 - millis 2479
Round 2
 - millis 4931
Round 3
 - millis 7382
Round 4
 - millis 9829
Round 5
 - millis 12492
Round 6
 - millis 15152

et je sais pas quoi en faire....
:roll: merci
Avatar de l’utilisateur
semtou
 
Messages: 35
Inscription: Jeu 23 Déc 2010 08:31
Localisation: Toulouse

Re: Le guide

Message non lude ikujam » Ven 1 Juil 2011 16:45

Bonjour,

voici la dernière version du sketch qui vous donnera directement la valeur à mettre lors de l'initialisation du moteur.

Ce sketch montre également comment modifier dynamiquement cette vitesse.

J'espère que c'est un peu plus explicite et répond à votre question ~


Code: Tout sélectionner
// Snootlab Max 7313 Motor shield library
// Based on Adafruit Motor shield library
// https://github.com/adafruit/Adafruit-Motor-Shield-library
// copyleft Snootlab, 2011
// this code is public domain, enjoy!

/*

 This sketch tests a configurable number of delay/frequency values applied to the stepper motor.
 Output on the serial console.

*/


#include <Wire.h>
#include <snootor.h>

#define FREQ_MIN 100 // minimal delay to test
#define FREQ_STEP 50 // delta for each step
#define FREQ_COUNT 20 // number of loops to test

// e.g. will test delays

SnootorStep M;

void setup(){
  Serial.begin(115200);
  Wire.begin();
  // parameters for init : delay in microseconds/steps per round/motor number (1 or 2)/ mode
  M.init(100,48,1, MOTOR_MODE_HALFSTEP);

//  M.init(100,48,2, MOTOR_MODE_FULLSTEP);
//  M.init(100,48,2, MOTOR_MODE_SIXWIRE);

}

void loop(){
  Serial.println("start loop...");
  for (long d=0;d<FREQ_COUNT;d++){
    Serial.print("Round ");
    Serial.println(d,DEC);
    Serial.print(" - frequence ");
    Serial.print(FREQ_MIN+d*FREQ_STEP,DEC);
    Serial.print(" - millis ");
    Serial.println(millis(),DEC);
    M.forward(576);
    while(!M.stopped()){
      SC.delay(200);
      SC.dump();
    }
    delay(2000);
    M.setDelay(FREQ_MIN+d*FREQ_STEP);
  }
}
Avatar de l’utilisateur
ikujam
 
Messages: 9
Inscription: Mer 9 Fév 2011 11:30
Localisation: toulouse

Re: Le guide

Message non lude Lionel » Ven 1 Juil 2011 16:51

Merci CodeMaster :)
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Le guide

Message non lude semtou » Mar 19 Juil 2011 10:37

Salut
j'ai remarqué 3 commandes dont on a du mal à comprendre le rôle :

Code: Tout sélectionner
      SC.delay(200);
      SC.dump();
      M2.setDelay();


Ya t'il une différence entre un SC.delay(200) et un delay(200) et un setDelay ?

Le dump c'est quoi ?

Après plusieurs essais avec un moteur Bipolaire je n'ai pas réussi à changer la vitesse de rotation malgré la modification de la fréquence... ;)
Code: Tout sélectionner
  M2.init(100,48,2, MOTOR_MODE_HALFSTEP);


Merci pour vos réponses.
Avatar de l’utilisateur
semtou
 
Messages: 35
Inscription: Jeu 23 Déc 2010 08:31
Localisation: Toulouse

Re: Le guide

Message non lude ikujam » Mar 19 Juil 2011 12:18

Bonjour,

une réponse rapide en attendant de trouver un peu plus de temps pour faire les choses proprement ;)

Code: Tout sélectionner
SC.delay(n)


C'est un wrapper autour de la fonction delay(n) standard. il s'agit d'un (pseudo-) scheduler qui gère les durées des messages I²C afin de redonner la main au programme tout en continuant à gérer les moteurs. Ceci sert surtout (voire uniquement) pour les moteurs pas-à-pas.

Code: Tout sélectionner
SC.dump()


fonction de débogage, il faut activer un flag dans un des fichiers en-tête de la bibliothèque - de mémoire MOTOR_DEBUG dans snootor_defines.h ou snootor_common.h
Elle affiche l'ensemble des moteurs gérés ainsi que leur état sur la console série.

Code: Tout sélectionner
Stepper.setDelay()


vitesse du moteur pas-à-pas en µs. Plus exactement le délai entre chaque message I²C transmis au moteur entre chaque "pas" - attention, la valeur devrait être différente selon le mode FULL_STEP ou HALF_STEP

Dans une version à venir prochainement on fera le calcul pour l'exprimer en RPM ;)

----

Pour changer la vitesse du moteur, c'est justement l'objectif du sketch "frequency_test" - normalement le moteur doit, dans chaque boucle, démarrer avec une certaine vitesse et ralentir au fur et à mesure. C'est un peu expérimental encore, mais au moins ça tourne ~

Bon essayage et merci à vous pour les retours ~
Avatar de l’utilisateur
ikujam
 
Messages: 9
Inscription: Mer 9 Fév 2011 11:30
Localisation: toulouse

Re: Le guide

Message non lude Vincent » Ven 26 Oct 2012 21:38

Bonjour,

Existe t-il un moyen de connaître la vitesse d'un moteur classique à courant continu ?

Merci d'avance
Avatar de l’utilisateur
Vincent
 
Messages: 29
Inscription: Mar 15 Nov 2011 16:16

Re: Le guide

Message non lude Stéphane » Lun 29 Oct 2012 08:57

Bonjour,

cette information dépend du moteur, elle est donc accessible dans sa fiche technique. Vous pouvez essayer de la retrouver sur le net avec son identifiant modèle, si c'est un moteur de récupération.
Avatar de l’utilisateur
Stéphane
 
Messages: 179
Inscription: Lun 2 Mai 2011 09:40


Retourner vers Rotoshield

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron