Arduino - modulacja szerokości impulsu

Modulacja szerokości impulsu lub PWM to powszechna technika używana do zmiany szerokości impulsów w ciągu impulsów. PWM ma wiele zastosowań, takich jak sterowanie serwomechanizmami i regulatorami prędkości, ograniczanie efektywnej mocy silników i diod LED.

Podstawowa zasada PWM

Modulacja szerokości impulsu jest zasadniczo falą prostokątną o zmiennym czasie wysokim i niskim. Na poniższym rysunku przedstawiono podstawowy sygnał PWM.

Z PWM związane są różne terminy -

  • On-Time - Czas trwania sygnału czasu jest długi.

  • Off-Time - Czas trwania sygnału czasu jest niski.

  • Period - Jest reprezentowany jako suma czasu włączenia i wyłączenia sygnału PWM.

  • Duty Cycle - Jest reprezentowany jako procent sygnału czasu, który pozostaje włączony w okresie sygnału PWM.

Kropka

Jak pokazano na rysunku, T on oznacza czas włączenia, a T off oznacza czas wyłączenia sygnału. Okres jest sumą czasów włączenia i wyłączenia i jest obliczany zgodnie z następującym równaniem -

$$ T_ {total} = T_ {on} + T_ {off} $$

Cykl pracy

Cykl pracy jest obliczany jako czas pracy w danym okresie. Wykorzystując okres obliczony powyżej, cykl pracy jest obliczany jako -

$$ D = \ frac {T_ {on}} {T_ {on} + T_ {off}} = \ frac {T_ {on}} {T_ {total}} $$

Funkcja analogWrite ()

Plik analogWrite()funkcja zapisuje wartość analogową (falę PWM) do pinu. Może być używany do oświetlania diod LED o różnej jasności lub napędzania silnika z różnymi prędkościami. Po wywołaniu funkcji analogWrite () pin wygeneruje stałą falę prostokątną o określonym cyklu pracy do następnego wywołania analogWrite () lub wywołania digitalRead () lub digitalWrite () na tym samym pinie. Częstotliwość sygnału PWM na większości pinów wynosi około 490 Hz. Na płytach Uno i podobnych piny 5 i 6 mają częstotliwość około 980 Hz. Piny 3 i 11 w Leonardo również pracują z częstotliwością 980 Hz.

Na większości płyt Arduino (tych z ATmega168 lub ATmega328) ta funkcja działa na pinach 3, 5, 6, 9, 10 i 11. Na Arduino Mega działa na pinach 2 - 13 i 44 - 46. Starsze Arduino płyty z obsługą tylko ATmega8 analogWrite() na stykach 9, 10 i 11.

Arduino Due obsługuje analogWrite()na pinach od 2 do 13 oraz pinach DAC0 i DAC1. W przeciwieństwie do pinów PWM, DAC0 i DAC1 są przetwornikami cyfrowo-analogowymi i działają jako prawdziwe wyjścia analogowe.

Nie musisz wywoływać pinMode (), aby ustawić pin jako wyjście przed wywołaniem analogWrite ().

Składnia funkcji analogWrite ()

analogWrite ( pin , value ) ;

value - cykl pracy: od 0 (zawsze wyłączone) do 255 (zawsze włączone).

Example

int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value

void setup() {
   pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop() {
   val = analogRead(analogPin); // read the input pin
   analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023, 
      // analogWrite values from 0 to 255
}