McuLab jediný zdroj v čipu jsou takty

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Časovač: jedno číslo viděné dvakrát

„Proč mám na 100 kHz jen deset bitů PWM?“ je nejčastější otázka o časovačích a má odpověď, která není o čipu. Je to aritmetika, a je vidět na jednom řádku.

strop rozlišení100 kHz1,0 kHz10,0 kHz100 kHz1,0 MHz048121620bitů168 MHzčítač tikákroků v periodě: 1680 (kresleno 24)a to je zároveň rozlišení střídyk dispozici 1680 kroků = 10,71 bitůpožadavek se vejdePSC = 0, ARR = 1679chyba frekvence 0,000 %
  1. fčítač = 168 MHz

    V časovači je jediný čítač. Tiká hodinami jádra, případně poděleným, a nic jiného v něm není.

  2. kroků = fčítač/fPWM = 1680

    Čítač napočítá do ARR a překlopí se. Kolik tiků se do jedné periody vejde, tolik jich je.

  3. bitů = log₂(kroků) = 10,71

    Střída se dá nastavit jen na celý tik. Počet tiků v periodě je tedy zároveň počet možných střídek — je to totéž číslo.

  4. fPWM · 2bitů ≤ fčítač  ⟹  vejde se

    Frekvence krát počet kroků se musí vejít do hodin. To není omezení konkrétního čipu — je to aritmetika.

Čítač tiká hodinami a napočítá do ARR. Kolik tiků se vejde do periody, tolik je střídek — jsou to tytéž tiky. Křivka vpravo je strop, který z toho plyne.

Dvě věci, které jsou ve skutečnosti jedna

Časovač má jediný čítač. Tiká frekvencí fclk/(PSC+1) a překlopí se po ARR+1 ticích. Odtud plyne perioda:

fPWM = fclk / ((PSC+1)·(ARR+1))perioda

a odtud zároveň plyne rozlišení, protože střída se dá nastavit jen na celý tik:

kroků střídy = ARR+1  ⟹  bitů = log₂(ARR+1)rozlišení

Ty dva vzorce obsahují totéž ARR. Vynásobením vyjde vztah, kolem kterého se celá kapitola točí:

fPWM · 2bitů ≤ fclka rovnost platí, jen když PSC = 0

Není to omezení výrobce. Neexistuje čip, ve kterém by tohle neplatilo, protože je to definice čítače. Na 168 MHz a 100 kHz je k dispozici 1680 tiků, tedy 10,7 bitu — deset bitů se vejde, jedenáct ne, a žádné nastavení registrů s tím nehne.

Praktická tabulka

fclkPWMkrokůbitů
16 MHz1 kHz16 00013,9
16 MHz20 kHz8009,6
168 MHz20 kHz8 40013,0
168 MHz100 kHz1 68010,7
168 MHz500 kHz3368,4

Kde to bolí

U pohonů. BridgeLab ukazuje, proč se chce spínací frekvence vysoká (menší zvlnění proudu, tišší motor) — a tahle kapitola říká, co to stojí: při 100 kHz na 16MHz čipu zbývá 160 kroků, tedy 7,3 bitu, a proudová smyčka nemá čím regulovat jemně. Proto se výkonová elektronika dělá na rychlých čipech, a ne proto, že by výpočet trval dlouho.

A u PWM jako DAC (GpioLab, kap. 10) je to druhá strana téhož: tam se chtěla vysoká nosná kvůli zvlnění, tady se za ni platí bity.

Co s tím, když se to nevejde

  1. Zvýšit hodiny. Přímo úměrné: dvakrát rychlejší čip je bit navíc.
  2. Snížit frekvenci. Taky přímo úměrné, ale platí se za to jinde.
  3. Dithering. Střídat dvě sousední střídy a získat zpátky bity v čase. Funguje, pokud je zátěž pomalejší než ten střídavý vzorek — u motoru ano, u LED podsvícení pozor na blikání.

Vzorce v této kapitole

f_PWM — perioda časovače
f_PWM = f_clk/((PSC+1)(ARR+1)) [Hz] STM32F407 RM0090
f_PWM · 2ⁿ — strop frekvence a rozlišení
f_PWM · 2^bitů ≤ f_clk [Hz] definice čítače