digitalWrite() postavlja pin na potpuno uključeno (5V) ili potpuno isključeno (0V) stanje, bez ičega između. analogWrite(), uprkos imenu, ne daje pravi analogni napon (na primer, tačno 2,5V) – umesto toga, brzo uključuje i isključuje pin (PWM – Pulse Width Modulation), a prosečan efekat tog brzog treperenja se ponaša kao da je izlaz na međuvrednosti napona.
Šta digitalWrite() zapravo radi
digitalWrite(pin, HIGH) postavlja izlazni pin na pun napon ploče (obično 5V kod Arduino Uno, 3.3V kod nekih drugih modela), dok digitalWrite(pin, LOW) postavlja pin na 0V. Ovo je binarno, sve-ili-ništa stanje – nema mogućnosti za bilo koju vrednost između, jer digitalni pin fizički samo prekida ili propušta pun napon.
Zašto analogWrite() nije stvarno analogni signal
Naziv “analogWrite” je istorijski, ali pomalo zbunjujuć – funkcija ne generiše pravi, kontinuiran analogni napon poput onog koji dolazi iz potenciometra ili audio izvora. Umesto toga, koristi PWM (Pulse Width Modulation): pin se brzo uključuje i isključuje (obično nekoliko stotina do nekoliko hiljada puta u sekundi), a procenat vremena koliko je pin “uključen” u odnosu na ukupan ciklus (duty cycle) određuje efektivnu, prosečnu vrednost. Na primer, analogWrite(pin, 128) (na skali 0-255) drži pin uključenim otprilike 50% vremena, što se ponaša kao da je izlaz na polovini napona – iako u svakom pojedinačnom trenutku pin je ili potpuno uključen ili potpuno isključen, nikad “napola”.
Zašto ovo obično nije problem u praksi
Za mnoge primene, brzina PWM prekapčanja je dovoljno visoka da elektronska ili mehanička komponenta koju kontrolišete “ne primeti” razliku između pravog analognog signala i brzog PWM treperenja – LED dioda kontrolisana PWM signalom na 490Hz (standardna Arduino Uno PWM frekvencija) izgleda kao da svetli konstantnim, prigušenim intenzitetom, jer ljudsko oko ne može da prati treperenje te brzine. Slično, DC motor kontrolisan PWM signalom fizički rotira glatko, jer njegova mehanička inercija “usrednjava” brze impulse struje.
Kada razlika ipak pravi problem
Za primene osetljive na stvarni oblik napona – audio signali, precizna analogna merenja, ili osetljiva analogna kola – PWM signal sa svojim oštrim prelazima i visokofrekventnim komponentama može uneti šum ili izobličenje koje pravi analogni izvor ne bi imao. U tim slučajevima potreban je dodatni filter (jednostavno RC kolo) koji “izglađuje” PWM signal u stvarno kontinuiran analogni napon, ili se koristi namenski DAC (Digital-to-Analog Converter) modul koji generiše pravi analogni signal bez PWM aproksimacije.
Zaključak
analogWrite() je praktična, brza aproksimacija analognog ponašanja preko digitalnog prekapčanja (PWM), dovoljno dobra za veliku većinu Arduino projekata (LED osvetljenje, kontrola brzine motora), ali tehnički nije isto što i pravi, kontinuiran analogni napon – razlika postaje bitna samo kod osetljivih analognih primena.
U Elektroleum ponudi Arduino komponenti možete pronaći ploče, module i senzore za projekte koji koriste i digitalnu i PWM/analognu kontrolu.
Šta je razlika između digitalWrite() i analogWrite() na Arduino-u?
digitalWrite()postavlja pin na potpuno uključeno (5V) ili potpuno isključeno (0V) stanje, bez ičega između.analogWrite(), uprkos imenu, ne daje pravi analogni napon (na primer, tačno 2,5V) – umesto toga, brzo uključuje i isključuje pin (PWM – Pulse Width Modulation), a prosečan efekat tog brzog treperenja se ponaša kao da je izlaz na međuvrednosti napona.Šta digitalWrite() zapravo radi
digitalWrite(pin, HIGH)postavlja izlazni pin na pun napon ploče (obično 5V kod Arduino Uno, 3.3V kod nekih drugih modela), dokdigitalWrite(pin, LOW)postavlja pin na 0V. Ovo je binarno, sve-ili-ništa stanje – nema mogućnosti za bilo koju vrednost između, jer digitalni pin fizički samo prekida ili propušta pun napon.Zašto analogWrite() nije stvarno analogni signal
Naziv “analogWrite” je istorijski, ali pomalo zbunjujuć – funkcija ne generiše pravi, kontinuiran analogni napon poput onog koji dolazi iz potenciometra ili audio izvora. Umesto toga, koristi PWM (Pulse Width Modulation): pin se brzo uključuje i isključuje (obično nekoliko stotina do nekoliko hiljada puta u sekundi), a procenat vremena koliko je pin “uključen” u odnosu na ukupan ciklus (duty cycle) određuje efektivnu, prosečnu vrednost. Na primer,
analogWrite(pin, 128)(na skali 0-255) drži pin uključenim otprilike 50% vremena, što se ponaša kao da je izlaz na polovini napona – iako u svakom pojedinačnom trenutku pin je ili potpuno uključen ili potpuno isključen, nikad “napola”.Zašto ovo obično nije problem u praksi
Za mnoge primene, brzina PWM prekapčanja je dovoljno visoka da elektronska ili mehanička komponenta koju kontrolišete “ne primeti” razliku između pravog analognog signala i brzog PWM treperenja – LED dioda kontrolisana PWM signalom na 490Hz (standardna Arduino Uno PWM frekvencija) izgleda kao da svetli konstantnim, prigušenim intenzitetom, jer ljudsko oko ne može da prati treperenje te brzine. Slično, DC motor kontrolisan PWM signalom fizički rotira glatko, jer njegova mehanička inercija “usrednjava” brze impulse struje.
Kada razlika ipak pravi problem
Za primene osetljive na stvarni oblik napona – audio signali, precizna analogna merenja, ili osetljiva analogna kola – PWM signal sa svojim oštrim prelazima i visokofrekventnim komponentama može uneti šum ili izobličenje koje pravi analogni izvor ne bi imao. U tim slučajevima potreban je dodatni filter (jednostavno RC kolo) koji “izglađuje” PWM signal u stvarno kontinuiran analogni napon, ili se koristi namenski DAC (Digital-to-Analog Converter) modul koji generiše pravi analogni signal bez PWM aproksimacije.
Zaključak
analogWrite()je praktična, brza aproksimacija analognog ponašanja preko digitalnog prekapčanja (PWM), dovoljno dobra za veliku većinu Arduino projekata (LED osvetljenje, kontrola brzine motora), ali tehnički nije isto što i pravi, kontinuiran analogni napon – razlika postaje bitna samo kod osetljivih analognih primena.U Elektroleum ponudi Arduino komponenti možete pronaći ploče, module i senzore za projekte koji koriste i digitalnu i PWM/analognu kontrolu.