Mekkora a PWM kimenet frekvenciája az Arduino

Milyen frekvenciát használnak az Arduinos a normál PWM-hez, ha analógWrite () -t használ?

És különbözik a különböző Arduino modelleknél? Kifejezetten a Mega 2560 érdekel, de azt is szeretném tudni, hogy ez konzisztens-e a modellek között.

Láttam elhaladó utalásokat az Arduino-ra 500 Hz-en, ami nagyon lassúnak tűnik.

Megjegyzések

  • Ez a használt PIN-kódtól is függ.

Válasz

A PWM jelet az AVR chipeken lévő időzítők generálják. Minden időzítő PWM jelet generál két vagy három különböző érintkezőn. Mindegyik tüskének meg lehet a saját működési ciklusa, de megosztják a PWM gyakoriságát. A PWM frekvenciáját úgy módosíthatja, hogy megváltoztatja az időzítők óraforrását. Alapértelmezés szerint a CPU óráját osztják 64-gyel, azaz. az előmérőjük 64-re van állítva Arduino inicializáló kóddal. A dolgok összetévesztésére két különböző PWM mód létezik: gyors PWM és fáziskorrekt PWM. Gyors PWM esetén az időzítő 255-re számít, majd túlcsordul és 0-ról indul (256 különböző állapot). A fázis helyes PWM-ben az időzítő 255-re számít, majd megváltoztatja az irányt és lefelé nullára számít, irányt változtat stb. (510 különböző állapot).

Az Arduino Mega 5 időzítővel rendelkezik, timer0 – timer4. Mivel a timer0 a millis és a micros funkciókhoz is használható, ezért gyors PWM-et használ, míg a többi időzítő a fázis helyes PWM-hez van konfigurálva. Ez különböző frekvenciákat eredményez a különböző csapokon:

  • 4. és 13. érintkező, 0 időzítő vezérlésével:
    16 Mhz / 64/256 = 976,56 Hz

  • Egyéb PWM csapok, amelyeket az időzítő1-4 vezérel:
    16 Mhz / 64/510 = 490,20 Hz

A számítás: Óra / Prescaler / PWM mód állapotok száma

A helyzet ugyanaz, mint az összes többi Arduino táblámról, amiről ismerek, csak kevesebb időzítővel rendelkeznek, amelyek különböző csapokhoz csatlakoznak.

Megváltoztathatja a PWM frekvencia az időmérő előmérőjének cseréjével. Lásd ezt az oldalt: http://playground.arduino.cc/Main/TimerPWMCheatsheet

Az időzítők egy a 255-től eltérő érték. A 8 bites időzítőkön elveszít egy kimeneti tűt, de a 16 bites időzítőkön az Input Capture Register segítségével meghatározhatja a TOP értéket. A bemeneti rögzítési funkció az Arduino közösségben ritkán használt szolgáltatás, így valószínűleg nem fog hiányozni.

Az Arduino könyvtárak csak 8 bites felbontást használnak, még a 16 bites időzítőkön is. Ha nagyobb felbontást szeretne, akkor meg kell írnia a saját analogWrite-jét, vagy egy erre a célra létrehozott könyvtárat kell használnia. Az Arduino Mega timer0 és timer2 8 bites, míg a többi 16 bites.

Módosítva A 16 bites időzítők módja a teljes felbontás kihasználása érdekében, az előmérő és a TOP érték megváltoztatásával kombinálva a PWM frekvenciák nagyon széles tartományát érheti el.

A maximális elérhető frekvencia óra / 4, az előskála 1-re és a TOP 3-ra állításával gyors PWM módban – alacsonyabb érték nem megengedett. Ezzel 4 MHz-es PWM-et kap 2 bites felbontással. Ez lehet az idő 0% -án, 25% -án, 50% -án vagy 75% -án. A magasabb TOP érték magasabb felbontást eredményez alacsonyabb frekvencián.

Hosszabb magyarázatért olvassa el ezt a cikket , vagy olvassa el a adatlap .

Az időmérő0 előmérő, PWM mód vagy TOP érték megváltoztatásával a millis() és micros().

Megjegyzések

  • Összegyűjtem tehát, hogy a lehető leggyorsabb frekvencia mert a PWM értéke 16Mhz / 256 (prescaler = 1), vagy 62,5Khz?
  • És hogy a PWM frekvenciának 62,5KHz egyenletes tényezőnek kell lennie? Valaki egy másik szálon akarta szabályozni a 4 tűs PC ventilátor ventilátor sebességét. Nyilvánvalóan 25KHz-es PWM vezérlőjelet akar. A 62,5 / 25 értéke 2,5, ami nem egész érték.
  • Frissítettem a választ, hogy bővebben kitérjek az adott frekvenciák elérésének lehetőségeire.
  • Az alacsony frekvenciájú végén egy 16 bites időzítő fázis-korrekciós üzemmódban történő előméretezése egy 1024-es előmérővel, hogy 16e6 / 1024/2 ^ 16/2 = 0,119Hz vagy 7,1 ciklus / perc legyen. Ennél alacsonyabb értéknél a biteket valami milliszerű () alapján kell váltani. Vagy esetleg kiváltja a számlálót a T külső bemeneti tűn ?.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük