====== Návrh vestavných systémů ====== [[https://docs.google.com/document/d/1bPFRbeaokgUqcW8S-D_R_vsQOx04oU8tlkJK3Pdzfa4/edit?tab=t.0#heading=h.b23rjn10aftd|Vypracované NVS]] ===== Elektronické obvody a prvky pro vestavné systémy. Mikrořadiče - struktura, vlastnosti a programování. Návrh vest. systémů s mikrořadiči a dalšími vstupně- výstupními obvody a bloky. Řešení jejich spolupráce. ===== * * * Základy el. obvodů: odporový dělič, Theveninův teorém, zatížený odporový dělič, měření proudu ve vestavném systému. V/A charakteristika diod Si a LED, diferenciální (dynamický) odpor, bipolární tranzistory a jejich základní vlastnosti, tranzistor jako spínač, tranzistory MOS s kanálem N a kanálem P, prahové napětí. * Operační zesilovač (OZ), jeho vlastnosti a použití; symetrické a nesymetrické napájení OZ, neinvertující zesilovač s OZ. * Mikrořadič – microcontroller (MCU) jako logický obvod CMOS, obvyklé vstupní a výstupní napěťové úrovně, vstupní napěťová tolerance. MCU s jádrem ARM Cortex M3, základní vlastnosti; periferie integrované na čipu:-GPIO, UART, SPI, IIC Bus,..; jejich vlastnosti a použití. * Typické řady log. obvodů CMOS používaných ve vestavných systémech (VS), jejich základní vlastnosti; dynamický proudový odběr MCU a logických obvodů CMOS. Blokování napájení MCU a log. obvodů - způsob, důvod, použité součástky. * Podpůrné a dohlížecí bloky MCU (hodinový generátor, Reset, POR, BOR , RTC, Watch Dog,..); čítačové jednotky v MCU (PWM, „input capture“, output compare,..) jejich funkce a využití. Vstupy a výstupy VS, bloky komunikace s obsluhou ve VS, tlačítka, klávesnice a zobrazovače, vstupy a výstupy s posuvnými registry. ====== Základy el. obvodů: odporový dělič, Theveninův teorém, zatížený odporový dělič, měření proudu ve vestavném systému. V/A charakteristika diod Si a LED, diferenciální (dynamický) odpor, bipolární tranzistory a jejich základní vlastnosti, tranzistor jako spínač, tranzistory MOS s kanálem N a kanálem P, prahové napětí. ====== === Odporový dělič === {{:statnice:bakalar:screenshot_from_2025-06-09_10-04-36.png?400|}} === Theveninův teorém === Théveninova poučka (Théveninův teorém) o náhradním zdroji napětí tvrdí, že libovolně složitý lineární dvojpól lze nahradit obvodem složeným z ideálního zdroje napětí a sériově zapojeným odporem. **Dvojpól** - obvod se dvěma svorkami (póly), u kterého platí linearita vztahu mezi napětím a proudem. === Zatížený odporový dělič === Paralelní odpor co vznikne připojením zátěže k děliči se převede na jeden odpor podle paralelního vzorečku === Měření proudu ve vestavném systému === Proud se neměří přímo, ale nepřímo pomocí převodu na napětí nebo digitální signál, který je následně zpracován ADC nebo specializovaným senzorem. == Měření pomocí shunt rezistoru == Do série se zátěží se vloží malý rezistor (shunt), na kterém se měří úbytek napětí. $I = \frac{U}{R_{shunt}}$ == Hallova sonda == Měření magnetického pole vznikajícího proudem v vodiči. == Integrované proudové senzory == Externí zařízení. Používají buď rezistor, nebo Hallovu sondu, následně komunikují s MCU buď přes I2C nebo SPI. === V/A charakteristika diod Si a LED, diferenciální (dynamický) odpor === == LED == {{:statnice:bakalar:va_led_dioda.svg|}} == Si dioda == {{:statnice:bakalar:content_5-14.png?400|}} == Úbytek napětí na diodě == ^Dioda^Úbytek (V)^ |Sch|0,2-0,4| |Si|0,6-0,7| |LED (R)|1,8-2,1| |LED (G)|2,2| |LED (B)|3-3,5| == Diferenciální (dynamický) odpor rd​ == Udává lokální odpor diody při daném pracovním bodě. Je definován jako derivace: $r_d= \frac{dU}{dI}$, resp $R_{diff} = \frac{\Delta U_L}{\Delta I_L}$ (Fischerova definice). Jinými slovy: Jak moc se změní napětí při malé změně proudu. ==== Bipolární tranzistory a jejich základní vlastnosti ==== Bipolární tranzistory jsou dvou základních typů: **NPN** a **PNP**. {{:statnice:bakalar:untitled.png?400|}} U bipolárních tranzistorů rozlišujeme mezi **aktivním** a **spínacím** režimem . ==Aktivní režim== Při zapojení se společným emitorem tranzistor zesiluje proud – malý proud bází řídí větší proud mezi kolektorem a emitorem. $I_C=\beta⋅I_B$ * $I_C$ - proud na kolektoru * $I_B$ - proud na bázi * $\beta$ / $h_{21}$ - proudové zesílení == Tranzistor jako spínač == Tranzistor je buzen malým proudem do báze, čímž umožní průchod většího proudu mezi kolektorem a emitorem. Pro dosažení saturace je nutné bázi buzit větším proudem, než odpovídá jmenovitému zesílení tranzistoru. V návrhu se používá tzv. forced beta, což je zvolené (záměrně snížené) proudové zesílení pro spínací režim (typicky $\beta_{forced} \approx 10-20$). V režimu spínače pracuje ve dvou stavech: * **Vypnuto (cut-off)** - Do báze neteče proud → tranzistor zavřený (nevede) * **Zapnuto (saturace)** - Do báze teče dostatečný proud → tranzistor plně sepnutý (vede jako uzavřený spínač) U spínačů vždy zapojuji zátěž na kolektor. Typy spínačů: * **Low-side** - zátěž mezi zdrojem a kolektorem (používám NPN) * **High-side** - zátěž mezi zemí a kolektorem (používám PNP) Spínače lze spojit a vytvořit tak tranzistorový **driver**. ===Typy zapojení BJT=== ==Společný emitor (CE)== Emitor je připojen na společný potenciál. ==Společný kolektor (CC)== Kolektor je připojen na společný potenciál. ==Společná báze (CB)== Báze je připojena na společný potenciál. === Tranzistory MOS s kanálem N a kanálem P, prahové napětí === MOSFET (Metal–Oxide–Semiconductor Field-Effect Transistor) je tranzistor řízený elektrickým polem. Oproti bipolárnímu tranzistoru (BJT) je řízen napětím na gate, nikoli proudem. {{:statnice:bakalar:cmos-05-30_20-07-17.png?600|}} Prahové napětí je minimální napětí mezi gate (G) a source (S). Při jeho překročení se tranzistor začne otevírat – tzn. vytvoří se vodivý kanál mezi drain (D) a source (S). == N-MOS == Majoritním nosičem **elektrony**. Vede při kladném $V_{GS}$. Má nižší odpor v sepnutém stavu. == P-MOS == Majoritním nosičem **díry**. Vede při záporném (resp. nižším než source) $V_{GS}$. == Provozní režimy == MOSFET pracuje v několika režimech: * **Cut-off** (vypnuto) – $V_{GS} < V_{th}$ - tranzistor nevede * **Lineární (ohmický) režim** – chová se jako odpor * **Saturační režim (aktivní oblast)** – proud je řízen $V_{GS}$ == MOSFET jako spínač == V digitálních a výkonových aplikacích se MOSFET používá jako spínač: OFF stav – žádný proud mezi D a S ON stav – nízký odpor R - DS(on) tranzistor vede High- a Low-side spínání stejné jako u bipolárních tranzistorů. ====== Operační zesilovač (OZ), jeho vlastnosti a použití; symetrické a nesymetrické napájení OZ, neinvertující zesilovač s OZ. ====== === Operační zesilovač === Operační zesilovač je integrovaný obvod, který zesiluje rozdíl napětí mezi svými dvěma vstupy: * invertující vstup: V− * neinvertující vstup: V+ * výstup: VOUT === Symetrické a nesymetrické napájení OZ === * **Symetrické** - třeba +15V a -15V * **Nesymetrické** - 0V a 5V V embedded systémech se operační zesilovače používají nejčastěji s jedním (a tedy nesymetrickým) napájecím napětím (+3 nebo +5V). **Virtuální nula** (Virtual Ground): pro zapojení ve zpětné vazbě (tj. invertující vstup je z obvodu za OZ) nemá invertující vstup přímou referenci na 0, tj. 0 je rozdíl napětí mezi vstupy ($U_{-} = U_{+}$). Díky tomu lze, při dostatečném napětí zátěže, udělat např. emitorový sledovač NPN, který reguluje proud na zátěži (na kolektoru) pouze přes napětí na vstupu a rezistor na emitoru (a díky velkému zesílení vyloučí působení napětí $U_{BE}$). === Neinvertující zesilovač s OZ. === {{:statnice:bakalar:screenshot_from_2025-06-09_10-35-51.png?400|}} ====== Mikrořadič – microcontroller (MCU) jako logický obvod CMOS, obvyklé vstupní a výstupní napěťové úrovně, vstupní napěťová tolerance. MCU s jádrem ARM Cortex M3, základní vlastnosti; periferie integrované na čipu:-GPIO, UART, SPI, IIC Bus,..; jejich vlastnosti a použití. ====== === Obvyklé vstupní a výstupní napěťové úrovně === == Vstup == Typicky 0-3.3V, někdy 5V tolerantní (v datasheetu pin označen **FT**) * log 0 - $U_{in} < 0.3 * U_{cc}$ * log 1 - $U_{in} > 0.7 * U_{cc}$ * má ochrané diody (většinou) == Výstup == * log 0 - 0V * log 1 - 3,3V * Na DAC pinech možné regulovat napětí (0-3,3V) === Vstupní a výstupní brány === General Purpose Input and Output (GPIO). ==Vstup== * **Floating** (Plovoucí) - bez připojeného potenciálu - napětí se volně pohybuje vlivem šumu, nepředvídatelná logická úroveň * **PULL-UP** - rezistor na $U_{dd}$, pokud je pin bez signálu → HIGH * **PULL-DOWN** - rezistor na GND, pokud je pin bez signálu → LOW ==Výstup== * **PUSH-PULL** - používá dva tranzistory na přepínání mezi GND a $U_{dd}$ * **OPEN-DRAIN** - tranzistor na GND - tranz. sepnut→ LOW, rozepnut→ undefined, připnuto GND - pro log. 1 potřebuje pull-up rezistor na ${U_{dd}}$ U výstupu lze zvolit rychlost: low, medium, high, very high - tvrdost buzení výstupu. Pokud je zbytečně vysoká, vznikají napěťové špičky přes indukčnost cesty na PCB nebo kabelu. === MCU s jádrem ARM Cortex M3, základní vlastnosti === * Cortex-M3 je 32bitové RISC jádro od firmy ARM, navržené specificky pro vestavěné systémy * Thumb-2 instrukční sada - Kompaktní (16bit) + plné (32bit) instrukce → menší kód, rychlé provádění. * NVIC (Nested Vectored Interrupt Controller) === Periferie integrované na čipu:-GPIO, UART, SPI, IIC Bus,..; jejich vlastnosti a použití. === == GPIO == * Programovatelný pin – může být vstupem nebo výstupem. * Možnost pull-up / pull-down rezistorů (vnitřních) * LED, tlačítka, relé, spínače.S * Stavové signály, řízení periferií. * Detekce událostí na pinech (tlačítko → přerušení). == UART == * Asynchronní sériová komunikace (TX, RX). * Podpora rychlostí (např. 9600 – 115200 baud, klidně víc). * Možnost přenosu dat v 8/9 bitech, parita, stop bity. * Často podpora DMA. * Někdy více UART kanálů. == SPI == * Sériová synchronní komunikace (MOSI, MISO, SCK, SS). * Master/slave režim. * Rychlosti až jednotky Mbit/s (záleží na MCU). * Full-duplexní – zároveň odesílá a přijímá. * Možnost více slave zařízení (s více CS piny). == IIC Bus == * Sběrnice s dvěma vodiči: SDA (data), SCL (hodiny). * Master/slave komunikace, více zařízení na jedné sběrnici. * Adresace zařízení (7bit nebo 10bit). * Rychlosti: standardní (100 kHz), fast (400 kHz), fast+ (1 MHz). * Pull-up rezistory nutné na SDA a SCL. ====== Typické řady log. obvodů CMOS používaných ve vestavných systémech (VS), jejich základní vlastnosti; dynamický proudový odběr MCU a logických obvodů CMOS. Blokování napájení MCU a log. obvodů - způsob, důvod, použité součástky. ====== === Typické řady log. obvodů CMOS používaných ve vestavných systémech === == 4000 series (např. 4011, 4040, 4093)== * Starší řada, vhodná pro široký rozsah napájení (3–15 V). * Nízký statický odběr, vhodné pro bateriová zařízení. * Pomalejší než řady 74xx. ==74HCxxx (High-speed CMOS)== * Napájení: typicky 2–6 V. * log. $0 - V_{IL} \le 0,3 \cdot V_{in}$ * log. $1 - V_{IH} \ge 0,7 \cdot V_{in}$ * Rychlejší než 4000, kompatibilní s TTL logikou. * Nízký proudový odběr, ideální pro spojení s MCU. ==74HCTxxx (High-speed CMOS, TTL compatible)== * Použití tam, kde je potřeba **propojení CMOS a TTL**. * Stejné jako 74HC, **vstupní úrovně přizpůsobeny TTL** * log. 0 - max. 0,8V * log. 1 - min. 2V ==74AC / 74ACT (Advanced CMOS / TTL Compatible)== * Ještě rychlejší, větší odběr. * Vhodné pro vysokorychlostní aplikace. === Proudový odběr CMOS obvodů a MCU === Spotřeba MCU se odvíjí hlavně od: * **frekvence** hodinového signálu (CPU, sběrnice, periferií), * aktivních **periferií** (např. ADC, USART), * neoptimalizovaného **kódu** (např. polling místo přerušení), * použití **spánkových režimů** (sleep, stop, standby). ==Statický odběr (v klidu)== * Velmi malý (nA až μA), když nejsou přechody. * Vhodné pro nízkopříkonové aplikace. ==Dynamický odběr== Proud teče hlavně **při přechodu logických stavů** (0 ↔ 1) Napájecí proud CMOS - $I_{CC} = f\cdot U_{CC}\cdot \sum{C}$ Ztrátový výkon CMOS $P = f\cdot U_{CC}^2\cdot \sum{C}$ Odběr závisí na: * frekvenci přepínání (f) - vyšší frekvence → vyšší odběr * zatížení výstupů (větší kapacita → vyšší proud) * napětí – vyšší Vdd → vyšší proud == Blokování napájení MCU a logických obvodů == Blokování napájení je klíčové pro **stabilní a spolehlivý chod** mikrořadiče a připojených digitálních obvodů. Hlavní účel blokování je zajistit: * stabilitu napětí * potlačení rušení * omezení špiček při spínání logických stavů * ochranu před chybami způsobenými kolísáním napájení Při náběhu napájecího napětí může dojít k nestabilitám, které mohou způsobit špatnou inicializaci MCU – blokovací prvky tomuto zabraňují. V **blízkosti** každého napájecího **pinu** MCU by měl být umístěn **keramický kondenzátor** s kapacitou přibližně **100 nF**. Umisťuje se co nejblíže k pinu. Pro **vyrovnání větších změn** v odběru napájení a filtrování nižších frekvencí se používají **elektrolytické kondenzátory** o kapacitách v řádu **10 až 100 µF**. Ty se dávají na vstup nebo výstup stabilizátoru, případně na hlavní napájecí větev. V **kombinaci** s nimi **ferritové tlumivky** nebo **ferritové perle**, ty slouží jako vysokofrekvenční **filtr**, který odfiltruje šum z napájení (nedávají se mezi napájení a zem, ale **pouze na napájecí větev**). Pro **ochranu před přepětím**, nebo elektrostatickým výbojem, se používají **ochranné součástky**, jako jsou **Zenerovy diody, TVS diody** nebo klasické **diodové ochrany**. V systémech s citlivým napájením (např. analogové měření nebo RTC) je vhodné použít LDO stabilizátor s nízkým výstupním šumem, který zajistí konstantní napětí 3,3 V nebo 1,8 V. Při návrhu PCB je důležité správně rozmístit **blokovací prvky** tak, aby tvořily **krátké smyčky** mezi **napájecím** a **zemním** vodičem – tím se dosáhne co nejvyšší účinnosti filtrace. Nedostatečné blokování může způsobit: * samovolné restarty * poruchy v komunikaci (např. UART, I2C) * chybnou činnost periferií * zvýšený šum v analogových částech obvodu ====== Podpůrné a dohlížecí bloky MCU (hodinový generátor, Reset, POR, BOR , RTC, Watch Dog,..); čítačové jednotky v MCU (PWM, „input capture“, output compare,..) jejich funkce a využití. Vstupy a výstupy VS, bloky komunikace s obsluhou ve VS, tlačítka, klávesnice a zobrazovače, vstupy a výstupy s posuvnými registry. ====== === Hodinové signály === Slouží k taktování CPU a periferií, generovány pomocí oscilátorů (RC nebo krystalických). * Interní RC oscilátor – levný, nízký odběr, méně přesný. * Externí krystal (XTAL) – vysoká přesnost, např. 8 MHz. V MCU je Real Time Clock (RTC) blok, který slouží k měření reálného času. Jeho krystal generuje frekvenci 32,768 Hz (2$^{15}$), dá se tak snadno dělit na 1 Hz. Mikrokontrolery obsahují také Phase-Locked Loop (PLL) obvod, který násobí nižší frekvenci racionálním číslem (např. 8 MHz → 72 MHz). Více o PLL na stránce [[statnice:bakalar:b0b35lsp|LSP]]. === RESET === Může být vyvolán RESET tlačítkem (manuálně), nebo automaticky jiným obvodem. Po resetu se mikrořadič vrátí do výchozího stavu (spustí se inicializace a start programu od začátku). Reset může být aktivován: * tlačítkem „RESET“, * watchdogem, * poklesem napájení (BOR), * programově (v SW). === POR – Power-On Reset === Aktivuje se automaticky při zapnutí napájení, MCU zůstává ve stavu „držení v resetu“, dokud se napájecí napětí dostatečně neustálí. Zabrání rozběhnutí procesoru v nestabilních podmínkách (např. napětí roste pomalu → procesor by mohl začít běžet s chybami). U STM32 se aktivuje, když VDD překročí definovanou mez. === BOR – Brown-Out Reset === Automatický reset v případě, že napětí během běhu programu klesne pod bezpečnou (předem konfigurovanou) hranici (např. 2.0V). Chrání před: * neplatnými zápisy do paměti * chybnými výpočty * zablokování systému Typicky se používá v systémech s mechanickými akčními členy – tam je bezpečnost kritická. === Watchdog (WDT – Watchdog Timer) === Dohlíží na běh programu – pokud se program zacyklí/zasekne a neobnoví watchdog, provede reset. Použití: * Zabezpečení proti zamrznutí aplikace. * Obnovení systému po chybě. Druhy: * Interní (součást MCU) – často připojen na systémové hodiny. * Externí – připojený k MCU zvenčí, spolehlivější. Signály: * WDI – vstupní impuls, kterým se watchdog „krmí“. * WDO – výstup reset, pokud impuls dlouho nepřijde. ==== Čítačové jednotky v mikrořadiči (MCU) ==== === Režimy čítače === ==Input Capture== Při **příchodu** určité **události** (např. hrany na pinu) se aktuální **hodnota čítače uloží do registru**. Využití: * měření délky pulsu, * zaznamenání času události, * určování střídy (duty cycle). Možnosti: náběžná/spádová/jakákoli hrana. Přenos hodnoty buď **programově**, nebo pomocí **DMA**. Analogie: Stopky – když někdo běží, zmáčkneš tlačítko → uloží se čas mezičasu, ale stopky běží dál. ==Output Compare== **Čítač** běží a **porovnává se s hodnotou v registru**, při shodě změní výstupní pin stav, nebo vygeneruje přerušení či událost (DMA, ADC,...) * SET – nastaví na 1 * RESET – vynuluje * TOGGLE – překlopí (změní stav) Využití: * generování signálu (např. PWM) * řízení výkonových prvků (IGBT, tyristory) * pulzní řízení motorů * periodické události v kódu ==Pulse Width Modulation (PWM)== Speciální režim čítače, kde **čítač opakuje cyklické pulzy** podle nastavené hodnoty **duty cycle** (střída). Střída je podíl z délky cyklu, kdy je pin v log. 1 (0-100 %) Využití: * řízení servomotorů * stmívání LED * řízení rychlosti motorů (např. BLDC)