Що таке широтно-імпульсна модуляція (ШІМ) і як вона використовується в 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() та світлодіодом. Це дасть наочне розуміння того, як цифрові сигнали можуть перетворюватися на «аналогове» керування.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Модуль годинника реального часу DS1302

Модуль годинника реального часу DS1302

Модуль годин реального часу на основі мікросхеми DS1302 призначений для роботи з контролерами Ardu..

50.25грн.

Радіатор для транзистора 21х15х10мм

Радіатор для транзистора 21х15х10мм

Радіатор алюмінієвий для пасивного охолодження різноманітних напівпровідникових силових компонентів:..

13.58грн.

Автоматичне відкриття вікна за температурою — проект на Arduino

Автоматичне відкриття вікна за температурою — проект на Arduino

Скільки разів ви прокидалися від холоду влітку чи восени, забувши закрити вікно перед сном? Надто ..

Пушка Гауса

Пушка Гауса

Підключаємо до контролера Arduino, stm32, Raspberry PI пушку Гауса через електропускачіА якщо до цьо..

Стійка нейлонова М3 12мм + 6мм

Стійка нейлонова М3 12мм + 6мм

Стійка для кріплення усіляких електронних модулів до корпусу пристроюВисота стійки 12 ммДовжина зовн..

3.67грн.