Kazalo:

Vozite koračni motor z mikroprocesorjem AVR: 8 korakov
Vozite koračni motor z mikroprocesorjem AVR: 8 korakov

Video: Vozite koračni motor z mikroprocesorjem AVR: 8 korakov

Video: Vozite koračni motor z mikroprocesorjem AVR: 8 korakov
Video: Self-Driving Cars 2024, Julij
Anonim
Vozite koračni motor z mikroprocesorjem AVR
Vozite koračni motor z mikroprocesorjem AVR

Imate naokoli nekaj počiščenih koračnih motorjev iz tiskalnikov/diskovnih pogonov/itd?

Nekaj sondiranja z ohmetrom, ki mu sledi nekaj preproste kode gonilnika na vašem mikroprocesorju in stopili boste v slogu.

1. korak: Spoznajte korake

Spoznajte korake
Spoznajte korake
Spoznajte korake
Spoznajte korake

V bistvu boste morali ugotoviti, kam gredo vse majhne žice.

Prvi korak je ugotoviti, ali gre za enopolarni ali bipolarni motor. Oglejte si Jones on Steppers za globlje ozadje, nato pa na spletnem mestu Iana Harriesa za preprosto metodo ugotavljanja neznanega motorja. Preberi malo, nato se mi pridruži v sprehodu tega motorja, ki sem ga dobil poceni. (Trenutno so v prodaji za 0,99 USD. Majhne so, relativno lahke, vendar nimajo velikega navora. Ne vem še, za kaj bo to dobro.)

2. korak: Poiščite skupno podlago

Poiščite skupno podlago
Poiščite skupno podlago
Poiščite skupno podlago
Poiščite skupno podlago

Torej imate pet (ali štiri ali šest) žic. Vaš motor bo imel dve polovici in verjetno lahko celo ugotovite, če pogledate, kateri strani pripada vsaka žica.

Če gledate samo štiri žice, imate srečo - to je bipolarni motor. Vse kar morate storiti je, da ugotovite, katera dva para žic gresta skupaj. Če imate unipolarni motor ali več kot 4 žice, boste morali prekiniti ohmeter. Kar iščete, je skupna (ozemljena) žica za vsako polovico. Lahko ugotovite, kaj je ozemljeno v bipolarnem motorju, ker ima polovico upora proti enemu od polov, kot pa polovi med seboj. Na sliki so moji zapiski o priklopu žic na žice in ugotavljanju upora (ali če so sploh povezani). Vidite lahko, da je bela podlaga za spodnjo trojko b/c, saj ima polovico odpornosti proti rdeči ali modri, ki jo imata drug do drugega. (Ta motor je nenavaden in nima središčne pipe na zgornji magnetni tuljavi. Kot da je pol-bipolarna, napol unipolarna. Morda bi to lahko uporabili za zaznavanje vrtenja v rdeče-belo-modri tuljavi, ko je črno-rumena tuljava se poganja.)

3. korak: Ugotovite vrstni red korakov

Ugotovite vrstni red korakov
Ugotovite vrstni red korakov

Ta motor sem nameraval voziti kot bipolarni, zato ignoriram belo ozemljeno žico. Skrbeti moram samo za štiri žice.

Morda boste vseeno želeli, da vaš unipolarni motor deluje kot bipolarni, ker uporablja celotno tuljavo v obeh fazah, namesto da bi izmenjal dve polovici vsake tuljave. Več tuljave = večji navor. Prenesite tok skozi par (pri čemer upoštevajte izbrano polarnost) in nato tok skozi drugi par hkrati. Ko priključite drugi par, pazite, v katero smer se motor obrne. Zapišite to. Zdaj obrnite polarnost na prvi par, ki ste ga izbrali. Nato spet povežite drugi par z obrnjeno polarnostjo. Upoštevajte smer. Na podlagi tega bi morali ugotoviti zaporedje vrtenja motorja v obe smeri. V mojem primeru sta se oba obrnila v nasprotni smeri urinega kazalca, zato bo korak po zaporedju na enak način, kot sem ga izbral, stopil v smer motorja CCW.

4. korak: Vzemite motor za testno vožnjo

Odvzem motorja na testno vožnjo
Odvzem motorja na testno vožnjo

Če še niste pripravljeni na programiranje mikroprocesorjev, bi lahko naredili slabše od Ghetto Development Kit ali katerega od različnih programerjev PIC. Priključite žice neposredno na mikroprocesor in ga zažgite z naslednjo kodo:

/* Igranje z zagonom majhnih koračnih motorjev. */

/ * Vključi funkcijo zakasnitve */ #define F_CPU 1000000UL #include/ * Pin defs for ATTiny2313 *// * V smeri urinega kazalca */ #define BLUE _BV (PB0) #define BLACK _BV (PB1) #define RED _BV (PB2) #define RUMENI _BV (PB3) #define ZAKASNITEV 200 / * milisekund med koraki * / int main (void) {DDRB = 0xff; / * Omogoči izhod na vseh B zatičih */ PORTB = 0x00; / * Nastavite jih na 0v */ while (1) {/ * glavna zanka tukaj */ PORTB = MODRA; _dey_ms (DELAY); PORTB = ČRNA; _dey_ms (DELAY); PORTB = RDEČA; _dey_ms (DELAY); PORTB = RUMENO; _dey_ms (DELAY); }} Kako preprosta je ta koda? Res preprosto. Vse, kar naredi, je, da naredi nekaj lepih definicij, da se lahko žice sklicujem na barvo in ne na njihova imena pin, nato pa jih vklopi v zaporedju z nastavljivo zakasnitvijo vmes. Za začetek sem izbral pol sekundni zamik med koraki. Za rezultate si oglejte kratek video. Če ste res v igri, preštejte število korakov na cikel, da ugotovite enostopenjsko kotno ločljivost motorja. (O, ja. PS. Z lahkoto vozi brez obremenitve pri 3,6 V. Oglejte si baterijo v videu.)

5. korak: Zavrtite naprej in nazaj

Torej teče v smeri urinega kazalca. Je še kaj bolj zanimivega? Malo čiščenja kode in ga lahko izvajamo naprej in nazaj. Zaporedje v smeri urinega kazalca sem postavil v matriko, tako da lahko stopite skozi faze s preprosto zanko for. Zdaj lahko zaženete zanko navzgor ali navzdol, da greste v smeri urinega kazalca ali v nasprotni smeri.

int main (void) {const uint8_t zakasnitev = 50; const uint8_t v smeri urinega kazalca = {MODRA, ČRNA, RDEČA, RUMENA}; uint8_t i; DDRB = 0xff; / * Omogoči izhod na vseh B zatičih */ PORTB = 0x00; / * Nastavite jih na 0v */ medtem ko (1) {/ * glavna zanka tukaj */ za (i = 0; i <= 3; i ++) {/ * korak skozi barve v smeri urinega kazalca */ PORTB = v smeri urinega kazalca ; _delay_ms (zamuda); } za (i = 3; i> = 0; i-) { / * korak skozi barve ccw * / PORTB = v smeri urinega kazalca ; _delay_ms (zamuda); }}} Za nazaj in naprej si oglejte video posnetek.

Korak 6: Nikoli ne delam polovičnega koraka, ker nisem polovični …

Če odmislite besedo na stran, na pol korakate z motorjem. Dobite več vršnega toka, več trenutnega navora in dvakratno kotno ločljivost. Na pol koraki na kratko: Namesto modre, črne, rdeče, rumene barve motor vozite z modro, modro+črno, črno, črno+rdečo, rdečo, rdečo+rumeno, rumeno, rumeno+modro. Rezultat je, da polovico časa uporabljate oba magneta hkrati. V času, ko sta oba sklopa vklopljena, motor pokaže na pol poti med obema, krči kot med "koraki" in tako motor bolj gladko obrača. Lahko poveš iz videa? Nisem prepričan … Zdaj je del kode, ki izvaja polstepenjo, videti tako:

void halfStepping (uint16_t zamuda, uint8_t smer ) {uint8_t i; za (i = 0; i <= 3; i ++) {PORTB = smer ; / * del z eno tuljavo */ _delay_ms (zamuda); PORTB | = smer [i+1]; / * dodaj v pol koraka */ _delay_ms (zamuda); }} Prvi ukaz PORTB nastavi en sam pol na pozitivno, vse ostale pa na negativno. Potem pa čaka. Nato drugi ukaz PORTB nastavi drugi pol (na drugem navitju) na pozitivno, pri čemer oba navitja vključita 1,4 -kratni navor (in 2x tok). Celoten seznam programov je priložen spodaj. Zdaj sta definirani dve matriki (v smeri urinega kazalca, v nasprotni smeri urinega kazalca) in oba imata po 5 elementov, ki omogočajo vnos i+1 v funkciji halfStepping.

7. korak: Dodajte gonilnik motorja

Dodajte gonilnik motorja
Dodajte gonilnik motorja
Dodajte gonilnik motorja
Dodajte gonilnik motorja
Dodajte gonilnik motorja
Dodajte gonilnik motorja

Zaenkrat dobro.

Edina težava je v tem, da se zdi, da motor nima toliko navora, kar je lahko posledica dejstva, da bo mikroprocesor dal le 50 mA na pin. Očiten naslednji korak bi bil, da ga priklopite na voznika motorja, da ga oskrbi z več soka. Potem pa malo pomislim: vozim ga samo s 5v, upor navitja tuljave pa je ~ 125 ohmov. Kar pomeni, da motor črpa samo 40mA na pin, zato ga mora poganjati (močan!) AVR čip. Za večjo napetost, ki poganja motor, sem ga priključil na čip SN-mosta SN754410. Vezje je precej preprosto. Vsak pin iz AVR gre na vhod, ustrezni izhodni zatiči pa na motor. Čip potrebuje 5v za logični del in lahko prenese veliko več napetosti v motornem delu. Nekoliko mi je pomagalo delovanje na 11,25V (tri baterije 3,6V). Opazno večji navor na mojem prstu, vendar še vedno ni elektrarna. Ni slabo za motor, ki je manjši od niklja. In zdaj je vezje postalo splošni gonilnik bipolarnega koračnega motorja. Dodano 29. novembra: Sinoči sem nekaj časa zagnal motor pri 12v in začel se je segrevati. Nisem prepričan, ali je šlo za problem z resonančno frekvenco ali pa je bil preprosto preveč tok za navitja. Kakorkoli, bodite previdni, če vozite ta mali motor z večjo napetostjo.

8. korak: Konec

Kaj sem se torej naučil? Vožnja koračnega motorja z AVR (in čipom H-bridge) je precej enostavna, tudi v "fancy" polstopenjskem načinu.

Ne vem pa, kaj bom še z malimi koračnimi motorji. Kakšen predlog?

Priporočena: