Sadržaj:

Ugaona pozicijska kontrola koračnog motora 28BYJ-48 sa Arduino i analognim džojstikom: 3 koraka
Ugaona pozicijska kontrola koračnog motora 28BYJ-48 sa Arduino i analognim džojstikom: 3 koraka

Video: Ugaona pozicijska kontrola koračnog motora 28BYJ-48 sa Arduino i analognim džojstikom: 3 koraka

Video: Ugaona pozicijska kontrola koračnog motora 28BYJ-48 sa Arduino i analognim džojstikom: 3 koraka
Video: Drop Control: Increased tool control and user protection. 2024, Juli
Anonim
Ugaona pozicijska kontrola koračnog motora 28BYJ-48 sa Arduino i analognim džojstikom
Ugaona pozicijska kontrola koračnog motora 28BYJ-48 sa Arduino i analognim džojstikom

Ovo je shema upravljanja za stepper motor 28BYJ-48 koju sam razvio da koristim kao dio svoje završne godine disertacijskog projekta. Nisam vidio da se ovo radi ranije pa sam mislio prenijeti ono što sam otkrio. Nadam se da će ovo pomoći nekome drugome!

Kod u osnovi omogućava koračnom motoru da "kopira" kutni položaj analognog joystick -a, što znači da ako gurnete joystick prema naprijed, motor pokazuje prema "sjeveru". gurnite joystick prema zapadu, motor će se okrenuti prema istom smjeru.

Za moju implementaciju zahtijevao sam da se, ako se džojstik pusti, tj. Nema kutni položaj, motor vrati u "kućni" smjer. Domaći smjer je okrenut prema istoku, a motor (ili u zakupu bilo koji pokazivač / uređaj koji ste priključili na izlazno vratilo!) Također mora biti okrenut u tom smjeru kada je uključen.

Supplies

Arduino Uno ili slično

matična ploča i odabir kratkospojnih žica (muški na muški, muški na ženski)

5V napajanje

Analogni modul džojstika (idealno sa trenutnom funkcijom pritiska na dugme, ovo olakšava odmaranje u "kućnom" položaju

Koračni motor 28BYJ-48 i pokretač koraka ULN2003

Olovka, papir i blu-tac (ili bilo koji drugi pokazivački uređaj za pričvršćivanje na motor!)

Korak 1: Korak 1: Podešavanje

Spojite koračni motor na upravljač koraka i spojite pinove na sljedeći način:

IN1 - Arduino pin 8

IN2 - Arduino pin 9

IN3 - Arduino pin 10

IN4 - Arduino pin 11

Priključite napajanje od 5 volti u opskrbne šine na vašoj matičnoj ploči i spojite 5 V ulaze ULN2003 na dovodne šine. spojite uzemljenje sa uzemljenjem na vašem Arduinu.

za joystick spojite na sljedeći način:

Prekidač - Arduino pin 2

X os - Arduino A0 (analogno u 0)

Os Y - Arduino A1

+5V - Arduino 5V izlaz

GND - Arduino GND

Konačno spojite uzemljenje svoje matične ploče na drugi Arduino GND pin

Korak 2: Korak 2: Objašnjenje koda

Uključio sam cijeli Arduino kôd koji možete preuzeti i koristiti. Ali potrudit ću se da ovdje objasnim relevantne dijelove.

Teorija koja stoji iza ovog koda je da je prostor koji zauzima joystick podijeljen u grafikon, s 0, 0 u središtu. međutim ulazi džojstika leže na (približno) 512 u centru, pa se za prevladavanje ove dvije funkcije koriste za "nuliranje" vrijednosti očitane s osi X i Y. ovisno o izvoru napajanja koje koristite možda ćete morati promijeniti vrijednosti u funkcijama ZeroX i ZeroY tako da vaš joystick daje pouzdano očitanje 0 tijekom odmora.

Kada se pročitaju vrijednosti X, Y, one se prvo pretvaraju u radijane pomoću funkcije atan2 () u biblioteci math.h. Objašnjenje ove funkcije izvan je opsega ovog uputstva, ali molimo vas da to potražite - to je prilično jednostavan trik geometrije!

Konačno, kako bismo olakšali život onima od nas koji smo radili u stupnjevima, a ne u radima, vrijednost rada koju izračunava atan2 () pretvara se u stupnjeve.

Na vrhu petlje nalazi se mali isječak koda koji vam omogućuje da pritisnete trenutačno dugme na joystick -u za pomicanje lokacije "home". Ovo je bilo nevjerojatno korisno za testiranje koda, ali ostavio sam ga jer vidim kako bi u nekim slučajevima mogao biti koristan.

Sada na glavni dio koda! počinjemo čitanjem džojstika X, Y koordinata dvaput odvojenih odgodom od 10 ms, a zatim provjeravamo jesu li iste - otkrio sam da će džojstik povremeno emitirati sporadična očitanja, a ovo malo kašnjenje bilo je dovoljno da zaustavi okretanje motora na temelju ovih. To je također dovoljno kratko kašnjenje da izgleda da ne ometa namjerne unose.

Ostatak koda je prilično jasan i potrudio sam se da ga dokumentiram; Niz IF naredbi upoređuje trenutni ugao džojstika sa uglom motora i pomera motor do tog ugla. 28BYJ-48 ima 5.689 koraka po stepenu, pa zato množimo potrebno kretanje ovim naizgled neparnim brojem!

Jedan dio koda koji zahtijeva najviše objašnjenja je ono što sam nazvao "omotni slučaj". Čak i kada su upravljačka palica i motor bili na pr. +175 °, a džojstik se nakon toga pomaknuo na -175 ° (pomak od samo 10 ° na joystick -u, od sjeverozapada prema jugozapadu), motor bi se pomaknuo u pogrešnom smjeru za 350 °! da bi se ovo objasnilo napisan je poseban slučaj.

Slučaj zaokruživanja počinje provjerom da li motor i joystick imaju suprotne znakove, tj. Motor je pozitivan, a joystick negativan, ili obrnuto. Takođe proverava da li je zbir apsolutnih (to jest pozitivnih vrednosti) džojstika i motora iznad 180 °.

Ako su obje izjave točne, funkcija tada provjerava treba li se motor kretati u smjeru kazaljke na satu (vrijednost motora je negativna) ili u smjeru suprotnom od kazaljke na satu (ako je vrijednost motora pozitivna).

Apsolutne vrijednosti kuta motora i kuta upravljačke palice zbrajaju se i oduzimaju od 360 ° kako bi se odredila udaljenost za kretanje. Konačno, kut motora (koji sada odražava kut upravljačke palice) je ažuriran kao takav.

Korak 3: ZAVRŠENO

Dakle, sve što trebate učiniti je prenijeti kôd na svoj Arduino i pokrenuti ga! Pogledajte gornji video za dobru ideju o tome kako projekt funkcionira. Ovo bi bilo korisno za gimbale fotoaparata, robotske ruke i mnoge druge aplikacije!

Ako koristite kôd, obavijestite me, a ako vidite bilo gdje gdje se kôd može poboljšati, volio bih čuti vaše povratne informacije.

Preporučuje se: