ARDUINO Регулировка шим 120-150герц

Nick

✩✩✩✩✩✩✩
1 Авг 2018
35
5
Возможно ли ардуинку перевести на другую частоту с регулировкой от 120 до 150 Гц.
То что другую частоту задать можно я знаю, а именно регулировать её, гуглил но что то так и не понял как.
На каких пинах лучше менять частоту, что бы осталась возможность ещё датчики подключить и экран по i2c.
Может кто делал уже такое, подскажите.
 

bort707

★★★★★★✩
21 Сен 2020
3,067
915
Чтобы получить шим с плавно регулируемой частотой около 150гц - надо использовать 16битный таймер1. Точность регулировки частоты будет зависеть от делителя таймера, например при делителе 8 соседние частоты будут отличаться примерно на 0.015 гц
 
Изменено:

Nick

✩✩✩✩✩✩✩
1 Авг 2018
35
5
Библиотека GyverPWM (GitHub) – библиотека, которую мы написали вместе с Егором Захаровым. Библиотека позволяет очень гибко работать с ШИМ на микроконтроллере ATmega328 (позже добавим Мегу):
  • Позволяет установить любую частоту ШИМ в диапазоне 250 Гц – 200 кГц
Вот это меня и смущает
 

Lumenjer

★★★✩✩✩✩
10 Дек 2020
220
112
@Nick, Вам критично указывать заполнение? Если нет и нужна только частота, то можете использовать tone(), без каких либо заморочек сможете выставить диапазон от 120 до 150 (с шагом в 1 гц).
Если нужны более тонкие настройки, разбирайтесь в том, что написал @bort707
 
  • Лойс +1
Реакции: Старик Похабыч

Bruzzer

★★★✩✩✩✩
23 Май 2020
500
145
  • Позволяет установить любую частоту ШИМ в диапазоне 250 Гц – 200 кГц
Для UNO подобных плат легко правится под ваши требования. Но дело в том, чтобы исправить - надо разобраться. А разобравшись - библиотека уже не нужна.
Зачем вам надо менять частоту ШИМ? С какой точностью. С какой точностью должен поддерживаться ШИМ при изменении частоты?
 

Nick

✩✩✩✩✩✩✩
1 Авг 2018
35
5
@Nick, Вам критично указывать заполнение? Если нет и нужна только частота, то можете использовать tone(), без каких либо заморочек сможете выставить диапазон от 120 до 150 (с шагом в 1 гц).
Если нужны более тонкие настройки, разбирайтесь в том, что написал @bort707
Нужно получить импульсы длительностью 120 - 150мкс и частотой 120 - 150герц.
Хотя наверное частоты можно попробовать разные и оставить подходящую, без регулировки.
 
Изменено:

Nick

✩✩✩✩✩✩✩
1 Авг 2018
35
5
Всё разобрался, вот этого хватает:geek: для моих задач.
C++:
int Pin = 9; 

void setup() {
  // Пины D9 и D10 - 122 Гц
  TCCR1A = 0b00000001;  // 8bit
  TCCR1B = 0b00000100;  // x256 phase correct
}

void loop() {
  analogWrite(Pin, 128);
}
122 Гц 50% заполнения.
 

THE_KONDRAT

✩✩✩✩✩✩✩
7 Фев 2019
4
0
Вот засада! Глянул, библиотека шикарно мне подходит... но у меня MEGA -_-.
Ладно, буду периодически проверять.

Кстати, читал, что ШИМ можно заменить алгоритмом Брезенхема, но чот наверное я не до конца понял, как его использовать. Реально может решить проблему мерцания(у меня сейчас светодиод работает на 0.05% заполнения) или 16/20 кГц ШИМ хватит?
 

bort707

★★★★★★✩
21 Сен 2020
3,067
915
@THE_KONDRAT, решение из сообщения #8 никакой библиотеки не использует. Человек разобрался и написал код сам, без библиотек. Тоже самое вы можете сделать и для меги.

Если же хотите задать вопрос - потрудитесь четко его сформулировать
 

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
Для регулировки частоты нужен не PWM, а режим CTC (сброс при совпадении). Не знаю как с библиотеками Ардуино, но это наверно проще через регистры настроить. А выход либо на OCR, либо на любой,просто в прерывании дёргать им.