[GELÖST] Physikalisches Problem: Drehmoment

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: [GELÖST] Physikalisches Problem: Drehmoment

BeitragMi, Aug 20, 2014 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich versuche mich momentan an einer Simulation eines Antriebsstrangs eines Fahrzeugs, weil ich dies für ein Projekt brauche. Ich habe einen Motor mit verschiedenen Parametern (PS, Maximale Drehzahl), welcher in einem Type realisiert ist. Mit einer Methode, welche eine Formel aus dem Internet benutzt, welche einigermaßen realitätsnah ist (wenn man nach der Anzahl der vorhandenen Parameter geht), wird zu einer Drehzahl ein Drehmoment ermittelt.

Als nächstes gibt es einen Type Getriebe, welche zwei Variablen beinhaltet: Zum einen ein Array vom ebenfalls selbsterstellten Type Gang (Dieser enthält nur die Umsetzung als Verhältnis) und eine Variable, die anzeigt, in welchem Gang man sich befindet, bezogen auf das Array (quasi ein Index). Der Type Getriebe hat ebenfalls eine Methode, die mit einer übergebenen Drehzahl sowie einem übergebenen Drehmoment am Eingang dem momentanen Gang entsprechende Werte für Ausgangsdrehzahl und -drehmoment liefert. Dabei ist die Formel folgende:
Code: [AUSKLAPPEN]
Ausgangs-Drehzahl = Eingangs-Drehzahl * MomentanerGang.Umsetzung
Ausgangs-Drehmoment = Eingangs-Drehmoment / MomentanerGang.Umsetzung


Es folgt nun theoretisch die Achse. Wobei ich hier hänge: Folgendes Beispiel: Ich habe ein Fahrzeug mit einem Gewicht von 1000 kg. Dieses bewegt sich momentant mit 20 km/h fort. Nun gibt es ja zwei Fälle:
1.) Ich möchte die Geschwindigkeit halten
und 2.) Ich möchte Beschleunigen
Gibt es eine Möglichkeit, die Kräfte, welche bei den Fällen jeweils benötigt werden in ein Drehmoment umzurechnen (Unter der Vorraussetzung, dass ein Rad einen Durchmesser von 1m hat) und welche Faktoren spielen dabei eine Rolle (Stichworte: Haftreibung, Gleitzahl, etc.)?

Wie gesagt, es soll nur ein einigermaßen realitätsnaher Antriebsstrang abgebildet werden und ich hoffe, dass meine Berechnung zumindest bis nach dem Getriebe richtig sind (Das Getriebe, bzw. die Formeln dafür habe ich mir "aus den Fingern gesaugt", aber so erschienen sie mir der Realität entsprechend). Das heißt auch, dass ich mit ungefähr-Werten zufrieden bin (z.B. "Für das Beschleunigen wird bei einem Fahrzeug mit einem Gewicht von x kg ein Drehmoment von y = x * ? Nm am Getriebeausgang benötigt" oder soetwas... Wink)
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Mo, Aug 25, 2014 18:26, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragMi, Aug 20, 2014 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Beide Fälle müssen sich eigentlich gleich abdecken lassen, denn "Geschwindigkeit halten" ist einfach der Sonderfall, wo a = 0 (die Beschleunigung). Ansonsten gilt halt a = F / m. Das, was dein Fahrzeug antreibt ist die Kraft vom Motor. Das, was es am Vorwärtskommen hindert, ist zum einen eben der Rollwiderstand und zum anderen der Luftwiderstand. Letzterer ist proportional zum Quadrat der Geschwindigkeit, also F_luft = K * v^2, Konstante K wirst du wohl experimentell ermitteln müssen. Zum Rollwiderstand findest du evtl. was in Tabellenbüchern oder in Thesen / Arbeiten von Automobil-Studenten.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

CO2

ehemals "SirMO"

BeitragDo, Aug 21, 2014 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die schnelle Antwort.

Zitat:
Beide Fälle müssen sich eigentlich gleich abdecken lassen, denn "Geschwindigkeit halten" ist einfach der Sonderfall, wo a = 0
Stimmt...

Mein Formel sähe also in etwa so aus:
Code: [AUSKLAPPEN]
F_ges = F_fahr + F_luft
also
F_ges = a * m + K * v^2


Wenn ich nun meine Kraft ausgerechnet habe, wie kriege ich dann daraus ein Drehmoment? Welche Strecke ist entscheidend?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

