Ovdje pročitajte kako se registrirati na forum.

PWM signal, princip rada???2

Tehnička podrška za Croduino 8-bitne pločice: Basic, Basic2, NOVA, miniNOVA, Damba, ETA
Odgovorite
abusadamesh1010#9177
Novak
Novak
Postovi: 3
Pridružen/a: čet stu 07, 2019 10:54 am

PWM signal, princip rada???2

Post Postao/la abusadamesh1010#9177 » uto stu 12, 2019 11:07 am

Pozdrav ljudi!
Pitanje koje imam se konkretno odnosi na Basic2, Dambu, Novu, ali i generalno na Arduino kompatibilne pločice. Dakle, pitanje glasi:
Kako konkretno radi PWM signal?
Pri tome ne mislim na to kako signal izgleda, već me zanima u kojem trenutku počinje genriranje signala nakon što se izvrši analogWrite i što se događa sa signalom koji je aktivan u trenutku pozivanja analogWrite-a. Evo malog primjera da vidite na što ciljam.
Ako u setup-u napišemo analogWrite(pin9, 128) izaz će biti 50% HIGH i 50% LOW unutar jednog ciklusa i signal će se generirati vječno.
Sada tu istu naredbu stavimo u loop i uz pretpostavku da se program izvršava brže od trajanja onih 50% kada je izlaz HIGH, što će biti sa signalom kada program ponovo prozove analogWrite a još nije završio trenutni ciklus? Hoće li se prekinuti trenutni analogWrite i započeti s novim ili će se pričekati dok ciklus ne završi pa tek onda krenuti s novim?
Pretpostavljam da će pričekati jer kad ne bi čekao tada bi u ovakvoj situaciji izaz bio uvijek na 100% jer bi prozivanje analogWrite naredbe išlo brže neko što jedan ciklus završi, a kako svaki put ide ispočetka nikad ne stigne do onog LOW dijela. Druga pretpostavka, vrijeme trajanja jednog ciklusa PWM signala je kraće od vremena između dvije analogWrite naredbe pa će se preklapanje dogoditi na jednom ciklusu što ne predstavlja problem. A možda nije ni jedna ni druga pretpostavka.

Što mislite?
Avatar
david.zovko#7916
e-radionica.com team
e-radionica.com team
Postovi: 328
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Osijek, Croatia
Kontakt:

Re: PWM signal, princip rada???2

Post Postao/la david.zovko#7916 » ned stu 17, 2019 9:15 am

Pozdrav,

pitanje je zanimljivo. U svom dosadašnjem radu s Arduino platformom, nisam imao problema s PWM-om koji bi mogli biti uzrokovani ovim pretpostavkama. Definitivno je najbolja opcija napisati takav mali program, spojiti izlaz na osciloskop i gledati što se događa. Ali, može se znati i bez eksperimenta.

Kada pogledate kako zapravo se generira PWM signal, vidjet ćete da analogWrite funkcija samo postavlja registre u određenu konfiguraciju. Dakle, ne radi ona direktno generaciju PWM signala. To se događa tako da imate timer koji broji otkucaje glavnog clocka (16MHz većinom), a Vi u određene registre (timer overflow) postavite kada želite da se dogodi promjena vrijednosti signala na nekom pinu. Dakle, recimo, svakih 200 otkucaja clocka podesite da se promijeni stanje. Ako se u nekom trenutku još nije dogodilo 200 otkucaja, a Vi ponovno pozovete analogWrite s istim vrijednostima, neće se baš ništa dogoditi jer se još nije dogodilo 200 otkucaja potrebnih da se promijeni stanje izlaznog pina.
Ovo je jako pojednostavljen opis, ovaj video detaljnije objašnjava kako se generira PWM na mikrokontroleru kao što je Atmega328, koji se nalazi na nekim od nabrojanih pločica:
Odgovorite