Jednosmerný letecký regulátor - 2. časť

Teraz prichádza na rad presnejší popis regulátora - hardvéru a v 3. časti bude podrobnejší popis softvéru.

autor: Andrej B.

pripravil: Janko O.

 

 

Ú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.

 

 

 

 


<Staršie | tento článok | Novšie>

Napísané: 15. 11. 2011, 16:21 | Prečítané: 6887x | Kategórie: Elektronika | Napísal: admin |
Komentáre: 7
Aj ja by som si chcel vyrobit regulator ale pockam si kym napisete o striedavych. Stym programovanim neviem ako bude ale snad to tu popisete.
Odpoveď | 2011-11-16 00:28:23
Proc ta frekvence 490Hz, neni to malo? A proc procesor spi, ma to nejaky podstatny duvod? Chci si neco podobneho zkusit na PICu, tak mne to zajima...
Odpoveď | 2011-11-23 08:07:42
.:. Andrej B
490 Hz mi vyšlo keď som 1 MHz systémové hodiny vydelil 8, myslím že je dobrá, nepozoroval som problémy, akurát to píska troška výraznejšie ako keby boli 2-4 kHz. procesor spí lebo nemá čo robiť - načítanie vstupov a nastavenie výstupov trvá dosť krátky čas a deje sa to po každom impulze z prímača, takže každých cca 20 ms. nemeral som ako dlho ten výpočet trvá, ale určite menej ako 1ms a ten zvyšok času musím nejako stráviť. mohol by som použiť nejaký cyklus čo bude cykliť dokým sa nenastaví príznak prerušenia, potom vykoná akciu, zase bude cykliť... ale načo? vykonám výpočet, uspím cpu, prerušenie ho zobudí atď
je to elegantnejšie riešenie, zníži to spotrebu MCU
Odpoveď | 2011-11-30 22:26:18
ok, dik, to je dobra finta s tim uspanim misto cykleni, bude se to hodit... :-)
To PWM-ko generuje HW? Chci pouzit prave PIC s HW PWM - dam mu parametry a uz se o nej v programu dal nestaram, do pristi zmeny...
Odpoveď | 2011-12-02 16:31:12
.:. Andrej B
áno PWM generuje HW, nastavíš ho a zasahuješ len keď chceš niečo zmeniť
2011-12-04 18:27:01
Dear Andrei,
I would like to test your motor controller for brushed motors
in a small motor glider. Building up the board will be no problem, but could you please send me your software to program the controller.

Ich wish you a good New Year 2012 and much fun with model planes.
Erwin DL6SBN
Odpoveď | 2011-12-26 17:22:19
.:. Atlan
No budenie toho mosfetu nieje najlepsim riesenim.... chcel by som vidiet preiebeh na gate a vystupe tranzistora. Mal si tam nechat pekne buduč z dvoch tranzistroch. Inak pekna praca.
Odpoveď | 2012-05-02 14:17:53
Pridaj komentár
Meno
Web
Mail
Kontrola Zadajte číslo päť
Text

:-)
:-D
:-(
|-/
:-[]
;-)
8-|
8-o
Tučné | Podrazené | Kurzíva  | zdroják | odkaz
  • Pre odoslanie správy môžete aj použiť klávesovoú skratku Alt+S. (Podporujú len niektoré prehliadače)
  • HTML znaky budú prevedené na entity.
  • Vyjadrujte sa tu ako doma, aby sme vedeli ako to u Vás vypadá.
  • Odkazy začínajúce http:// budú automaticky prevedené na odkazy , nepoužívajte však v jednom príspevku viac ako 3 - to robia len spam roboti:-)
správca | ICQ-Vaše ICQ | Podpora miniRS | Styl LazyDays | Sk preklad by beekeeper | Veľkosť databázy: 35417 kb