Č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.
- 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í.
- kroků = fčítač/fPWM = 1680
Čítač napočítá do ARR a překlopí se. Kolik tiků se do jedné periody vejde, tolik jich je.
- 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.
- 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.
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:
a odtud zároveň plyne rozlišení, protože střída se dá nastavit jen na celý tik:
Ty dva vzorce obsahují totéž ARR. Vynásobením vyjde vztah, kolem kterého se celá kapitola točí:
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
| fclk | PWM | kroků | bitů |
|---|---|---|---|
| 16 MHz | 1 kHz | 16 000 | 13,9 |
| 16 MHz | 20 kHz | 800 | 9,6 |
| 168 MHz | 20 kHz | 8 400 | 13,0 |
| 168 MHz | 100 kHz | 1 680 | 10,7 |
| 168 MHz | 500 kHz | 336 | 8,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
- Zvýšit hodiny. Přímo úměrné: dvakrát rychlejší čip je bit navíc.
- Snížit frekvenci. Taky přímo úměrné, ale platí se za to jinde.
- 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í.