PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SCHLEIFE 3 MAL WIEDERHOLEN???aber wie???--unten gucken!!--



hoer173
06.04.2004, 13:34
ich wollte das hier :



'Schrittmotor-Interface für die C-Control
'-----Unipolare-Ansteuerung------
'------Für AEG SO26/48------------
'Treiber IC: L298N
' an jedem Output 1 Diode (Bo580)
'Phasenbelegung am IC:
'Out1 -->-Phase 3
'Out2 -->-Phase 4
'Out3 -->-Phase 1
'Out4 -->-Phase 2


'Definition der Schrittmotor-Ansteuerung des Fahrwerkes

Define MotA1 Port[2] 'Motor A - Phase 1
Define MotA2 Port[4] 'Motor A - Phase 2
Define MotA3 Port[1] 'Motor A - Phase 3
Define MotA4 Port[3] 'Motor A - Phase 4
Define MotB1 Port[5] 'Motor A - Phase 1
Define MotB2 Port[6] 'Motor A - Phase 2
Define MotB3 Port[7] 'Motor A - Phase 3
Define MotB4 Port[8] 'Motor A - Phase 4

'Deffinition der Variablen für die Schrittmotor-Ansteuerung

Define VarMF 1 'Motor Frequenze

#Main 'Hauptprogramm

Schleife1
Goto Main






#Schleife1 'Motor A und B Vorwärts
MotA1 = OFF
MotA2 = ON
MotA3 = OFF
MotA4 = OFF
MotB1 = OFF
MotB2 = ON
MotB3 = OFF
MotB4 = OFF
Pause VarMF
MotA1 = ON
MotA2 = OFF
MotA3 = OFF
MotA4 = OFF
MotB1 = ON
MotB2 = OFF
MotB3 = OFF
MotB4 = OFF
Pause VarMF
MotA1 = OFF
MotA2 = OFF
MotA3 = OFF
MotA4 = ON
MotB1 = OFF
MotB2 = OFF
MotB3 = OFF
MotB4 = ON
Pause VarMF
MotA1 = OFF
MotA2 = OFF
MotA3 = ON
MotA4 = OFF
MotB1 = OFF
MotB2 = OFF
MotB3 = ON
MotB4 = OFF
Pause VarMF
GoTo Schleife1

#Schleife2 'Schleife 1 Invertieren -- Rückwärts

GoTo Schleife2

#Schleife3 'Motor A Vorwärts Motor B Rückwärts

Goto Schleife3

#Schleife4 'Schleife 3 Invertieren -- Motor A Rückwärts Motor B Vorwäts

Goto Schleife4

#Schleife5 'Motor A Vorwärts Motor B STOP

Goto Schleife5

#Schleife6 'Schleife 5 Invertieren -- Motor B Vorwärts Motor A Stop

Goto Schleife6

#Schleife7 'Motor A Rückwärts Motor B Stop

Goto Schleife7

#Schleife8 'Schleife 7 Invertieren -- Motor B Rückwärts Motor A Stop

Goto Schleife8


als basis für eine Fahrregelung benutzen....

so jetzt mein problem.. ich kenn mich kein bischen mit der c control aus... das was ihr da seht is alles was ich kann...
ich wollte es so machen das ich das hier :

#Schleife1 'Motor A und B Vorwärts
MotA1 = OFF
MotA2 = ON
MotA3 = OFF
MotA4 = OFF
MotB1 = OFF
MotB2 = ON
MotB3 = OFF
MotB4 = OFF
Pause VarMF
MotA1 = ON
MotA2 = OFF
MotA3 = OFF
MotA4 = OFF
MotB1 = ON
MotB2 = OFF
MotB3 = OFF
MotB4 = OFF
Pause VarMF
MotA1 = OFF
MotA2 = OFF
MotA3 = OFF
MotA4 = ON
MotB1 = OFF
MotB2 = OFF
MotB3 = OFF
MotB4 = ON
Pause VarMF
MotA1 = OFF
MotA2 = OFF
MotA3 = ON
MotA4 = OFF
MotB1 = OFF
MotB2 = OFF
MotB3 = ON
MotB4 = OFF
Pause VarMF
GoTo Schleife1


in eine art von dem hier packe....


Table TabStepMode
'Halbschritt-Modus (A-AB-B-BC-C-CD-D-AD)
&B0001 &B0011 &B0010 &B0110 &B0100 &B1100 &B1000 &B1001
'Vollschritt-Modus (A-A-B-B-C-C-D-D)
'&B0001 &B0001 &B0010 &B0010 &B0100 &B0100 &B1000 &B1000
TabEnd


und dann abrufen kann. so spar ich ja speicherplatz..


wie man dann sieht im prob wollt ich cih dann ab und zu eine schleife invertieren so das die motoren gegeneinander laufen können..

