ESP 32 изменение частоты вместо рабочего цикла

Использование этого кода на esp32 позволяет изменять рабочий цикл ШИМ с фиксированной частотой 5000 Гц и работает нормально.

Мой вопрос в том, как изменить частоту и сохранить рабочий цикл на фиксированном значении?

// the number of the LED pin
const int ledPin = 16;  // 16 corresponds to GPIO16

// setting PWM properties
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;

void setup(){
  // configure LED PWM functionalitites
  ledcSetup(ledChannel, freq, resolution);

  // attach the channel to the GPIO to be controlled
  ledcAttachPin(ledPin, ledChannel);
}

void loop(){
  // increase the LED brightness
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15);
  }

  // decrease the LED brightness
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);   
    delay(15);
  }
}

Спасибо

, 👍1

Обсуждение

Хм. Правильно, извини, @Eugene Sh.

Используйте ledcWriteTone ?, @Eugene Sh.

Зачем снимать баллы с вопроса? изменение частоты будет полезно, например, если вы работаете с шаговым двигателем., @Tono Nam


1 ответ


1

Если вы хотите изменить частоту ШИМ во время выполнения, для этой цели существует функция ledc_set_freq (). Я не уверен, что ваш рабочий цикл останется в силе, но я думаю, что это так до тех пор, пока разрешение не изменится. Вам придется попробовать это самостоятельно и в конечном итоге получить компенсацию.

,

Я попытался использовать ledc_set_freq, но проблема в том, что если сделать это очень быстро, то он больше не устанавливается. Если я сделаю это на обычном arduino, используя библиотеку pwm, я могу менять частоту контактов каждые 50 мс, и все в порядке., @lucian_v