Hjälp med styrning av stegmotor.
Hjälp med styrning av stegmotor.
Tjo, jag har byggt ett kort baserat kring en PIC och en UDN2916-krets.
Nu är problemet att kortet redan är gjort och byggt delvis efter en lärares tips, varpå alla current-control-inputs är ihopkopplade för att ge en Enable, och motorn är tänkt att köras med Fullstep, men jag får inte igång nån vettig hastighet på den.
det jag har är phaseA(1/0), phaseB(1/0) och enable(1/0). nån som kan hjälpa med hur jag ska styra den för att den ska gå fint och tyst? min bara hackar. en lärare sa att det hade att göra med att jag skulle accelerera den, men jag har inte förstått hur man gör, och inte har jag hittat nån c-kod att reverse-engineera heller.
nån som kan hjälpa?
Nu är problemet att kortet redan är gjort och byggt delvis efter en lärares tips, varpå alla current-control-inputs är ihopkopplade för att ge en Enable, och motorn är tänkt att köras med Fullstep, men jag får inte igång nån vettig hastighet på den.
det jag har är phaseA(1/0), phaseB(1/0) och enable(1/0). nån som kan hjälpa med hur jag ska styra den för att den ska gå fint och tyst? min bara hackar. en lärare sa att det hade att göra med att jag skulle accelerera den, men jag har inte förstått hur man gör, och inte har jag hittat nån c-kod att reverse-engineera heller.
nån som kan hjälpa?
Re: Hjälp med styrning av stegmotor.
just nu kör jag [A=0,B=0], [A=0,B=1], [A=1,B=0], [A=1,B=1].
om det nu va det du menade.
det har funkat för denna krets tidigare, men motorn tenderar att hacka och låta mkt :/
och eftersom jag nu ändå måste bygga till en pic som endast ska styra motorn, så skulle det va trevligt med någe som inte betedde sig illa.
http://www.datasheetcatalog.org/datashe ... s/2916.pdf
datablad för H-bryggekretsen
om det nu va det du menade.
det har funkat för denna krets tidigare, men motorn tenderar att hacka och låta mkt :/
och eftersom jag nu ändå måste bygga till en pic som endast ska styra motorn, så skulle det va trevligt med någe som inte betedde sig illa.
http://www.datasheetcatalog.org/datashe ... s/2916.pdf
datablad för H-bryggekretsen
- anders_bzn
- Inlägg: 5852
- Blev medlem: 17 december 2008, 19:22:18
- Ort: Kävlinge
- Kontakt:
Re: Hjälp med styrning av stegmotor.
En stegmotor startar man inte genom att börja stega den i den hastigheten man ska köra. Man börjar med att köra den sakta och sedan öka hastigheten. Det är för att den mekaniska rotorn ska följa med det elektriska fältet. Annars så kommer motorn bara stå still och brumma.
Saken är den att om man försöker ta ett nytt steg innan rotorn hunnit ikapp den elektriska fältet så kommer motorn aldrig att börja snurra.
Man startar och stoppar med en sk accelerationstabell, där har man långa tider i början och sen minskar tiderna tills man nått sin målhastighet. Hur tabellen ska se ut beror på hur det mekaniska systemet som är kopplat till motorn ser ut.
Din fråga har således inget enkelt svar, men se ovanstående som hjälp att gå i rätt riktning.
Goggla på "stepper motor acceleration table"
Saken är den att om man försöker ta ett nytt steg innan rotorn hunnit ikapp den elektriska fältet så kommer motorn aldrig att börja snurra.
Man startar och stoppar med en sk accelerationstabell, där har man långa tider i början och sen minskar tiderna tills man nått sin målhastighet. Hur tabellen ska se ut beror på hur det mekaniska systemet som är kopplat till motorn ser ut.
Din fråga har således inget enkelt svar, men se ovanstående som hjälp att gå i rätt riktning.
Goggla på "stepper motor acceleration table"
Re: Hjälp med styrning av stegmotor.
Hur har du kopplat? Är 0 ström i en riktning och 1 åt andra hållet?
Sekvensen ser fel ut.
Ska du köra fort så måste du rampa upp som sagt. Men jag gissar att du kör sakta för att testa nu va?
Sekvensen ser fel ut.
Ska du köra fort så måste du rampa upp som sagt. Men jag gissar att du kör sakta för att testa nu va?
Re: Hjälp med styrning av stegmotor.
Mjo, relativt sakta iaf 
Kopplingen ser ut som följande:
http://roze.ridorana.se/old/bilder/schema-d.png
Sekvensen funkar i alla fall,
Konden som jag kör på just nu är iaf:
går engineAcc över 180 så stannar motorn
Kopplingen ser ut som följande:
http://roze.ridorana.se/old/bilder/schema-d.png
Sekvensen funkar i alla fall,
Konden som jag kör på just nu är iaf:
går engineAcc över 180 så stannar motorn
Kod: Markera allt
if(INTCONbits.TMR0IF && INTCONbits.TMR0IE){
switch(enginePhase)
case 0 :
ENGINE_PHASE_OUT_A = off;
ENGINE_PHASE_OUT_B = off;
break;
case 1 :
ENGINE_PHASE_OUT_A = off;
ENGINE_PHASE_OUT_B = on;
break;
case 2 :
ENGINE_PHASE_OUT_A = on;
ENGINE_PHASE_OUT_B = on;
break;
case 3 :
ENGINE_PHASE_OUT_A = on;
ENGINE_PHASE_OUT_B = off;
break;
}
if(engineDirection == enumDirection_left)
enginePhase++;
else
enginePhase--;
enginePhase = (enginePhase+4)&3;
TMR0L = engineAcc;
if(engineAcc < 180) engineAcc ++;
INTCONbits.TMR0IF = 0;
}
Re: Hjälp med styrning av stegmotor.
Lite kommentarer i koden skulle ju göra det mer lättläst.
Sekvensen i koden är inte samma som du postade förut. Den i koden ser rätt ut. Det du behöver tillföra är nog en upprampning av hastigheten för att kunna få den att gå fortare. Men räkna med att den tappar moment.
Sekvensen i koden är inte samma som du postade förut. Den i koden ser rätt ut. Det du behöver tillföra är nog en upprampning av hastigheten för att kunna få den att gå fortare. Men räkna med att den tappar moment.
Re: Hjälp med styrning av stegmotor.
Kod: Markera allt
if(INTCONbits.TMR0IF && INTCONbits.TMR0IE){
//Styr motorn enligt inställd phase
switch(enginePhase)
case 0 :
ENGINE_PHASE_OUT_A = off;
ENGINE_PHASE_OUT_B = off;
break;
case 1 :
ENGINE_PHASE_OUT_A = off;
ENGINE_PHASE_OUT_B = on;
break;
case 2 :
ENGINE_PHASE_OUT_A = on;
ENGINE_PHASE_OUT_B = on;
break;
case 3 :
ENGINE_PHASE_OUT_A = on;
ENGINE_PHASE_OUT_B = off;
break;
}
//Ökar/minskar phase beroende på håll
if(engineDirection == enumDirection_left)
enginePhase++;
else
enginePhase--;
enginePhase = (enginePhase+4)&3; //Ser till att phase aldrig går över 3 lr under 0
TMR0L = engineAcc; //Laddar timern med värdet i engineAcc (sätts till 100 när motorn startar), Timern ger interrupt när TMR0L får overflow, dvs när den når 255
if(engineAcc < 180) engineAcc ++; //Ökar värdet på acc så det ska ta kortare tid mellan pulserna
INTCONbits.TMR0IF = 0; //Slår på timern igen efter att interrupt har flaggats.
}
Re: Hjälp med styrning av stegmotor.
Försök läsa på lite. Du bör nog fatta varför sekvensen är som den är tex. Vad som begränsar max hastighet mm.
-
limpan4all
- Inlägg: 8499
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Re: Hjälp med styrning av stegmotor.
Kod: Markera allt
enginePhase = (enginePhase+4)&3;
Re: Hjälp med styrning av stegmotor.
oki, hur får jag den att starta åt ett specifikt håll?
Mina tycker det e roligt att starta åt godtyckligt håll, vilket är otroligt störande
Mina tycker det e roligt att starta åt godtyckligt håll, vilket är otroligt störande
Kod: Markera allt
void runMotor(char dir){
engineDirection = dir; //Spara riktning
engineRunning = 1; //Sätt status till på
engineAcc = ENGINE_ACC_START; //Ladda starthastigheten
TMR0L = engineAcc; //Ladda timern
ENGINE_ENABLE = ENGINE_ON; //Slå på h-bryggan
T0CONbits.TMR0ON = 1; //Starta timern
}
Re: Hjälp med styrning av stegmotor.
Problemet löst, det var h-bryggan som va paj. ena lindningen gick inte 