d.h.

jeder motor bekommt für jeweils 1 richtung 1 tabelle

das ergebniss:

4 tabellen
2 befehle die den motor zum festhalten bringen.




ich hab das im 2ten code von ner seite kopiert.. mit dem prog laufen meine motoren auch aber der eine hat weniger drehmoment.. wenn ich mein prog neh m (code1) haben beide einen sehr hohen drehmoment und eine sehr flüssige übergangspahse von spule zur spule.. das ist beim code 2 nicht so da ruckelt der eine motor.....


wie wandel ich das jetzt so um?

und wie öffne ich so eine tabelle das der motor auch das macht was er soll...

wichtig ist das ich motor a umgepolt habe so das er wie in der schleife die gleiche richtung fährt wie motor b! das ist also per software gelöst!

bei dem 2ten code bringt selbst pahsen vertauschen niX! hab alle 16 steckmöglichkeiten ausprobiert...

also so wie der 1ste code ist soller nachher sehr kurz sein damit ich speicherplatz spare..

wie krig ich das hin?


wäre super von euch wenn ihr mir bischen helft!
wenn ihr n beispiel habt wie ich sowas umsetze und definiere und so dann stellt das bitte hier rein....

ei prog mit dem ich zeilen invertieren kann.. gibt es sowas oder muss ich das alles tippen?



vielen vielen dank

Frank
06.04.2004, 14:26
Hallo hoer173,

ich mich mich ja wirklich ungerne in Deine Threads ein, aber es wäre schon schön wenn Du diese, wie schon mal gesagt, etwas bündelst und nicht für jede neue Fragestellung zum ähnlichen Thema einen neuen Thread öffnest. Man hat das Gefühl das sich die letzten 100 Threads von Dir alle um deine Schrittmotorexperimente handeln.
Bislang gehts du einfach viel zu viel nach der Methode ausprobieren und fragen vor. Wichtig ist aber auch das du wirklich einen Lerneffekt erzielst, dann könntest du vieles selber lösen. Ein bisschen muß man halt auch selbst suchen, lesen und lernen um weiter zu kommen.
Ich hoffe ich hab dir damit nicht auf den Schlipps getreten. Aber es nützt dir wirklich nix wenn du nach jedem Lötvorgang eine neue Frage stellst - wie du sicher gemerkt hast bekommst du dann auch nicht mehr so viele Antworten von anderen Useren.
Also einfach ähnliche Threads zusammenfassen und auch mal selbst etwas recherchieren. In dem Forum haben wir soviele Infos über Schrittmotoren das nun wirklich kaum noch eine Fragen offen bleibt.

Gruß Frank

hoer173
06.04.2004, 14:38
hab gestern den nachmittag damit verbracht zu googlen und hier zu suchen...

ich seh immer nur fertige progs aber weis nich wie ich das in diese tabelle umwandel...............ansteuern wäre ja wohl Goto...

aber wie invertiere ich eine komplette zeile oder ein ganzen Abschnitt einer Schleife.. und ist das überhaupt möglich?

ACU
06.04.2004, 15:29
wichtig ist das ich motor a umgepolt habe so das er wie in der schleife die gleiche richtung fährt wie motor b! das ist also per software gelöst!

Ist genau falsch!
Wenn du es mit dem Programm gemacht hast, ist es Software.
Das, was du gemacht hast, ist Hardware.

06.04.2004, 15:41
Auf Wolgang Backs Seite findest Du ein Programm. Link müsste hier auf der Seite unten irgendwo stehen https://www.roboternetz.de/schrittmotoren.html

hoer173
07.04.2004, 16:30
...soo alle befehle funktionieren wunderbar..ist ja noch in der testphase alles.

wie kann ich jetzt den befehel VORWÄRTS z.b. 3 mal wiederholen?
hab das gelsen mit der for next schleife.. probiert.. aber ghet net..
was ist falsch?bzw wie muss ich das angehen?




'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]


#Main
Bewegungen
Goto Main



#Hauptprogramm

Return

#Bewegungen 'Bewegungen der Motoren

VORWÄRTS
'RUECKWÄRTS
'VORWAERTSRECHTS
'VORWAERTSLINKS
'RUECKWÄRTSRECHTS
'RUECKWÄRTSLINKS
'TURNRECHTS
'TURNLINKS
Goto Main




'-----------------------SCHRITTMOTOR FUNKTIONEN-------------------------------------
#VORWÄRTS
schritt = schritt - 1
Looktab SchrittVor , schritt AND 3 , motorport
pause VarMF
goto Main

#RUECKWÄRTS
schritt = schritt + 1
Looktab SchrittVor , schritt AND 3 , motorport
pause VarMF
goto Main

