Arduino - Modulation de largeur d'impulsion

La modulation de largeur d'impulsion ou PWM est une technique courante utilisée pour faire varier la largeur des impulsions dans un train d'impulsions. PWM a de nombreuses applications telles que le contrôle des servos et des régulateurs de vitesse, limitant la puissance effective des moteurs et des LED.

Principe de base du PWM

La modulation de largeur d'impulsion est essentiellement une onde carrée avec un temps haut et bas variable. Un signal PWM de base est illustré dans la figure suivante.

Il existe différents termes associés à PWM -

  • On-Time - La durée du signal horaire est élevée.

  • Off-Time - La durée du signal horaire est faible.

  • Period - Il est représenté comme la somme des temps de marche et d'arrêt du signal PWM.

  • Duty Cycle - Il est représenté comme le pourcentage du signal de temps qui reste allumé pendant la période du signal PWM.

Période

Comme le montre la figure, T on désigne le temps de marche et T off désigne le temps de désactivation du signal. La période est la somme des temps d'activation et de désactivation et est calculée comme indiqué dans l'équation suivante -

$$ T_ {total} = T_ {on} + T_ {off} $$

Cycle de service

Le cycle de service est calculé comme le temps de fonctionnement de la période. En utilisant la période calculée ci-dessus, le cycle de service est calculé comme suit:

$$ D = \ frac {T_ {on}} {T_ {on} + T_ {off}} = \ frac {T_ {on}} {T_ {total}} $$

Fonction analogWrite ()

le analogWrite()La fonction écrit une valeur analogique (onde PWM) sur une broche. Il peut être utilisé pour allumer une LED à une luminosité variable ou pour entraîner un moteur à différentes vitesses. Après un appel de la fonction analogWrite (), la broche générera une onde carrée constante du rapport cyclique spécifié jusqu'au prochain appel à analogWrite () ou à un appel à digitalRead () ou digitalWrite () sur la même broche. La fréquence du signal PWM sur la plupart des broches est d'environ 490 Hz. Sur les cartes Uno et similaires, les broches 5 et 6 ont une fréquence d'environ 980 Hz. Les broches 3 et 11 du Leonardo fonctionnent également à 980 Hz.

Sur la plupart des cartes Arduino (celles avec ATmega168 ou ATmega328), cette fonction fonctionne sur les broches 3, 5, 6, 9, 10 et 11. Sur l'Arduino Mega, elle fonctionne sur les broches 2 - 13 et 44 - 46. Arduino plus ancien cartes avec un support ATmega8 uniquement analogWrite() sur les broches 9, 10 et 11.

L'Arduino Due prend en charge analogWrite()sur les broches 2 à 13 et les broches DAC0 et DAC1. Contrairement aux broches PWM, DAC0 et DAC1 sont des convertisseurs numérique-analogique et agissent comme de véritables sorties analogiques.

Vous n'avez pas besoin d'appeler pinMode () pour définir la broche comme sortie avant d'appeler analogWrite ().

Syntaxe de la fonction analogWrite ()

analogWrite ( pin , value ) ;

value - le rapport cyclique: entre 0 (toujours désactivé) et 255 (toujours activé).

Example

int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value

void setup() {
   pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop() {
   val = analogRead(analogPin); // read the input pin
   analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023, 
      // analogWrite values from 0 to 255
}