Obsah:

Řiďte krokový motor s mikroprocesorem AVR: 8 kroků
Řiďte krokový motor s mikroprocesorem AVR: 8 kroků

Video: Řiďte krokový motor s mikroprocesorem AVR: 8 kroků

Video: Řiďte krokový motor s mikroprocesorem AVR: 8 kroků
Video: LinuxDays 2017 - STM32 a Arduino - Petr Šrámek 2024, Červenec
Anonim
Řiďte krokový motor s mikroprocesorem AVR
Řiďte krokový motor s mikroprocesorem AVR

Leží vám nějaké uklizené krokové motory z tiskáren/diskových jednotek/atd.?

Několik sond s ohmetrem, následovaný jednoduchým kódem ovladače na vašem mikroprocesoru a budete krokovat stylově.

Krok 1: Seznamte se se steppery

Poznejte steppery
Poznejte steppery
Poznejte steppery
Poznejte steppery

V zásadě budete muset zjistit, kam vedou všechny malé dráty.

Prvním krokem je zjistit, zda se jedná o unipolární nebo bipolární motor. Podívejte se na Jones na Steppech pro nějaké hlubší pozadí, pak na Ian Harries 'Site pro jednoduchou metodu, jak zjistit neznámý motor. Trochu si přečtěte a přidejte se ke mně v průchodu tímto motorem, který jsem dostal levně. (Právě jsou v prodeji za 0,99 $. Jsou malé, relativně lehké, ale nemají velký točivý moment. Zatím nevím, k čemu to bude dobré.)

Krok 2: Najděte společnou řeč

Najděte společnou řeč
Najděte společnou řeč
Najděte společnou řeč
Najděte společnou řeč

Takže máte pět (nebo čtyři nebo šest) vodičů. Váš motor bude mít dvě poloviny a pravděpodobně to dokonce poznáte pouhým pohledem na to, ke které straně patří každý vodič.

Pokud se díváte pouze na čtyři vodiče, máte štěstí - je to bipolární motor. Jediné, co musíte udělat, je zjistit, které dva páry vodičů jdou dohromady. Pokud máte unipolární motor nebo více než 4 vodiče, budete muset vypnout ohmetr. To, co hledáte, je společný (uzemňovací) vodič pro každou polovinu. Můžete zjistit, který je uzemněn v bipolárním motoru, protože má poloviční odpor vůči jednomu z pólů než póly přes sebe. Na obrázku jsou moje poznámky k připojení vodičů k vodičům a zaznamenání odporu (nebo jestli jsou vůbec připojeny). Vidíte, že bílá je základem pro spodní trojici b/c, která má poloviční odpor k červené nebo modré, kterou mají navzájem. (Tento motor je zvláštní a nemá středový závit na horní magnetické cívce. Je to jako napůl bipolární, napůl unipolární. Možná byste toho mohli využít k detekci rotace v červeno-bílo-modré cívce, když je černo-žlutá cívka je poháněna.)

Krok 3: Zjistěte krokové pořadí

Zjistěte krokovou objednávku
Zjistěte krokovou objednávku

Chtěl jsem řídit tento motor jako bipolární, takže bílý zemnící vodič ignoruji. Mám jen čtyři dráty, o které se musím starat.

Možná budete chtít provozovat svůj unipolární motor jako bipolární, protože používá celou cívku v obou fázích místo střídání mezi oběma polovinami každé cívky. Více cívek = větší točivý moment. Proveďte proud přes pár (všimněte si polarity, kterou jste si vybrali) a poté protékejte proudem přes další pár současně. Když připojíte druhý pár, sledujte, jakým způsobem se motor otáčí. Zapište si to. Nyní otočte polaritu na prvním páru, který jste vybrali. Poté znovu připojte druhý pár s opačnou polaritou. Všimněte si směru. Z toho byste měli být schopni zjistit posloupnost otáčení motoru v obou směrech. V mém příkladu se oba otočili proti směru hodinových ručiček, takže procházení sekvence stejným způsobem, jaký jsem zvolil, zvýší CCW motoru.

Krok 4: Převzetí motoru na testovací jízdu

Převzetí motoru na zkušební jízdu
Převzetí motoru na zkušební jízdu

Pokud ještě nejste vybaveni programováním mikroprocesorů, můžete dopadnout hůř než Ghetto Development Kit nebo některý z různých PIC programátorů. Zapojte dráty přímo k vašemu mikroprocesoru a vypalte jej následujícím kódem:

/* Hrajeme si na pohánění malých krokových motorů. */

/ * Zahrnout funkci zpoždění */ #define F_CPU 1000000UL #include/ * Pin defs pro ATTiny2313 *// * Po směru hodinových ručiček */ #define BLUE _BV (PB0) #define BLACK _BV (PB1) #define RED _BV (PB2) #define ŽLUTÁ _BV (PB3) #definovat ZPOŽDĚNÍ 200 / * milisekund mezi kroky * / int hlavní (neplatné) {DDRB = 0xff; / * Povolit výstup na všech pinech B */ PORTB = 0x00; / * Nastavte je na 0v */ while (1) {/ * hlavní smyčka zde */ PORTB = MODRÁ; _delay_ms (ZPOŽDĚNÍ); PORTB = ČERNÝ; _delay_ms (ZPOŽDĚNÍ); PORTB = ČERVENÁ; _delay_ms (ZPOŽDĚNÍ); PORTB = ŽLUTÝ; _delay_ms (ZPOŽDĚNÍ); }} Jak jednoduchý je ten kód? Opravdu jednoduché. Jediné, co dělá, je udělat nějaké pěkné definice, abych mohl na dráty odkazovat spíše barvou než jejich názvy pinů, a pak je přepíná v pořadí s nastavitelným zpožděním mezi nimi. Pro začátek jsem vybral půlsekundové zpoždění mezi kroky. Výsledky najdete v krátkém videu. Pokud jste opravdu ve své hře, spočítejte počet kroků za cyklus, abyste zjistili jednostupňové úhlové rozlišení motoru. (Ach jo. PS. Jezdí bez zátěže na 3,6 V snadno. Viz baterie ve videu.)

