Algoritmy pro řízení motorů
Kartáčové stejnosměrné motory
Jak již bylo napsáno v 1. díle seriálu o motorech (http://automatizace.hw.cz/motory-jejich-rizeni-s-mcu-1-cast-typy-motoru), princip je založen na periodickém střídavém přepínání polarity napájecího stejnosměrného proudu pomocí komutátoru po každém otočení rotoru o 180°. Rychlost otáčení se řídí napětím, nejjednodušeji jeho spínáním (PWM modulace napájecího napětí), kdy průměrná hodnota napájecího napětí je dána vzájemným poměrem četností stavů zapnuto / vypnuto. V závislosti na tom, zda se používá zpětná vazba či nikoli, lze algoritmus řízení rozdělit na:
|
U kartáčových DC motorů se komutace provádí mechanickým komutátorem a PWM se řídí jen velikost DC napětí |
Krokové motory
U krokových motorů, které se vyskytují v bipolárním provedení (obsahují dva páry vodičů) nebo unipolárním provedení (5 či 6 jednotlivých vodičů) se podle složitosti řídícího algoritmu a použití motoru využívá jedno z následujících časování:
|
4 sekvencové řízení krokového motoru (vlevo) je sice jednodušší na realizaci, ale vykazuje neklidný běh, narozdíl od dokonalejšího 8 sekvenčního půlkrokového řízení (vpravo) |
Samozřejmě sekvencování určuje vlastnosti krokového motoru, ale prakticky se realizuje opět puslním PWM řízením bez nebo častěji se zpětnou vazbou:
- PWM řízení v otevřené smyčce - méně běžné - pouze se generují sekvence
dle jednoho zvoleného režimu výše a tiše se předpokládá, že vše funguje. V
tomto režimu má rotor tendenci zůstávat na pozici zubu, což při otáčení generuje
hluk
- Pulsní řízení v uzavřené smyčce - běžné - hodí se i pro větší rychlosti,
konstantní nastavení
- Zpětná vazba založená na PWM - přesné řízení s výbornou charakteristikou - systém akceleruje a pak nastavuje (provádí se nastavení na začátku každého kroku)
3fázový střídavé a BLDC elektromotory
|
Zatímco BLDC motory lze řídit i jednoduchým sekvencováním pulsů (vlevo), pro 3fázové AC motory, zvláště indukční s kotvou nakrátko (vpravo) je vhodnější vytvořit (nasimulovat) "pravé" točivé magnet. pole |
Zatímco jednoduché sekvencování přivádí střídavě na 2 vinutí konstatní průběh PWM, výhodnější lichoběžníkové nebo sinusové vektorové řízení se již proměnným PWM snaží simulovat troúhelníkový, resp. sinusový průběh statorového napětí.
Regulace 3fázových AC motorů a BLDC motorů prostřednictvím sinusového prostorově-vektorového řízení (vlevo) a jednoduchého sekvencování (vpravo)
Field Oriented Control (FOC)
FOC je asi nejlepší způsob, jak řídit 3fázové a BLDC motory. Vyznačuje se však dost velkou složitostí a proto si zde uvedeme jen stručný popis o co vlastně jde. FOC se zaměřuje na průběh rotoru jako referenci. Používá se tzv. Clarkův převod ke konverzi statorového 3fázového průběhu na 2fázový a používá se Parkův převod ke konverzi statorového průběhu na rotorový. Převod provede kolaps průběhu do jedné D a Q komponenty, kde D je tzv. přímá složka (ve směru s rotorem a nemá žádný účinek) a proto je ji obvykle potřeba minimalizovat. Naopak složka Q je fázově posunutá (o 90° vzhledem k rotoru a tedy měla by mít maximální účinek) a je jí tedy potřeba maximalizovat. Definuje se z nich tak příslušný sinus a kosinus (cosinus je pouze o 90° posunutý sinus). S použitím inverzní Parkovi transformace je převede z rotorového průběhu na statorový a s použitím inverzní Clarkovi transformace na 3 složky fázově posunuté o 120°. Normálně se využívá nulová vstupní hodnota pro přímý prostorový vektor (chceme ho minimalizovat) a maximální hodnota vstupu pro kvadraturní prostorový vektor, nicméně je potřeba stáhnout. PWM průběh je tímto způsobem generovaný pro 2 statorová vinutí v kvadraturním q-prostorovém vektoru, přičemž mezi oběma vinutími se udržuje kolmý úhel (fázový rozdíl 90°).
Složitost praktické realizace FOC řízení, která klade i velké nároky na výpočetní výkon MCU, je dokladem toto blokové schéma
Vliv výběru MCU na kvalitu a bezpečnost řízení motoruKvalitní výběr MCU pro řízení motorů je klíčovým faktorem. K dispozici by měli mít blok multikanálových programovatelných PWM výstupů, nejlépe s možností generování (časování) vzájemně překrývajících se impulsů (obdélníků) pro potřeby snadnějšího řízení H-můstků, co nejrychlejší zápis do registrů, rychlý a minimálně 3kanálový A/D převodník pro realizaci řízení v uzavřené smyčce (se zpětnou vazbou) a nejlépe hardwarový kvadraturní enkodér (čítač) pro možnost přímého připojení inkrementálních snímačů otáček bez potřeby řešit celé snímání softwarově. To totiž bývá výrazně pomalejší, což při vysokých rychlostech otáčení motoru může docházet ke ztrácení impulsů ze snímače. To nejen způsobuje méně přesné řízení natočení, ale může vést k nekontrolovatelnému zvyšování otáček rotoru a tedy k vážným problémům. Nemluvě o významném zatížení jádra (procesoru). Také A/D převodník by měl mít dobu převodu výrazně kratší než je perioda motor řídících PWM signálů a dobrý přístup k procesoru, protože zpožděné získání a vyhodnocení výsledků zpětné vazby může nakonec způsobit více problémů a chyb než užitku. MCU a obecně procesory nespecializované na řízení motorů, i když velmi výkonné, nejsou vhodné z pohledu příliš pomalé reakce a obsluhy na vygenerovaného přerušení od některé periferie. Zvýšený nadhled (sledování) běhu nebo zpracovávání řízení motoru na popředí pak významně "žere" čas a výkon procesoru na úkor třeba datové komunikace, zvláště při generování rychlého sledu událostí při rychlém otáčení motoru nebo přesném řízení. Pro řízení motorů jsou velmi vhodná MCU na jádrech ARM Cortex-M3, které se proto dobře hodí díky velmi rychlé reakci na přerušení od zpětné vazby, což dovoluje rychlou prioritizaci současně vykonávaných úloh. To je v případě motorů velmi důležité, protože když se rotor otáčí, může každá zpožděná reakce způsobit tragédii. Rychlé řízení podporuje i rychlé zpracování a vykonávání matematických rovnic a funkcí, dosahované například násobením MUL v jednom hod. cyklu nebo dělení DIV ve 3 až 12 cyklech. Mimo počítání v plovoucí řádové čárce je také možné použít tu pevnou, kdy je to potřeba. Toho se dosahuje funkcemi USAT a SSAT. |
Praktická ukázka řízení BLDC motoru specializovanými MCU Stellaris
Jako praktickou ukázku a shrnutí poznatků uvedených v tomto nebo předchozích dílech o řízení motorů jsem vybral pěkný příklad z "dílny" společnosti Luminary Micro, výrobce specializovaných MCU řady Stellaris pro řízení motorů (více informací najdete například v článku Mikrokontroléry Stellaris s jádrem ARM Cortex-M3 pro řízení motorů na serveru automatizace.HW.cz).
Jde o řízení 3fázového bezkartáčového stejnosměrného motoru (BLDC) se 3 vinutími A, B a C typicky zapojené do hvězdy (viz obrázek), tj. se společným středem. Motor je buzen přiložením napájecího stejnosměrného napětí Vcc na jednu fázi (vinutí) a zem (GND) na vedlejší, což způsobí tok proudu skrz jedno vinutí motoru dovnitř a skrze další opět ven. Správným střídáním fází, tj. toku proudu přes vinutí, (sekvencováním) se rotor otáčí. BLDC motor je provedením synchronní motor a tak když je správně řízen, je rychlost otáčení motoru je přímo závislá na rychlosti sekvencování. Aby byla udržena synchronizace rychlosti a točivého momentu v celém rozsahu je nutné pohyb rotoru sledovat zpětnou vazbou (řízení v uzavřené smyčce). Použít lze Hallovy senzory nebo optoelektrické inkrementální snímače (enkodéry). Na následujícím obrázku je typické blokové schéma připojení pro regulaci BLDC motoru. Často se však používá jen jeden typ zpětné vazby. Dále bude uvažováno použití Hallovinkremých senzorů a inkrentálního snímače otáčení (enkodéru). Pro buzení 3 polovičních H-můstků se využívá 6 individuálních PWM signálů. Střída PWM udává stupeň řízení proudu vinutími a jejich sekvencování způsobuje a reguluje otáčení rotoru. |
3 vinutí BLDC motoru označené jako A, B a C |
V tomto příkladu jsou vždy současně aktivní jen pouze 2 ze 6 PWM signálů, které však musí být ve fázi. Velká péče pak musí být věnována zajištění, aby horní a spodní spínací tranzistory v polovočním H-můstku nebyly sepnuty současně, což by způsobilo zkrat a tzv. proražení tranzistorů. Aby se to nestalo, zajištuje komuntační sekvence (sekvence, která způsobí vznik točivého magnet. pole). V motoru zabudované Hallovy senzory připojené na 3 univerzální vstupy MCU a obsluhované žádostí o přerušení, poskytují 3 digitální signály indikující natočení (pozici) rotoru o 30° (může se lišit u různých motorů). Toho se využívá pro "taktování" komutační sekvence a kdy cyklus projde sekvencí.
Ideální případ - blokové schéma řídící uzavřené smyčky MCU Stellaris, 3fázový budící můstek a BLDC motor. Řízení z MCU obstarává 6 PWM signálů a zpětnou vazbu tvoří Back EMF připojený na A/D převodník a signály z Hallových senzorů (Hall Effect Sensors) a optického snímače otáček/enkodéru připojené na GPIO
Následující obrázek ukazuje průběh komutační sekvence z Hallových senzorů, který určuje průběh PWM signálů (obdélníku) budící 3fázový můstek. Příklad je založen na elektromotor Pittman N2341S001, jiné BLDC motory jsou však buzeny podobně, ale možná s trošku odlišnými komutačními sekvencemi. Pro potřeby přesného určení rychlosti otáčení motoru se pak využívá optický inkrementální rotační enkodér, poskytující informaci o pozici a rychlosti ve vysokém rozlišení. Informací o rychlosti je "krmen" PID algoritmus k nastavení střídy PWM, jak je potřeba k zajištění konstantní požadované rychlosti. Naladění PD algoritmu určuje odezvu na změny nastavení rychlosti, změny mechanického zatížení atd. Mimo zjišťování natočení rotoru by také měl být měřen / kontrolován nadproud a přehřátí prostřednictvím snímání napětí na rezistoru, resp. termistoru, a komparátoru či A/D převodníku řídícího MCU.
Příklad komutační sekvence - průběhů signálů okolo řízení motoru: od shora signál z Hallových senzorů S1 až S3, zakódované jednotlivé stavy a očíslování kroků (Code/Step), průběh napěťových PWM signálů a posloupnost buzení stator. vinutí motoru.
Řídící program - část řízení otáčení motoru s funkcí GPIOIntHandler
Základní řízení otáčení motoru se tedy dosahuje zpětnou vazbou, která řídí elektronickou komutaci (otáčení), prakticky řečeno střídavé spínání horních a dolních tranzistorů polovičních H-můstků. Komutační sekvence pak určuje směr otáčení. V tomto příkladu Hallové senzory připojené na víceúčelové vstupy/výstupy (GPIO) nakonfigurované pro generování přerušení náběžnou i sestupnou hranou. Přerušení od některého z uvedených vstupů pak vyvolá spuštění funkce GPIOIntHandler(void), která je součástí zdrojáku bldc.c a využívá příkazů (funkcí) C knihovny DriverLib.zip pro MCU Luminary Micro Stellaris, kterou lze po zaregistrování stáhnout na stránkách společnosti Luminary Micro (například na www.luminarymicro.com/products/lm3s6965.html). Ta vykoná aktuální komutaci motoru.
Řídící program - část řízení rychlosti motoru s funkcí SpeedHandler a QEI
Pro precizní řízení motoru (zrychlování, zpomalování, start / stop) se využívá PID algoritmus, který mění střídu PWM v závislosti na rychlosti impulsů z optického enkodéru ve zpětné vazbě. Pokud použité MCU obsahuje hardwarový blok kvadraturního enkodéru QEI, resp. vstupy QEI, je vše jednodušší, protože ten sám z dodávané posloupnosti impulsů sám vypočítá rychlost a směr otáčení. Pokud není přítomen, je nutné ho realizovat softwarově.
Díky softwarovému PID regulátoru je základní rychlost motoru řízena snadno pouze změnou střídy PWM průběhu. To ve zdrojáku bldc.c realizuje funkce SpeedHandler(unsigned long ulValue), která je volána při požadavku změny rychlosti z ovládacího rozhraní.
Při softwarové realizaci QEI je nutné použít GPIO vstupy nastavené pro zachytávání náběžné hrany a počítat jejich počet z výstupu optického inkrementálního snímače z kanálu A, přičemž vnitřní čítač zvýší svůj stav o 1 vždy po vygenerování přerušení od vstupu. To ve zdrojáku bldc.c realizuje funkce EdgeIntHandler. Pak v periodických intervalech generovaných časovačem je nasčítaný obsah použit jako počet specifických časových úseků. Ty jsou převedeny na rychlost motoru a použity k řízení rychlosti motoru. To ve zdrojáku bldc.c realizuje funkce QEIIntHandler.
V případě použití například mikrokontrolérů Stellaris M3S601 nebo LM3S801, lze využít hardwarovou realizaci QEI místo zmíněné softwarové. Odpadá tak úplně funkce EdgeIntHandler, kterou realizuje přímo QEI blok a vytváří přerušení při naměření periody, která se pak opět převedeny na rychlost motoru a použije k řízení rychlosti motoru (resp. střídy PWM signálu). To ve zdrojáku bldc.c realizuje funkce QEIIntHandler.
Toto jsou tedy základní potřebné části programu pro řízení BLDC motoru. Bližší informace a souvislosti naleznte ve zde několikrát zmíněném souboru bldc.c, který je vyjmutý z projektu společnosti Luminary Micro sw01238-461.zip.
Závěr
Cílem na serveru automatizace.hw.cz uvedených 3 dílů seriálu o elektromotorech a jejich řízení nebyl od počátku vyčerpávající popis celé problematiky, protože ta je velmi rozsáhlá a složitá, ale byl vytvořen s cílem přiblížit méně znalým technikům současné možnosti v této oblasti. Zde uvedené informace je tak nutné vždy konfrontovat s paramtery a konstrukcí motorů i mikrokontrolérů vámi zvolených výrobců.
Antonín Vojáček
Download & Odkazy
- Stránky společnosti Freescale Semiconductor, výrobce MCU a periferií pro řízení motorů - www.freescale.com
- Stránky společnosti Luminary Micro, výrobce speciálních MCU pro řízení motorů - www.luminarymicro.com
- 1. díl seriálu o motorech na automatizaci.hw.cz - http://automatizace.hw.cz/motory-jejich-rizeni-s-mcu-1-cast-typy-motoru
- 2. díl seriálu o motorech na automatizaci.hw.cz - http://automatizace.hw.cz/motory-jejich-rizeni-s-mcu-2-cast-spinaci-mustky-jejich-pripojeni-k-mcu
- Podrobnější článek o MCU Stellaris - specializovaných MCU pro řízení motorů - http://automatizace.hw.cz/mikrokontrolery-stellaris-s-jadrem-arm-cortex-m3-pro-rizeni-motoru
- Další články o motorech a řídích obvodech najdete na serveru automatizace.HW.cz