El 28BYJ-48 ir vienpolārs pakāpju motors zemas izmaksas un augsta precizitāte, ideāli piemērots elektronikas projektiem, 3D printeriem, CNC iekārtām un robotikai. Tā kompaktais izmērs, zemais enerģijas patēriņš un lietošanas vienkāršība padara to par populāru izvēli elektronikas cienītājiem un profesionāļiem.
Turklāt kopā ar šo dzinēju a modulis ar ULN2003, jūsu kontrolei. Tādā veidā mums ir viss nepieciešamais, lai varētu pilnībā izmantot šo sistēmu, izmantojot mikrokontrolleri vai plati Arduino vai līdzīgi.
Kas ir 28BYJ-48 pakāpju motors?
Un pakāpju motors ir elektromotora veids kas kustas ar maziem diskrētiem leņķiskajiem soļiem, nevis nepārtraukti griežas. Tas darbojas, izmantojot elektromagnētu komplektu, kas tiek aktivizēti noteiktā secībā. Aktivizējot dažādus elektromagnētus, tiek izveidots magnētiskais lauks, kas pievelk motora rotoru, liekot tam griezties pa soli. Pakāpju skaits vienā apgriezienā un kustības precizitāte ir atkarīga no konkrētā motora konstrukcijas un izmantotās vadības secības.
Pakāpju motoros mums ir divi veidi:
- Unipolārs- Viņiem ir viens spoļu komplekts, un tiem ir nepieciešams īpašs kontrolieris, lai mainītu strāvu un liktu motoram griezties abos virzienos.
- Bipolāri- Tiem ir divi neatkarīgu spoļu komplekti, kas ļauj tiem griezties abos virzienos, neizmantojot īpašu kontrolieri.
28BYJ-28 gadījumā tas ir vienpolārais tips, kā jau minēju iepriekš. Un šajā grupā to raksturo sekojošais specs:
- Unipolārs steperis: vienkārša vadība tikai ar 4 kabeļiem.
- Integrēts reduktors: nodrošina augstu precizitāti (0.088° uz soli) un griezes momentu (3 N·cm).
- Zems patēriņš: 83 mA (5 V modelis) vai 32 mA (12 V modelis).
- barošana: 5V vai 12V (atkarībā no modeļa).
- Ekonomiska cena: no 1.2 eiro par vienību vai nedaudz vairāk, ja tajos ir ULN2003 modulis.
Kā iespējamās lietojumprogrammas, es jau minēju dažus no tiem iepriekš, bet šeit es vēlreiz sniedzu dažas idejas jūsu projektiem:
- Hidraulisko un pneimatisko vārstu vadība.
- Šarnīrveida roboti un robotu rokas.
- Sensoru pozicionēšana.
- Rotējošie galdi skeneriem.
- 3D printeri.
- CNC mašīnas.
Stepper motors nedarbojas viens, tam ir nepieciešams cits elements. Šajā gadījumā, 28BYJ-48 kontrolē plate ar integrētu ULN2003, kas ļauj pastiprināt Arduino izeju strāvu, lai darbinātu motora spoles. Aktivizējot spoles pareizā secībā, motors soli pa solim griežas ļoti precīzi.
Kontroles secību un fāžu veidi
Tur dažādas vadības secības 28BYJ-48, visizplatītākie ir:
- Pilna viļņu secība: aktivizē visas spoles vienlaicīgi.
- Puse soļu secība: aktivizē divas blakus esošās spoles vienlaikus.
- Mikroskopiskā soļu secība: aktivizē vienu spoli vienlaikus.
Redzēsim fāzes detalizēti:
- Secība 1-fāze: 1 fāzes secībā mēs vienlaikus ieslēdzam vienu spoli. Pārņemot šo aizdedzes secību tabulā, dzinēja kontaktligzdā būtu jāģenerē:
Paso | A | B | A ' | B' |
---|---|---|---|---|
1 | ON | OFF | OFF | OFF |
2 | OFF | ON | OFF | OFF |
3 | OFF | OFF | ON | OFF |
4 | OFF | OFF | OFF | ON |
- 2 fāžu secība: katrā fāzē ieslēdzam divas korelatīvās spoles, tāpēc radītais magnētiskais lauks ir lielāks (par 41% vairāk), tāpēc motoram ir lielāks griezes moments, tas ir, mēs iegūstam lielāku spēku. Kā negatīvs moments mēs dubultojām enerģijas patēriņu. Kas attiecas uz tabulu, tas būtu:
Paso | A | B | A ' | B' |
---|---|---|---|---|
1 | ON | ON | OFF | OFF |
2 | OFF | ON | ON | OFF |
3 | OFF | OFF | ON | ON |
4 | ON | OFF | OFF | ON |
- Puspakāpju secība: Šis ir vēl viens no posmiem, ko mēs apskatīsim, jūs varat piedzīvot to, kas jūs visvairāk interesē. Šeit mēs pārmaiņus ieslēdzam vienu un divas spoles, panākot pussoļa precizitāti. To izmanto lietojumos, kur nepieciešama visaugstākā precizitāte, lai gan var rasties problēmas, ja pielietojums ir pie griezes momenta robežas. Secības izteikšana tabulas formā rada:
Pussolis | A | B | A ' | B' |
---|---|---|---|---|
1 | ON | OFF | OFF | OFF |
2 | ON | ON | OFF | OFF |
3 | OFF | ON | OFF | OFF |
4 | OFF | ON | ON | OFF |
5 | OFF | OFF | ON | OFF |
6 | OFF | OFF | ON | ON |
7 | OFF | OFF | OFF | ON |
8 | ON | OFF | OFF | ON |
28BYJ-28 ar Arduino
Pirmā lieta ir pareizi savienot modulis un motors 28byj-48 ar mūsu Arduino dēli, lai to izdarītu, jums vienkārši ir jāizveido šādi savienojumi:
- Pin — no ULN2003 līdz Arduino GND.
- ULN2003 kontakts + uz Vcc (5 v vai citos gadījumos, ja tas ir 12 v motors, ir jāizmanto barošanas avots ar šādu spriegumu) no Arduino.
- ULN1 IN2, IN3, IN4 un IN2003 uz Arduino digitālajām ieejām D8, D9, D10 un D11.
- 28byj-48 motors, vienkārši pievienojiet to moduļa ULN2003 portam.
Tagad, kad esat izveidojis savienojumu, nākamā lieta ir izmantot piemērs Arduino IDE, ko varat izmantot, lai eksperimentētu vai modificētu to pēc savām vēlmēm. Šajā piemērā visas fāžu tabulas ir komentētas, piemēram, // rindas priekšā, jūs zināt... Ja vēlaties izmantot kādu no tām, vienkārši izdzēsiet // instrukciju priekšā.
//Definir los pines const int motorPin1 = 8; // 28BYJ48 In1 const int motorPin2 = 9; // 28BYJ48 In2 const int motorPin3 = 10; // 28BYJ48 In3 const int motorPin4 = 11; // 28BYJ48 In4 //Definición de variables int motorSpeed = 1200; //Velocidad del motor int stepCounter = 0; //Contador de pasos int stepsPerRev = 4076; //Pasos para un giro completo //Tablas de secuencia (descomentar la que necesites) //Secuencia 1-fase //const int numSteps = 4; //const int stepsLookup[4] = { B1000, B0100, B0010, B0001 }; //Secuencia 2-fases //const int numSteps = 4; //const int stepsLookup[4] = { B1100, B0110, B0011, B1001 }; //Secuencia media fase //const int numSteps = 8; //const int stepsLookup[8] = { B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001 }; void setup() { //Declarar los pines usados como salida pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); } void loop() { for (int i = 0; i < stepsPerRev * 2; i++) { clockwise(); delayMicroseconds(motorSpeed); } for (int i = 0; i < stepsPerRev * 2; i++) { anticlockwise(); delayMicroseconds(motorSpeed); } delay(1000); } void clockwise() { stepCounter++; if (stepCounter >= numSteps) stepCounter = 0; setOutput(stepCounter); } void anticlockwise() { stepCounter--; if (stepCounter < 0) stepCounter = numSteps - 1; setOutput(stepCounter); } void setOutput(int step) { digitalWrite(motorPin1, bitRead(stepsLookup[step], 0)); digitalWrite(motorPin2, bitRead(stepsLookup[step], 1)); digitalWrite(motorPin3, bitRead(stepsLookup[step], 2)); digitalWrite(motorPin4, bitRead(stepsLookup[step], 3)); }