Drehzahlst.

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

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 :
  1. umFish20.DLL und umFish20.BAS : eine Lösung für Puristen
  2. umFish20.DLL und umFish20Ex.BAS : eine bequemere Lösung
  3. FishFa50.OCX und SetMotor : ganz einfach über ein Kontroll
  4. FishFa50.OCX und MoveTo : zwei Motoren (siehe Bild) simultan, etwas für Robot-Fans.

ftSlow Versuchaufbau : Zwei Minimotoren mit Impulsrädern


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 :

  1. Herstellen der Verbindung zum Interface
  2. Starten einer Endlosschleife
  3. M1 ein
  4. Parken des Programmes für .. mSek, Motor läuft weiter
  5. M1 aus
  6. Parken des Programmes für .. mSek, Motor steht.
  7. Manueller Abbruch der Schleife durch E1 geschaltet.
  8. 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 :

  1. Herstellen der Verbindung zum Interface
  2. Starten einer Endlosschleife
  3. M1 ein
  4. Parken des Programmes für .. mSek, Motor läuft weiter
  5. M1 aus
  6. Parken des Programmes für .. mSek, Motor steht.
  7. Manueller Abbruch der Schleife durch E1 geschaltet ODER ESC-Taste gedrückt.
  8. 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 :

  1. Herstellen der Verbindung zum Interface
  2. Starten einer Endlosschleife
  3. M1 ein
  4. Parken des Programmes für .. mSek, Motor läuft weiter
  5. M1 aus
  6. Parken des Programmes für .. mSek, Motor steht.
  7. Manueller Abbruch der Schleife durch E1 geschaltet ODER ESC-Taste gedrückt.
  8. 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 :

  1. Festlegen der Parameter für die beiden Motoren mit Impulsrädchen (siehe Bild oben)
  2. Herstellen einer Verbindung zum Interface, außerdem werden einige Defaultwerte gesetzt
  3. Anfahren der Homeposition. Bei dem Versuchaufbau oben ist das durch manuelles Schließen von E1 und E3 zu simulieren.
  4. Festlegen eines Bremsweges
  5. 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.
  6. 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.