PULSNO-ŠIRINSKA MODULACIJA (PWM) JE tehnika dobijanja analognih vrijednosti pomoću digitalnih impulsa konstantne amplitude

Sigurno ste primijetili da su neki digitalni pinovi na Arduino pločici označeni simbolom PWM ~. Iako znamo da digitalni izlazi imaju svojstvo da u datom trenutku budu u stanju 1 ( HIGH ) ili 0 ( LOW ) pomoću navedenih PWM izlaza možemo simulirati analogni izlaz. Mjerenjem napona na tim izvodima možemo dobiti očitane vrijednosti između 0V i 5V.
Pulsno-širinska modulacija mijenja širinu impulsa signala. U generiranom signalu amplituda i frekvencija su konstantne, a radni ciklus se mijenja. Najlakši način da se to ilustrira je na temelju valnog oblika signala s različitim intervalima u kojima je signal u HIGH (5V) stanju. U tu svrhu koristimo sliku objavljenu na web stranici https://www.arduino.cc/en/Tutorial/PWM , na koju se također pozivam kako bih pronašao dodatne informacije.
Želio bih objasniti rad PWM-a na primjeru obične LED diode. Pokretanjem osnovnog programa BLINK u kojem smanjimo pauze na 1ms dobiti ćemo da naša LED dioda žmirka vrlo brzim tempom. Sigurno ste primijetili da LED doida nije imala dovoljno vremena da dobije na intezitetu svjetla. Ako povećamo pauzu na 5ms, ovaj put LED dioda radi duže, primijetit ćete da se je intezitet svjetla jači nego u prethodnom slučaju. Lako je zaključiti da što je veći postotak punjenja (stanje HIGH) to će LED dioda imati više vremena za postizanje maksimalnog osvjetljenja.

Spajanje:
- Spojite otpornik od 220Ω između diodne anode (+) i digitalnog pina 3 (PWM )
- katoda diode (-) spojena je na GND pin
Način rada
Naš zadatak je kreirati kod koji će postupno posvijetliti, a zatim ugasiti LED diodu. Standardno kod započinjemo s definicijom pina na koji spajamo diodu.
Zatim moramo definirati početnu PWM vrijednost (raspon 0-255). Za vrijednost 0 dioda je isključena, za 255 je upaljena s maksimalnom snagom. U sljedećem dijelu trebamo postaviti PWM korak, tj. vrijednost za koju će se širina ispune povećati u sljedećim prolazima funkcije petlje .
U funkciji podešavanja postavite pin na koji je spojena dioda kao izlaz.
Funkcija odgovorna za rad PWM pinova zove se analogWrite . Koristimo ga u petlji loop , dajući vrijednost postotka uključenosti pina kao drugi argument.
Naravno, trebali biste povećati vrijednost punjenja na svakom koraku, inače bi vrijednost punjenja bila 0 cijelo vrijeme, tako da se LED nikada ne bi upalio.
Također bi bilo potrebno zaštititi naš kod, tako da nakon dostizanja vrijednosti 0 ili 255 ne izađe iz raspona mogućih vrijednosti. Stoga moramo promijeniti predznak varijable step_pwm kada vrijednost varijable value_pwm dosegne 0 ili 255.
Na kraju, dodajemo odgodu koja će povećati vrijednost ispune svakih 50 ms
Kod
int dioda = 3; // Definicija izvoda na kojem je spojena LED dioda
int vrijednost_pwm = 0; // trenutna vrijednost PWM
int korak_pwm = 5; // Korak za PWM
void setup() {
pinMode(dioda, OUTPUT); // Postavljanje pina 3 u izlazni način rada
}
void loop() {
analogWrite(dioda, vrijednost_pwm); //osvjetljavanje diode
vrijednost_pwm = vrijednost_pwm + korak_pwm; //povećavanje intenziteta diode
// Ako varijabla vrijednost_pwm dosegne graničnu vrijednost onda se promjeni vrijednost varijable korak_pwm
if (vrijednost_pwm <= 0 || vrijednost_pwm >= 255) {
korak_pwm = -korak_pwm ; // promjena predznaka
}
delay(50); // pauza od 50ms
}