Hier ist eine 20 Schritt Schablone um die Schritte besser nachvollziehen zu können. Kann man unter den Motor kleben. Und einen Zeiger an die Achse machen.
\ Schrittmotor testen (Unipolarmotor)
\ Portpins als Ausgaenge betreiben.
\ H-Puls schaltet Transistor, der die Spule im Motor treibt.
\ 9V --- Spule --- TIP120 --- GND
\ ^<-Diode-^ ^--- R --- P2.x
BIN
: init 1111 P2 1+ cset ; \ P2.0..3 = out
: aus 1111 P2 cclr ;
: PULS ( x m adr -- x ) c! dup ms ;
: _A_ 0001 p2 puls ;
: _B_ 0010 p2 puls ;
: _C_ 0100 p2 puls ;
: _D_ 1000 p2 puls ;
: _AB_ 0011 P2 puls ;
: _BC_ 0110 P2 puls ;
: _CD_ 1100 P2 puls ;
: _DA_ 1001 P2 puls ;
DECIMAL
\ wave drive mode
: WDM ( x -- ) init aus
BEGIN _A_ _B_ _C_ _D_ key? UNTIL drop aus ;
\ full step drive
: FSD ( x -- ) init aus
BEGIN _AB_ _BC_ _CD_ _DA_ key? UNTIL drop aus ;
\ half step drive
: HSD ( x -- ) init aus
BEGIN _A_ _AB_ _B_ _BC_ _C_ _CD_ _D_ _DA_ key? UNTIL drop aus ;
\ Halbschritte rechts oder links drehen.
VARIABLE STEPS 0 steps !
\ im flash Schrittfolge ablegen
IHERE
' _A_ i, ' _AB_ i, ' _B_ i, ' _BC_ i,
' _C_ i, ' _CD_ i, ' _D_ i, ' _DA_ i,
CONSTANT FOLGE
: STEP+ 1 steps +! ;
: STEP- -1 steps +! ;
: FOLGEADR ( n -- adr ) 8 mod 2* folge + ;
\ Pulsdauer auf den stack legen!
: RECHTS ( ms n -- ms ) \ n Schritte rechts herum drehen
dup 0 > IF
0 DO step+ steps @ folgeadr @ execute LOOP
ELSE drop THEN aus ;
: LINKS ( ms n -- ms ) \ n Schritte links herum drehen
dup 0 > IF
0 DO step- steps @ folgeadr @ execute LOOP
ELSE drop THEN aus ;
( finis)