# Mal wieder ein Prüfstand - drehzahlabhängiges Gegenmoment



## ZottelMD (25 Januar 2021)

Hi Leute,
ich hab 'mal eine Frage. Ich sitze immernoch an meiner Masterarbeit ( "Automobil"-Prüfstand für kleine Fahrzeuge wie Gokarts). Es ist kaum noch Zeit und so richtig krieg ich es immernoch nicht hin, alles umzusetzen, was mindestens laufen muss.
Aktuelles Problem:Im Rahmen von Analysen und Testmessungen bin ich gerade dabei die Motorkennlinie vom GX200 Honda Kleinmotor zu "ermitteln". Dazu nutze ich folgenden Aufbau:



(ACHTUNG: breites Bild -> nach rechts scrollen (mittlere Maustaste))
Abb. 1: Aufbau zum Vermessen des Gokartmotors (Honda GX200)

- Ihr seht auf der linken Seite den 1FT7..-Siemens Servo, dann zwei Metallbalgkupplungen, die die bläuliche Drehmomentmesswelle einrahmen, ein Stehlager und zwei Flansche, die zusammen in den Motor ragen und dort Drehungen ausführen oder dort gedreht werden -

An der Stelle, wo mein E-Strang in den GX200 reinragt, sitz normalerweise das Anzugsseil (stino Wald- und Wiesen-Rasenmähermotor). Um das Problem zu lösen, habe ich eine Rampe für den Servo programmiert, die in einer Sekunde auf Leerlaufdrehzahl des GX200 mit 10 Nm TorqueLimit dreht (ca. 1500 rpm) und dann spingt das Torquelimit im Servo von 10 auf 0 Nm. Ist die GX200 Zündung eingeschaltet, so ist das im Grunde eine Starthilfe und ab da hält der Motor sich selbst in Leerlaufdrehzahl, und treibt die ganzen Servo-Motorkomponenten.

Durch Trapezrampen habe ich im Vorfeld so leidlich die Trägheitsmomente vom GX200, vom Servo (1FT7-...) und die ganzen Amaturen (wie z.B. Drehmomentmesswelle, Stehlager, Radnabenflansch, etc.) bestimmt. Heißt durch die Trapezmethode habe ich so ungefähre Trägheitmomente der sich drehenden Teile ermittelt (Warum ungefähr?, weil das Trägheitsmoment bei den Messungen nie über den gesamten Drehzahlbereich konstant ist > ergo Mittelwert). Bei den meisten Werten helfen aber auch die Datenblätter. Das deckt sich einigermaßen gut mit den gemittelten Messergebnissen für die Trägheiten. Nur der GX200 hat eben keine dokumentierte Trägheit... nun weiter..

Zunächst habe ich nun Vollgasmessungen vom GX200 mit anschließendem Ausrollversuch gemacht. Durch die "Kenntnis" von J, also dem Trägheitsmoment der oben abgebildeten Teile, kann man das Beschleunigungsmoment M_B ermitteln (positive Drehzahlrampe) und das Widerstandsmoment M_W beim Ausrollen ermitteln (negative Drehzahlrampe).
Hat man dies beides, kann man mit M[SUB]A[/SUB] = M[SUB]B[/SUB] + M[SUB]W[/SUB] auf das Antriebsmoment schließen, also jenes Moment, was an der Kurbelwelle des GX200 ansteht und die rotierenden Teile beschleunigt (Servo, Amaturen).
Nach ganz viel MATLAB Datenverarbeitung, fittings, etc. erhalte ich beispielsweise so eine Motorkennlinie:



Abb. 2: ermittelte Motorkennlinie des HONDA GX200

Sieht erst einmal nicht schlecht aus, würde man meinen, aber zum Vergleich, will ich den einzigen Schnipsel anhängen, der offiziell über den GX200 bekannt ist:



Abb. 3: SOLL-Motorkennlinie des GX200

Man erkennt, dass ich die Leistung und das Moment zu hoch ermittelt habe. Im HONDA Datenblatt wird bei dem Schnipsel auf SAE J1349 Bedingungen verwiesen... ja keine Ahnung. Ich denke mir nur jetzt, dass die "Last", unter der ich meine Messung gemacht habe, möglicherweise zu gering ist. Denn letztendlich hat mein GX200 bei meiner Messung nur ein bisschen rotierende Masse gesehen, deren Trägheitsmoment jetzt nicht die Welt ist. Die positive Drehzahlrampe wird in meiner Messung demnach z.B. in ca. 1.2 s durchfahren (von ca. 1500 rpm auf 4950 rpm] und die Ausrollrampe dauert ca. 3 s. Das sind natürlich keine Zeiten wie bei Vollastbedingungen auf der Straße. Dort dauert die Beschleunigung ca. 8 Sek und das Ausrollen mehr als 25 s. Logisch - schwerere Last schiebt oder bremst.

