Changer la fréquence PWM d'un arduino DUE

bonjour :slight_smile:

j'aimerai bien utiliser les pin PWM de l'arduino due mais avec une fréquence plus élevée. la question a été déjà posé mais je ne trouve toujours pas comment faire changer la fréquence.

Je voudrais savoir si les librairies utilisées pour modifier la fréquence des pins 3,6,5,9,10,11 s'appilquent aussi a l'arduino due.

Fonction PwmFrequency
Pour le Due, des éléments de réponse ici.

Un autre exemple plus clair éventuellement (PWMH0 à 1 MHz):

/******************************************************************************/
/*                         PWMH0 1 MHz                                        */
/******************************************************************************/

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);

  PMC->PMC_PCER1 |= PMC_PCER1_PID36;                   // PWM power ON

  PIOC->PIO_PDR |= PIO_PDR_P3;                         // Set pin to a peripheral
  PIOB->PIO_ABSR |= PIO_PC3B_PWMH0;                    // Set PWM pin peripheral type B for PWMH0 (Arduino pin 35)

  PWM->PWM_CLK = PWM_CLK_PREB(0) | PWM_CLK_DIVB(2);   // select Frequency : Mck/2 = 42 MHz

  PWM->PWM_CH_NUM[0].PWM_CMR = PWM_CMR_CPRE_CLKB;      // The period is left aligned, clock source as CLKB on channel 0
  PWM->PWM_CH_NUM[0].PWM_CPRD = 42;                    // Set the PWM frequency 42 MHz/42 = 1 MHz
  PWM->PWM_CH_NUM[0].PWM_CDTY = 20;                    // Set the PWM duty cycle to (CDTY/CPRD) * 100 %

  PWM->PWM_IER1 = PWM_IER1_CHID0;                      // Interrupt on Channel 0 counter
  NVIC_EnableIRQ(PWM_IRQn);                            // Enable interrupt

  PWM->PWM_ENA = PWM_ENA_CHID0;                        // Enable PWM channel 0
}

void loop() {

}

void PWM_Handler() {
  static uint32_t Count;
  PWM->PWM_ISR1;      // Clear status register
  if (Count++ == 1000000) {
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));   // Toggle pin every 1 Hz
    Count = 0;
  }
}

Bonjour,

Je te recommande vivement pwm_lib (GitHub - antodom/pwm_lib: This is a C++ library to abstract the use of the eight hardware PWM channels available on Arduino DUE's Atmel ATSAM3X8E microcontroller.) qui écrabouille par sa facilité d'utilisation tout ce qu'on peut trouver ailleurs.

Maintenant, si tu préfères manipuler les registres avec tes petites mains (question de goût), les réponses précédentes sont très bonnes.