Kontrolli Pozicional Këndor i Motorit Stepper 28BYJ-48 Me Arduino & Joystick Analogue: 3 Hapa
Kontrolli Pozicional Këndor i Motorit Stepper 28BYJ-48 Me Arduino & Joystick Analogue: 3 Hapa
Anonim
Kontrolli Pozicional Këndor i Motorit Stepper 28BYJ-48 Me Arduino & Joystick Analogue
Kontrolli Pozicional Këndor i Motorit Stepper 28BYJ-48 Me Arduino & Joystick Analogue

Kjo është një skemë kontrolli për motorin stepper 28BYJ-48 që kam zhvilluar për ta përdorur si pjesë e projektit të disertacionit të vitit të fundit. Unë nuk e kam parë këtë të bërë më parë, kështu që mendova të ngarkoja atë që zbulova. Shpresoj se kjo do të ndihmojë dikë tjetër atje!

Kodi në thelb lejon një motor stepper të "kopjojë" pozicionin këndor të një levë analoge, domethënë nëse e shtyni levën përpara, motori drejtohet drejt "veriut". shtyjeni levën drejt perëndimit, motori rrotullohet në pikën në të njëjtin drejtim.

Për zbatimin tim, unë kërkova që nëse levë lëshohet, domethënë nuk ka pozicion këndor, motori kthehet në drejtimin "në shtëpi". Drejtimi i shtëpisë është i drejtuar nga lindja, dhe motori (ose me qira çfarëdo treguesi / pajisje që i keni bashkangjitur boshtit dalës!) Gjithashtu duhet të jetë përballë këtij drejtimi kur ndizet.

Furnizimet

Arduino Uno ose të ngjashme

bukë dhe përzgjedhja e telave të kërcyesit (mashkull në mashkull, mashkull në femër)

Furnizimi me energji 5V

Moduli xhojstik analog (në mënyrë ideale me një funksion butoni të shtypjes së çastit, kjo e bën pushimin më të lehtë të pozicionit "shtëpi"

Motor stepper 28BYJ-48 dhe shofer stepper ULN2003

Stilolaps, letër dhe blu-tac (ose ndonjë pajisje tjetër treguese për t'u bashkuar me motorin!)

Hapi 1: Hapi 1: Konfigurimi

Lidhni motorin stepper me drejtuesin stepper dhe lidhni kunjat si më poshtë:

IN1 - pin Arduino 8

IN2 - kunja Arduino 9

IN3 - Arduino pin 10

IN4 - pin Arduino 11

Lidhni furnizimin me energji elektrike 5v me binarët e furnizimit në pllakën tuaj të bukës dhe lidhni hyrjet ULN2003 5v me binarët e furnizimit. lidhni hekurudhën tokësore me tokën në Arduino tuaj.

për levën, lidheni si më poshtë:

Kaloni pin - Arduino pin 2

Boshti X - Arduino A0 (Analog në 0)

Boshti Y - Arduino A1

+5V - dalje Arduino 5V

GND - Arduino GND

Më në fund lidhni tokën e tabelës suaj me kunjin tjetër Arduino GND

Hapi 2: Hapi 2: Shpjegimi i Kodit

Unë kam përfshirë kodin e plotë Arduino për ta shkarkuar dhe përdorur. Por do të bëj çmos për të shpjeguar pjesët përkatëse këtu.

Teoria pas këtij kodi është se hapësira e zënë nga levë ndahet në një grafik, me 0, 0 në qendër. sidoqoftë hyrjet e levës qëndrojnë në (përafërsisht) 512 në qendër, kështu që për të kapërcyer këtë dy funksione përdoren për të "zero" vlerën e lexuar nga boshti X dhe Y. në varësi të furnizimit me energji elektrike që përdorni mund t'ju duhet të ndryshoni vlerat në funksionet ZeroX dhe ZeroY në mënyrë që levë juaj të japë një lexim të besueshëm të 0 kur pushoni.

Kur lexohen vlerat X, Y, ato konvertohen së pari në radianë duke përdorur funksionin atan2 () në bibliotekën math.h. Shpjegimi i këtij funksioni është jashtë fushëveprimit të këtij udhëzimi, por ju lutemi shikoni atë - është një truk mjaft i thjeshtë gjeometrie!

Së fundi, për ta bërë jetën më të lehtë për ata prej nesh që punonin në gradë dhe jo në rad, vlera e rad e llogaritur nga atan2 () konvertohet në gradë.

Në krye të lakut është një pjesë e vogël e kodit që ju lejon të klikoni në butonin momental në levë për të lëvizur vendndodhjen "shtëpi". Kjo ishte tepër e dobishme gjatë testimit të kodit, por e kam lënë atë pasi mund të shoh se si mund të jetë i dobishëm në disa raste.

Tani në pjesën kryesore të kodit! ne fillojmë duke lexuar levën X, koordinatat Y të ndara dy herë me një vonesë 10ms dhe pastaj duke kontrolluar nëse ato janë të njëjta - zbulova se levë herë pas here do të jepte lexime sporadike, dhe kjo vonesë e vogël ishte e mjaftueshme për të ndaluar rrotullimin e motorit bazuar në këto Me Alsoshtë gjithashtu një vonesë mjaft e shkurtër saqë nuk duket se ndërhyn në hyrjet e qëllimshme.

Pjesa tjetër e kodit është mjaft vetë -shpjeguese dhe unë kam bërë çmos për ta dokumentuar atë; Një seri deklaratash IF krahasojnë këndin aktual të levës me këndin e motorit dhe e lëvizin motorin në atë kënd. 28BYJ-48 ka 5.689 hapa për shkallë, prandaj ne shumëzojmë lëvizjen e kërkuar me këtë numër në dukje të çuditshëm!

Njëra pjesë e kodit që kërkon më shumë shpjegim është ajo që unë e kam quajtur "rasti përfundimtar". Në atë që levë & motor ishin në p.sh. +175 °, dhe levë më pas u zhvendos në -175 ° (një lëvizje prej vetëm 10 ° në levë, nga veriu i perëndimit në jug të perëndimit), motori do të lëvizte në drejtimin e gabuar me 350 °! për të dhënë llogari për këtë rasti i veçantë është shkruar.

Rasti përfundimtar fillon duke kontrolluar që motori dhe levë kanë shenja të kundërta, domethënë motori është pozitiv dhe levë negative, ose anasjelltas. Gjithashtu kontrollon që shuma e vlerave absolute (domethënë pozitive) të levës dhe motorit është mbi 180 °.

Nëse të dyja këto pohime janë të vërteta, atëherë funksioni kontrollon nëse motori duhet të lëvizë në drejtim të akrepave të orës (vlera e motorit është negativ) ose në drejtim të kundërt (nëse vlera e motorit është pozitive).

Vlerat absolute të këndit të motorit dhe këndit të levës janë mbledhur dhe zbritur nga 360 ° për të përcaktuar distancën për të lëvizur. Së fundi, këndi i motorit (i cili tani pasqyron këndin e levës) përditësohet si i tillë.

Hapi 3: P FRFUNDUAR

Pra, gjithçka që mbetet për të bërë është të ngarkoni kodin në Arduino tuaj dhe ta ekzekutoni! Shikoni videon e mësipërme për një ide të mirë se si funksionon projekti. Kjo do të ishte e dobishme për gimbalët e kamerës, krahët robotikë dhe shumë aplikacione të tjera!

Nëse përdorni kodin, ju lutem më tregoni, dhe nëse shihni ndonjë vend ku mund të përmirësohet kodi, do të doja të dëgjoja reagimet tuaja.

Recommended: