Hjälp med styrning av stegmotor.

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Roze
Inlägg: 113
Blev medlem: 30 april 2006, 17:11:11
Ort: HUDDINGE
Kontakt:

Hjälp med styrning av stegmotor.

Inlägg av Roze »

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?
danei
EF Sponsor
Inlägg: 27872
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av danei »

Hur ser styrsekvensen ut nu?
Roze
Inlägg: 113
Blev medlem: 30 april 2006, 17:11:11
Ort: HUDDINGE
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av Roze »

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
Användarvisningsbild
anders_bzn
Inlägg: 5852
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av anders_bzn »

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"
danei
EF Sponsor
Inlägg: 27872
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av danei »

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?
Roze
Inlägg: 113
Blev medlem: 30 april 2006, 17:11:11
Ort: HUDDINGE
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av Roze »

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 :D

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;
	}
danei
EF Sponsor
Inlägg: 27872
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av danei »

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.
Roze
Inlägg: 113
Blev medlem: 30 april 2006, 17:11:11
Ort: HUDDINGE
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av Roze »

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.
}
Och ja, sekvensen ser annorlunda ut då nån gammal lärare sa att det troligen skulle va så.
danei
EF Sponsor
Inlägg: 27872
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av danei »

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.

Inlägg av limpan4all »

blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av blueint »

Kod: Markera allt

      enginePhase = (enginePhase+4)&3;
Borde väl räcka med: enginePhase &= 3;
Roze
Inlägg: 113
Blev medlem: 30 april 2006, 17:11:11
Ort: HUDDINGE
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av Roze »

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

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
}
Roze
Inlägg: 113
Blev medlem: 30 april 2006, 17:11:11
Ort: HUDDINGE
Kontakt:

Re: Hjälp med styrning av stegmotor.

Inlägg av Roze »

Problemet löst, det var h-bryggan som va paj. ena lindningen gick inte :D
Skriv svar