biggicekey

BeitragDo, Aug 21, 2014 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Du gehst irgendwie falsch herum vor. Dein Drehmoment hast du doch bereits? Wenn du ein Leistungsdiagramm, bzw. Deine Formel hast um das Drehmoment aus der Drehzahl abzuleiten, brauchst du dieses Motoren Drehmoment nur noch durch das Getriebe zu jagen und abzgl. dem Wirkungsgrad auf den Reifenumfang zu beziehen. Dann hast du die Antriebskraft die zur Verfügung steht.

F = Motordrehmoment * Getriebe Übersetzung * Differential Übersetzung * Wirkungsgrad / Reifenumfang


Jetzt ziehst du von dieser Antriebskraft die Widerstände von Luft und Straße ab und schon weißt du ob du schneller wirst oder nicht.

Die Übertragung der Kraft auf die Straße ist dann nochmal ein Thema für sich.
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller
Nothing more to register - you've cleaned us out![/size]
 

CO2

ehemals "SirMO"

BeitragFr, Aug 22, 2014 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antwort!

Ich wollte im obigen Post "andersherum" gehen: Ich habe das Drehmoment, was am Getriebeausgang "anliegt" und wollte dann das Drehmoment errechnen, was ich mindestens benötige, weil ich so auch den Fall ermitteln kann, dass der Motor "abgebockt" wird (Wenn das Drehmoment, das benötigt wird größer ist als das Drehmoment, was am Getriebeausgang anliegt, ist der Motor aus).

Allerdings geht das mit deiner Methode auch, wenn ich es mir so überlege: Wenn die Widerstände von Luft und Straße größer sind, als die in Code: [AUSKLAPPEN]
F = Motordrehmoment * Getriebe Übersetzung * Differential Übersetzung * Wirkungsgrad / Reifenumfang
ermittelte Kraft, dann wird der Motor abgebockt, richtig?

Wenn dem so ist, hat sich das ganze Problem eigentlich schon geklärt.

Zitat:
Die Übertragung der Kraft auf die Straße ist dann nochmal ein Thema für sich.

Stichwort "Gleitzahl"?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
 

CO2

ehemals "SirMO"

BeitragMo, Aug 25, 2014 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Entschuldigt den Doppelpost, aber ich glaube, ich habe es jetzt einigermaßer realistisch hinbekommen (vielleich mathematisch nicht ganz korrekt... Wink), also wer es braucht:
BlitzMax: [AUSKLAPPEN]
Rem
Autor: Marius Otto
Datum: 23.08.2014
End Rem

Const WHEELDURCH:Double = 1 ' Angabe in m

Type TGear
Field Translation:Double

Function Create:TGear(Translation:Double)
Local ReturnMe:TGear = New TGear
ReturnMe.Translation = Translation
Return ReturnMe
End Function
End Type

Type TGearBox
Field Gears:TGear[]
Field MomGear:Int ' -1 = R, 0 = N, Rest MomGear = Gang

Function Create:TGearBox(Gears:TGear[])
Local ReturnMe:TGearBox = New TGearBox
ReturnMe.Gears = Gears
ReturnMe.MomGear = 0
Return ReturnMe
End Function

Method GetOutputValues:Float(MomRPM:Float, MomTorque:Double, OutRPM:Float Var, OutTorque:Float Var)
If(MomGear < -1 Or MomGear > (Self.Gears.length - 2))
OutRPM = 0
OutTorque = 0
Else
OutRPM = MomRPM * Self.Gears[(MomGear + 1)].Translation

If(Self.Gears[(MomGear + 1)].Translation <> 0)
OutTorque = MomTorque / Self.Gears[(MomGear + 1)].Translation
Else
OutTorque = 0
EndIf
EndIf
End Method

Method NextGear()
If(Self.MomGear >= (Self.Gears.length - 2))
Self.MomGear = (Self.Gears.length - 2)
Else
Self.MomGear = Self.MomGear + 1
EndIf
End Method

Method PrevGear()
If(Self.MomGear <= -1)
Self.MomGear = -1
Else
Self.MomGear = Self.MomGear - 1
EndIf
End Method

Method SetGear(Gear:Int)
If(Gear >= -1 And Gear <= (Self.Gears.length - 2))
Self.MomGear = Gear
EndIf
End Method
End Type

Type TEngine
Field MaxRPM:Float
Field HorsePower:Float

Function Create:TEngine(MaxRPM:Float, HorsePower:Float)
Local ReturnMe:TEngine = New TEngine
ReturnMe.MaxRPM = MaxRPM
ReturnMe.HorsePower = HorsePower
Return ReturnMe
End Function

Method GetTorque:Double(MomRPM:Double)
If(MomRPM > MaxRPM Or MomRPM <= 0)
Return 0
Else
MomRPM = MomRPM - 1
Return (Self.HorsePower * 100) / (2 * Pi * ((MaxRPM - MomRPM) / 60))
EndIf
End Method
End Type

Type TVehicleDrive
Field Engine:TEngine
Field GearBox:TGearBox
Field MassKg:Float

Function Create:TVehicleDrive(Engine:TEngine, GearBox:TGearBox, MassKg:Float)
Local ReturnMe:TVehicleDrive = New TVehicleDrive
ReturnMe.Engine = Engine
ReturnMe.GearBox = GearBox
ReturnMe.MassKg = MassKg
Return ReturnMe
End Function

Method GetSpeed:Float(MomRPM:Float, Gear:Int, MomSpeed:Float = 0)
If(MomRPM >= 0 And MomRPM <= (Self.Engine.MaxRPM) And Gear >= -1 And Gear <= (Self.GearBox.Gears.length - 2))
Local ForceNeeded:Float
If(MomSpeed <> 0)
If(Gear = -1)
ForceNeeded = Self.MassKg / ((MomSpeed * 5) ^ 2)
Else
ForceNeeded = Self.MassKg / ((MomSpeed * 5) ^ 2)
EndIf
Else
ForceNeeded = Self.MassKg
EndIf

Local TorqueGearBox:Float
Local RPMGearBox:Float
Self.GearBox.SetGear(Gear)
Self.GearBox.GetOutputValues(MomRPM, Self.Engine.GetTorque(MomRPM), RPMGearBox, TorqueGearBox)

Local ForceMom:Float = TorqueGearBox * (2 * Pi * (WHEELDURCH / 2))

If(Self.GearBox.MomGear = -1)
ForceMom = ForceMom * (-1)
EndIf

If(ForceMom < ForceNeeded And ForceMom <> 0) ' Abgebockt?
Return -1
EndIf

' Wenn nicht, ist RPMGearBox die Umdrehungszahl der Reifen pro Minute
Local MomSpeedRet:Float = (Pi * WHEELDURCH) * RPMGearBox ' m / min
MomSpeedRet = MomSpeedRet / 60 ' m / s
Return MomSpeedRet
Else
Return -1
EndIf
End Method
End Type

' ### TEST ###
Local Gears:TGear[] = [TGear.Create(-0.025), TGear.Create(0), TGear.Create(0.025), TGear.Create(0.05), TGear.Create(0.075), TGear.Create(0.1)]
Local TestVehicle:TVehicleDrive = TVehicleDrive.Create(TEngine.Create(4000, 250), TGearBox.Create(Gears), 6000)
Local LastSpeed:Float = 0

For Local x:Int = -1 To (Gears.length - 2) Step 1
For Local y:Int = 500 To TestVehicle.Engine.MaxRPM Step 500
Print("Gang: " + x + "; RPM: " + y + "; MomSpeed: " + TestVehicle.GetSpeed(y, x, LastSpeed) + "m/s (" + (TestVehicle.GetSpeed(y, x, LastSpeed) * 3.6) + "km/h)")
If(TestVehicle.GetSpeed(y, x, LastSpeed) > 0)
LastSpeed = TestVehicle.GetSpeed(y, x, LastSpeed)
EndIf
Next
Print("")
Next

End

mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Mo, Aug 25, 2014 19:58, insgesamt einmal bearbeitet

DAK

BeitragMo, Aug 25, 2014 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Mathematik schaut gut aus, die Gang-Verhältnisse eher weniger. 75 km/h bei 4000 RPM im 4. Gang? Was ist das für ein Vehikel?^^
Gewinner der 6. und der 68. BlitzCodeCompo
 

CO2

ehemals "SirMO"

BeitragMo, Aug 25, 2014 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
EDIT: Kleineres Update: Ein paar Konstanten angepasst.

@ DAK: Also mein Golf 3 kriegt das hin... Very Happy
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group