Jaká je frekvence výstupu PWM na Arduinu

Jakou frekvenci používají Arduinos pro normální PWM, když používáte analogWrite ()?

A liší se to u různých modelů Arduino? Specificky se zajímám o Mega 2560, ale také chci vědět, zda je konzistentní mezi modely.

Viděl jsem předávání odkazů na Arduino pomocí 500 Hz, což se zdá být opravdu pomalé.

Komentáře

  • To také záleží na kolíku, který používáte.

Odpověď

Signál PWM je generován časovači na čipech AVR. Každý časovač může generovat signál PWM na dvou nebo třech různých pinech. Každý pin může mít vlastní pracovní cyklus, ale sdílejí frekvenci PWM. Frekvenci PWM můžete změnit změnou zdroje hodin pro časovače. Ve výchozím nastavení používají hodiny CPU děleno 64, tj. mají svůj předvolič nastaven na 64 pomocí inicializačního kódu Arduino. Abychom to více zamotali, existují dva různé režimy PWM: rychlý PWM a fázově správný PWM. V rychlém PWM časovač počítá do 255, poté přetéká a začíná znovu od 0 (256 různých stavů). Ve fázově správném PWM časovač počítá do 255, poté mění směr a počítá dolů na nulu, mění směr atd. (510 různých stavů).

Arduino Mega má 5 časovačů, časovač0 – časovač4. Protože timer0 se také používá pro funkce millis a micros, používá rychlé PWM, zatímco ostatní časovače jsou konfigurovány pro fázově správné PWM. Výsledkem jsou různé frekvence na různých pinech:

  • Pin 4 a 13, ovládané časovačem0:
    16 Mhz / 64/256 = 976,56 Hz

  • Další piny PWM, řízené časovačem 1-4:
    16 Mhz / 64/510 = 490,20 Hz

Výpočet je: Hodiny / Počet stavů v režimu Prescaler / PWM

Situace je stejná pro všechny ostatní desky Arduino, o kterých vím, kromě toho, že mají méně časovačů, které se připojují k různým pinům.

Můžete změnit Frekvence PWM změnou předvolby časovače. Podívejte se na tuto stránku: http://playground.arduino.cc/Main/TimerPWMCheatsheet

Časovače je také možné započítat do jiná hodnota než 255. U 8bitových časovačů ztratíte výstupní kolík, ale u 16bitových časovačů můžete použít registr zachycení vstupu k definování hodnoty TOP. Funkce zachycení vstupu je v komunitě Arduino používána jen zřídka, takže ji pravděpodobně nezmeškáte.

Knihovny Arduino vám umožňují používat pouze 8bitové rozlišení, a to i na 16bitových časovačích. Pokud Chcete-li vyšší rozlišení, budete muset napsat svůj vlastní analogWrite nebo použít knihovnu vytvořenou pro tento účel. Na Arduino Mega Timer0 a Timer2 jsou 8 bitů, zatímco zbytek je 16 bitů.

Změnou režim 16bitových časovačů, které využívají plné rozlišení, v kombinaci se změnou předvolby a hodnoty TOP můžete dosáhnout velmi širokého rozsahu frekvencí PWM.

Maximální frekvence, které můžete dosáhnout jsou hodiny / 4, nastavením předvolby na 1 a TOP na 3 v rychlém režimu PWM – nižší hodnota není povolena. Získáte tak 4 MHz PWM s 2bitovým rozlišením. Může to být 0%, 25%, 50% nebo 75% času. Vyšší hodnota TOP vám poskytne vyšší rozlišení při nižší frekvenci.

Pro delší vysvětlení si přečtěte tento článek nebo si přečtěte datový list .

Změna předvolby, režimu PWM nebo TOP hodnoty pro časovač0 způsobí potíže s millis() a micros().

Komentáře

  • Shromažďuji tedy, že nejrychlejší frekvence, jakou můžete získat pro PWM je 16Mhz / 256 (prescaler = 1), nebo 62,5Khz?
  • A dále, že frekvence PWM musí být sudým faktorem 62,5KHz? Někdo v jiném vlákně chtěl ovládat rychlost ventilátoru 4kolíkového ventilátoru počítače. Zřejmě to chce PWM řídící signál 25KHz. 62,5 / 25 je 2,5, což není celočíselná hodnota.
  • Aktualizoval jsem odpověď, abych podrobněji rozvedl možnosti dosažení konkrétních frekvencí,
  • na konci s nízkou frekvencí můžete přednastavte 16bitový časovač ve fázově správném režimu pomocí předvolebního zařízení 1024 a získejte 16e6 / 1024/2 ^ 16/2 = 0,119 Hz nebo 7,1 cyklů / minutu. U nižších hodnot by bylo potřeba přepínat bity na základě něčeho jako millis (). Nebo možná spusťte čítač na externím vstupním kolíku T ?.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *