Що таке широтно-імпульсна модуляція (ШІМ) і як вона використовується в Arduino?
Широтно-імпульсна модуляція (ШІМ, англ. PWM — Pulse Width Modulation) — це один із базових методів керування аналоговими пристроями за допомогою цифрових сигналів. Незважаючи на те, що мікроконтролери Arduino працюють виключно з цифровими станами 0 В (LOW) і 5 В (HIGH), за допомогою ШІМ можна емулювати проміжні значення напруги, створюючи ефект «псевдоаналогового» виходу. Цей механізм широко використовується для керування яскравістю світлодіодів, швидкістю обертання двигунів постійного струму, сервоприводами, генерацією звуку та навіть у керуванні ЖК-дисплеями.
Принцип роботи ШІМ
Ідея ШІМ проста: цифровий контакт перемикається між станами «УВІМК.» і «ВИМК.» з дуже високою частотою. Протягом кожного циклу частину часу сигнал перебуває у стані HIGH, а частину часу — у LOW. Співвідношення цих часів і називається робочим циклом (Duty Cycle).
Робочий цикл (Duty Cycle)
Duty Cycle вимірюється у відсотках і показує, яку частину періоду сигнал знаходиться в стані «УВІМК.». Наприклад:
- 0% — сигнал завжди вимкнений, середня напруга = 0 В;
- 50% — половина часу HIGH, половина LOW, середня напруга ≈ 2,5 В;
- 100% — сигнал постійно HIGH, напруга = 5 В.
Частота ШІМ
Другий важливий параметр — частота. Це кількість циклів на секунду, з якою
відбувається перемикання HIGH/LOW. На платі Arduino Uno стандартні контакти
ШІМ працюють із частотою близько 490 Гц, а піни
5 і 6 використовують підвищену частоту
980 Гц. Чим вища частота, тим більш «плавним» виглядає
керування пристроєм.
Які піни Arduino підтримують ШІМ?
На більшості плат Arduino піни з підтримкою ШІМ позначені символом
«тильда» (~). Наприклад, на Arduino Uno це піни:
3, 5, 6, 9, 10, 11.
Для генерації сигналу використовується вбудована функція
analogWrite(pin, value), де:
pin— номер піна з підтримкою ШІМ,value— значення від0до255.
Значення 0 відповідає Duty Cycle = 0%, а 255 —
100%.
Приклади використання ШІМ в Arduino
1. Керування яскравістю світлодіода
Найпоширеніший приклад: плавна зміна яскравості світлодіода. Код виглядає так:
int ledPin = 9;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for (int value = 0; value <= 255; value++) {
analogWrite(ledPin, value); // Збільшення яскравості
delay(10);
}
for (int value = 255; value >= 0; value--) {
analogWrite(ledPin, value); // Зменшення яскравості
delay(10);
}
}
Завдяки зміні Duty Cycle створюється ефект плавного «дихання» світлодіода.
2. Керування швидкістю двигуна постійного струму
При подачі ШІМ-сигналу на драйвер двигуна регулюється середня напруга живлення, що дозволяє контролювати швидкість обертання. Приклад:
int motorPin = 6;
void setup() {
pinMode(motorPin, OUTPUT);
}
void loop() {
analogWrite(motorPin, 128); // Приблизно 50% потужності
delay(2000);
analogWrite(motorPin, 255); // Повна потужність
delay(2000);
}
3. Керування сервоприводами
Сервомотори використовують модифікований ШІМ-сигнал, де ширина імпульсу
визначає кут повороту. Для зручності варто підключити бібліотеку
Servo.h:
#include <Servo.h>
Servo myServo;
void setup() {
myServo.attach(9);
}
void loop() {
myServo.write(0); // Кут 0°
delay(1000);
myServo.write(90); // Кут 90°
delay(1000);
myServo.write(180); // Кут 180°
delay(1000);
}
4. Генерація звуку
Arduino може використовувати ШІМ для створення звукових сигналів. Для цього
застосовується функція tone(), але можна й вручну керувати ШІМ
для формування простих мелодій.
5. Регулювання контрастності РК-дисплеїв
Деякі LCD-дисплеї дозволяють змінювати контраст за допомогою ШІМ. Підключивши вихід ШІМ до керуючого входу дисплея, можна налаштовувати зображення без механічного потенціометра.
Переваги використання ШІМ
- Енергоефективність — менше тепловиділення у порівнянні з аналоговим регулюванням;
- Проста реалізація в Arduino через
analogWrite(); - Висока точність керування;
- Можливість роботи з великою кількістю різних пристроїв.
Недоліки та обмеження
- Обмежена частота ШІМ на стандартних платах Arduino;
- Не всі піни підтримують ШІМ;
- За низької частоти можливе мерехтіння світлодіодів або шум двигунів;
- Для потужних навантажень потрібні драйвери й транзистори.
Зміна частоти ШІМ
За замовчуванням Arduino Uno працює на частотах 490 та 980 Гц. Проте за потреби можна змінити частоту, працюючи безпосередньо з регістрами таймерів. Це використовується, наприклад, для керування звуком або більш чутливими пристроями. Для більшості початківців достатньо стандартних значень.
Висновок
Широтно-імпульсна модуляція — один із ключових інструментів у роботі з Arduino. Вона дозволяє керувати світлодіодами, двигунами, сервоприводами, дисплеями й навіть створювати звук. Розуміння принципів роботи ШІМ відкриває широкі можливості в електроніці та дозволяє створювати проекти, які раніше здавалися складними.
Якщо ви лише починаєте працювати з Arduino — почніть з експериментів із
analogWrite() та світлодіодом. Це дасть наочне розуміння того,
як цифрові сигнали можуть перетворюватися на «аналогове» керування.





