Går det gör på ett bättre sätt?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Logan
Inlägg: 630
Blev medlem: 5 januari 2005, 21:31:53
Ort: Jönköping
Kontakt:

Går det gör på ett bättre sätt?

Inlägg av Logan »

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å?

Kod: Markera allt

' {$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
Användarvisningsbild
Icecap
Inlägg: 26645
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Konstig sekvens du använder!

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
Användarvisningsbild
Henrik Kjellberg
Inlägg: 539
Blev medlem: 26 december 2004, 00:59:27
Ort: Lund

Inlägg av Henrik Kjellberg »

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"?
Användarvisningsbild
Icecap
Inlägg: 26645
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Det är ganska enkelt faktisk.

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.

Kod: Markera allt

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.
Användarvisningsbild
Henrik Kjellberg
Inlägg: 539
Blev medlem: 26 december 2004, 00:59:27
Ort: Lund

Inlägg av Henrik Kjellberg »

Hmm, vet inte om jag förstår det där... Skulle nästa precisionsökning då vara:

Kod: Markera allt

1:  0001
2:  0011
3:  0111
4:  0110
5:  1110
6:  1100
7:  1101
8:  1001
9:  1011
10: 0011
11: och så är vi tillbaka vid steg 3.
Vad är det där med att lägga 16 på lindning A och 0 på B?
Användarvisningsbild
Logan
Inlägg: 630
Blev medlem: 5 januari 2005, 21:31:53
Ort: Jönköping
Kontakt:

Inlägg av Logan »

Hej, hittade felet :P
tid CON 3 ska det vara inte 6 :D
Användarvisningsbild
MadModder
Co Admin
Inlägg: 31451
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Inlägg av MadModder »

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.
Användarvisningsbild
Hedis
Inlägg: 2493
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

En stegmotor har ju även en spec på att tex ett steg är 1,8grader. Men det borde vell finnas motorer med finare stegning?

Det skulle ju medföra att om du hittar en välldigt finstegat motor så blir det lättare att stega 90-grader (1/4 varv) med 256 "delsteg".

Eller är det läggdags för mig nu? :)
Användarvisningsbild
Henrik Kjellberg
Inlägg: 539
Blev medlem: 26 december 2004, 00:59:27
Ort: Lund

Inlägg av Henrik Kjellberg »

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?
Skriv svar