Hej, jobbar lite med min kod nu för camen, nu med denna kod så "hackar" motorn lite mera när jag la in If satser för att hålla reda på var den är.
Så finns det något snabbare och smidigare sätt att gör det på?
' {$STAMP BS2}
' {$PBASIC 2.5}
'##### Här stätter vi våra variablar #######################################
' #
tid CON 6 'Tiden mellan varje steg #
x_steg VAR Word 'Håller reda på hur långt X har åkt #
x_fb VAR Bit 'Håller reda på vilket håll X åker åt #
DIRS = %0000000000001111 'Vilka pinnar vi använder #
' #
'###########################################################################
Setup: 'Vanlig setup lite standad värden och sådant
x_steg = -21 'Sätter start steget för X
x_fb = 1 'Sätter åt vilket håll X ska åka åt först
main: 'main Början av allt
IF (x_fb = 1) THEN 'Här så kollar vi åt vilket håll den ska åka åt
IF (x_steg = 21) THEN 'Om x_steg har åkt sina steg så sätter vi x_fb = 0
x_fb = 0 'Ställer om så den åker åt det andra hållet
ENDIF
x_steg = x_steg + 1 'En räknare som håller reda på var vi är
DEBUG "x_foward", CR 'Test för att kolla så att fungerar
GOTO x_foward 'Går vidare till x_foward
ELSE 'Om x_fb = o så börjar vi här
IF (x_steg = -21) THEN 'Om x_steg har åkt sina steg så sätter vi x_fb = 1
x_fb = 1 'Ställer om så den åker åt det andra hållet
ENDIF
x_steg = x_steg - 1 'En räknare som håller reda på var vi är
DEBUG "x_backwords", CR 'Test för att kolla så att fungerar
GOTO x_backwords 'Går vidare till x_backwords
ENDIF
x_foward: 'Låter X motorn gå framot
OUTA=%1001
PAUSE tid
OUTA=%1010
PAUSE tid
OUTA=%0110
PAUSE tid
OUTA=%0101
PAUSE tid
GOTO main 'Återgår till main
x_backwords: 'Låter X motorn gå bakåt
OUTA=%0101
PAUSE tid
OUTA=%0110
PAUSE tid
OUTA=%1010
PAUSE tid
OUTA=%1001
PAUSE tid
GOTO main 'Återgår till main
När jag kör stegmotorer kör jag oftast halv-steg och då blir sekvensen:
1: 0001
2: 0011
3: 0010
4: 0110
5: 0100
6: 1100
7: 1000
8: 1001
9: tillbaka till steg 1
Fullsteg ger:
1: 0001
2: 0010
3: 0100
4: 1000
5: tillbaka till steg 1
Ursäkta om jag tränger mig på, men kan nån förklara hur sekvenserna är för olika steglängder? Typ microstepping med lite finare precision, ska göra en rörelse på 90* som ska gå att dela upp i 256 olika "stopp". Det är lite mindre än helstegning... Fick här halvsteg men hur är typ 1/4 och 1/8?
Kanske någon har en bra länk där man kan läsa "allt"?
Helsteg är ju bara att man byta ström från ena lindningen till den nästa i rätt sekvens, halv steg medför att man slår på en lindning innan man släpper den förra.
Om man då kan ställa strömmen till varje lindning i steg om t.ex. 16 kan man alltså slå mer eller mindre på och därmed vrida magnetfältet mer eller mindre.
Lindning A B
Steg 1: 16 0
Steg 2: 15 1
Steg 3: 14 2
Steg 4: 13 3
osv.
vill ge 16 mikrosteg mellan varje helsteg, öka upplösningen och stega finare. Detta används nog bara på motorer som ska köra långsamt men inget är i vägen för att köra snabbt på halv/hel steg och sedan positionera med mikrosteg fast det blir ganska avancerat styrning och mjukvara.
Henrik, med 1/4 och mindre steg kan man inte bara lägga på spänning hit och dit på rätt lindningar som med 1/1 och 1/2-steg, utan man måste styra strömmen i olika steg på varje spole. Ungefär som en volymkontroll. Vrid sakta upp strömmen på lindning 1, och samtidigt ner på lindning 2. När 1 har full ström och 2 inget alls, byt till nästa "mönster" och vrid sakta ner första, och samtidigt upp andra. Det krävs alltså mycket mer elektronik än för "bara" 1/2-steg.
Eller så kör man med PWM.
Finns det någon som kan förklara mer ingående hur jag gör dessa småstegen med spänningsreglering osv. Kanske har något kretsexempel som man kan studera?