Aller au contenu


Photo
- - - - -

PWM ?


29 réponses à ce sujet

#1 helios

helios

    Membre

  • Membres
  • 28 messages

Posté 04 mai 2011 - 09:21

Bonjour,

Je débute dans la robotique avec une carte arduino.
J'ai programmé un servomoteur avec arduino, mais j'ai entendu parler de PWM, et je n'ai jamais vu de PWM dans arduino.

J'ai regardé sur wikipedia, le PWM (Pulse Width Modulation), mais je n'ai pas vraiment compris, en fait, je voulais savoir ce qu'est le PWM de manière simple.


Merci de vos explications.


#2 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 04 mai 2011 - 09:50

Bonjour Hélios,
j'assume être l'un des membres de ce forum les plus pinailleurs au niveau des termes utilisés, je serais ravi de t'expliquer ce qu'est le PWM, mais il serait bon que tu te présentes afin de connaitre ton niveau en sciences et en mathématiques afin de pouvoir t'expliquer tout cela de manière claire.

Pour bien débuter sur robotix: http://www.robotix.fr/tutoriel-1-67-comment-bien-debuter-1-le-forum.html

#3 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 04 mai 2011 - 10:08

Si j'ai bien compris, il s'agit de piloter un moteur en utilisant un signal carré pour moduler sa vitesse.
Un signal carré est un signal avec des fronts montants et descendants et donc un seuil haut et un seuil bas.
Si les seuils hauts ont la même durée que les seuils bas, le moteur reçois des impulsions d'alimentation la moitié du temps. Il fonctionnera donc à 50% de sa Vitesse Max. Plus les seuils hauts sont longs plus il tournera vite plus il seront courts, moins il tournera vite.
Il est donc possible de moduler la vitesse d'un moteur PWM en faisant varier la fréquence d'un oscillateur.

J'espère ne pas avoir raconté de bêtise. Car pour moi aussi c'est nouveau.

Cdlt
Yves

#4 helios

helios

    Membre

  • Membres
  • 28 messages

Posté 05 mai 2011 - 01:41

Voilà, j'ai fait ma présentation dans la rubrique adéquate.
Qu'est-ce que le PWM, concrètement ?



#5 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 05 mai 2011 - 06:47

Bonjour



La réponse manquait sans doute de clarté mais ce n'était pas faux.

Sinon, il y a une définition dans le Dico

Elle est sans doute plus complète.



Cdlt

Yves

#6 helios

helios

    Membre

  • Membres
  • 28 messages

Posté 05 mai 2011 - 12:35

Oui, merci, mais est-ce qu'il y aurait un schéma pour illustrer cela ?

Est-ce que tu aurais un exemple de programme qui utilise le PWM, par exemple pour les servomoteurs ?

Merci beaucoup.

#7 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 05 mai 2011 - 03:14

En fait il te suffit de créer un signal carré



Voilà une proposition, mais il y en a d'autres...



https://files.me.com...artouche/yjvt4h



Sur le schéma, le moteur est alimenté 50% dt temps, donc il tourne à 50% de sa puissance max.

Pour modifier la vitesse, il faut changer les valeurs de la résistance et/ou du condensateur.

Le plus simple bien sûr étant de calculer une capa fixe et de faire varier la résistance (Potentiomètre)

La résistance du haut est un pont diviseur pour ne pas flamber oscillateur

