Go Down

Topic: Simple question sur les sorties en PWM (Read 1 time) previous topic - next topic

Glius

Bonjour à tous,

Je me lance dans l'aventure Arduino et en lisant les tutoriels, je suis tombé sur un qui m'a mis un doute.
Le tutoriel est : arduino.cc/en/Tutorial/StepperBipolar
Le principe est simple : la personne branche sa carte sur un driver ULN2003... mais les sorties choisies de l'arduino sont les 8, 9, 10 et 11... Et seuls les trois dernières sont des sorties en PWM  :-? :-?

Ma question est : pourquoi utilise-t-il alors la 8 qui n'est pas une sortie spécialisée PWM ?
-> est ce une ancienne carte ? (donc avec des sorties différentes)
-> suffit-il d'avoir une sortie digitale (le driver ULN2003 s'occupe du reste) ? Si oui, à quoi sert d'avoir des sorties spécialisées PWM ?

Merci pour vos réponses...  ;)

Cordialement,
Christophe.

Luj06

Dans l'exemple il n'utilise pas de PWM donc n'importe quelle patte convient. En fait il reproduit un PWM en faisant varier lui-même le niveau des pattes (digitalWrite) et en faisant les pauses correspondant à la vitesse choisie.

Le ULN2003 sert juste à adapter les niveaux de courant (transistors) et reproduit sur les fils du moteur les entrées exactes qu'il reçoit de l'Arduino.

Glius

D'accord... Je vois : l'ULN2003 permet juste d'envoyer le bon courant ! Sans ce composant, le signal (le courant) envoyé par chaque patte serait inadapté et le moteur ne fonctionnerait pas (ou mal) ?!?!

Mais une chose m'intrigue alors : à chaque fois que je vois un moteur pas-à-pas branché sur la carte, il y a toujours un composant intermédiaire. :o
Pourquoi ne pas brancher directement le moteur dessus et utiliser la PWM incluse ?  :-? A moins que je n'ai pas compris la philosophie de la PWM de la carte... :(

Merci  :)

Jean-François

#3
Nov 29, 2009, 09:14 pm Last Edit: Nov 29, 2009, 09:56 pm by jfs Reason: 1
La demande en intensité des bobines de ton moteur ferait griller les sorties de ta plaque Arduino, c'est pourquoi il faut mettre un transistor pour "amplifier" le courant.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Glius

Merci.
C'est bien ce dont je me doutais (concernant la dernière question)  :)

Glius

Je viens de me relire...

En fait, je crois que j'ai confondu deux choses :

- La PWM, c'est pour les moteurs en continue : si on met uen PWM, plus noter signal est large et plus on va avoir une "moyenne" du signal élevé et donc une vitesse de rotation plus élevée.

- Dans le moteur pas-à-pas, on alterne les courants poru faire avancer le rotor par "étapes" : les pas.

Désolé pour cette confusion  :-/

Une dernière question pour la route : la méthode qui était présentée est-elle vraiment "propre" ?
Je me dis ça parceque : imaginons que je fasse avancer mon robot et que je décide de regarder un capteur (exemple : capteur de distance par ultrason). Pendant le temps où je regarde mon capteur, je ne fais pas varier le signal dans mes moteurs, donc il se bloque...
- Ai-je tord ?
- Comment gérer alors un moteur pas-à-pas correctement ?
- Avec un moteur à courant continue, je pourrais générer mon mouvement en balançant ma PWM puis regarder tranquillement mes autres capteurs ? Je n'aurai pas le problème cité avant, n'est ce pas ?

Merci pour vos réponses... et votre patience  :)  :-*

Luj06

Oui et non :)

En fait, tu ne serais pas bloqué, car il est possible d'utiliser un timer pour aller faire un petit travail en plein milieu de son travail principal, lorsqu'il est temps de monter ou descendre les niveaux du moteur pas-à-pas. Regarde du côté de la bibliothèque "MsTimer2" pour Arduino, qui te permet d'appeler une fonction en dehors du main toutes les 'n' millisecondes. Comme 'n' est réglable, tu peux varier ta vitesse.

Mais ce n'est pas la solution la plus répandue : on peut utiliser des contrôleurs de moteurs pas-à-pas qui gèrent les changements de tension aux bornes du moteur en recevant une simple PWM.

Glius

#7
Nov 30, 2009, 04:06 pm Last Edit: Nov 30, 2009, 04:19 pm by Glius Reason: 1
Intéressante comme bibliothèque.

Du coup... ta réponse me fait réagir. :o
Cet après-midi, j'ai regardé comment effectuer un montage avec un L297 et un L298 pour générer le mouvement d'un moteur pas-à-pas. Il s'agit du branchement classique qu'on retrouve sur les datasheet de ces deux composants.
Ce que j'en comprends, c'est que lorsqu'on met un signal en carré sur le "clock" du L297, on fait avancer le moteur d'un pas (ou un demi selon le réglage) pour chaque carré (ou front montant)...

Questions / Remarques :
1/ Du coup, pour faire varier la vitesse, on change la fréquence des fronts montants, n'est-ce pas ?
2/ Comment générer ce signal carré de la manière la plus propre ?
==>Avec la bibliothèque dont tu me parles, on pourrait en effet rappeler la fonction toutes les n millisecondes et faire donc un front montant : descendant... ce qui ne me semble pas très confortable
==> En générant un PWM "classique" (avec analogWrite(ledPin, val) (quelle valeur de "val" ???) et en changeant la fréquence pour aller plus ou moins vite ?
==> ou alors il y a une manière plus propre/classique ???[/i]

Merci beaucoup  :)

Luj06

1) oui
2) non, un PWM n'a pas de fréquence variable en cours de route, seule la largeur proportionnelle peut varier




Glius

Ok merci  :D

Du coup, la bibliothèque que tu as proposée est très intéressante car il suffira d'appeler une fonction qui fera un "front descendant / mini-pause/ front montant" toutes les N millisecondes. Ce N faisant varier la vitesse.

Merci beaucoup pour vos réponses qui m'ont bien éclairées... ;)

Luj06

Oui, à vérifier comment tu fais ta minipause (est-ce que la fonction delay est autorisée dans la fonction du timer...)

Glius

Pour ça, je pense faire des essais directement et adapter mon code aux possibilités / limites existantes.

Merci  ;)

Go Up