Krok 5: Swing It Back and Forth

Takže to máte ve směru hodinových ručiček. Něco zajímavějšího? Malé vyčištění kódu a můžeme jej spustit tam a zpět. Pořadí ve směru hodinových ručiček jsem vložil do pole, takže můžete procházet fázemi pomocí jednoduché smyčky for. Nyní můžete spustit smyčku nahoru nebo dolů a jít ve směru nebo proti směru hodinových ručiček.

int main (void) {const uint8_t delay = 50; konst uint8_t po směru hodinových ručiček = {MODRÁ, ČERNÁ, ČERVENÁ, ŽLUTÁ}; uint8_t i; DDRB = 0xff; / * Povolit výstup na všech pinech B */ PORTB = 0x00; / * Nastavte je na 0v */ while (1) {/ * hlavní smyčka zde */ for (i = 0; i <= 3; i ++) {/ * procházejte barvami ve směru hodinových ručiček */ PORTB = ve směru hodinových ručiček ; _delay_ms (zpoždění); } for (i = 3; i> = 0; i-) { / * krok skrz barvy ccw * / PORTB = ve směru hodinových ručiček ; _delay_ms (zpoždění); }}} Podívejte se na pikantní video o tom, co to je.

Krok 6: Nikdy nepůlkrok, protože nejsem napůl krok …

Quest lyric stranou, napůl šlápnutí motoru je tam, kde je. Získáte více špičkového proudu, více okamžitého točivého momentu a dvojnásobné úhlové rozlišení. Stručně řečeno: Stručně řečeno, místo modré, černé, červené, žluté poháníte motor s modrou, modrou+černou, černou, černou+červenou, červenou, červenou+žlutou, žlutou, žlutou+modrou. Výsledkem je, že polovinu času zapojíte oba magnety najednou. A během doby, kdy jsou obě sady v záběru, motor ukazuje na polovinu mezi nimi, zmenšuje úhel mezi „kroky“a motor se otáčí plynuleji. Poznáte to z videa? Nejsem si jistý … Nyní část kódu, která provádí poloviční krok, vypadá takto:

neplatné halfStepping (uint16_t zpoždění, uint8_t směr ) {uint8_t i; pro (i = 0; i <= 3; i ++) {PORTB = směr ; / * část s jednou cívkou */ _delay_ms (zpoždění); PORTB | = směr [i+1]; / * přidat v půl kroku */ _delay_ms (zpoždění); }} První příkaz PORTB nastaví jeden pól na kladný a zbytek na záporný. Pak to čeká. Poté druhý příkaz PORTB nastaví druhý pól (na druhém vinutí) na kladný, přičemž zapojí obě vinutí pro 1,4násobek momentu (a dvojnásobek proudu). Níže je přiložen úplný seznam programů. Nyní jsou definována dvě pole (ve směru hodinových ručiček, proti směru hodinových ručiček) a obě mají po 5 prvcích, které umožňují vstup i+1 do funkce halfStepping.

Krok 7: Přidejte ovladač motoru

Přidejte ovladač motoru
Přidejte ovladač motoru
Přidejte ovladač motoru
Přidejte ovladač motoru
Přidejte ovladač motoru
Přidejte ovladač motoru

Zatím je vše dobré.

Jediným problémem je, že se zdá, že motor nemá tolik točivého momentu, což by mohlo být způsobeno skutečností, že mikroprocesor vydá pouze ~ 50 mA na kolík. Zjevným dalším krokem by bylo připojit ho k řidiči motoru, aby mu dodal více šťávy. Ale pak trochu přemýšlím: Řídím to pouze s 5V a odpor vinutí cívky je ~ 125 ohmů. Což znamená, že motor má pouze 40mA na pin a měl by být v pohodě poháněn (svalnatým!) AVR čipem. Abych získal větší napětí pohánějící motor, připojil jsem ho k čipu SN754410 H-bridge. Obvod je docela jednoduchý. Každý pin z AVR jde na vstup a odpovídající výstupní piny jdou do motoru. Čip potřebuje pro logickou sekci 5v a v motorové části může odebírat mnohem více napětí. Provoz na 11,25v (tři 3,6v baterie) trochu pomohl. Znatelně větší točivý moment na můj prst, ale stále to není powerhouse. Není to špatné pro motor, který je menší než nikl. A nyní se obvod stal univerzálním ovladačem bipolárního krokového motoru. Přidáno 29. listopadu: Včera chvíli chvíli běžel motor na 12 V a začalo být horko. Nejsem si jistý, jestli to byl problém s rezonanční frekvencí, nebo jestli to bylo prostě příliš mnoho proudu pro vinutí. Ať tak či onak, buďte trochu opatrní, pokud řídíte tento malý motor s větším napětím.

Krok 8: Konec

Co jsem se tedy naučil? Řízení krokového motoru s AVR (a čipem H-můstku) je docela snadné, dokonce i v „efektním“režimu polovičního kroku.

Zatím si nejsem jistý, co budu dělat s malými krokovými motory. Nějaké návrhy?

Doporučuje: