Що таке широтно-імпульсна модуляція (ШІМ) і як вона використовується в 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
WIFI ESP8266 добовий графік температури та вологості

WIFI ESP8266 добовий графік температури та вологості

Постановка задачі Пропонуємо вашій увазі новий цікаво-корисний проект з використанням WiFi-к..

Мініатюрний  WeMos D1 mini ESP8266

Мініатюрний WeMos D1 mini ESP8266

Дуже маленька і дешева плата WeMos D1 mini контролера з WiFi зв'язком на борту. Має не багато в..

112.31грн.

SMD світлодіод 0603

SMD світлодіод 0603

SMD світлодіоди видимого діапазону для поверхневого монтажу на плату Типорозмір 0603 Червоний 619 ..

2.10грн.

Джойстик двохосьовий з кнопкою

Джойстик двохосьовий з кнопкою

Двохосьовий джойстик з кнопкою — це зручний модуль керування для проєктів на Arduino, ESP32 та інших..

44.72грн.

Модуль датчика відстані TCRT5000

Модуль датчика відстані TCRT5000

Модуль для вимірювання відстані за інтенсивністю відбиття інфрачервоного променя від об'єкту.Має дис..

28.30грн.