SOMMAIRE ►
La modulation de largeur d’impulsion (PWM) Arduino Uno et Nano fonctionne sur les sorties analogiques 3, 5, 6, 9, 10, 11 avec une fréquence de 488,28 Hz. Avec la fonction analogWrite, la fréquence PWM varie de 0 à 255 et correspond à un facteur de remplissage des impulsions de 0 à 100%. Parfois, lors de la création de projets, la fréquence PWM de la carte Arduino est trop basse, il faut donc l’augmenter. Voyons comment augmenter correctement la fréquence.
Ce dont vous aurez besoin
- Arduino Uno / Arduino Nano / Arduino Mega
- LEDs et résistance;
- breadboard
- fils de connexion
Matériel supplémentaire sur ce sujet:
Qu’est-ce que la modulation de largeur d’impulsion
MLI – modulation de largeur d’impulsion Arduino Uno (PWM – Pulse-Width Modulation) est la commande de l’alimentation de la charge en faisant varier la largeur d’impulsion à une fréquence et une amplitude constantes sur la sortie numérique du microcontrôleur. Le graphique suivant illustre la variation de la largeur d’impulsion lors de la modulation d’un signal analogique. La puissance du signal détermine le facteur de remplissage de l’impulsion.

On peut distinguer deux applications de la modulation de largeur d’impulsion:
1. le PWM est utilisé dans les alimentations, les régulateurs de puissance, etc. L’utilisation du PWM sur l’Arduino Nano facilite grandement le contrôle de la luminosité des sources lumineuses (LED, bandes LED) et de la vitesse des moteurs avec Arduino.
2. le PWM est utilisé pour produire un signal analogique. Le convertisseur numérique-analogique (CNA) d’Arduino est facile à mettre en œuvre car il nécessite un minimum d’éléments radio – un circuit RC composé d’une résistance et d’un condensateur suffit.
Mise en œuvre du signal PWM Arduino Uno / Nano

Dans l’exemple suivant, nous allons démontrer l’utilisation de la Pulse-Width Modulation pour contrôler la luminosité de la LED. Comme le montre le premier graphique, nous allons régler le rapport cyclique du signal sur la sortie numérique 9 avec différentes intensités – 0 %, 25 %, 50 %, 75 % et 100 %. Visuellement, cela se reflétera dans la luminosité de la LED connectée au port 9 du microcontrôleur Arduino à modulation de largeur d’impulsion.
Programme Arduino pour modulation PWM (MLI)
#define LED 9 void setup() { // initialise les broches pinMode(LED, OUTPUT); } void loop() { analogWrite(LED, 0); delay(500); analogWrite(LED, 64); delay(500); analogWrite(LED, 127); delay(500); analogWrite(LED, 191); delay(500); analogWrite(LED, 255); delay(500); }
Explication du code modulation PWM sortie Arduino (MLI):
- dans ce programme, la LED est allumée à des fréquences MLI différentes;
- microcontrôleur Arduino permet de faire du contrôle de sortie en digital (tout ou rien) ou en analogique (de 0 à 5v en 256 paliers).
La modification de la fréquence Arduino Mega, Uno

#define LED 9 void setup() { // initialise les broches pinMode(LED, OUTPUT); } void loop() { for(int i=0; i<=255; i++) { analogWrite(LED, i); delay(10); } for(int i=255; i>=0; i--) { analogWrite(LED, i); delay(10); } }
L’Arduino basé sur ATmega168/328 utilise trois timers pour le PWM:
Timer 0 – broches 5 et 6
Timer 1 – broches 9 et 10
Timer 2 – broches 3 et 11
Le timer 0 est utilisé pour le timing, c’est-à-dire les fonctions delay et millis. L’augmentation de la fréquence de la minuterie 0 interrompra les fonctions de maintien du temps. Pour augmenter les sorties 9 et 10 de l’Arduino, vous devez modifier la fréquence du Timer 1. La fréquence PWM maximale peut atteindre 62 500 Hz sur les cartes Arduino Uno et Nano. Pour cela, la commande correspondante du tableau ci-dessous doit être ajoutée à void setup().
| Résolution | Fréquence PWM | Commande de mode |
| 8 bit | 62 500 Hz | TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x09; |
| 7 812,5 Hz | TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x0a; |
|
| 976,56 Hz | TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x0b; |
|
| 244,14 Hz | TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x0c; |
|
| 61,04 Hz | TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x0d; |
Conclusion. Dans le graphique les lignes vertes représentent une période de temps régulière. Un appel de la fonction analogWrite(valeur) en Arduino IDE utilise une valeur comprise entre 0 et 255, tel que analogWrite(255) utilise 100% du cycle (toujours au niveau HAUT), analogWrite(191) utilise 75% du cycle, et analogWrite(127) utilise 50% du cycle de travail (la moitié du temps) par exemple. La valeur 0 correspond ainsi à 0% du cycle de travail.








Bonjour à tous,
Pour remplacer une radiocommande Microzone, je dois envoyer signal Pwm à 70Hz.
Avec le paramétrage : TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0d;des registres
j’obtiens bien 61Hz. Est-il possible de paramètrer à 70 Hz?
Cordialement.
Dans la figure « Mise en œuvre du signal PWM Arduino,
3ème ligne lire :
analogWrite (10, 127). pour 50%.
Merci