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.
- 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á.
- 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.
- 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í.
- fclk = fVCO/2 = 168 MHz
Poslední dělič dá hodiny jádra. Teprve tady se dá porovnat s tím, co čip vydrží.
Tři stupně a tři okna
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í
| co | jak z hodin vzniká | na čem to je vidět |
|---|---|---|
| sběrnice a periferie | další děliče (APB1, APB2) | časovač na jiné sběrnici běží jinak rychle |
| UART | dělič s desetinnou částí | chyba přenosové rychlosti v procentech |
| ADC | vlastní dělič, má horní mez | doba převodu v taktech ADC, ne jádra |
| SysTick | hodiny jádra / N | př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.