Hallovy senzory pro bezkartáčové motory: Návrat kvadraturních enkodérů / Habr
Toto je třetí článek o kvadraturních dekodérech, tentokrát s aplikací na řízení bezkartáčových motorů.
- Článek první: princip fungování kvadraturního dekodéru + kód pro Arduino.
- Článek dva: kvadraturní dekodér na stm32.
Pro ilustraci si vezmu velmi běžný motor s dvanácti cívkami ve statoru a čtrnácti magnety v rotoru. Existuje poměrně dost variací ve vinutí a počtu cívek/magnetů, ale podstata zůstává vždy stejná. Zde je fotografie mého příkladu z obou stran, na které jsou jasně viditelné jak cívky, tak magnety v rotoru:

Aby to bylo ještě jasnější, nakreslil jsem schéma, póly rotorových magnetů jsou označeny barvami, červená pro sever a modrá pro jih:

Hallovým senzorům teď nevěnuj pozornost, stejně tam nejsou
Co se stane, když připojíte kladný pól na svorku V a záporný pól na svorku W (svorku U k ničemu nepřipojujeme)? Je zřejmé, že proud bude protékat cívkami navinutými zeleným vodičem. Cívky jsou navinuty v různých směrech, takže horní dvě cívky budou přitahovány k magnetům 1 a 2 a spodní dvě k magnetům 8 a 9. Ostatní cívky a magnety v této konfiguraci nehrají téměř žádnou roli, proto jsem zvýraznil magnety 1,2,8, 9, 1 a 3. S tímto typem napájení motoru se samozřejmě nebude otáčet a bude mít sedm stabilních poloh rotoru, rovnoměrně rozložených po celém obvodu (levá horní zelená cívka statoru může přitahovat magnety 5, 7, 9, 11, 13, XNUMX, XNUMX).
Zaznamenejme si naše akce do tabulky, jako je tato:
| Úhel natočení rotoru | U | V | W |
| 0° | nc | + | – |
Co se stane, když nyní přivedeme kladný pól na U a záporný pól na W? Červené cívky budou přitahovat magnety 3,4,10, 11, XNUMX a XNUMX, čímž mírně pootočí rotor (stále zvýrazňuji magnety, které rotor přitahuje):

Vypočítejme, o kolik se rotor otočí: mezi drážkami magnetů 1-2 a 3-4 máme 51.43° (=360°*2/7) a mezi odpovídajícími drážkami ve statoru 60° (=360°/12*2). Rotor se tedy otočí o 8.57°. Aktualizujme naši tabulku:
| Úhel natočení rotoru | U | V | W |
| 8.57° | + | nc | – |
Nyní sám Bůh přikázal použít + na U a – na V!

| Úhel natočení rotoru | U | V | W |
| 17.14° | + | – | nc |
Nyní je čas znovu zarovnat magnety se zelenými cívkami, takže na ně přivedeme napětí, ale červený a modrý magnet si prohodily místa, takže nyní musíme přivést zpětné napětí:

| Úhel natočení rotoru | U | V | W |
| 25.71° | nc | – | + |
U zbývajících dvou konfigurací je vše naprosto stejné:

| Úhel natočení rotoru | U | V | W |
| 34.29° | – | nc | + |

| Úhel natočení rotoru | U | V | W |
| 42.85° | – | + | nc |
Pokud zopakujeme úplně první krok, náš rotor se otočí přesně o jednu sedminu otáčky. Náš motor má tedy celkem tři svorky, na dvě z nich můžeme přivést napětí šesti různými způsoby: 6 = 2*C² 3, a už jsme je všechny vyřešili. Pokud napětí nepřipojíte chaoticky, ale v přísném pořadí, které závisí na poloze rotoru, motor se bude otáčet.
Zapišme si znovu celou sekvenci pro náš motor:
| Úhel natočení rotoru | U | V | W |
| 0° | nc | + | – |
| 8.57° | + | nc | – |
| 17.14° | + | – | nc |
| 25.71° | nc | – | + |
| 34.29° | – | nc | + |
| 42.86° | – | + | nc |
Existuje jedna nuance: u konvenčního kolektorového motoru jsou kartáče zodpovědné za spínání vinutí, ale zde musíme sami určit polohu rotoru.
Nyní umístěme tři Hallovy senzory do černých teček vyznačených na diagramu. Dohodněme se, že senzor generuje logickou jedničku, když je naproti červenému magnetu. Existuje šest (překvapení!) možných stavů těchto tří senzorů: 2 3 – 2. Celkem existuje 8 možných stavů, ale vzhledem ke vzdálenosti mezi senzory nemohou být všechny na logické nule nebo logické jedničce:

