Nouveau Projet moteur PAP Très simple et pourtant compliqué !

Salut à tous !

Je suis nouveau sur le forum, et je me suis inscrit pour vous demander de l'aide.
En effet cela fait 5 jours que je cherche le Web, en français et en anglais... et je n'ai rien
trouvé pour m'aider :~

Je souhaite faire tourner un moteur PAP :

  • dans le sens horaire
  • à 2,5 tours / minute
  • à 20000 pas/tour minimum (microstepping ?)

Je ne cherche pas à faire d'économies, je cherche un moteur de qualité, un mouvement fluide
et une absence totale de vibrations...

Je viens d'acheter une carte Arduino Uno Rev3, mais je bloque sur le type de moteur et de driver
à utiliser. J'ai trouvé ce driver professionnel qui a l'air de faire du microstepping :

mais je me demande si l'arduino peut dialoguer avec ?

Je vous remercie pour votre aide !

B. Almak

Salut !

Alors pas de problème dans tout ce que je vois, sauf : 20000 pas/tour ! En commande direct pas possible car si on par sur un moteur 200 pas/tour, en microstep 1/16 ça fait 3200 pas. Et le microstep ce n'est pas un état "stable", si tu relâches le courant pas sûr que ton rotor reste en place ... Le mieux ici est plutôt de regarder côté mécanique et d'utiliser un bête réducteur (1:100, avec 200 pas par tour tu obtiens au final 20000 pas/tour en sorti de réducteur). En plus ça décuplera ton couple ou tu pourras prendre un moteur plus petit.

Salut !

