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.

Hodiny: odkud se bere frekvence

Mikrokontrolér má jediný zdroj, ze kterého se dá počítat: krystal. Osm megahertzů s přesností desítek ppm. Všechno ostatní — hodiny jádra, sběrnice, časovač, UART, vzorkování ADC — se z něj dělá násobením a dělením, a všechno to dědí jeho přesnost i jeho chyby.

krystal8,0 MHz÷ 81,0 MHz0,9–2,1 MHz× 336336 MHz100–432 MHz÷ 2168 MHz≤ 168 MHzkonfigurace se zachytívýstup 168 MHztýž výstup jde nastavit i špatně
  1. fin = 8 MHz

    Všechno ostatní se z něj odvodí. Osm megahertzů, přesnost desítky ppm — a nic jiného v čipu takovou přesnost nemá.

  2. fPFD = 8/8 = 1,0 MHz

    Fázový detektor chce vstup v úzkém okně, obvykle kolem jednoho megahertzu. Tohle je mez, na kterou se zapomíná nejčastěji.

  3. fVCO = fPFD·336 = 336 MHz

    Oscilátor uvnitř smyčky běží na vysoké frekvenci a i on má okno — pod něj i nad něj se smyčka nezachytí.

  4. fclk = fVCO/2 = 168 MHz

    Poslední dělič dá hodiny jádra. Teprve tady se dá porovnat s tím, co čip vydrží.

Fázový závěs po krocích: dělič, násobič, dělič. Zkus M = 2, N = 42, P = 1 — vyjde stejných 168 MHz a přesto se to nezachytí.

Tři stupně a tři okna

fclk = fin / M × N / Pa každý ze tří stupňů má vlastní mez

Ta rovnice je celá pravda o výstupní frekvenci — a není celá pravda o tom, jestli to bude fungovat. Fázový detektor chce vstup v úzkém okně (u STM32F4 zhruba 0,95 až 2,1 MHz), oscilátor uvnitř smyčky chce být mezi 100 a 432 MHz, a jádro má svoji horní mez.

Nález, který stojí za zapamatování: M = 8, N = 336, P = 2 a M = 2, N = 42, P = 1 dávají obojí přesně 168 MHz. První se zachytí, druhá ne. A ta chyba není ve VCO, jak by člověk čekal — 168 MHz leží pohodlně uvnitř okna 100–432 MHz. Selže fázový detektor, kterému místo jednoho megahertzu přijdou čtyři. Kdo kontroluje jen to nápadné číslo, nenajde nic.

Co ještě z těch hodin visí

cojak z hodin vznikána čem to je vidět
sběrnice a periferiedalší děliče (APB1, APB2)časovač na jiné sběrnici běží jinak rychle
UARTdělič s desetinnou částíchyba přenosové rychlosti v procentech
ADCvlastní dělič, má horní mezdoba převodu v taktech ADC, ne jádra
SysTickhodiny jádra / Npřesnost všech softwarových zpoždění

Proč krystal a ne vnitřní oscilátor

Každý čip má vnitřní RC oscilátor a je zadarmo — ale jeho přesnost bývá ±1 % přes teplotu. Na blikání diodou to stačí. Na UART ne: asynchronní přenos snese asi 2 % rozdílu mezi oběma stranami dohromady, takže dvě zařízení, z nichž každé je o procento vedle jinam, jsou přesně na hraně. A na měření času to nestačí vůbec — hodiny, které se za den zpozdí o čtrnáct minut, nejsou hodiny.

Vzorce v této kapitole

f_clk — fázový závěs
f_clk = f_in/M × N/P [Hz] STM32F407 RM0090