Le moteur est alimenté que quand le transistor voit du courant (on pourrait s'en passer, mais si ta tension est élevée il est préférable d'utiliser un NPN pour servir d'interrupteur à ton moteur.

Bien sûr, ce montage ne montre qu'une rotation dans un sens. Si tu veux que ton moteur puisse tourner dans les deux sens, tu dois faire un pont en h avec un autre transistor.



Il est aussi possible de prendre d'autre type oscillateurs. (mais le 555 est très simple et pas cher)



Voilà comment faire en électronique. Ce que je ne sais pas c'est s’il y a une autre façon de faire quand c'est un µcontrôleur qui commande...



J’espère avoir été assez clair.



Cdlt

Yves





#8 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 05 mai 2011 - 05:06

Bonjour à tous les 2,

tout d'abord les explications de Astondb8 sont très justes,

contrairement à celle du dico qui me plait moyennement.



Le point sur lequel je pinaille à chaque fois que quelqu'un en parle, c'est que les servomoteurs ne sont pas pilotés par l'arduino en utilisant du PWM. (source extérieure et innocente)



ça utilise du PPM je crois, le PWM est utilisé pour contrôler des moteurs, des LEDs... en fait tout ce qui peut facilement être contrôlé en on/off.



Ce que je ne sais pas c'est s’il y a une autre façon de faire quand c'est un µcontrôleur qui commande...


Un gars sur le forum arduino avait conseillé à un autre de lisser le signal PWM en sortie de l'arduino pour attaquer le mosfet avec une tension analogique: Donc pas de fonctionnement bloqué/saturé mais en mode amplification (donc mosfet qui chauffe, mais du coup on contrôle le courant/ le couple, et pas la tension/la vitesse). Moi forcément j'avais conseillé le contraire juste avant :)

bref fin de la parenthèse.



je pense que tu as toutes les infos, je ne sais pas si ta question concernait le PWM ou le moyen de commander les servomoteurs, n'hésites pas à poser d'autres question. J'ai eu une discussion sur le PWM et les servomoteurs ici.

#9 webshinra

webshinra

    Membre passionné

  • Membres
  • PipPipPip
  • 510 messages

Posté 05 mai 2011 - 05:59

perdu, c'est de la SCMS, "Signal-code modulated signal"( de la PPM ça signifierais que c'est l’écart entre les impulsions et non leur durée qui compte, pour un servomoteur, c'est l'exact opposé ).

les trois étant des PTM ( pulse time modulation ).

mais au final, on s'en branle un peu quand même, puisque tant que la durée d'une période du générateur PWM est supérieur a l'impulsion la plus longue du système SCMS ( et que ton générateur ne change pas de fréquence au fur et a mesure, ce qui conseiller :-° ) c'est exactement la même chose ( on trouve une relation linéaire entre la largeur d'impulsion et la durée d'impulsion, forcement).

#10 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 05 mai 2011 - 06:23

Arf, honte sur moi!

Oui, mais c'est juste que les gens disent souvent "il faut mettre le servomoteur le un pin PWM de l'arduino" et c'est faux, tous les ports conviennent.

Je pense que la librairie "servo" utilise un signal PWM de fréquence > 20 ms, c'est en effet le plus simple.

En tout cas rendu à un certain nombre de servos monté sur l'arduino UNO/2009 ça utilise les timers des ports PWM (qui fonctionnent avec l'instruction analogWrite).



@hélios: Je viens de relire ton message, pour débuter avec l'arduino (en français) ce site est pas mal. En fouillant un peu, tu trouveras comment contrôler un servomoteur (même à partir de ton PC!)

#11 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 05 mai 2011 - 06:33

En meme temps, il voulait qu'on lui décrive le PWM, ce qu'a fait Aston ^^

#12 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 05 mai 2011 - 07:09

[quote"helios"]
Est-ce que tu aurais un exemple de programme qui utilise le PWM, par exemple pour les servomoteurs ?
[/quote]

Et puis tu nous connais Jbot, dès qu'on a l'occasion d'étaler notre "science"... :p

#13 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 05 mai 2011 - 07:26

Bande de frimeurs :p

#14 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 05 mai 2011 - 08:00

Comme vous le savez je fais pas mal de recherches sur les microcontroleurs.
(c'est du reste comme ça que je vous ai connu)
Et a propos du PWM avec un microcontrleur j'ai triuvé ça :

Citation :
servo.attach(broche)
servo.attach(broche, impuls_min, impuls_max)

Paramètres
servo : une variable de type Servo
broche : le numéro de la broche à laquelle la variable Servo est attachée.
impuls_min (optionel): la largeur de l'impulsion, en microsecondes, correspondant à l'angle minimum (0°) (valeur par défaut = 544)
impuls_max (optionel): la largeur de l'impulsion, en microsecondes, correspondant à l'angle maximum (180°) (valeur par défaut 2400)

Qu'en penssez vous ?



#15 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 05 mai 2011 - 08:09

Oui, c'est ce qu'on utilise dans un arduino pour controler un servomoteur, par contre comme l'ont dit les deux zigotos du dessus ( :p ), ce n'est pas vraiment un PWM, c'est un signal spécial pour controler les servomoteurs.

#16 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 05 mai 2011 - 09:08

En fait comme je l'ai dit c'est pas le fait que l'on dise PWM qui me gêne, mais après les gens achètent une MEGA croyant que la UNO ne peut contrôler que 6 servos (nmbre de ports PWM).

@astondb8: oui c'est pour déclarer les servomoteurs dans ton programme, on peut ou non mettre les limites des servo dans cette déclaration. Tu peux télécharger l'IDE d'aruino (libre et gratuit), et ainsi découvrir les exemples, même si tu n'as pas encore de carte.


#17 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 06 mai 2011 - 09:19

Bonjour,

Pour la programmation, je vais ouvrir un nouveau Post dans la rubrique "Programmation" cela sera plus logique.



Par contre, pour continuer en "Électronique et pour mieux expliquer comment cela fonctionne j'ai fait un petit montage ce matin.

Seule chose, à la place du 555 j'ai mis un générateur de fréquences.



On peut très bien voir la durée des moments ou le moteur sera alimenté. (ou pas)

Autre chose, je n'ai pas parlé de la diode montée en parallèle avec le moteur. Elle sert à absorber les pics de démarrage.

Toujours en correction de ce que j'ai dit hier, le transistor est indispensable. (j'en ai camé un ce matin) car les courants de démarrage étant tellement fort il est indispensable de bien le calculer afin qu'il puisse supporter un fort pic pendant une période donnée.



Voilà les images en question.



https://files.me.com...artouche/b1eiaz



https://files.me.com...artouche/l8tzg9



https://files.me.com...artouche/k3f7ge



Voilà qui à mon avis est plus parlant



Le petit pic que l'on voit sur les font montants est dû au câble que j'utilise entre le Générateur de fréquences et l’oscilloscope.

On peu lire la fréquence sur le petit afficheur (analyseur de fréquence intégré au 2236 de Tektro) c'est un ocillo pas tout jeune, mais il est vraiment super...



Cdlt

Yves



PS:

Je vais tout de même justifier mon salaire ce matin :D donc je créerais le post dans la rubrique "programmation" plus tard...

#18 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 06 mai 2011 - 08:20

Très belle explication Astondb8 !
J'aime beaucoup ta façon de dire les choses :p

#19 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 07 mai 2011 - 12:44

[quote"miky-mike"]Très belle explication Astondb8 !
J'aime beaucoup ta façon de dire les choses :p[/quote]

Merci, mais ce n'est que de l'échange...
Vous m'apprenez plein de choses alors je vous renvoie l'ascenseur.
C'est à ça que sert un forum non ?

Et puis je me sens bien avec vous.
J'ai découvert de nouvelles choses à apprendre
J'ai très envie moi aussi faire des petites bestioles.
Il va me falloir du temps et des réponses pour arriver à votre niveau...
Pour y arriver, il n'y a qu'un seul moyen "bosser chercher trouver"
Alors je fais en sorte de ne pas faire que prendre pour que cela soit équitable...
Tout ce que je sais, je le sais des autres...


A bientôt donc sur le forum.

Cdlt
Yves

#20 helios

helios

    Membre

  • Membres
  • 28 messages

Posté 07 mai 2011 - 05:38

[quote"Astondb8"]Si j'ai bien compris, il s'agit de piloter un moteur en utilisant un signal carré pour moduler sa vitesse.
Un signal carré est un signal avec des fronts montants et descendants et donc un seuil haut et un seuil bas.
Si les seuils hauts ont la même durée que les seuils bas, le moteur reçois des impulsions d'alimentation la moitié du temps. Il fonctionnera donc à 50% de sa Vitesse Max. Plus les seuils hauts sont longs plus il tournera vite plus il seront courts, moins il tournera vite.
Il est donc possible de moduler la vitesse d'un moteur PWM en faisant varier la fréquence d'un oscillateur.

J'espère ne pas avoir raconté de bêtise. Car pour moi aussi c'est nouveau.

Cdlt
Yves[/quote]

Pourquoi plus les seuils hauts sont longs, que le moteur est plus rapide ?
C'est pas le contraire ?



Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users