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
}