Сейчас ваша корзина пуста!
Повышение частоты ШИМ на Arduino за пределы слышимого диапазона
Широтно-импульсная модуляция (ШИМ, англ. PWM – Pulse Width Modulation) – это метод управления мощностью или напряжением, широко используемый в электронике, например, для регулировки яркости светодиодов или управления моторами. Однако стандартная частота ШИМ на Arduino может создавать слышимый шум, особенно при управлении моторами или светодиодами, поскольку она часто находится в пределах слышимого диапазона (от 20 Гц до 20 кГц).
В этой статье мы рассмотрим, как повысить частоту ШИМ на Arduino за пределы слышимого диапазона, чтобы избежать этого неприятного эффекта.
1. ШИМ на Arduino: Основы
По умолчанию частота ШИМ на пинах Arduino (например, на Arduino Uno) составляет:
- Пины 3 и 11: ~490 Гц.
- Пины 5 и 6: ~980 Гц.
Хотя эти частоты подходят для многих приложений, они находятся в диапазоне слышимых частот (менее 20 кГц). Это может приводить к неприятному высокочастотному писку при использовании ШИМ для управления устройствами, такими как моторы или динамики. Чтобы избежать этого, необходимо повысить частоту ШИМ до значений выше 20 кГц, что выведет её за пределы человеческого слуха.
2. Зачем повышать частоту ШИМ?
Существует несколько причин для повышения частоты ШИМ за пределы слышимого диапазона:
- Избегание шумов: При управлении моторами, вентиляторами или светодиодами на низких частотах ШИМ может возникать слышимый шум, который раздражает пользователей.
- Плавность работы: При повышении частоты ШИМ можно добиться более плавного управления нагрузками, такими как моторы, которые при низкой частоте могут работать неравномерно.
- Оптимизация для быстродействующих приложений: Более высокая частота ШИМ может быть полезна в приложениях, где требуется высокая точность управления и отзывчивость, например, в скоростных сервоприводах или мощных светодиодах.
3. Изменение частоты ШИМ на Arduino
Для того чтобы изменить частоту ШИМ на Arduino Uno, необходимо работать с таймерами, которые управляют ШИМ на различных пинах. Каждый таймер контролирует несколько пинов, и изменение настроек таймера изменяет частоту ШИМ на этих пинах.
- Таймер 0: Управляет пинами 5 и 6.
- Таймер 1: Управляет пинами 9 и 10.
- Таймер 2: Управляет пинами 3 и 11.
Для изменения частоты ШИМ можно настроить предделители (prescaler) таймеров. Предделители делят тактовую частоту микроконтроллера (16 МГц для Arduino Uno) для получения нужной частоты ШИМ. Изменяя значение предделителя, мы можем увеличить или уменьшить частоту ШИМ.
Пример: Изменение частоты на таймере 1 (пины 9 и 10)
Чтобы увеличить частоту ШИМ на пинах 9 и 10, нужно изменить предделитель таймера 1. Это можно сделать, используя следующие команды в коде Arduino:
void setup() { // Изменяем предделитель для таймера 1 // CS11 = 1 задает предделитель равным 8, что повышает частоту до ~31.25 кГц TCCR1B = TCCR1B & 0b11111000 | 0x02; } void loop() { analogWrite(9, 128); // Пример ШИМ с измененной частотой на пине 9 }
Этот код изменяет предделитель таймера 1 на значение 8, что увеличивает частоту ШИМ до ~31,25 кГц, что выше слышимого диапазона.
Пример: Изменение частоты на таймере 2 (пины 3 и 11)
Для пинов 3 и 11, которые управляются таймером 2, можно также изменить предделитель:
void setup() { // Изменяем предделитель для таймера 2 // CS21 = 1 задает предделитель равным 8, что увеличивает частоту до ~31.25 кГц TCCR2B = TCCR2B & 0b11111000 | 0x02; } void loop() { analogWrite(3, 128); // Пример ШИМ с измененной частотой на пине 3 }
Этот код также увеличивает частоту ШИМ до 31,25 кГц на пинах 3 и 11.
4. Ограничения и последствия изменения частоты ШИМ
При изменении частоты ШИМ есть несколько моментов, которые необходимо учитывать:
- Снижение разрешения ШИМ: Чем выше частота ШИМ, тем меньше времени для формирования импульсов в одном цикле, что может привести к снижению разрешения управления скважностью. Это может ограничить точность регулировки.
- Влияние на другие функции: Таймеры используются не только для ШИМ, но и для других функций, таких как delay() и millis(). Изменение предделителя может повлиять на работу этих функций. Если важно сохранить правильное время, следует использовать таймеры, не связанные с основными функциями времени.
- Совместимость с другими библиотеками: Некоторые библиотеки, например, библиотеки для работы с сервоприводами, также используют таймеры. Изменение настроек таймеров может нарушить их работу.
5. Заключение
Повышение частоты ШИМ на Arduino за пределы слышимого диапазона позволяет улучшить качество управления моторами, светодиодами и другими устройствами, устраняя нежелательные шумы. Это особенно полезно в проектах, где важны комфорт пользователя и плавность работы устройства.
С помощью изменения настроек таймеров на Arduino можно легко увеличить частоту ШИМ до значений выше 20 кГц. Однако необходимо учитывать снижение разрешения ШИМ и возможное влияние на другие функции микроконтроллера.
Таким образом, повышение частоты ШИМ – это эффективное решение для задач, где требуется минимизация шума и повышение плавности работы устройств.