Sida 1 av 1

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

Postat: 27 mars 2005, 23:01:31
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

Postat: 27 mars 2005, 23:16:17
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

Postat: 28 mars 2005, 01:22:15
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"?

Postat: 28 mars 2005, 09:18:40
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.

Postat: 28 mars 2005, 11:41:11
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?

Postat: 28 mars 2005, 13:49:59
av Logan
Hej, hittade felet :P
tid CON 3 ska det vara inte 6 :D

Postat: 28 mars 2005, 16:32:57
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.

Postat: 29 mars 2005, 00:51:29
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? :)

Postat: 31 mars 2005, 20:51:30
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?