Merci pour ta réponse rapide.
Que veux tu dire par : "en commande direct" ? Tu veux dire brancher le moteur directement sur le module Arduino Uno ?
D'après ce que j'ai pu comprendre:
Il me faut un moteur PAP
Un driver (qui va s'occuper de faire le microstepping)
Un controller (ou indexer) qui va envoyer les signaux au driver
Le driver que j'ai mis en lien est un matériel professionnel et d'après ce que j'ai lu, la perte de couple
n'est que de 30% entre le Full step et le microstepping.
Sachant que mon application est la suivante : Faire tourner un plateau en PVC ( 200 grammes max) en prise directe.
Je n'ai donc pas besoin d'un couple énorme à mon avis.

J'avais pensé au réducteur mécanique mais justement j'ai besoin d'un positionnement hyper précis ce qui n'est pas le cas avec
les engrenages... J'utilise un moteur de tourne-broche en 220V et c'est d'ailleurs pour cette raison que je souhaite passer au PAP :wink:

La fréquence des signaux est si j'ai bien compris :
pour 2,5 tr/min à 20000 pas/tour :
0,04166 tr/s x 20000 = 833 Hz

Le driver STR2 ci-dessus a besoin d'après la doc technique :

Optically isolated, 5 - 24V logic. Sinking (NPN) signals mus be used. Drive
steps on rising edge of STEP input.
Minimum “on” voltage: 4 VDC.
Maximum voltage: 30 VDC.
Input current: 5 mA typ at 4V, 15 mA typ at 30V.
Maximum pulse frequency: 150 kHz or 2 MHz (set by switch)

il accepte 2 types de signaux :
"Step & direction" et "Step CW & Step CCW"

Quel type de signaux envoie le module Arduino ? Je n'ai pas trouvé l'info sur le site !?

Merci pour votre aide

almak:
j’ai besoin d’un positionnement hyper précis ce qui n’est pas le cas avec les engrenages…

Si tu changes de sens il peut y avoir du jeu, mais en tournant toujours dans le même sens et à vitesse constante, des engrenages c’est quand même précis (Cf montures équatoriales de téléscopes).

Mais c’est clair que 360° / 20 000 = 0.018°, ça fait une précision difficile à atteindre mécaniquement !!

J'ai des systèmes à engrenages, avant que tu arrives à y trouver du jeu ... Un tourne broche merci aussi quoi xD

Vaste programme !
Un moteur PaP de base c'est en général 200 pas par tour soit 1,8° +- qq% d'erreur.
En demi pas, ce qui est la première étape du microstepping, le facteur qq va augmenter .
Le microstepping consiste à utiliser le moteur PaP comme un moteur synchrone avec une commande en courant qui s'approche de plus en plus de la sinusoide .
Mais ... il y a de nombreux facteurs mécaniques, électriques et magnétiques qui font que la précision du mode micropas se dégrade rapidement.
A 100 µpas par pas entier, l'erreur pourra facilement dépasser les 100% en plus ou en moins (0.018°+- 100%) en fonction de variables plus ou moins incontrôlables.
Plus on augmente la vitesse, plus l'erreur augmente.
Il est beaucoup plus facile de contrôler des jeux mécaniques. Les vieux tourneurs fraiseurs savent faire !
Les djeunzzz corrigent par logiciel.
Pour un rapport de réduction de 1/100 ou (1/50 en demi pas) on a le choix entre des réducteurs planétaires à deux étages et beaucoup d'€ et des réducteurs à vis tangentielle dont on peut réduire voire annuler le jeu au prix de pertes importantes par frottement.
Et en plus, jusqu'à maintenant, je n'ai vu nulle part de mentions de couple ou de vitesse.
Mébon, j'ai du mal à comprendre comment on peut passer du moteur de tournebroche à la µµmécanique sans étape intermédiaire .

Salut à tous et merci pour vos réponses.

J’ai commandé le driver, alim et moteur chez Applied motion aux USA… reçu en 4 jours !
Finalement j’ai avancé dans mon projet et j’ai branché l’ensemble mais ça ne fonctionne pas.

J’ai fabriquer une monture équatoriale allemande avec secteur en bois puis avec vis sans fin et roue Ed.BYERS,
donc je sais ce qu’on peut faire avec de la mécanique.

Mais je ne veux pas un engin de 50 Kg ! je veux juste faire de la macrophotographie d’objets de quelques grammes
seulement donc ça doit être une solution petite, légère, transportable, et facile d’utilisation. Pas de couple important !

Le moteur de tourne broche ne tourne pas si mal finalement et c’est bien moins compliqué :wink:

Bref, j’ai suivi pas mal de tutos et j’ai téléchargé la librairie Accelstepper et AFmotor aussi…

La carte Arduino fonctionne (avec l’auto test), seulement c’est bizarre parce que ma Led ON est toujours rouge
et la led L (qui clignote) est rouge aussi…? alors que sur internet il y a du vert et du orange ???

Depuis que j’ai chargé ce code (trouvé sur un site) la carte a les 2 leds (ON ET L) allumées en permanence “Rouge”.

#include <AccelStepper.h>


// Define a stepper and the pins it will use

AccelStepper stepper(1, 10, 9);


int pos = 3600;


void setup()

{  

  stepper.setMaxSpeed(3000);

  stepper.setAcceleration(1000);

}


void loop()

{

  if (stepper.distanceToGo() == 0)

  {

    delay(500);

    pos = -pos;

    stepper.moveTo(pos);

  }

  stepper.run();

}

Le transfert semble s’être bien passé…

Je précise que le moteur fonctionne bien en Auto-test (via son driver)

Qu’est ce que j’ai pu oublier ?

Merci pour votre aide :slight_smile: !

Bonsoir,
Tu dois connecter COM+ au +5v de ton Arduino et EN au Gnd.
Jacques

N.b. : beau materiel, je t'envie :wink:

Salut JM,

Merci!
je croyais que le +5V avec écrit POWER au dessus c'était pour alimenter l'Arduino (une entrée lorsque qu'il n'y
a pas d'usb ou de pile)
Et le EN suis-je obligé de le connecter au GRD ?

Que penses tu de mes leds rouges tout le temps , est-ce normal ? La led POWER ne devrait elle pas être verte
comme je l'ai vu sur des photos sur le web ?

J'ai ete voir le pdf sur le site du fabriquant.
Les entrees step dir et en sont des optocoupleurs. Il faut bien alimenter la led.
Le "en" est a logique negative. La pin doit etre a la masse (donc la led de l'opto correspondant allumee) pour activer ton driver.
Il n'y a aucun danger a faire ce que je te conseille.
Jacques

ok pour le schéma, j'ai vu aussi.
par contre je ne comprends pas de quoi tu parles, les leds dont je parle sont
sur l'arduino, pas sur le driver.
Que veux tu dire par : il faut bien alimenter la led ?

Désolé mais je veux bien comprendre afin de ne rien griller :wink:

merci

Bonjour,
ton driver STR2 est equipe de 2 connecteurs.

  • le connecteur puissance pour connecter l'alimentation et le moteur
  • le connecteur "signaux de commande" pour les "entrees".

Pour eviter les problemes en cas de fausse maneuvre, ces entrees sont protegees par des opto-coupleurs.
Par exemple tu connectes du 230V sur "Step" et bien tu en seras quitte pour remplacer un circuit a 1€.
Plus d'infos ici : Photocoupleur — Wikipédia

Donc pour activer un signal "Step" "Dir" ou "En" tu dois faire passer du courant dans la led qui se trouve dans l'opto qui se trouve dans le driver.
Il te faut alimenter les leds avec le signal 5V de ton Arduino. Pas de probleme il pourra supporter la tres faible consommation.
Maintenant tu connectes "Step" et "Dir" de ton Arduino aux bornes correspondantes de ton driver.

Quand le signal "Step" ou "Dir" a la sortie de ton Arduino sera High, la led de l'opto sera eteinte. Quand il sera Low, la led va s'allumer le transistor correspondant deviendra "conducteur" et l'info sera prise en compte par le driver.

Concernant le "En" : c'est, pour toi, la possibilite de bloquer le driver, donc le moteur, pour eviter une catastrophe.
Sur les machines CNC, tu trouves un boitier generalement jaune avec un gros champignon rouge. C'est un arret d'unrgence. Il est par exemple connecte a "EN".
En fonctionnement normal, le courant passe dans l'interrupteur d'arret d'urgence et la led situee dans l'opto est eclairee etc etc.
Si tu interromps le circuit par exemple en poussant sur le champignon rouge, tu vas ouvrir le circuit, la led va s'eteindre etc etc.
Meme chose en cas de defectuosite, cable coupe, arrache ou autre. Cela s'appelle de la logique negative.

Si tu ne veux pas d'arret d'urgence, tu places un fil entre l'entree "En" de ton connecteur et le "Gnd" de ton Arduino.

Notes bien que depuis le debut de ce message, je parle uniquement des leds que tu ne vois pas.
Les Leds qui sont sur ton Arduino, c'est une autre histoire, tu peux leur faire "dire" ce que tu veux.

Si tu veux visualiser ce qui se passe au niveau de ton driver, tu soudes en serie une led et une resistance de par exemple 1K.
Tu fais ce montage 3x. Tu connectes les cathodes de tes leds sur les bornes "Step" "Dir" et "En" de ton driver. Les 3 fils des resistances au "Com+".

Tu verras ainsi l'etat des leds situees a l'interieur du driver puisqu'elles seront cablees en parallele.

A bientot

Jacques

Les entrées Step, Dir et accessoirement EN sont en logique négative.
Donc elles sont activées lorsque les pins correspondants de l'Arduino sont au niveau bas.

Je ne connais pas la bibliothèque Accelstepper mais il semble que ce cas soit prévu et qu'il y ait une fonction ad hoc :
AccelStepper setPinsInverted

Pour les premiers essais, je laisserai en l'air l'entrée EN.

Il est préférable d'isoler les alimentations moteur et arduino.

En essai pas de connexion du gnd arduino au driver, connexion du 5v arduino à l'entrée COM du driver. L'arduino est alimenté par la prise USB.
Pour un fonctionnement autonome, alimenter l'arduino en 9-12volt par l'entrée Vin en évitant d'interconnecter les GND

Merci pour vos réponses !

Génial,
J'ai branché COM+ avec 5V
et ça a fonctionné... bon c'était très lent...
j'ai utilisé un autre exemple de la librairie accelstepper et j'ai augmenté la vitesse !
Je suis tombé quasiment sur ma vitesse, 1 tour en 20 secondes à 20000 pas / tour !
Pas de vibration, mouvement très fluide, par contre en 2 min le moteur était très chaud...
J'ai lu que c'était normal, mais ça m'inquiète un peu quand même...
Je crois avoir lu qu 'il fallait baisser la tension d'alimentation pour que ça chauffe un peu moins
(là je suis en 24V faudrait passer en 12V ?)

En tout cas je suis très content ! :slight_smile:

Reste plus qu'à créer mon programme avec éventuellement des commandes un peu plus compliquées. 8)

A+

Il faut configurer le courant sur ton driver (petits interrupteur) pour qu'il corresponde à ton moteur. A savoir qu'un moteur est régulé en courant car les effets inductifs s'oppose à celui ci à partir d'une certaine vitesse ce qui implique une plus grande tension (24V typiquement) pour arriver à faire passer le bon courant. Mais il faut bien configurer le driver sinon ça va fumer ...

almak:
Je crois avoir lu qu 'il fallait baisser la tension d'alimentation pour que ça chauffe un peu moins
(là je suis en 24V faudrait passer en 12V ?)

Ben non en 12v ce serait pire !
Le driver commande le courant quelle que soit la tension.
Faut bien étudier la documentation du driver.
Le courant est programmable.
On peut aussi programmer le courant de blocage quand le moteur ne tourne pas.
C'est ce courant qui fait chauffer le moteur quand il ne bouge pas.
Si à l'arrêt on a pas besoin d'un couple de blocage important, il y a tout intérêt à réduire le courant.

Salut JMe87 , B@tto et alienboats !

J'ai trouvé l'info sur ce site :

http://www.cerebralmeltdown.com/2011/07/25/wiring-a-stepdir-type-stepper-motor-driver-board-to-an-arduino/

VREF, if your driver board has the option, essentially allows you to control how much power goes into your stepper motor. Too much power, and your stepper motor will overheat. Too little power, and the thing might not have enough torque to get the job done.

Dans mes souvenirs, V fait référence à une tension en Volts... J'ai peut-être mal compris.

En tout cas, dans le manuel d'utilisateur du driver il y a bien des courbes qui indiquent liées à l'échauffement (% duty cycle) et effectivement plus la Tension est élevée, moins cela chauffe mais uniquement pour une plage de vitesse données.

J'avais bien réglé tous les curseurs en fonction de mon moteur et mis tous les curseurs pour avoir le moins de courant possible (en l'occurence 2,0 A moins 30%) pour éviter que cela chauffe.

Et bien en suivant vos conseils, j'ai fait comme si c'était un moteur moins puissant donc j'ai réglé avec les curseurs sur un courant de 1,2 A et au bout de 10 min c'était pas aussi chaud que les 2 min de mon premier essai.
J'ai continué jusqu'à régler pour le plus petit moteur, avec un courant de 0,42A... ça fait maintenant 30 min qu'il tourne et il est à températue ambiente, on ne sent même plus la chaleur... !

donc parfait !

Maintenant il va falloir que je crée mon programme et je crois que ça va être beaucoup plus difficile car j'ai jamais fait de programmation :smiley:

Finalement comme je ne pouvais pas r

Salut,

J'ai réfléchi à la suite du programme.

A chaque fois que je branche l'alim, le moteur fait de petits mouvements dans un sens et puis dans l'autre avant de lancer le programme de l'arduino.
Y'a t-il un moyen de lui faire démarrer le programme en douceur sans ces mouvements étranges ?

L'idéal serait que je puisse, une fois l'alimentation en route, commander le moteur via une télécommande IR.

J'aurai besoin de 6 boutons :

Bouton 1 : un appui = rotation de 30 sec
Bouton 2 : un appui = stop rotation
Bouton 3 : appui permanent = avance rapide CW
Bouton 4 : appui permanent = avance rapide CCW
Bouton 5 : appui permanent = avance lente CW
Bouton 6 : appui permanent = avance lente CCW

Je pense que c'est possible mais je ne vois pas comment m'y prendre au niveau de l'Arduino ?
Il faudrait commander la sortie +5V de l'arduino ? est-ce possible ?

Si vous avez un début de programme pour me guider je suis preneur, merci !