-
bin jetzt so weit das alle funktionene gegeben sind die motoren machen genau das was sie sollen.
hier:
Code:
'Schrittmotor-Interface für die C-Control
'-----Unipolare-Ansteuerung------
'------Für AEG SO26/48------------
'Definition der Schrittmotor-Ansteuerung des Fahrwerkes
Define Motorport Byteport [1] 'Motor A und B
'Phasen und Portbelegung der Motoren A und B
Define MotA1 Port[1] 'Motor A - Phase 1
Define MotA2 Port[2] 'Motor A - Phase 2
Define MotA3 Port[3] 'Motor A - Phase 3
Define MotA4 Port[4] 'Motor A - Phase 4
Define MotB1 Port[5] 'Motor B - Phase 1
Define MotB2 Port[6] 'Motor B - Phase 2
Define MotB3 Port[7] 'Motor B - Phase 3
Define MotB4 Port[8] 'Motor B - Phase 4
'Definition der Variablen für die Schrittmotor-Ansteuerung
Define VarMF 2 'Motor Frequenze
define schritt word[1]
define SolPos word[2]
define IstPos word[3]
define i byte
#Init 'Position der Motoren A und B auf 0 stellen
IstPos = 0
SolPos = IstPos
#Main
Bewegungen
goto main
#Hauptprogramm
Return
#Bewegungen 'Bewegungen der Motoren
'VORWÄRTS
'RUECKWÄRTS
'VORWAERTSRECHTS
'VORWAERTSLINKS
'RUECKWÄRTSRECHTS
'RUECKWÄRTSLINKS
'TURNRECHTS
'TURNLINKS
'-----------------------SCHRITTMOTOR FUNKTIONEN-------------------------------------
#VORWÄRTS
for i = 1 to 50
'schritt = schritt - 1
Looktab SchrittVor , i AND 3 , motorport
pause VarMF
next i
end
#RUECKWÄRTS
for i = 1 to 50
'schritt = schritt + 1
Looktab SchrittRück , i AND 3 , motorport
pause VarMF
'goto Main
next i
end
#RUECKWÄRTSRECHTS
for i = 1 to 50
'schritt = schritt - 1
Looktab SchrittM2RECHTS , i AND 3 , motorport
pause VarMF
next i
end
'goto Main
#VORWAERTSRECHTS
for i = 1 to 50
'schritt = schritt + 1
Looktab SchrittM2LINKS , i AND 3 , motorport
pause VarMF
'goto Main
next i
end
#VORWAERTSLINKS
for i = 1 to 50
'schritt = schritt + 1
Looktab SchrittM1LINKS , i AND 3 , motorport
pause VarMF
'goto Main
next i
end
#RUECKWÄRTSLINKS
for i = 1 to 50
'schritt = schritt - 1
Looktab SchrittM1RECHTS , i AND 3 , motorport
pause VarMF
'goto Main
next i
end
#TURNRECHTS
for i = 1 to 50
'schritt = schritt - 1
Looktab SchrittTURNR , i AND 3 , motorport
pause VarMF
'goto Main
next i
end
#TURNLINKS
for i = 1 to 50
'schritt = schritt + 1
Looktab SchrittTURNL , i AND 3 , motorport
pause VarMF
'goto Main
next i
end
'----------------------------------------------------------------------------
'----------------------------------------------------------------------------
'Schrittmotor-Tabelle für den Vollschritt
Table SchrittVOR 'Motor A und Motor B Vorwärts
68 136 17 34
Tabend
Table SchrittRück 'Motor A und Motor B Rückwärts
34 17 136 68
Tabend
Table SchrittM1RECHTS 'Motor A Vorwärts Motor B Stop
1 2 4 8 'Stopbefehl für Motor B fehlt d.h. bitmuster ändern
Tabend
Table SchrittM1LINKS 'Motor A Rückwärts Motor B Stop
8 4 2 1 'Stopbefehl für Motor B fehlt d.h. bitmuster ändern
Tabend
Table SchrittM2LINKS 'Motor A Stop Motor B Vorwärts
32 16 128 64 'Stopbefehl für Motor A fehlt d.h. bitmuster ändern
Tabend
Table SchrittM2Rechts 'Motor A Stop Motor B Rückwärts
64 128 16 32 'Stopbefehl für Motor A fehlt d.h. bitmuster ändern
Tabend
Table SchrittTURNR 'Motor A Vorwärts Motor B Rückwärts
66 129 24 36
Tabend
Table SchrittTURNL 'Motor B Vorwärts Motor A Rückwärts
36 24 129 66
Tabend
'----------------------------------------------------------------------------
jetzt soll das per seriale schnittstelle gesteuert werden.
ist das richtig? jetz allein von der weiterführung der befehle bzw umsetzung.
wenn ich alles soweit fertig hab wollte ich das dann miteinader verschmelzen lassen...
Code:
Define WertRS232 Byte[9] 'Empfangenes Zeichen (RS232)
Define TmpByte Byte[10] 'Zwischenspeicher (Byte)
Define ASCII_F 70 'ASCII-Code "F"
Define ASCII_L 76 'ASCII-Code "L"
Define ASCII_R 82 'ASCII-Code "R"
Define ASCII_T 84 'ASCII-Code "T"
define SolPos word[2]
define IstPos word[3]
#RecRS232
'Kommandos: FL: Vorwärts links über linkes Rad drehen
' FF: Vorwärts fahren gerade
' FR: Vorwärts rechts über rechtes Rad drehen
' RL: Rückwärts links über linkes Rad drehen
' RF: Rückwärts fahren gerade
' RR: Rückwärts rechts über rechtes Rad drehen
' TL: Drehung links über die Mittelachse
' TR: Drehung rechts über die Mittelachse
'Prüfung auf neue Kommandos
If Not RxD Then Return
'Annahme erst bei Ist-Position = Soll-Position
If IstPos <> SolPos Then Return
Get WertRS232
If WertRS232 = ASCII_F Then GoTo RecRS232F
If WertRS232 = ASCII_R Then GoTo RecRS232R
If WertRS232 = ASCII_T Then GoTo RecRS232T
Return
#RecRS232F
'Vorwärts-Kommando empfangen
Get WertRS232
If WertRS232 = ASCII_L Then GoTo RecRS232FL
If WertRS232 = ASCII_F Then GoTo RecRS232FF
If WertRS232 = ASCII_R Then GoTo RecRS232FR
Return
#RecRS232FL
'Vorwärts nach Links
Return
#RecRS232FF
'Vorwärts gerade
Return
#RecRS232FR
'Vorwärts nach Rechts
Return
#RecRS232R
'Rückwärts-Kommando empfangen
Get WertRS232
Return
#RecRS232RL
'Rückwärts nach Links
Return
#RecRS232RF
'Rückwärts gerade
Return
#RecRS232RR
'Rückwärts nach Rechts
Return
#RecRS232T
'Dreh-Kommando empfangen
Get WertRS232
If WertRS232 = ASCII_L Then GoTo RecRS232TL
If WertRS232 = ASCII_R Then GoTo RecRS232TR
Return
#RecRS232TL
'Drehen nach Links
Return
#RecRS232TR
'Drehen nach Rechts
Return
müsste ja dann nur noch z.b. hier :
#RecRS232TL
'Drehen nach Links
nurnoch den befehel machen das er zu TURNL geht. seh ich das richtig?