Obsah:

Úhlové poziční ovládání krokového motoru 28BYJ-48 s Arduino a analogovým joystickem: 3 kroky
Úhlové poziční ovládání krokového motoru 28BYJ-48 s Arduino a analogovým joystickem: 3 kroky

Video: Úhlové poziční ovládání krokového motoru 28BYJ-48 s Arduino a analogovým joystickem: 3 kroky

Video: Úhlové poziční ovládání krokového motoru 28BYJ-48 s Arduino a analogovým joystickem: 3 kroky
Video: Krokový motor otočení o 90 stupňů 2024, Listopad
Anonim
Úhlové poziční ovládání krokového motoru 28BYJ-48 s Arduino a analogovým joystickem
Úhlové poziční ovládání krokového motoru 28BYJ-48 s Arduino a analogovým joystickem

Toto je kontrolní schéma krokového motoru 28BYJ-48, které jsem vyvinul pro použití v rámci svého závěrečného projektu disertační práce. Ještě jsem to neviděl, tak jsem si myslel, že nahraji to, co jsem objevil. Doufejme, že to pomůže někomu jinému!

Kód v zásadě umožňuje krokovému motoru „kopírovat“úhlovou polohu analogového joysticku, to znamená, že pokud joystick zatlačíte dopředu, motor míří na „sever“. zatlačením joysticku směrem na západ se motor otáčí a ukazuje stejným směrem.

Pro moji implementaci jsem požadoval, aby byl -li joystick uvolněn, tj. Nemá žádnou úhlovou polohu, motor se vrátil do „domovského“směru. Směr domů je orientován na východ a motor (nebo v nájmu jakýkoli ukazatel / zařízení, které jste připojili k výstupnímu hřídeli!) Musí také směřovat tímto směrem, když je zapnutý.

Zásoby

Arduino Uno nebo podobné

prkénko a výběr propojovacích vodičů (samec na samec, samec na samičku)

Napájení 5V

Analogový modul joysticku (ideálně s funkcí okamžitého tlačítka, to usnadňuje odpočinek „domovské“polohy

Krokový motor 28BYJ-48 a krokový ovladač ULN2003

Pero, papír a blu-tac (nebo jiné ukazovací zařízení k připojení k motoru!)

Krok 1: Krok 1: Nastavení

Připojte krokový motor k krokovému ovladači a připojte kolíky následujícím způsobem:

IN1 - Arduino pin 8

IN2 - Arduino pin 9

IN3 - pin Arduino 10

IN4 - Arduino pin 11

Připojte napájecí zdroj 5 V k napájecím lištám na desce a připojte 5V vstupy ULN2003 k napájecím lištám. připojte zemnicí lištu k zemi na vašem Arduinu.

pro joystick připojte následovně:

Přepínací pin - pin Arduino 2

Osa X - Arduino A0 (analogový v 0)

Osa Y - Arduino A1

+5V - výstup Arduino 5V

GND - Arduino GND

Nakonec připojte zem vašeho prkénka k druhému pinu Arduino GND

Krok 2: Krok 2: Vysvětlení kódu

Zahrnul jsem celý kód Arduino, který si můžete stáhnout a používat. Ale udělám vše pro to, abych vysvětlil příslušné části zde.

Teorie tohoto kódu spočívá v tom, že prostor obsazený joystickem je rozdělen na graf s 0, 0 uprostřed. nicméně vstupy joysticku spočívají na (přibližně) 512 ve středu, takže k překonání těchto dvou funkcí se používají k „vynulování“hodnoty načtené z osy X a Y. v závislosti na použitém napájecím zdroji budete možná muset změnit hodnoty ve funkcích ZeroX a ZeroY, aby váš joystick při odpočinku vydával spolehlivé hodnoty 0.

Když jsou načteny hodnoty X, Y, jsou nejprve převedeny na radiány pomocí funkce atan2 () v knihovně math.h. Vysvětlení této funkce je mimo rozsah tohoto pokynu, ale prosím, podívejte se na to - je to docela jednoduchý trik geometrie!

Nakonec, abychom usnadnili život těm z nás, kteří dříve pracovali ve stupních než v radech, je hodnota rad vypočítaná pomocí atan2 () převedena na stupně.

V horní části smyčky je malý úryvek kódu, který vám umožní kliknutím na momentální tlačítko na joysticku přesunout umístění „domů“. Při testování kódu to bylo neuvěřitelně užitečné, ale nechal jsem to tam, protože vidím, jak by to mohlo být v některých případech užitečné.

Nyní k hlavní části kódu! začneme čtením souřadnic joysticku X, Y dvakrát oddělených 10ms zpožděním a poté zkontrolujeme, zda jsou stejné - zjistil jsem, že joystick občas vydává sporadické hodnoty a toto malé zpoždění stačilo k zastavení otáčení motoru na základě těchto. Je to také dostatečně krátké zpoždění, které, jak se zdá, neruší záměrné vstupy.

Zbytek kódu je spíše samovysvětlující a udělal jsem maximum pro to, abych ho zdokumentoval; Série příkazů IF porovnává aktuální úhel joysticku s úhlem motoru a přesune motor do tohoto úhlu. 28BYJ-48 má 5 689 kroků na stupeň, a proto znásobujeme požadovaný pohyb tímto zdánlivě lichým číslem!

Jedna část kódu, která vyžaduje nejvíce vysvětlování, je to, co jsem nazval "obalený případ". V tom, že joystick a motor byly např. +175 ° a joystick se následně přesunul na -175 ° (pohyb pouze 10 ° na joysticku, od severu na západ k jihu na západ), motor by se pohyboval VE ŠPATNÉM SMĚRU o 350 °! aby to bylo vysvětleno, byl sepsán zvláštní případ.

Obal případ začíná kontrolou, že motor a joystick mají opačné znaky, tj. Motor je pozitivní a joystick negativní, nebo naopak. Také kontroluje, zda je součet absolutních (tj. Kladných hodnot) joysticku a motoru vyšší než 180 °.

Pokud jsou obě tato tvrzení pravdivá, funkce pak zkontroluje, zda se motor musí pohybovat ve směru hodinových ručiček (hodnota motoru je záporná) nebo proti směru hodinových ručiček (pokud je hodnota motoru kladná).

Sečtou se absolutní hodnoty úhlu motoru a úhlu joysticku a odečtou se od 360 ° k určení vzdálenosti k pohybu. Nakonec se úhel motoru (který nyní odráží úhel joysticku) aktualizuje jako takový.

Krok 3: DOKONČENO

Nezbývá tedy než nahrát kód do svého Arduina a spustit ho! Dobrou představu o tom, jak projekt funguje, najdete ve videu výše. To by bylo užitečné pro kardanové závěsy, robotická ramena a mnoho dalších aplikací!

Pokud kód použijete, dejte mi prosím vědět a pokud uvidíte, kde lze kód vylepšit, rád bych slyšel vaši zpětnou vazbu.

Doporučuje: