Drehzahlsteuerung von Motoren am Interface
Die fischertechnik Interfaces erlauben das Ansteuern von Motoren nur mit konstanter
Drehzahl, die durch die anliegende Spannung und den Motor bestimmt wird. Schaltet man den
Motor nun in schneller Folge ein und aus so kann man ihn auch mit variabler Drehzahl
betreiben. Sinnvolle Schaltzeiten liegen im Bereich zwischen 12 und 36 Millisekunden. Beim
parallelen Interface kann man es auch noch mit geringeren Zeiten probieren. Hier werden
vier Visual Basic Beispiele zur Lösung der immer gleichen Problemstellung angegeben. Sie
(die Beispiele) basieren auf :
- umFish20.DLL und umFish20.BAS : eine Lösung für Puristen
- umFish20.DLL und umFish20Ex.BAS : eine bequemere Lösung
- FishFa50.OCX und SetMotor : ganz einfach über ein Kontroll
- FishFa50.OCX und MoveTo : zwei Motoren (siehe Bild) simultan, etwas für Robot-Fans.
Wenn man es sich noch einfacher machen will setzt man den Befehl SetMotor(M-Ausgang,
Richtung, Geschwindigkeit) von umFish30.DLL / FishFa30 ein.
Was man zu einer manuellen Lösung braucht :
- Ein paralleles (Universal) oder serielles (Intelligent) Interface mit einem
angeschlossenen Motor (nackt oder schön aufgebaut mit bunter Scheibe oder Propeller) und
einen Taster an E1. Für die Lösung 4 2 Motoren mit Impulsrad, siehe Bild. man kann auch
einen aufgebauten Industry Robot nutzen, dann muß man aber an die ESC-Taste zur
Crash-Vermeidung denken.
- Das Download-Päckchen ftSlow.ZIP mit den Beispiel-Sources
und eins der Päckchen umFish.ZIP, umFish20.ZIP
oder FishFa50.ZIP (für die Punkte 3 und 4).umFish.DLL und
umFish20.DLL (aus den entsprechenden Päckchen) sind funktional weitgehen gleich, sie
unterscheiden sich durch den internen Zugriff auf das Interface (umFish.DLL greift bei
Bedarf, umFish20.DLL in regelmäßigen Abständen auf das Interface zu). umFish.DLL ist
pflegeleichter, umFish20.DLL ist speziell für Robots gedacht. FishFa50.OCX basiert auf
umFish20.DLL und ist für OCX Fans als Komplettlösung gedacht.
Und nun die Codebeispiele im einzelnen. Es werden nur der wichtigste Ausschnitt
wiedergegeben, das komplette Beispiel ist in ftSlow.ZIP
enthalten.
Drehzahlsteuerung mit umFish20.DLL und umFish20.BAS
Private Sub cmdAction_Click()
umOpenInterface ft, "COM1" ' --- ACHTUNG : ggf. anpassen
Do ' --- Endlosschleife
umSetMotor ft, 1, ftiLinks ' --- M1 links
Sleep Val(txtRun) ' für .. mSek (Wert aus Textbox).
umSetMotor ft, 1, ftiAus ' --- M1 aus
Sleep Val(txtStop) ' für .. mSek (Wert aus Textbox).
Loop Until umGetInput(ft, 1) ' --- Schleifenabbruch : E1
umSetMotor ft, 1, ftiAus
umCloseInterface ft
End Sub
Was passiert :
- Herstellen der Verbindung zum Interface
- Starten einer Endlosschleife
- M1 ein
- Parken des Programmes für .. mSek, Motor läuft weiter
- M1 aus
- Parken des Programmes für .. mSek, Motor steht.
- Manueller Abbruch der Schleife durch E1 geschaltet.
- Beenden der Verbindung zum Interface.
Was ist zu beachten : das Programm befindet sich in einer schnellen Endlosschleife, nur
durch E1 = true beendet werden kann. Es kann passieren, daß die Form nicht mehr korrekt
angezeigt wird (weil dieser Programmteil nicht mehr zum Zuge kommt).
Drehzahlsteuerung mit umFish20Ex.DLL und umFish20Ex.BAS
Private Sub cmdAction_Click()
ftiOpenInterface "COM1" ' --- ACHTUNG : ggf. anpassen
Do ' --- Endlosschleife
ftiSetMotor 1, ftiLinks ' --- M1 links
ftiWaitForTime Val(txtRun) ' für .. mSek.
ftiSetMotor 1, ftiAus ' --- M1 aus
ftiWaitForTime Val(txtStop) ' für .. mSek.
Loop Until ftiFinish(1) ' --- Schleifenabbruch : E1, ESC-Taste
ftiSetMotor 1, ftiAus
ftiCloseInterface
End Sub
Was passiert :
- Herstellen der Verbindung zum Interface
- Starten einer Endlosschleife
- M1 ein
- Parken des Programmes für .. mSek, Motor läuft weiter
- M1 aus
- Parken des Programmes für .. mSek, Motor steht.
- Manueller Abbruch der Schleife durch E1 geschaltet ODER ESC-Taste
gedrückt.
- Beenden der Verbindung zum Interface.
Was ist zu beachten : das Programm befindet sich in einer schnellen Endlosschleife,
durch E1 = true oder die ESC-Taste beendet werden kann. Die Form wird korrekt angezeigt,
da ftiFinish(1) den Befehl DoEvents enthält, der die Kontrolle an das restliche Programm
abgibt. Der Parameter ft ist entfallen, das bedeutet eine
Schreibvereinfachung aber auch eine Beschränkung auf eine Interface (mit Extension
Modul).
Drehzahlsteuerung mit FishFa50OCX und Methode SetMotor
Private Sub cmdAction_Click()
ft.OpenInterface "COM1" ' --- ACHTUNG : ggf. anpassen
Do ' --- Endlosschleife
ft.SetMotor 1, ftiLinks ' --- M1 links
ft.Pause Val(txtRun) ' für .. mSek.
ft.SetMotor 1, ftiAus ' --- M1 aus
ft.Pause Val(txtStop) ' für .. mSek.
Loop Until ft.Finish(1) ' --- Schleifenabbruch : E1, ESC-Taste
ft.SetMotor 1, ftiAus
ft.CloseInterface
End Sub
Was passiert :
- Herstellen der Verbindung zum Interface
- Starten einer Endlosschleife
- M1 ein
- Parken des Programmes für .. mSek, Motor läuft weiter
- M1 aus
- Parken des Programmes für .. mSek, Motor steht.
- Manueller Abbruch der Schleife durch E1 geschaltet ODER ESC-Taste
gedrückt.
- Beenden der Verbindung zum Interface.
Was ist zu beachten : das Programm befindet sich in einer schnellen Endlosschleife,
durch E1 = true oder die ESC-Taste beendet werden kann. Die Form wird korrekt angezeigt,
da ftiFinish(1) den Befehl DoEvents enthält, der die Kontrolle an das restliche Programm
abgibt. ft ist der Name des FishFa50 Controls, das auf der Form platziert
wurde. Es können mehrere Controls genutzt werden.
Drehzahlsteuerung mit FishFa50OCX und Methode MoveTo
Private Sub cmdAction_Click()
ft.MotCntl.Name(1) = "Links" ' --- M1 mit E1 als Endtaster und
ft.MotCntl.EndPosition(1) = 240 ' E2 als Impulstaster
ft.MotCntl.Name(2) = "Rechts" ' --- M2 mit E3 als Endtaster und
ft.MotCntl.EndPosition(2) = 240 ' E4 als Impulstaster
' die Werte sind default
ft.OpenInterface "COM1" ' --- ACHTUNG : ggf. anpassen
ft.MoveHome ' --- Fahren auf Homeposition
ft.BreakingDistance = 64 ' --- Bremsweg auf 64 einstellen
ft.MoveTo 128, 64
ft.CloseInterface
End Sub
Was passiert :
- Festlegen der Parameter für die beiden Motoren mit Impulsrädchen (siehe Bild oben)
- Herstellen einer Verbindung zum Interface, außerdem werden einige Defaultwerte gesetzt
- Anfahren der Homeposition. Bei dem Versuchaufbau oben ist das durch manuelles Schließen
von E1 und E3 zu simulieren.
- Festlegen eines Bremsweges
- Simultanes Anfahren der Position 128 mit M1 und 64 mit M2. M1 fährt die ersten 64
Impulse mit voller Geschwindigkeit, den Rest mit halber Geschwindigkeit, M2 fährt die
ganze Strecke mit halber Geschwindigkeit.
- Beenden der Verbindung zum Interface.
Was ist zu beachten : das Programm wartet bei MoveHome und MoveTo bis die HomePosition
bzw. das Fahrziel erreicht sind. Die Form wird korrekt angezeigt, da die Methoden MoveHome
und MoveTo unterbrechbar sind. ft ist der Name des FishFa50 Controls, das
auf der Form platziert wurde. Es können mehrere Controls genutzt werden.
FishFa50.OCX und der Joystick
Wenn man einen ganzen (Industry) Robot mit dem Joystick steuern will ist "TeachIn-Robot : ganz einfach" gerade recht. Am JoyStick gibt
es da einen extra Knopf (den für den Zeigefinger) für die HALBE Geschwindigkeit.
|