#VORWAERTSRECHTS
schritt = schritt - 1
Looktab SchrittRECHTS , schritt AND 3 , motorport
pause VarMF
goto Main

#RUECKWÄRTSRECHTS
schritt = schritt + 1
Looktab SchrittRECHTS , schritt AND 3 , motorport
pause VarMF
goto Main

#VORWAERTSLINKS
schritt = schritt + 1
Looktab SchrittLINKS , schritt AND 3 , motorport
pause VarMF
goto Main

#RUECKWÄRTSLINKS
schritt = schritt - 1
Looktab SchrittRECHTS , schritt AND 3 , motorport
pause VarMF
goto Main

#TURNRECHTS
schritt = schritt - 1
Looktab SchrittTURNR , schritt AND 3 , motorport
pause VarMF
goto Main

#TURNLINKS
schritt = schritt + 1
Looktab SchrittTURNR , schritt AND 3 , motorport
pause VarMF
goto Main
'----------------------------------------------------------------------------

'----------------------------------------------------------------------------
'Schrittmotor-Tabelle für den Vollschritt

Table SchrittVOR 'Motor A und Motor B Vorwärts
68 136 17 34
Tabend

Table SchrittRECHTS 'Motor A Vorwärts Motor B Stop
1 2 4 8 'Stopbefehl für Motor B fehlt d.h. bitmuster ändern
Tabend

Table SchrittLINKS 'Motor A Stop Motor B Vorwärts
32 16 128 64 '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
'----------------------------------------------------------------------------

07.04.2004, 18:01
wie kann ich jetzt den befehel VORWÄRTS z.b. 3 mal wiederholen?
hab das gelsen mit der for next schleife.. probiert.. aber ghet net..



wie hast du die "For - Next" Schleife den in deinem Programm aufgebaut?

"for next go vorwärts vorwärts vorwärts" ? ;-)

Guck doch einfach mal wieder in die C-C Basic Hilfe rein.
Da steht die korrekte Syntax für die For Next Schleife drin und du musst nur noch statt den 3 Pünktchen deinen Befehl für "Vorwärts" eintragen.

Wenn du deine Befehle für "Vorwärts" nicht komplett in die Schleife reinschreiben willst, sondern "Vorwärts" als Routine aufrufen willst, kannst du allerdings dein "goto Main" knicken. Damit springst du immer an den Anfang zurück und nicht dahin wo du her gekommen bist.

Wenn du schon mal in der C-Basic Hilfe bist, würde ich auch glaich mal "Goto", "Gosub" und "return" nachschlagen.

hoer173
07.04.2004, 18:56
ja jetzt macht er die schleifen.. aber wenn ich die mit step -1 umdreh ist die umgedrehte schleife viel länger... und hab jetz noch rumprobiert aber krig das nich hin das der genau die gleiche drehngszahl macht wie der andere

motor a macht 1 umdrehung genauso wie motor b wenn ich vorwärts mach

wenn ich rückwärts mach drehen beide motoren 5mal...

kann man das irgendwie gleichstellen?
weil wenn das klappt hrrrr dann kann mein roboter schon bald rumheizen..

recycle
07.04.2004, 20:12
ja jetzt macht er die schleifen.. aber wenn ich die mit step -1 umdreh ist die umgedrehte schleife viel länger...



klar, "For i = 0 to 3 Step -1" dürfte ziemlich lange dauern :-)

Ist ungefähr so sinnvoll wie wenn du von Hamburg nach München willst und immer Richtung Norden fährst. Vorausgesetzt du säufst unterwegs nicht ab, kommst du irgendwan an, aber es dauuuert ;-)

Bei step -1 werden nicht die Befehle in der Schleife rückwärts abgearbeitet, sondern der Schleifenzähler wird runter statt rauf gezählt.

hoer173
07.04.2004, 20:20
ja hab ich auch grad bemekrt aber ich hab das prob jetzt gelöst hat mich 75 bytes gekostet aber es funktioniert.. jetz muss ich nurnoch das so hinkriegen das wenn daten per rxd reinkommen die darauffolgenden befehle in einen puffer kommen wo von dem aus weitergeleitet wird wenn der/die motoren feritg sind mit dem befehel der davor reinkam.

d.h. ein befehel nach dem anderen so das der roboter nicht doof im raum steht..

das würde doch aber nur auf byteport[1] so sein oder wäre das auch so wenn auf byteport[2] noch andere sachen liegen geraten die dann auch in verzug wenn ich daten per rs323 an byteport 2 schicke das trotzdem byteport 1 weitermacht?

hoer173
07.04.2004, 20:52
bin jetzt so weit das alle funktionene gegeben sind die motoren machen genau das was sie sollen.

hier:



'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...



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?