ABS in Funktion

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

Funktionsmodell des Blockierverhaltens eines ABS-Systems

Das Modell besteht aus einem Scheibenrad, das über einen Mini-Motor mit Getriebe angetrieben wird. Das Scheibenrad steht für die Bremsscheibe einer Scheibenbremse am Auto. Gebremst wird mit zwei Pneumatic-Zylindern mit Rückholfeder (Kasten PneuVac). Auf die Enden der Kolbenstangen wurden die grünen befestigungsteil von den Hydraulik-Zylindern geschoben um eine ebene Fläche zu haben (Die roten 15x30x4 Teile mit der Nut hinten müßten es auch tun).Die Zylinder werden durch ein einzelnes Magnetventil geschaltet. Luft gibts z.B. aus dem PneuVac-Kompressor. Eine Lichtschranke am Scheibenrad wird eingesetzt um feststellen zu können, ob sich die Scheibe noch dreht. Da das Scheibenrad allerhand Öffnungen hat, wurde es mit schwarzem Karton abgeklebt, nur die Schlitze bleiben offen. Gebremst wird mit dem Taster links unten im Bild. Die Bremskraft selber wird durch unterschiedliches Anziehen der Befestigungsklemme der Scheibe eingestellt. Beim Start des Modells und leerem Tank leuchtet die gelbe Lampe links oben um einen Minderdruck anzuzeigen. Sie wird über das alte blaue "Druckkissen" und einen Taster betätigt.

Interfacebelegung :

Die Verkabelung ist etwas zufällig und hat sich nach greifbaren Kabellängen und Bequemlichkeit gerichtet. Da die Motoren nur in einer Richtung betrieben werden, hätte man sie auch an O-Ausgänge anschließen können. Das gilt gleichermaßen für die Lampe der Lichtschranke.

M1 : Kompressormotor
M2 : Bremsscheibenmotor
O5 : Lampe Minderdruckanzeige
O6 : Magnetventil Bremszylinder
M4 : Lampe der Lichtschranke
I6  : Taster Minderdruck (Öffner)
I7  : Phototransistor der Lichtschranke
I8  : Taster Bremspedal

Anmerkungen zum Programm :

Von links : Hauptthread mit Start der Motoren und Bremspedal, Thread zur anfänglichen Drucküberwachung, Thread zur Überwachung der Scheibendrehung und ein Thread zum Abschalten der Bremszylinder bei Blockieren (Stotterbremse).

Die Überwachung der Bremsscheibe geschieht durch eine Lichtschranke, die schlicht die Impulse, die durch ein sich drehendes Scheibenrad ausgelöst werden, zählt. Der Impulszähler wird bei jedem Einschalten der Bremszylinder auf 0 zurückgesetzt (auch beim "Stottern").

Hier eine Variante des Modells mit einem Antriebsrad, das durch eine Rolle angetrieben wird. Die Rollenrädchen wurden auf ein 50 mm lange Stahlachse aufgepresst, auf der Stahlachse steckt eine Klemmhülse mit 30 mm schwarzer Achse. Durch leichten Fingerdruck auf auf den federnden Gelenkbaustein neben dem Rad kann man die Reibung erhöhen und so das "Stottern" vermeiden oder reduzieren. Das Programm selber ist gleich geblieben.

Hinzugekommen ist ein Lösung von Peter Damen bei der nicht nur "gestottert" wird : Das Rad kommt hier dann tatsächlich auch zum Stehen und das richtig schön langsam in einer Auslaufschleife. Eingefügt im Hauptthread zwischen O6 ein und warten auf I8 = 0

VB 2008 Lösung

Und hier noch die Source eines entsprechenden VB 2008 Programmes auf Basis des Templates FishWindowsVB (im Download-Päckchen befindet sich auch noch eine gleiche C# 2008 Lösung). Auf den Thread Scheibendrehung konnte hier verzichtet werden, da dies intern durch umFish40.DLL erledigt wird.

Public Class ABSdemoVB2008
  Dim mKompressor As Out    = Out.M1
  Dim mBremsscheibe As Out  = Out.M2
  Dim oMinderdruck As Out   = Out.O5
  Dim oBremszylinder As Out = Out.O6
  Dim mLichtschranke As Out = Out.M4
  Dim iMinderdruck As Inp   = Inp.I6
  Dim iLichtschranke As Inp = Inp.I7
  Dim iBremstaster As Inp   = Inp.I8

  Dim ft As New FishFace()
  Dim Drehen As Thread
  Dim Druck As Thread

 
Private Sub Action()
    Drehen = New Thread(New ThreadStart(AddressOf DrehenRun))
    Druck = New Thread(New ThreadStart(AddressOf DruckRun))
    Drehen.IsBackground = True
    Druck.IsBackground = True
    Druck.Start()
    Drehen.Start()
    ft.SetMotor(mKompressor, Dir.On)
    ft.SetMotor(mBremsscheibe, Dir.On)
    ft.SetMotor(mLichtschranke, Dir.On)
    ft.Pause(1234)
    Do
      ft.WaitForInput(iBremstaster)
      ft.SetLamp(oBremszylinder, Dir.On)
      ft.WaitForInput(iBremstaster, False)
      ft.SetLamp(oBremszylinder, Dir.Off)
    Loop Until ft.Finish()
    Drehen.Join()
  End Sub

  Private Sub DruckRun()
    ft.SetLamp(oMinderdruck, Dir.On)
    ft.WaitForInput(iMinderdruck, False)
    ft.SetLamp(oMinderdruck, Dir.Off)
  End Sub

Private Sub DrehenRun()
  Do While (Not ft.NotHalt)
    ft.Pause(300)
    If ft.GetInput(iBremstaster) Then
      If ft.GetCounter(iLichtschranke) > 0 Then
        ft.SetCounter(iLichtschranke, 0)
        ft.SetLamp(oBremszylinder, Dir.On)
      Else
        ft.SetLamp(oBremszylinder, Dir.Off)
      End If
    End If
  Loop
 End Sub

--- Program Control ---
End Class

Download 

ABS.zip enthält die ROBO Pro, C# 2008 und VB 2008 Source
Hinzugekommen ist die Lösung von Peter Damen ABS_2b.zip
Eine Java 6 / Eclipse 3.4 Version findet sich über die JavaEcke.

Stand : 01.06.2009