start:arduino:pwm
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
start:arduino:pwm [2022/12/20 14:35] – [Exemple d'utilisation] gerardadmin | start:arduino:pwm [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | =====Comment changer la fréquence PWM d' | + | ========Comment changer la fréquence PWM d' |
: Guide épique | : Guide épique | ||
+ | |||
+ | [[https:// | ||
Le microcontrôleur possède plusieurs temporisateurs qui peuvent exécuter différentes fonctions, telles que la génération d'un signal PWM . Pour que le temporisateur génère un signal PWM, il doit être préconfiguré en éditant le registre du temporisateur. Lorsque nous travaillons dans l'IDE Arduino, les minuteries sont configurées à notre insu dans la bibliothèque Arduino.h et obtiennent en fait les paramètres souhaités par les développeurs. Et ces paramètres ne sont pas très bons : la fréquence PWM par défaut est faible et les minuteries ne sont pas utilisées à leur plein potentiel. Regardons le PWM standard de l' | Le microcontrôleur possède plusieurs temporisateurs qui peuvent exécuter différentes fonctions, telles que la génération d'un signal PWM . Pour que le temporisateur génère un signal PWM, il doit être préconfiguré en éditant le registre du temporisateur. Lorsque nous travaillons dans l'IDE Arduino, les minuteries sont configurées à notre insu dans la bibliothèque Arduino.h et obtiennent en fait les paramètres souhaités par les développeurs. Et ces paramètres ne sont pas très bons : la fréquence PWM par défaut est faible et les minuteries ne sont pas utilisées à leur plein potentiel. Regardons le PWM standard de l' | ||
^Minuteur^ Épingles^ Fréquence^ Résolution^ | ^Minuteur^ Épingles^ Fréquence^ Résolution^ | ||
- | |Minuterie 0| D5 et D6| 976Hz| 8 bits (0-255)| | + | |Minuterie 0| D5 et D6| **976Hz**| 8 bits (0-255)| |
- | |Minuterie 1| D9 et D10| 488Hz| 8 bits (0-255)| | + | |Minuterie 1| D9 et D10| **488Hz**| 8 bits (0-255)| |
- | |Minuterie 2| D3 et D11| 488Hz| 8 bits (0-255)| | + | |Minuterie 2| D3 et D11| **488Hz**| 8 bits (0-255)| |
En fait, tous les temporisateurs peuvent facilement émettre un signal PWM de 64 kHz , et le temporisateur 1 – c'est même 16 bits, et à la fréquence qui lui a été donnée Arduino, pourrait fonctionner avec une résolution de 15 bits au lieu de 8, et cela, soit dit en passant, 32768 gradations de remplissage au lieu de 256 ! Alors pourquoi cette injustice ? La minuterie 0 est en charge de la synchronisation et est réglée de manière à ce que les millisecondes s' | En fait, tous les temporisateurs peuvent facilement émettre un signal PWM de 64 kHz , et le temporisateur 1 – c'est même 16 bits, et à la fréquence qui lui a été donnée Arduino, pourrait fonctionner avec une résolution de 15 bits au lieu de 8, et cela, soit dit en passant, 32768 gradations de remplissage au lieu de 256 ! Alors pourquoi cette injustice ? La minuterie 0 est en charge de la synchronisation et est réglée de manière à ce que les millisecondes s' | ||
Ligne 198: | Ligne 200: | ||
Si vous changez la fréquence sur les broches D5 et D6, vous perdrez les fonctions de temps ( millis(), delay(), pulseIn(), setTimeout(), | Si vous changez la fréquence sur les broches D5 et D6, vous perdrez les fonctions de temps ( millis(), delay(), pulseIn(), setTimeout(), | ||
</ | </ | ||
+ | |||
+ | ==== Changé les frequences Timer 0==== | ||
+ | Si vous voulez ou avez vraiment besoin d'un PWM overclocké sur le temporisateur système (zéro) sans perte de fonctions temporelles, | ||
+ | |||
+ | <code c timerO.ino> | ||
+ | #define micros() (micros() >> CORRECT_CLOCK) | ||
+ | #define millis() (millis() >> CORRECT_CLOCK) | ||
+ | |||
+ | void fixDelay(uint32_t ms) { | ||
+ | delay(ms << CORRECT_CLOCK); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Les définitions doivent être placées avant de brancher les bibliothèques afin qu' | ||
+ | |||
+ | La chose la plus importante est CORRECT_CLOCK. Il s'agit d'un nombre entier égal au rapport entre le diviseur de minuterie par défaut et le nouveau défini (pour l' | ||
+ | |||
+ | <code c correctclock.ino> | ||
+ | #define CORRECT_CLOCK 8 | ||
+ | void fixDelay(uint32_t ms) { | ||
+ | delay(ms << CORRECT_CLOCK); | ||
+ | } | ||
+ | void setup() { | ||
+ | pinMode(13, 1); | ||
+ | // Pins D5 and D6 - 4 kHz | ||
+ | TCCR0B = 0b00000010; // x8 | ||
+ | TCCR0A = 0b00000001; // phase correct | ||
+ | } | ||
+ | void loop() { | ||
+ | digitalWrite(13, | ||
+ | fixDelay(1000); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | =====Bibliothèques pour travailler avec PWM===== | ||
+ | |||
+ | En plus de jouer manuellement avec les registres, il existe des bibliothèques prêtes à l' | ||
+ | |||
+ | **PWM library** | ||
+ | |||
+ | *Vous permet de définir n' | ||
+ | *Un seul canal est disponible lorsque vous travaillez avec des minuteries 8 bits (par exemple, sur l' | ||
+ | *Permet de travailler avec des temporisateurs 16 bits à une résolution plus élevée (16 bits au lieu du standard 8) | ||
+ | *La bibliothèque est très compliquée, | ||
+ | *Voir exemples dans le dossier avec la bibliothèque ! | ||
+ | |||
+ | **GyverPWM library**( [[https:// | ||
+ | |||
+ | |||
+ | *Vous permet de définir n' | ||
+ | *Sélection de bits : 4-8 bits pour les temporisateurs 8 bits, 4-16 bits pour les temporisateurs 16 bits (à 4 bits, la fréquence PWM est de 1 MHz) | ||
+ | *Sélection du mode PWM : Fast PWM ou Phase-correct PWM (favorable aux moteurs) | ||
+ | *Génération de fréquences de méandres de 2 Hz à 8 MHz sur la broche D9 avec une précision maximale | ||
+ | *Un seul canal est disponible lorsque vous travaillez avec des minuteries 8 bits (par exemple, sur un ATmega328, uniquement D3, D5, D9 et D10) | ||
+ | *Il existe des fonctions pour reconfigurer les sorties PWM standard sans perdre le PWM | ||
+ | *La bibliothèque est écrite de manière très simple, et vous pouvez en prendre des morceaux de code | ||
+ | *Voir exemples dans le dossier avec la bibliothèque ! | ||
+ | |||
+ | |||
+ |
/home/chanteri/www/fablab37110/data/attic/start/arduino/pwm.1671543358.txt.gz · Dernière modification : 2023/01/27 16:08 (modification externe)