Per Definition müsste es eigentlich egal sein, in einem idealen System. Der Motor hat ein gewisses Repertoire an Moment über Drehzahl. Ist die angeschlossene Last gering, so schafft er es die geringe Last zügig zu beschleunigen, die Kennlinie also schnell zu durchlaufen (wie bei mir z. B. nur wenig rotatorische Masse, die beschleunigt werden muss (J ist klein also ist α groß ( aus M = J*α )). ist die Last größer, so verrichtet er die gleiche Arbeit, aber braucht für die gleiche Rampe länger (J ist groß also ist α klein ( aus M = J*α )).

Nun wollte ich ausporbieren, dass der Servo im Moment der "Energieabgabe" - Sprung von Antreibenden +10 Nm auf 0 Nm TorqueLimit - ab da drehzahlabhängig ein Gegenmoment erzeugt. So könnte ich z. B. auf dem Prüfstand, unter diesem Aufbau simulieren, dass das Kart fährt (z.B.). Generell muss ich ja "nur" sagen: "Servo fahre im generatorischen Betrieb bitte die ZIEL-Drehzahl 0 rpm an und du darfst dazu XYZ Nm aus dem Baustein TorqueLimit benutzen." (Hinweis: ein Baustein, der das zur Verfügung stehende Drehmoment des Servos zum Erreichen seines SOLL-Wertes begrenzt (in dem Fall: SOLL-Drehzahl 0 rpm & Drehmoment eben drehzahlabhängig wie in M[SUB]B[/SUB] = J*α))

Ich hole mir durch einen zyklischen Baustein (OB) alle 50 ms die momentane Drehzahl und den Zeitstempel. Dann berechne delta n durch delta t und erhalte eine "ruhigere" Beschleunigung, als wenn ich Sie dire aus dem Antrieb entnehme (Technologieobjekt TO) - sprich vom Servo (Positionierachse) auslese.
Dennoch zitert die Beschleunigung stark um ihren Mittelwert. Das führt dazu, dass der Servo das Gegenmoment "schön unkontinuierlich" anlegt und es immer zu "Schlägen" auf der Welle kommt.
Das Problem:
- berechne ich aus dem alpha noch den gleitenden Mittelwert, so verzögere ich mein Signal um die Fensterbreite, heißt ich berechne ein Alpha und daraus ein M_Gegen, was dann zu spät angelegt wird, da ist die Drehzahl schon wieder höher. Moment und Drehzahl passen dann nicht mehr zueinander.

Ich würde gern sagen, wenn die translatorische Masse des Karts (80+95) kg beträgt, dann soll in den Beschleunigungsphasen des GX200 (positive Drehzahlrampe) der Servo ein Gegenmoment von z. B. J*α aufbringen. Dabei sei J jetzt eben nicht mehr so klein, wie bei der eingangs beschriebenen Messung, sondern es wird um die äquivalente translatroischen Masse draußen auf der Straße erhöht
( M[SUB]B,trans[/SUB] sei dazu M[SUB]B,rot[/SUB] -> m[SUB]T[/SUB]*α*r² = J*α -> J = m[SUB]T[/SUB]*r² = 175 kg * 0.131² m²= 3 kgm² ). Wenn ich also den Servo, gesteuert durch das momentane Beschleunigung α (alpha) und einem Trägheitsmoment von J = 3 kgm², ein Gegenmoment erzeugen lasse, dann würde ich damit simulieren, dass der Motor die Kartmasse vor sich herschiebt.
Derzeit versuche ich es mit .. umzusetzen:

```
... 
2:
[INDENT]#PT := T#20S;    // Timerlaufzeit für case 3

"physSignals_DB".TLim_Nm_Ax1 := 10.0;       // M zum Anlassen des GX200
"physSignals_DB".nSOLL_dps_Ax1 :=            // linear Drehzahlrampe
( 1500.0 * DINT_TO_REAL("IEC_Timer_0_DB_4".ET)/1000 + 0.0 ) * 6.0;

IF #nFlag THEN // wenn case 2 und Timer- Runde 2 fertig, dann ..
[/INDENT]
[INDENT=2]"Bewegungssteuerung_DB".MCJog_fwd_Ax1 := TRUE; // schalte Jog wieder aus[/INDENT]
[INDENT=2]#TTrig := TRUE; // starte Timer Runde 3
#state += 1; // erhöhe Case-Var
[/INDENT]
[INDENT]  ELSE // sonst
[/INDENT]
[INDENT=2]"Bewegungssteuerung_DB".MCJog_fwd_Ax1 := FALSE; // Reset Jog
#TTrig := FALSE; // reset Timer Trigger[/INDENT]
[INDENT] END_IF;

[/INDENT]
3:
[INDENT] #PT := T#4S; // Timerlaufzeit für case 4
"RollenPST_DB".alpha := // berechne alpha
("RollenPST_DB".n2 - "RollenPST_DB".n1) /
("RollenPST_DB".dt) * 2.0 * #pi / 60.0;
IF #JzON AND ABS("RollenPST_DB".n2) > 1700 THEN // wenn GX200 schneller
[/INDENT]
[INDENT=9]// als 1700 rpm dreht, dann aktiviere
// dynamisches Gegenmoment[/INDENT]
[INDENT=2]"physSignals_DB".TLim_Nm_Ax1 :=
#Jtrans * "RollenPST_DB".alpha; // dyn. Gegenmoment
"physSignals_DB"."aSOLL_rpm/s_Ax1" := 500.0; // Beschleunigungen während
"physSignals_DB"."-aSOLL_rpm/s_Ax1" := 500.0; // der dyn. Last
[/INDENT]
[INDENT]  ELSE
[/INDENT]
[INDENT=2]"physSignals_DB".TLim_Nm_Ax1 := 0.0; // sonst kein Servo-Moment[/INDENT]
[INDENT] END_IF;
"physSignals_DB".nSOLL_dps_Ax1 := 0.0; // generell nSOLL = 0

IF #nFlag THEN // wenn case 3 und Timer- Runde 3 fertig, dann ..
[/INDENT]
[INDENT=2]#state := 0; // zurück auf Start[/INDENT]
[INDENT] ELSE
[/INDENT]
[INDENT=2]#TTrig := FALSE; // reset Timer-Trigger[/INDENT]
[INDENT] END_IF;

ELSE
#state := 0; // sonst Schritt 0
END_CASE;
...
```
[/INDENT]

Im Case 3 wird das momentane Gegenmoment, was abhängig von der GX200 verursachten Drehzahl wirken soll, berechnet und soll im Idealfall wirksam werden. Ich habe versucht, das Schlagen / Rucken bei schwankenden Beschleunigungswerten abzufangen, indem ich für diesen Abschnitt die TO-Beschleunigung herunter setze, aber das bewirkt nicht sehr viel. Spätestens bei der negativen Drehzahlrampe (Ausrollprozess, wenn ich das GX200-Gas loslasse) knallt mir ein Moment rein, was den Motor sofort absterben lässt, weil im Loslassmoment die Beschleunigung - bzw. Verzögerung - so hoch zu sein scheint, dass daraus ein kurzzig sehr hohes Moment aus der Berechnung resultiert.

Auch ein Herausschrauben der Zündkerze (sodass die Kompression vom GX wegfällt) und ein Ausführen vom OBT-Tuning (einfache Methode zum Optimieren einer Siemens Motorregelung) passt die Reglerparameter dahingehend nicht so an, dass das Gegenmoment schön sanft und kontinuierlich anliegt. Alternativ bin ich aber aus know how- und zeittechnischen Gründen auch nicht mehr in der Lage, irgendwelche Systeme zu analysieren und irgendwelche Konstanten zu berechnen. Ich finde die SIEMENS-Technik dazu viel zu komplex in TIA, wenn gleich man durch die BICO-Oberfläche bestimmt auch gute Möglichkeiten hätte, genau da einzugreifen. Aber kein Plan.

Hat jemand eine Idee oder kann jemand teilen, wie er solche drehzahlabhängigen Momente / Widerstände realisiert? Mir drückt zeitlich wirklich der Schuh. Im März ist Abgabe und mein Prüfstand kann einfach noch nicht das, was er soll. Finden wir hier eine gute Lösung, so kann ich die dann auch für den Hauptbetriebsfall nutzen:
Kart auf den Prüfstand aufspannen und Gasgeben. Den Prüfstand ( 2 Servos ) dabei genau die Widerstände erzeugen lassen, die bei der indoor-Messung fehlen ( Wind, Steigung, Roll, und Beschleunigung der abmontierten Reifen, also M[SUB]B,Räder[/SUB] )

Vielen Dank fürs Lesen und viele Grüße


----------



## Holzmichl (27 Januar 2021)

Ich finde solche Themen echt interessant.
Bin aber nur hobbymäßig Auto-, Motorrad- und Motorsportbegeistert.
So wie sich das liest wäre auch der spätere Anwendungsfall absolut schlupffrei, da fest verbunden?

Könnte man sich dann vorstellen eine etwas andere Vorgehensweise zu probieren, indem man die Drehzahl des Servos hart vorgibt, dem Motor Vollgas gibt und über den Servo das resultierende Drehmoment (= Bremsmoment Servo-seitig) bei konstanter Drehzahl ermittelt.
Wenn das Drehmoment konstant ist oder nach Zeitkonstante (z.B. alle 1000ms) um 100 U/min den Sollwert vom Servo hochtaktet und erneut das Bremsmoment vom Motor ermittelt.
So bekommt man in definierten Schritten das Motordrehmoment bei sehr konstanter Drehzahl.

Für das Bremsmoment genau der umgekehrte Weg, mit fest vorgegebener Drehzahl und ohne Gas/Standgas/Schubabschaltung das benötigte Drehmoment des Servos für das Halten der Drehzahl ermitteln.

Die ermittelte Kurve wäre meines Erachtens nach ziemlich genau und aussagekräftig. Allerdings der Prüfstandslauf völlig anders als gewohnt.
Die Motorbelastbarkeit und Temperaturhaushalt sowohl von Servo, als auch vom zu messenden Motor muss allerdings beachtet werden.

Um die reguläre Mess-Methode mit großer Schwungmasse und Wirbelstrombremse nachzubilden ist das ganze System, wie von Dir beschrieben, glaube ich zu nervös.


----------



## ZottelMD (29 März 2021)

Hallo Holzmichl, 

muss mich erst einmal entschuldigen, dass ich solange nicht geantwortet habe. 

Das lag zum einen daran, dass ich in der Not und im Termindruck meiner Masterarbeit sofort versucht habe umzusetzen, was du beschrieben hast, ...
und zum anderen lag es dann daran, dass ich mich nicht mehr erinnern konnte, wo ich diesen Hilfeschrei niedgeschrieben hatte. Weil ich überall versuche mir Hilfe zu holen.

Ich habe den Fred hier dann einfach nimmer gefunden, weil ich lange um das SPS-Forum drum herum gesucht hatte.

Fakt ist, deine Ansätze waren genial undda geh ich auch voll mit.

Allerdings konnte ich nach programmierung der von dir erwähnte Szenarien kein besseres Ergebnis erreichen. Die Last die der Servo aufbrachte führte zu nicht haltbaren Ruckeleien, auch wenn er nur die Drehzahl konstant halten will, falls man mit dem Verbrennungsmotor Gas gegeben hat. 

Das Prinzip wird bestimmt funktionieren, aber da muss man den gesamten AUfbau verbessern und anpassen bin ich der Meinung. Nicht zuletzt muss man auch in die Regelung der Servos eingreifen, denke ich.

Aus Gründen der Zeit musste ich mich dann vom direkten Messen der Motorkennlinie durch den behelfweisen Aufbau lösen und das Kernziel Messen unter dynamischer Belastung (an der Hinterachse) widmen. Leider konnte ich auch da bis jetzt kein ausreichendes Ergebnis erzeugen.

Um noch einmal zusammen zu fassen, was ich gemacht habe und wo ich gerade stehe, habe ich einen anderen Thread eröffnet, der sozusagen indirekt auf diesen hier aufsetzt.

https://www.sps-forum.de/simatic/103555-pruefstand-dynamische-v2.html#post783679

VG und besten Dank für die Anregung bisher
Basti

p.s.: Fazit: ich bin bisher nicht in der Lage dein oder mein WIrkprinzip deart umzusetzen, dass der Aufbau und die Drehzahlen dann stabil und ruhig messbar sind


----------

