autor: Andrej B.
 
pripravil: Janko O. Teraz prichádza na rad presnejší popis regulátora - hardvéru a v 3. časti bude podrobnejší popis softvéru.
Teraz prichádza na rad presnejší popis regulátora - hardvéru a v 3. časti bude podrobnejší popis softvéru.
Úvodná poznámka Janka O.:
V komentároch k 1. časti Andrejovho miniseriálu sa objavili v podstate pravdivé pochybnosti o význame amatérskej stavby jednosmerného regulátora v dnešnej dobe lacných čínskych výrobkov.
Ale výstižné zdôvodnenie, prečo to má význam aj dnes, napísal v komentároch "Vašek 133":
Já jsem se mnoho let věnoval radioamatérské činnosti, navrhoval jsem a stavěl měřící přístroje a různé elektronické pomucky pro doma. Později jsem se věnoval přijímačům i vysílačům pro amatérská pasma a k tomu samozřejmě i příslušným zařízením pro měření i nastavování. Nejdále jsem se dostal k cmos obvodům. Velký skok v elektronice byl přechod na mikroprocesory, které dokážou velmi jednoduše-obvodově nahradit klasická zapojení. Programování jsem ale už nezvládl a proto obdivuji všechny, kteří to umí. Dá se dnes vše koupit, ale člověku vždy udělá největší radost, když si něco udělá sám a ono to funguje. To je vlastně podstata všech amaterských technických činností. Držím Andrejovi palce a těším se na jiné nápady, které bude realizovat.
A teraz už Andrej:
Najprv
 popíšem obvodové riešenie regulátora - hardvér.
 
Regulátor samotný aj palubná sieť sú napájané z pohonného akumulátora. Toto napätie stabilizuje monolitický stabilizátor, nízko-úbytkový (LM2940 - 5), keďže pri vybíjaní akumulátora sa napätie dostáva na hodnotu nižšiu ako minimálna dovolená pre obyčajné stabilizátory.
Napätie akumulátora je sledované mikrokontrolérom pomocou analógového komparátora, kde na jeden vstup je privádzané cez delič Uaku a na druhý referencia získaná deličom z výstupu stabilizátora. Referencia nemá žiadne zvlnenie (napr. prenesené zo vstupu stabilizátora), takže s ňou nie sú problémy.
Paralelne k napájaniu mikrokontroléra je
 pripojený keramický kondenzátor na potlačenie rušenia ním
 spôsobovaného. Hneď na vstupe regulátora je pripojený
 kondenzátor. Jeho úlohou je odľahčiť akumulátor od prúdových
 špičiek: pri napájaní jednosmerného motora nie je nutný, ale
 ani neuškodí.
Signál z prijímača je do mikrokontroléra
 privádzaný priamo, bez úprav, na vstup Input Capture.
Na
 výstupe mikrokontroléra je PWM signál riadiaci motor. Motor je
 spínaný výkonovým MOSFETom, na jeho Gate (G)
 chcem dostať čo najvyššie napätie, takže tam privádzam celé
 Uaku. Rozhodol som sa na to použiť optočlen, keďže to vychádzalo
 jednoduchšie a menšie ako použiť 2 tranzistory. Hlavnou
 podmienkou bolo aby bol MOSFET otvorený len keď je na výstupe MCU
 jednotka, vždy inokedy musí byť zavretý (preto sa to nedalo
 vyriešiť 1 tranzistorom). Odpor medzi G a zemou slúži na zavretie
 MOSFETu po zavretí optočlenu. Spínacia frekvencia je 490 Hz.
 Paralelne k motoru je pripojená nulová dióda, keďže motor je
 indukčná záťaž. Regulátor (a palubná sieť) sa zapína
 pripojením akumulátora.
Ako som už písal, všetky funkcie regulátora riadi mikrokontrolér. Tu som použil typ ATtiny 2313, lebo som ho mal v zásobe a nechcel som kupovať nový (lepší by bol ATtiny 26, ten má aj ADC, čo by umožňovalo lepšie sledovanie Uaku).
Tento mikrokontrolér obsahuje časovače, ktoré umožňujú jednoducho merať vstupný signál z prijímača a generovať šírkovo modulovaný signál pre riadenie motora.
Na sledovanie napätia
 používam analógový komparátor. MCU je taktovaný vnútorným RC
 oscilátorom s frekvenciou 1 MHz.
Po zapnutí regulátora program
 nenabehne hneď, ale počká 2 s aby sa obvod určite ustálil (U,
 signál z Rx). Potom si zmeriam, akú má
 šírku impulz pri plyne v polohe vypnuté. Túto
 hodnotu používam pre výpočet výstupu. Keď sa kalibrácia
 úspešne skončila, regulátor to oznámi pípnutím motorom.
