kicsit konyhanyelven: a chipben van a program ami fut, vannak a chip alap konfigurációs fuse bitjei. ezek a maradandóak. aztán vannak a boot közben konfigurálódó paraméterek. ezeket power on után mindig be kell állítani. induláskor először a bootloader fut le, ő állítja be őket, utánna jön a te programod. ha olyan bootloader van benne, ami kikapcsolja a watchdogot, akkor nem lesz watchdogod. mint a pcden ha biosban kikapcsolod az alaplapi sata vezérlőt, akkor az olyan mintha nem is lenne.
Ha van kéznél Atmega32u4 MCU-s board (micro, leonardo), akkor arra lehet olyan firmware-t tölteni, hogy AVRISP mkII lesz belőle. LUFA-ban van a példák között. Próbáltam, működik.
Annyira azért nem független az MCU órajelétől, mint ahogy mondod. Ugyanazt kapják, csak leosztják, stb. Timer állítják elő a pwm-et, aminek az időalapja ugyanaz (legalábbis tudtommal, merthogy általában így szokott lenni, kivételt képez az a megoldás, amikor több forrásból használnak órajelet) az órajel mint amivel az MCU is megy.
Azért függ a frekije adott lábakon, mert más és más belső timer van van kivezetve az adott lábakra..
Hogyha ezeken az alap Arduinos beállításokon változtatni akarunk, mélyebben bele kell túrni a spec regiszterekbe, és ahhoz kicsit jobban kell ismerni magát a procit és ott kell játszani. Vannak akik ezt már megtették, van kész megoldás is az PWM frekijének változtatására akár Hz szintű felbontással beállíthatóan, több letölthető könyvtárt is kreáltak rá sokan. De ez nem az analogwrite utasításos megoldás.
Az a helyzet, hogy az Arduinohoz (is) meg kell tanulni programozni jól ebben a környezetben. Utána jó lesz.
Nyilván, ha erre nincs idő, akkor venni kell egy kész rendszert, PLC-t, stb.
Én csináltam termosztátot, fűtés átkapcsolót (amikor a vegyes tüzelésű kazán lehűlt, visszakapcsolta a cirkót), stb. és tapasztalataim szerint 100%-os megbízhatósággal ment. Nyilván ha a drótokat nem kötöm be rendesen és szétcsúszik és azért nem megy, az meg az én hibám.
Lefagyni nem fagy le, és még akkor is ott a watchdog, de én mondjuk watchdog nélkül használtam (felelőtlenség), ugyanakkor nálam voltak további biztonsági rendszerek (pl. fizikai szelep ami vész esetén elengedi a túlnyomást).
De nem ám. A PWM teljesen független az MCU órájától. Egyetlen "hátránya" számodra, hogy nem 20 Hz, hanem vagy kb. 1 kHz vagy kb. 500 Hz, attól függően, hogy melyik lábra rakod ki. Egy használható forrást találtam erre hirtelen (bár sokáig nem kerestem): https://arduino-info.wikispaces.com/Arduino-PWM-Frequency . Ezt nem teszteltem, úgyhogy tippem sincs, hogy az új IDE alatt mennyire működik (ha egy cikk Duemilanove-t vagy Diecimila-t emleget, akkor elég régi).
Ha egy PWM lábat bekapcsolsz PWM módban [analogWrite() ], akkor ez egészen addig fog villódzani, amíg ki nem kapcsolod, teljesen függetlenül attól, hogy egyébként mi történik a programban (delay() stb.), kivéve, ha valami oknál fogva vagy kiakad az MCU.
van a chipben hardware pwm asszem, az külön célhardver, nem nagyon függ semmitől. de az arduino maga is ad pwd támogatást, szerintem azt szokás használni.