Arduino PWM output

Arduino PWM output

След като се запознахме как се изчита аналогова стойност в статията ни Arduino UNO ADC read, е време да направим следващата стъпка и да научим как да използваме широчинно импулсна модулация (PWM/ШИМ) с помощта на Arduino UNO. Тази функция е важна за различни проекти, като регулиране на яркостта на LED диоди, управление на скоростта на мотори и други приложения, където е необходимо прецизно управление на аналоговите изходи.

Какво е PWM?

PWM или ШИМ (Pulse Width Modulation или Широчинно Импулсна Модулация) е метод за генериране на аналогови сигнали чрез цифрови средства. Чрез включване и изключване на изходния пин с висока честота и променяне на съотношението между включено и изключено състояние (широчината на импулса), можем да контролираме средната стойност на напрежението на изхода.

Схема на свързване на компонентите:

Arduino PWM Output Scheme

Arduino PWM out LED

В тази схема участват само два компонента:

  1. Arduino UNO
  2. LED диод
  3. Резистор 220Ω

Свържете анода (дългия крак) на LED диода към цифровия пин 9 на Arduino, а катода (късия крак) към резистора 220Ω. Свържете другия край на резистора към GND на Arduino.

Примерна програма за генериране на PWM сигнал

Програмата, която ще напишем, ще генерира PWM сигнал на пин 9, който ще контролира яркостта на LED диода.

int ledPin = 9; // Пин 9 е PWM пин

void setup() {
  pinMode(ledPin, OUTPUT); // Настройване на пина като изход
}

void loop() {
  for (int brightness = 0; brightness <= 255; brightness++) {
    analogWrite(ledPin, brightness); // Записване на PWM стойност
    delay(10);
  }
  for (int brightness = 255; brightness >= 0; brightness--) {
    analogWrite(ledPin, brightness); // Записване на PWM стойност
    delay(10);
  }
}

Обяснение на кода ред по ред

Ред първи – int ledPin = 9;

Тук инициализираме променливата ledPin, която ще бъде свързана с PWM пин 9 на контролера.

Ред трети – void setup() {

void setup() представлява функция, която се стартира след започването на програмата. В нея настройваме пина ledPin като изход.

Ред четвърти – pinMode(ledPin, OUTPUT);

Тази команда настройва пина 9 като изход, за да можем да контролираме LED диода.

Ред шести – void loop() {

Следващата стъпка в програмата е void loop(). Това е функция, която се изпълнява непрекъснато. В нея ще генерираме PWM сигнал за контрол на яркостта на LED диода.

Ред осми – for (int brightness = 0; brightness <= 255; brightness++) {

Този цикъл инкрементира стойността на променливата brightness от 0 до 255, което представлява различни нива на яркост.

Ред девети – analogWrite(ledPin, brightness);

analogWrite(ledPin, brightness) е функция, която записва PWM стойност на пин 9. Тази стойност може да бъде между 0 и 255, където 0 е изключено състояние, а 255 е максимална яркост.

Ред десети – delay(10);

Тази команда забавя изпълнението на програмата с 10 милисекунди, за да можем плавно да променяме яркостта.

Ред дванадесети – for (int brightness = 255; brightness >= 0; brightness–) {

Този цикъл декрементира стойността на променливата brightness от 255 до 0, което представлява обратния процес на затъмняване на LED диода.

Останалата част от програмата

С това завършва и нашата програма за генериране на PWM сигнал с Arduino. Тя е проста, но много полезна за разбиране на основите на широчинно импулсната модулация. Тази програма може да бъде основа за по-сложни проекти, включващи управление на мотори, LED ленти и други устройства.

Видео презентация на PWM/ШИМ

Arduino PWM output video

Заключение

В тази статия научихме как да генерираме PWM сигнал с помощта на Arduino UNO. PWM е мощен инструмент за управление на аналогови изходи с цифрови средства, което е важно за много проекти. Може да прочетете допълнителна информация в офицялния сайт на Arduino тук.

В следващата ни статия ще съчетаем вече придобитите знания за изчитане на аналогови сигнали (ADC) и конвертирането им в широчинно импулсна модулация (PWM). Линк към стаитята: Arduino ADC read to PWM output