- Stegmotor
- Rotera en stegmotor MED ARM7-LPC2148
- Komponenter krävs
- Stegmotor (28BYJ-48)
- ULN2003 stegmotordrivrutin
- Kretsschema
- Programmering ARM7-LPC2148 för stegmotor
I dagens automationsvärld är stegmotor och servomotor två mest använda motorer i inbyggda system. Båda används i olika automatiseringsmaskiner som robotarmar, CNC-maskiner, kameror etc. I denna handledning kommer vi att se hur man kan koppla stegmotor med ARM7-LPC2148 och hur man styr hastigheten på den. Om du är ny på ARM7 börja med att lära dig mer om ARM7-LPC2148 och dess programmeringsverktyg.
Stegmotor
Stegmotor är borstlös likströmsmotor, som kan roteras i små vinklar, dessa vinklar kallas steg. Vi kan rotera stegmotor steg för steg genom att ge digitala pulser till dess stift. Stegmotorer är billiga och har robust design. Motorns hastighet kan regleras genom att ändra frekvensen för digitala pulser.
Det finns två typer av stegmotorer tillgängliga baserat på typen av statorlindning: UNIPOLAR och BIPOLAR. Här använder vi UNIPOLAR stegmotor som är den vanligaste stegmotorn . För att rotera stegmotorn måste vi aktivera stegmotorns spolar i en sekvens. Baserat på rotationsoperationen klassificeras de i två lägen:
- Fullstegsläge: (4-stegs sekvens)
- Enfas vid stegning (WAVE STEPPING)
- Tvåfas vid stegning
- Halvstegsläge (8-stegssekvens)
För att veta mer om stegmotor och dess funktion, följ länken.
Rotera en stegmotor MED ARM7-LPC2148
Här kommer vi att använda FULL STEP: ONE FASE ON eller WAVE STEPPING- läge för att rotera stegmotorn med ARM7-LPC2148
I den här metoden kommer vi bara att aktivera en spole (en stift av LPC2148) åt gången. Det vill säga om den första spolen A aktiveras under en liten tid, kommer axeln att ändra sin position och sedan spolen B får energi samtidigt och axeln kommer att ändra sin position igen. Samma som detta, spole C och sedan spole D aktiveras för att flytta axeln vidare. Detta gör att stegmotorns axel roterar steg för steg genom att aktivera en spole åt gången.
Med denna metod roterar vi axeln steg för steg genom att aktivera spolen i en sekvens. Detta kallas fyra stegsekvenser eftersom det tar fyra steg.
Du kan rotera stegmotorn med HALF STEP-metoden (8-sekvensmetoden) enligt värdena nedan.
Steg |
Spole A |
Spole B |
Spole C |
Spole D. |
1 |
1 |
0 |
0 |
0 |
2 |
1 |
1 |
0 |
0 |
3 |
0 |
1 |
0 |
0 |
4 |
0 |
1 |
1 |
0 |
5 |
0 |
0 |
1 |
1 |
6 |
0 |
0 |
0 |
1 |
7 |
1 |
0 |
0 |
1 |
8 |
1 |
0 |
0 |
0 |
Komponenter krävs
Hårdvara:
- ARM7-LPC2148
- ULN2003 Motor Driver IC
- LED - 4
- STEPPER MOTOR (28BYJ-48)
- BAKBORD
- ANSLUTA KABLAR
Programvara:
- Keil uVision5
- Flasic Magic Tool
Stegmotor (28BYJ-48)
Stegmotor 28BYJ-48 visas redan på bilden ovan. Det är en unipolär stegmotor som kräver 5V matning. Motorn har ett unipolärt arrangemang med 4 spolar och varje spole är klassad för + 5V, därför är det relativt enkelt att styra med alla mikrokontroller som Arduino, Raspberry Pi, STM32, ARM etc.
Men vi behöver en Motor Drive IC som ULN2003 för att driva den, eftersom stegmotorer förbrukar hög ström och det kan skada mikrokontroller.
Specifikationerna för 28BYJ-48 finns i databladet nedan:
Kontrollera även gränssnittet med stegmotor med andra mikrokontroller:
- Gränssnittsmotor med Arduino Uno
- Stegmotorstyrning med Raspberry Pi
- Stegmotorgränssnitt med 8051 mikrokontroller
- Gränssnittsmotor med PIC-mikrokontroller
- Gränssnittsmotor med MSP430G2
Stegmotor kan också styras utan någon mikrokontroller, se denna stegmotordrivkrets.
ULN2003 stegmotordrivrutin
De flesta stegmotorer fungerar endast med hjälp av en drivmodul. Detta beror på att styrenhetsmodulen (i vårt fall LPC2148) inte kommer att kunna ge tillräckligt med ström från sina I / O-stift för att motorn ska fungera. Så vi kommer att använda en extern modul som ULN2003- modul som stegmotordrivrutin.
I detta projekt kommer vi att använda ULN2003 motor driver IC. Stiftdiagram över IC ges nedan:
Stift (IN1 till IN7) är ingångsstift för anslutning av mikrokontrollerutgång och OUT1 till OUT7 är motsvarande utgångsstift för anslutning av stegmotorsingång. COM ges positiv källspänning som krävs för utgångsenheter och för extern strömingångskälla.
Kretsschema
Kretsschema för gränssnitt mellan stegmotor och ARM-7 LPC2148 ges nedan
ARM7-LPC2148 med ULN2003 Motor Driver IC
GPIO-stift på LPC2148 (P0.7 till P0.10) betraktas som utgångsstift som är anslutna till ingångsstift (IN1-IN4) på ULN2003 IC.
LPC2148 Pins |
PINS AV ULN2003 IC |
P0.7 |
I 1 |
P0.8 |
IN2 |
P0.9 |
IN3 |
P.10 |
IN4 |
5V |
COM |
GND |
GND |
Anslutningar av ULN2003 IC med stegmotor (28BYJ-48)
Utgångsstiften (OUT1-OUT4) på ULN2003 IC är anslutna till stegmotorns stift (blå, rosa, gul och orange).
ULN2003 IC-PINS |
STIFTMOTORNIPPAR |
UT1 |
BLÅ |
OUT2 |
ROSA |
OUT3 |
GUL |
OUT4 |
ORANGE |
COM |
RÖD (+ 5V) |
Lysdioder med IN1 till IN4 för ULN2003
Fyra lysdioder (LED1, LED2, LED4, LED 4) anodstift är anslutna till stiften IN1, IN2, IN3 respektive IN4 på ULN2003 och katod för lysdioderna är anslutna till GND vilket är för att indikera pulserna från LPC2148. Vi kan notera mönstret för de pulser som tillhandahålls. Mönster visas i demonstrationsvideon som bifogas i slutet.
Programmering ARM7-LPC2148 för stegmotor
För att programmera ARM7-LPC2148 behöver vi keil uVision & Flash Magic-verktyget. Vi använder USB-kabel för att programmera ARM7 Stick via mikro-USB-port. Vi skriver kod med Keil och skapar en hex-fil och sedan blinkar HEX-filen till ARM7-stick med Flash Magic. Om du vill veta mer om installation av Keil uVision och Flash Magic och hur du använder dem följer du länken Komma igång med ARM7 LPC2148 Microcontroller och programmerar den med Keil uVision.
Den kompletta koden för styrning av stegmotor med ARM 7 ges i slutet av denna handledning, här förklarar vi några delar av den.
1. För att använda FULL STEP-ONE PHASE ON- metoden måste vi inkludera kommandot nedan. Så vi använder följande rad i programmet
osignerad röd medurs = {0x1,0x2,0x4,0x8}; // Kommandon för rotation medurs osignerad kar moturs = {0x8,0x4,0x2,0x1}; // Kommandon för rotation moturs
2. Följande rader används för att initialisera PORT0-stiften som utgång och ställa in dem på LÅG
PINSEL0 = 0x00000000; // Ställa in PORT0-stift IO0DIR - = 0x00000780; // Ställa in stift P0.7, P0.8, P0.9, P0.10 som UTGÅNG IO0CLR = 0x00000780; // Inställning av P0.7, P0.8, P0.9, P0.10 stift OUTPUT som LOW
3. Ställ PORT-stiften (P0.7 till P0.10) HÖG enligt kommandona medurs genom att använda detta för loop med fördröjning
för (int j = 0; j
Samma för Anti-Clock Wise
för (int z = 0; z
4. Ändra fördröjningstiden för att ändra stegmotorns rotationshastighet
fördröjning (0x10000); // Ändra detta värde för att ändra rotationshastigheten (0x10000) -Full hastighet (0x50000) -Blir långsam (0x90000) -Blir långsam än tidigare. Så genom att öka förseningen sänker vi rotationshastigheten.
5. Antal steg för en komplett rotation kan ändras med nedanstående kod
int no_of_steps = 550; // Ändra detta värde för det antal steg som krävs (550 ger en fullständig rotation)
För min stegmotor fick jag 550 steg för fullständig rotation och 225 för halv rotation. Så ändra det enligt dina krav.
6. Denna funktion används för att skapa fördröjningstid.
tomrumsfördröjning (osignerat int-värde) // Funktion för att generera fördröjning { osignerad int z; för (z = 0; z
Komplett kod med demonstrationsvideo ges nedan.