El 28BYJ-48 er en unipolær stepmotor lave omkostninger og høj præcision, ideel til elektronikprojekter, til 3D-printere, CNC-maskiner og robotteknologi. Dens kompakte størrelse, lave strømforbrug og brugervenlighed gør den til et populært valg for elektronikhobbyister og professionelle.
Desuden, sammen med denne motor, en modul med ULN2003, for din kontrol. På denne måde har vi alt det nødvendige for at kunne bruge dette system fuldstændigt, ved hjælp af en mikrocontroller eller et board Arduino eller lignende.
Hvad er 28BYJ-48 stepmotor?
Un stepmotor er en type elektrisk motor som bevæger sig i små diskrete vinkeltrin, snarere end en kontinuerlig rotation. Det fungerer ved hjælp af et sæt elektromagneter, der aktiveres i en bestemt rækkefølge. Ved at aktivere forskellige elektromagneter skabes et magnetfelt, der tiltrækker motorrotoren, hvilket får den til at rotere et trin ad gangen. Antallet af trin pr. omdrejning og bevægelsespræcisionen afhænger af det specifikke motordesign og den anvendte kontrolsekvens.
Inden for stepmotorer har vi to typer:
- Unipolær- De har et enkelt sæt spoler og kræver en speciel controller til at vende strømmen og få motoren til at rotere i begge retninger.
- Bipolar- De har to sæt uafhængige spoler, så de kan rotere i begge retninger uden behov for en speciel controller.
I tilfældet med 28BYJ-28 er det unipolær type, som jeg nævnte tidligere. Og inden for denne gruppe er den karakteriseret ved at have følgende especificaciones:
- Unipolær stepper: enkel styring med kun 4 kabler.
- Integreret reducer: tilbyder høj præcision (0.088° pr. trin) og drejningsmoment (3 N·cm).
- Lavt forbrug: 83 mA (5V-model) eller 32 mA (12V-model).
- fodring: 5V eller 12V (afhængig af model).
- Økonomisk pris: fra €1.2 pr. enhed, eller lidt mere, hvis de inkluderer et ULN2003-modul.
Som mulige anvendelser, Jeg har allerede nævnt nogle af dem før, men her giver jeg dig igen nogle ideer til dine projekter:
- Styring af hydrauliske og pneumatiske ventiler.
- Ledede robotter og robotarme.
- Sensor positionering.
- Roterende borde til scannere.
- 3d printere.
- CNC maskiner.
Stepmotoren fungerer ikke alene, den kræver et andet element. I dette tilfælde, 28BYJ-48 styres af et kort med integreret ULN2003, som gør det muligt at forstærke strømmen af Arduino-udgangene for at drive motorspolerne. Ved at aktivere spolerne i den rigtige rækkefølge, roterer motoren trin for trin med stor præcision.
Typer af kontrolsekvenser og faser
Der forskellige kontrolsekvenser for 28BYJ-48, de mest almindelige er:
- Fuld bølgesekvens: aktiverer alle spoler på samme tid.
- Halv trin sekvens: Aktiverer to tilstødende spoler på samme tid.
- Mikroskopisk trinsekvens: Aktiverer én spole ad gangen.
Lad os se faserne i detaljer:
- Sekvens 1-faset: I en 1-faset sekvens tænder vi en enkelt spole ad gangen. Tager denne tændingssekvens til en tabel, skal følgende genereres i motorens pinout:
Paso | A | B | EN' | B' |
---|---|---|---|---|
1 | ON | OFF | OFF | OFF |
2 | OFF | ON | OFF | OFF |
3 | OFF | OFF | ON | OFF |
4 | OFF | OFF | OFF | ON |
- 2-faset sekvens: vi tænder for to korrelative spoler i hver fase, så det genererede magnetfelt er større (41% mere), så motoren har mere moment, det vil sige, vi opnår mere styrke. Som et negativt punkt fordoblede vi energiforbruget. Med hensyn til bordet ville det være:
Paso | A | B | EN' | B' |
---|---|---|---|---|
1 | ON | ON | OFF | OFF |
2 | OFF | ON | ON | OFF |
3 | OFF | OFF | ON | ON |
4 | ON | OFF | OFF | ON |
- Halv-trins sekvens: Dette er endnu en af de stadier, vi skal se, du kan opleve det, der interesserer dig mest. Her tænder vi skiftevis en og to spoler og opnår en nøjagtighed på et halvt trin. Det bruges i applikationer, hvor den højeste præcision er nødvendig, selvom der kan være problemer, når applikationen er ved drejningsmomentgrænsen. At udtrykke rækkefølgen i tabelform resulterer i:
Halvt trin | A | B | EN' | 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 med Arduino
Den første ting er at tilslutte korrekt modul og motor 28byj-48 til vores Arduino-kort, for at gøre dette, skal du blot oprette følgende forbindelser:
- Pin – fra ULN2003 til GND af Arduino.
- Pin + på ULN2003 til Vcc (5v eller i andre tilfælde, hvis det er en 12v motor, skal der bruges en strømforsyning med den spænding) fra Arduino.
- IN1, IN2, IN3 og IN4 på ULN2003 til de digitale indgange D8, D9, D10 og D11 på Arduino.
- 28byj-48-motoren skal du blot tilslutte den til porten på ULN2003-modulet.
Nu hvor du er tilsluttet, er den næste ting at bruge et eksempel i Arduino IDE, som du kan bruge som den er til at eksperimentere eller ændre den efter din smag. I dette eksempel er alle fasetabellerne kommenteret ud, ligesom // foran linjen, du ved... Hvis du vil bruge en af dem, skal du bare slette // foran instruktionerne.
//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)); }