PWM (Pulse Width Modulation)

La PWM en français la MLI (Modulation de Largeur d'Impulsion) permet de générer une tension pseudo variable (analogique) à partir d'une tension binaire de 0-5V (numérique).

Générer une tension analogique est indispensable pour faire fonctionner certains actionneur :

  • Servomoteur

  • Moteur courant continu

  • Modifier luminosité d'une LED

  • Changer la couleur d'une LED RGB

  • ...

DéfinitionPrincipe

Le principe consiste à mettre une sortie à l'état 1 pendant un certain temps puis de la basculer à l'état 0 pendant une autre durée.

Si l'alternance (la fréquence) est assez rapide, on peut considérer que la tension obtenue sur la sortie correspond à la durée des passages à l’état haut divisée par le temps.

PWM 50%

Dans cette exemple, l’état haut est présent 50% (5/10) du temps. On dit que le rapport cyclique est de 50%. On peut considérer que la sortie est à 2,5V (5*50/100).

PWM 20%

Ici, l'état haut est présent 20% (2/10) du temps. Rapport cyclique 20% et tension de sortie 1V (5*20/100).

DéfinitionLes Sorties PWM

Seules les sorties marquées avec le ~ (tilde) permettent de générer le PWM.

Sur l'arduino : 3,5,6,9,10 et 11.

La fréquence du signal n'est pas la même selon les sorties :

490Hz : 3,9,10 et 11

980Hz : 5 et 6

DéfinitionanalogWrite(Sortie, RapportCyclique)

La fonction qui permet de fixer le rapport cyclique est analogWrite.

Sortie : numéro de la broche PWM.

RapportCyclique : un nombre entre 0 et 255. 0->0% - 255->100%

DéfinitionVariation de la luminosité d'une LED

Allumer en boucle une LED de 0 à 100% et de 100% à 0.

Arduino - LED
1
const int LED = 5;
2
3
void setup()
4
{
5
  pinMode(LED, OUTPUT);
6
  pinMode(LED, OUTPUT);
7
}
8
9
void loop()
10
{
11
12
  for (int i = 0; i <= 255; i++)
13
  {
14
    analogWrite(LED, i);
15
    delay(50);
16
  }
17
  for (int i = 255; i >= 0; i--)
18
  {
19
    analogWrite(LED, i);
20
    delay(50);
21
  }
22
}