@KirillSPB777

Как победить гул ШИМ на ESP?

Привет! к NodeMCU подключен ШИМ с LED лентой, БП с запасом, ничего не греется но гудит когда ШИМ != 0 || != 100
гуглил и вроде как говорят что на arduino помогает увеличить частоту, а как это сделать для ESP? гугл не говорит :(
#define TABLE_LIGHT 12
pinMode (TABLE_LIGHT, OUTPUT);

из MQTT приходит в процентах 0-100%
String strPayload = String((char*)payload);  //считываем значение топика
    int val = strPayload.toInt(); //конвертируем для шим
    int stled = map(val, 0, 100, 0, 1024); //приводим значение 0-100 в значение 1024-0
    set_pwm_smooth(stled);

и далее реализуется так:
void set_pwm_smooth(int new_pwm) {
    static const int pwm_step = 1; // шаг изменения ШИМ
    static const int pwm_step_time = 3; // время одного шага изменения ШИМ
    static int stled;
    int pwm = stled;
      while (pwm != new_pwm) {
          int next_pwm = pwm + (pwm < new_pwm ? pwm_step : -pwm_step);
          if ((pwm < new_pwm && next_pwm > new_pwm) ||
              (pwm > new_pwm && next_pwm < new_pwm))
              pwm = new_pwm;
          else
          pwm = next_pwm;
          analogWrite(TABLE_LIGHT, pwm);
          delay(pwm_step_time);
      }
      stled = new_pwm;
}
  • Вопрос задан
  • 716 просмотров
Пригласить эксперта
Ответы на вопрос 2
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
1) Уменьшить pwm_step_time;
2)Попробовать поставить LC фильтр на на выход блока. Конденсатор (Электролит+керамика параллельно) параллельно питанию, а дроссель - последовательно. Проверить все намоточные детали в БП - дроссели и трансформаторы. Промазать лаком, если необходимо.
Ответ написан
Комментировать
@KirillSPB777 Автор вопроса
analogWriteFreq(150); гула больше нет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы