Cuprins:

Conduceți un motor pas cu pas cu un microprocesor AVR: 8 pași
Conduceți un motor pas cu pas cu un microprocesor AVR: 8 pași

Video: Conduceți un motor pas cu pas cu un microprocesor AVR: 8 pași

Video: Conduceți un motor pas cu pas cu un microprocesor AVR: 8 pași
Video: CUM SI CAND SCHIMBI TREPTELE DE VITEZA? | GHID COMPLET 2024, Iulie
Anonim
Acționați un motor pas cu pas cu un microprocesor AVR
Acționați un motor pas cu pas cu un microprocesor AVR

Ai niște motoare pas cu pas scăpate de la imprimante / unități de disc / etc care se află în jur?

Unele sondaje cu un ohmetru, urmate de un cod de driver simplu pe microprocesor și veți păși în stil.

Pasul 1: cunoașteți Steppers

Cunoașteți Steppers
Cunoașteți Steppers
Cunoașteți Steppers
Cunoașteți Steppers

Practic, va trebui să vă dați seama unde merg toate firele mici.

Primul pas este de a afla dacă este un motor unipolar sau bipolar. Aruncați o privire la Jones on Steppers pentru un fundal mai profund, apoi la Site-ul lui Ian Harries pentru o metodă simplă de a afla un motor necunoscut. Citiți un pic, apoi alăturați-mi o prezentare generală a acestui motor pe care l-am obținut ieftin. (Sunt în vânzare cu 0,99 USD chiar acum. Sunt mici, relativ ușoare, dar nu au cuplu prea mare. Nu știu pentru ce va fi bine încă.)

Pasul 2: Găsiți un punct comun

Găsiți un punct comun
Găsiți un punct comun
Găsiți un punct comun
Găsiți un punct comun

Deci ai cinci (sau patru sau șase) fire. Motorul dvs. va avea două jumătăți și probabil vă puteți da seama doar uitându-vă la ce parte aparține fiecărui fir.

Dacă te uiți doar la patru fire, ai noroc - este un motor bipolar. Tot ce trebuie să faceți este să vă dați seama care două perechi de fire merg împreună. Dacă aveți un motor unipolar sau mai mult de 4 fire, va trebui să vă rupeți ohmmetrul. Ceea ce căutați este firul comun (la sol) pentru fiecare jumătate. Vă puteți da seama care este împământat într-un motor bipolar, deoarece are o rezistență la jumătate față de oricare dintre poli decât polii între ei. În imagine sunt notele mele de la conectarea firelor la fire și la remarcarea rezistenței (sau dacă sunt conectate deloc). Puteți vedea că albul este solul pentru trio-ul inferior b / c, are o rezistență la jumătate față de roșu sau albastru pe care o au între ele. (Acest motor este ciudat și nu are o atingere centrală pe bobina superioară a magnetului. Este ca și cum ar fi pe jumătate bipolar, pe jumătate unipolar. Poate ați putea folosi acest lucru pentru a simți rotația bobinei roșu-alb-albastru când negru-galben bobina este acționată.)

Pasul 3: Descoperiți ordinea de trepte

Descoperiți ordinea de trepte
Descoperiți ordinea de trepte

Urma să conduc acest motor ca unul bipolar, așa că ignor firul de masă alb. Am doar patru fire de care să-mi fac griji.

Poate doriți să rulați motorul unipolar ca bipolar oricum, deoarece folosește întreaga bobină în ambele faze în loc să alterneze între cele două jumătăți ale fiecărei bobine. Mai multă bobină = mai mult cuplu. Treceți curentul printr-o pereche (observând polaritatea pe care ați ales-o) și apoi treceți curentul prin cealaltă pereche în același timp. Când conectați a doua pereche, urmăriți în ce direcție se rotește motorul. Notează asta. Acum inversați polaritatea primei perechi pe care ați ales-o. Apoi conectați din nou cea de-a doua pereche cu polaritatea lor inversată. Rețineți direcția. Din aceasta ar trebui să puteți afla succesiunea rotirii motorului în ambele direcții. În exemplul meu, ambele au ajuns să se întoarcă în sens invers acelor de ceasornic, așa că pășind prin secvență în același mod în care am ales, va trece motorul CCW.

Pasul 4: Luarea motorului pentru o unitate de testare

Luarea motorului pentru un test drive
Luarea motorului pentru un test drive

Dacă nu sunteți deja pregătit pentru programarea microprocesorului, puteți face mai rău decât Ghetto Development Kit sau oricare dintre diferiții programatori PIC. Conectați firele direct la microproc și ardeți-le cu următorul cod:

/ * Jucând cu acționarea micilor motoare pas cu pas. * /

/ * Include funcția de întârziere * / #define F_CPU 1000000UL #include / * Pin defs for ATTiny2313 * / / * Orderwise clock * / #define BLUE _BV (PB0) #define BLACK _BV (PB1) #define RED _BV (PB2) #define YELLOW _BV (PB3) #define DELAY 200 / * milisecunde între pași * / int main (void) {DDRB = 0xff; / * Activați ieșirea pe toți pinii B * / PORTB = 0x00; / * Setați-le pe toate la 0v * / while (1) {/ * bucla principală aici * / PORTB = ALBASTRU; _delay_ms (DELAY); PORTB = NEGRU; _delay_ms (DELAY); PORTB = RED; _delay_ms (DELAY); PORTB = GALBEN; _delay_ms (DELAY); }} Cât de simplu este acest cod? Chiar simplu. Tot ce face este să facă niște definiții frumoase, astfel încât să mă pot referi la fire mai degrabă la culoare decât la numele lor de pin, apoi le activează în ordine, cu o întârziere reglabilă între ele. Pentru început, am selectat o întârziere de jumătate de secundă între pași. Vedeți scurtul videoclip pentru rezultate. Dacă sunteți cu adevărat în joc, numărați numărul de pași pe ciclu pentru a afla rezoluția unghiulară a pasului cu un singur motor. (Oh, da. PS. Unități fără sarcină la 3.6v cu ușurință. Vedeți bateria în videoclip.)

