LogicLab jednička je rozsah, ne číslo

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.

Návrh pull-upu: dvě nezávislé podmínky

„Dej tam 4k7." Tahle věta zabila víc I²C sběrnic než všechno ostatní dohromady. Pull-up nemá jednu správnou hodnotu — má okno, jeho hranice se počítají ze dvou úplně různých úvah, a to okno se dá zavřít.

1001k10k100kodpor pull-upu (Ω)moc prouduhrana nestihnesvod sní jedničku1850 Ωsběrnice 100 pF · tranzistor 3,0 mA · 400 kHz · svod 10 µAokno je 3,7× široké; to je zdravé
  1. R = ?

    Hledá se jedno číslo: rezistor. Nemá jednu správnou hodnotu, ale rozsah — a ten rozsah ohraničují dvě podmínky, které spolu nesouvisí.

  2. Rmin = (VDD − VOL)/IOL = 967 Ω

    Když je na drátě nula, teče rezistorem proud do sepnutého tranzistoru. Ten má svůj jmenovitý proud, a víc po něm chtít nesmíš — jinak nula vyleze nad práh.

  3. Rmax = tr/(ln(7/3)·C) = 3541 Ω

    Nahoru drát netáhne nikdo, jen ten rezistor přes kapacitu. Je to exponenciála a musí se stihnout dřív, než přijde další bit.

  4. Rmax,svod = (VDD − VIH)/Isvod = 99000 Ω

    Každý vstup na drátě si bere trochu proudu i v klidu. Na velkém rezistoru z toho vznikne úbytek — a jednička klesne pod práh, aniž by ji někdo táhl dolů.

  5. 967 … 3541 Ω   (3,7×)

    Rezistor musí splnit všechny tři. Zbylý interval je celá odpověď — a když je prázdný, žádný rezistor to nespraví a musí se ubrat kapacita nebo rychlost.

Okno se staví po jedné podmínce. Zvětšuj kapacitu sběrnice a sleduj, jak se horní hranice sune doleva, až do prázdna.

Zdola: kolik toho tranzistor utáhne

Když je na drátě nula, teče rezistorem proud rovnou do sepnutého tranzistoru. Ten má jmenovitý IOL a nad ním mu — přesně podle kapitoly 5 — vyleze úroveň nad práh.

Rmin = (VDD − VOL) / IOLna 3,3 V a 3 mA to je 967 Ω

Shora: jak rychle se drát vytáhne

Nahoru nikdo netáhne, takže napětí roste po exponenciále s časovou konstantou RC. Specifikace I²C měří hranu mezi 30 % a 70 % napájení, a ta doba je:

tr = ln(0,7/0,3) · R · C = 0,8473 · R · Ca to 0,8473 není konstanta z nebe

Odkud se to číslo bere: je to logaritmus, ne empirie. Doba mezi 30 % a 70 % je RC·ln(0,7/0,3) = RC·ln(2,333) = 0,84730·RC. Specifikace ho tiskne zaokrouhlené na 0,8473, a když se v této labce porovná s LinkLabem, který používá tu tištěnou hodnotu, liší se výsledky o 2,6 milióntiny — přesně o to zaokrouhlení a o nic jiného. Testy si to hlídají v obou směrech, aby se skutečný rozpor nemohl schovat do volné tolerance.

Rmax = tr / (0,8473 · Cb)a odtud strop kapacity sběrnice

A ještě jednou shora: svod

Každý vstup na lince si bere klidový proud — jednotky mikroampér, ale sečtené přes dvacet zařízení a čtyři konektory to je klidně sto. Ten proud teče přes pull-up a vyrobí na něm úbytek. Jednička pak nesedí na napájení, ale níž, a při dost velkém rezistoru spadne pod práh.

Rmax,svod = (VDD − VIH) / Isvodobvykle mírnější než hrana — ale ne vždycky

Když je okno prázdné

Tři podmínky se můžou minout. Na 1 MHz je dovolená hrana 120 ns, takže při 400 pF vyjde Rmax = 354 Ω — a to je míň než Rmin = 967 Ω. Žádný rezistor neexistuje. To není chyba výpočtu, to je odpověď: ta sběrnice je na tu rychlost příliš velká. Řešení je ubrat kapacitu (kratší spoje, míň zařízení), zpomalit, nebo dát opakovač.

Praktická čísla

situaceCoknovolba
dvě čidla na desce, 100 kHz50 pF0,97 – 23,6 kΩ4k7 (široko)
plná deska, 400 kHz150 pF0,97 – 2,36 kΩ1k5
přes konektor a kabel, 400 kHz300 pF0,97 – 1,18 kΩ1k, a je to těsné
1 MHz na velké sběrnici400 pFnejde

Doporučená hodnota v kalkulačce je geometrický střed okna, ne aritmetický: obě hranice jsou od sebe v poměru, ne v rozdílu, a geometrický střed je jediný bod stejně daleko od obou v tom smyslu, ve kterém na tom záleží.

Vzorce v této kapitole

R_min — spodní mez pull-upu
R_min = (V_DD − V_OL)/I_OL [Ω] NXP UM10204
R_max — horní mez z hrany
R_max = t_r/(0,8473·C_b) [Ω] NXP UM10204
R_max — horní mez ze svodu
R_max = (V_DD − V_IH)/I_leak [Ω] NXP UM10204