PWM może zostać zastosowany np. do regulacji prędkości obrotowej wiatraka komputerowego. Przez co będzie możliwe podawanie napięcia zmiennego bardzo niskiego jak i wysokiego.
Wstęp
PWM czyli modulacji szerokości impulsu. Polega na zmianie sygnału prądowego bądź napięciowego na sygnał impulsowy o stałej amplitudzie i częstotliwości.
Głównym parametrem sygnału PWM jest współczynnik wypełnienia, który można określić na podstawie wzoru:
Rys. 1.1. Przebieg PWM dla współczynnika wypełnienia 10%, 30% 50% oraz 90%.
Okres sygnału = Czas stanu wysokiego + Czas stanu niskiego
Napięcie w trybie PWM podawane jest z przerwami czasowymi, co pozwala w łatwy sposób sterować prącą różnego typu urządzeń.
Napięcie w trybie PWM podawane jest z przerwami czasowymi, co pozwala w łatwy sposób sterować prącą różnego typu urządzeń.
Przykład 1
Każda płytka Arduino wyposażona jest w wyjścia posiadające PWM. W wersji Uno są to piny 3,5,6,9,10 oraz 11.
W celu generacji takie sygnału
wykorzystuje się komendę analogWrite(). Akceptuje na dwie wartości, pin na
który ma być generowany sygnał, oraz wartość.
PWM jest 8 bitowy to znaczy, że
można do niego wprowadzić wartości z zakresu od 0 do 255.
Wartość PWM może wahać się od 0
do 100%. Czyli na jeden procent przypada 2,55 ustawionej wartości.
Sygnał PWM generowany jest z pinu
10. Do niego podpiąłem diodę przez rezystor 1k.
Po generacji sygnału o wypełnieniu 0% następuje opóźnienie i generacja
kolejnych sygnałów o większy wypełnieniach.
- const int PIN = 10;
- void setup()
- {
- pinMode(PIN, OUTPUT); //Ustawienie pinu 10 jako wyjście
- }
- void loop()
- {
- analogWrite(PIN, 0); //Wypełnienie 0
- delay(2000); //Opóźnienie
- analogWrite(PIN, 64); //Wypełnienie 25%
- delay(2000);
- analogWrite(PIN, 128); //Wypełnienie 50%
- delay(2000);
- analogWrite(PIN, 192); //Wypełnienie 75%
- delay(2000);
- analogWrite(PIN, 255); //Wypełnienie 100%
- delay(2000);
- }
Przykład 2
W przykładzie drugim wykorzystam pętle for pozwalające na dynamiczne przechodzenie pomiędzy stanem świecenia diody. Działanie programu opiera się na tej samej zasadzie co dla przykładu 1.
Wartości PWM będą się dynamicznie
zmieniać od wartości 0 do 100%, następnie od 100% do 0.
- const int PIN = 10;
- int i=0;
- void setup()
- {
- pinMode(PIN, OUTPUT); //Ustawienie pinu 10 jako wyjście
- }
- void loop()
- {
- for(i=0; i<256; i++)
- {
- analogWrite(PIN, i);
- delay(50);
- }
- for(i=255; i>=0; i--)
- {
- analogWrite(PIN, i);
- delay(50);
- }
- }
Bibliografia:
[1] https://www.arduino.cc/en/Tutorial/PWM
[2] http://www.mikrokontrolery.org/artykuly/elektronika/130-pwm-modulacja-szerokoci-impulsu
[3] https://www.arduino.cc/en/Tutorial/PWM
[3] https://www.arduino.cc/en/Tutorial/PWM