Všimněte si, že generují tři signály posunuté vůči sobě o 1/3 periody. Mimochodem, elektrikáři používají slovo stupně, když mluví o 120°, což začátečníky, jako jsem já, úplně mate. Pokud si chceme vyrobit vlastní regulátor motoru, stačí číst signál ze senzorů a podle toho přepínat napětí na vinutích.
Pro umístění senzorů jsem použil tuto desku, jejíž návrh jsem si vzal zde. Odkaz obsahuje projekt eagle, takže jsem si od Číňanů objednal najednou spoustu podobných desek:

Tyto desky nesou pouze tři Hallovy senzory, nic víc. No, kondenzátory si můžete umístit dle chuti, já se tím neobtěžoval. Dlouhé drážky pro nastavení polohy senzorů vzhledem ke statoru jsou velmi pohodlně vyrobeny.
Počkejte, ale tohle vypadá hodně jako kvadraturní signál z běžného inkrementálního enkodéru!
Samozřejmě! Jediný rozdíl je v tom, že inkrementální enkodéry dávají dva signály posunuté vůči sobě o 90° a my máme tři signály posunuté o 120°. Co se stane, když k běžnému kvadraturnímu dekodéru, například té samé modré pilulce, připojíme libovolné dva z nich? Budeme schopni určit polohu hřídele s přesností až čtyři číslice na sedminu otáčky, neboli 28 číslic na otáčku. Pokud nechápete, o čem mluvím, přečtěte si princip fungování kvadraturního dekodéru v prvním článku.
Dlouho jsem přemýšlel, jak využít všechny tři signály. Jelikož máme šest událostí na sedminu otáčky, měli bychom být schopni získat 42 čítačů na otáčku. Nakonec jsem se rozhodl pro hrubou sílu, protože modrá pilulka má spoustu hardwarových kvadraturních dekodérů, a tak jsem se rozhodl do ní dát tři čítače:

Je zřejmé, že s každou událostí se dva z nich zvýší, proto sečtením tří čítačů a vydělením dvěma získáme rovnoměrně tikající určovač polohy hřídele s přesností 6*7 = 42 čítačů na otáčku!
Takto vypadá rozložení připojení Hallových senzorů k modré pilulce:

V některých aplikacích (například u vrtulníků) nejsou všechny tyto starosti potřeba. Řídicí jednotky se snaží odhadnout, co se děje s rotorem, podle proudu v cívkách. Na jednu stranu je to méně starostí, ale na druhou stranu to někdy vede k problémům s okamžikem spuštění motoru, takže je to málo užitečné například v robotice, kde jsou potřeba téměř nulové otáčky. Zkusme napájet náš motor z běžného čínského ESC (elektronického regulátoru otáček) vrtulníku.
Můj regulátor chce na vstupu signál PPM: jedná se o puls s frekvencí 50 Hz, délka pulsu nastavuje rychlost: 1 ms – zastavení, 2 ms – maximální možná rychlost (vypočítáno jako kV motoru * napětí).
Zde jsem zveřejnil zdrojový kód a soubory krychle pro modrou pilulku. Časovač 1 generuje PWM pro ESC, časovače 2,3,4, XNUMX, XNUMX počítají odpovídající kvadraturní signály. Protože jsem v předchozím článku velmi podrobně popsal, kde a na co klikat, zde uvádím pouze odkaz na zdrojový kód.
Jako vstup zadám ESC příkaz pro nastavení rychlosti v pilovitém tvaru, uvidíme, jak to funguje. Výstup modré pilulky je zde a kód, který vykresluje graf, je zde.
Protože můj motor má jmenovité napětí 400 kV a dodával jsem 10 V, maximální otáčky by měly být kolem 4000 ot/min = 419 rad/s. Zde je graf:

Je jasné, že skutečná rychlost odpovídá zadané rychlosti velmi přibližně, což je pro vrtulníky přijatelné, ale v mnoha jiných situacích zcela nepoužitelné, a proto chci použít pokročilejší regulátory, které potřebují signály z Hallových senzorů. A jako bonus získám úhel natočení rotoru, což je nesmírně užitečné.
Strávil jsem dětství s touto knihou v náručí, ale principům fungování bezkartáčových motorů jsem porozuměl až teď.

Ukazuje se, že krokové motory a tyto motory vrtulníků jsou (koncepčně) totéž. Jediný rozdíl je v počtu fází: krokové motory (obvykle, existují výjimky) jsou řízeny dvěma fázemi posunutými o 90° a bezkartáčové motory (opět obvykle) třemi fázemi posunutými o 120°.
Samozřejmě existují i další, čistě praktické rozdíly: krokové motory jsou navrženy pro zvýšení přídržného momentu a opakovatelnosti kroků, zatímco motory koptér jsou navrženy pro rychlost a plynulost otáčení, což ovlivňuje počet vinutí, ložisek atd. Ale nakonec lze běžný bezkartáčový motor použít v krokovém režimu a krokový motor v konstantní rotaci, jejich ovládání bude stejné.
Aktualizace: krásná animace od Arastase:
- 32 stm
- mrknutí++
- mozek Arduina
- Programování
- C + +
- Programování mikrokontroléru
- Robotika