Ako
 zmerať šírku impulzu? Pomocou 16b časovača s funkciou Input
 Capture. Časovač voľne beží, taktujem
 ho 1 MHz, teda 1 krok je 1 µs, na jeho vstup prichádzajú impulzy z
 Rx. Keď príde nábežná hrana, Input
 Capture uloží aktuálnu hodnotu časovača.
 Ja si ju v prerušení odložím a zmením
 nastavenie, aby čakal na dobežnú hranu. Potom keď príde dobežná
 hrana, udeje sa podobná akcia. Odčítaním času kedy prišla
 nábežná, od času keď prišla dobežná získam šírku impulzu.
 Pokiaľ by som chcel poznať aj periódu impuzlov, za každou
 dobežnou hranou časovač vynulujem a čas dobežnej hrany je aj
 dĺžkou periódy.
Po zmeraní impulzu na začiatku program
 pokračuje do nekonečného cyklu, kde meria vstupný signál a podľa
 neho a Uaku sa vypočítava výstupný signál. Keď sa akumulátor
 vybíja, klesá jeho napätie a komparátor mi hlási, či je vyššie
 ako porovnávacia referencia, alebo nižšie. Pokiaľ by bolo nižšie,
 motor nemôže ďalej bežať - treba ho odpojiť. Zvolil som
 jednoduché vypnutie, bez možnosti opätovného zapnutia.
 V
 spomínanom nekonečnom cykle sa výstup nepočíta neustále, ale
 len za každým impulzom z Rx, po výpočte CPU spí a zobudí ho
 prerušenie, keď na vstup Input Capture
 príde hrana signálu. Treba vybrať taký režim spánku, kedy
 periférie ďalej bežia.
Na generovanie PWM signálu pre spínanie
 motora používam 8 bitový časovač s funkciou Output Compare.
 Pomocou tejto funkcie je generovanie PWM jednoduché, stačí zapnúť
 časovač, Output Compare
 a nastaviť šírku impulzu. Po výpočte potom už len mením
 hodnotu registra určujúceho šírku impulzu. O celé generovanie
 signálu sa stará časovač, program doňho zasahuje len keď chcem
 niečo zmeniť.
Ešte sa vrátim k výpočtu. Zmeriam
 šírku vstupného impulzu, zistím o koľko je dlhší ako pri
 zapnutí (vypnutý motor) a z tejto hodnoty priamo úmerne
 vypočítavam výstup. Tu by sa dala vyrobiť podstatná časť
 inteligencie regulátora, napr. zisťovanie aj maximálnej polohy
 plynu, hysteréza vstupu (aby nereagoval na
 príliš malé zmeny vstupu), pomalší rozbeh motora, ale to záleží
 od požiadaviek. Jedna podľa mňa dôležitá vec je, aby regulátor
 nereagoval na akýkoľvek vstupný signál (príliš úzky alebo
 široký impulz) - odolnosť proti chybnému vstupu. Reakcia môže
 byť rôzna, buď je takýto vstup ignorovaný, alebo vykonám nejakú
 akciu, závisí od závažnosti chyby. Po výpočte šírky
 výstupného impulzu túto hodnotu vložím do časovača
 generujúceho výstup. Po nastavení výstupu procesor spí a zobudí
 ho prerušenie, keď príde impulz z Rx. 
Po odskúšaní prvej verzie som musel nejaké funkcie doladiť. Najväčšie problémy som mal s vypínaním pri poklese Uaku. Zistil som, že nie je dobré vypnúť motor pri prvom náznaku poklesu napätia, ale treba zistiť či to akumulátor myslí s vybitím vážne a až vtedy vypnúť motor. Ináč povedané, až keď je U pod hranicou po určitý čas.
Ďalším problémom bolo rušenie spôsobované mikrokontrolérom. Prejavovalo sa pri slabšom alebo žiadnom signále z vysielača. Bolo spôsobené tým, že MCU odoberá prúd v dosť ostrých špičkách a tie sa cez napájanie dostávali až do Rx, ktorý rušili.
Riešením bolo pridať
 kondenzátor paralelne k napájacím vývodom (čo najbližšie).
 Týmto bolo rušenie odstránené. Regulátor je umiestnený na
 lietadle zvonka, takže chladenie je dostatočné a použitý chladič
 z hliníkového plechu je studený. Prechádzajúci prúd je okolo
 12A (na zemi), s týmto chladením by (myslím si) zvládol aj 20
 A.
Regulátor lieta v tejto podobe a reguluje k spokojnosti. To by
 bolo všetko čo som chcel o mojom regulátore povedať z pohľadu zapojenia, v ďalšej časti bude popis najdôležitejších častí programu.