Pasul 5: Swing It Back and Forth

Așa că l-ați rulat în sensul acelor de ceasornic. Ceva mai interesant? O mică curățare a codului și o putem rula înainte și înapoi. Am pus secvența în sensul acelor de ceasornic într-o matrice, astfel încât să puteți parcurge fazele cu o buclă simplă. Acum puteți rula bucla în sus sau în jos pentru a merge în sensul acelor de ceasornic sau invers.

int main (void) {const uint8_t delay = 50; const uint8_t în sensul acelor de ceasornic = {ALBASTRU, NEGRU, ROȘU, GALBEN}; uint8_t i; DDRB = 0xff; / * Activați ieșirea pe toți pinii B * / PORTB = 0x00; / * Setați-le pe toate la 0v * / while (1) {/ * bucla principală aici * / pentru (i = 0; i <= 3; i ++) {/ * treceți prin culorile în sensul acelor de ceasornic * / PORTB = în sensul acelor de ceasornic ; _delay_ms (întârziere); } pentru (i = 3; i> = 0; i -) {/ * treceți prin culorile ccw * / PORTB = în sensul acelor de ceasornic ; _delay_ms (întârziere); }}} Vedeți videoclipul îndrăzneț pentru back-and-forthing.

Pasul 6: Nu fac niciodată jumătate de pas, pentru că nu sunt jumătate de pas …

Caută lirica deoparte, jumătatea pasului motorului este acolo. Obțineți un curent de vârf mai mare, un cuplu mai instantaneu și o rezoluție unghiulară de două ori. Jumătate în pași: în loc de Albastru, Negru, Roșu, Galben, conduceți motorul cu Albastru, Albastru + Negru, Negru, Negru + Roșu, Roșu, Roșu + Galben, Galben, Galben + Albastru. Rezultatul este că, pentru jumătate din timp, angajați ambii magneți simultan. Și în timpul timpului în care ambele seturi sunt angajate, motorul indică la jumătatea distanței dintre cele două, micșorând unghiul dintre „trepte” și făcând motorul să se întoarcă mai ușor. Îmi dai seama din videoclip? Nu sunt sigur … Acum partea de cod care face jumătate de pas arată astfel:

void halfStepping (uint16_t întârziere, uint8_t direcție ) {uint8_t i; pentru (i = 0; i <= 3; i ++) {PORTB = direcția ; / * piesă cu o singură bobină * / _delay_ms (întârziere); PORTB | = direcția [i + 1]; / * adăugați în jumătate de pas * / _delay_ms (întârziere); }} Prima comandă PORTB stabilește un singur pol la pozitiv și restul la negativ. Apoi așteaptă. Apoi, a doua comandă PORTB stabilește un al doilea pol (pe cealaltă înfășurare) la pozitiv, angajând ambele înfășurări pentru cuplul de 1,4x (și 2x curentul). O listă completă a programului este atașată mai jos. Două tablouri sunt acum definite (în sensul acelor de ceasornic, în sens invers acelor de ceasornic) și ambele au câte 5 elemente pentru a permite intrarea i + 1 în funcția halfStepping.

Pasul 7: Adăugați un driver de motor

Adăugați un driver de motor
Adăugați un driver de motor
Adăugați un driver de motor
Adăugați un driver de motor
Adăugați un driver de motor
Adăugați un driver de motor

Până acum, bine.

Singura problemă este că motorul nu pare să aibă atât de mult cuplu, ceea ce s-ar putea datora faptului că microprocesorul va scoate doar ~ 50mA per pin. Următorul pas evident ar fi să-l conectați la un șofer de motor pentru a-l alimenta cu mai mult suc. Dar apoi mă gândesc puțin: îl conduc doar cu 5v, iar rezistența la bobină este de ~ 125 ohmi. Ceea ce înseamnă că motorul atrage doar 40mA pe pin și ar trebui să fie condus foarte bine de cipul AVR (puternic!). Deci, pentru a obține mai multă tensiune care conduce motorul, l-am conectat la un cip SN754410 H-bridge. Circuitul este destul de simplu. Fiecare pin de la AVR merge la o intrare, iar pinii de ieșire corespunzători merg la motor. Cipul are nevoie de 5v pentru secțiunea logică și poate lua mult mai multă tensiune în secțiunea motor. Rularea acestuia pe 11.25v (trei baterii de 3.6v) a ajutat puțin. Cuplu semnificativ mai mare la degetul meu, dar încă nu este o putere. Nu este rău pentru un motor mai mic decât un nichel. Și acum circuitul a devenit un driver de motor pas cu pas bipolar de uz general. Adăugat 29 noiembrie: Am pornit motorul aseară la 12v pentru o vreme și a început să se încălzească. Nu sunt sigur dacă a fost o problemă de frecvență rezonantă sau dacă pur și simplu a fost prea mult curent pentru înfășurări. Oricum ar fi, fiți puțin atenți dacă conduceți acest mic motor cu tensiuni mai mari.

Pasul 8: Sfârșitul

Deci, ce am învățat? Conducerea unui motor pas cu pas cu un AVR (și un cip H-bridge) este destul de ușoară, chiar și în modul „fantezist” la jumătate de pas.

Totuși, nu sunt sigur ce voi face cu micile motoare pas cu pas. Orice sugestii?

Recomandat: