PWM ?
Débuté par helios, mai 04 2011 09:21
29 réponses à ce sujet
#1
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.
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
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
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
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
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
#7
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
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
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.
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.
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
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).
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
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!)
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!)
#14
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 ?
(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 ?
#16
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.
@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
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...
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...
#19
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
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
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 ?
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