WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Modellierung eines Batteriestacks mit mehreren Zellen

 

spungia
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2013, 14:14     Titel: Modellierung eines Batteriestacks mit mehreren Zellen
  Antworten mit Zitat      
Hallo!
dies ist meine erste frage und ich hoffe, dass ich sie am richtigen ort stelle.

Aufgabe:
Im Rahmen meiner Bachelorarbeit muss ich ein Batteriesystem modellieren, welches mehrere Zellen beinhaltet.

Der Eingang ist ein Strom-Wert, welcher negativ ist um die Zellen zu entladen und positiv ist um sie zu beladen.
Das Ausgangssignal sollen mehrere Spannungs-Werte sein.

Da dieses Modell für Lithium-Ionen Zellen gebaut wird muss beachtet werden, dass keine Zelle über ihre maximale Spannung bzw unter ihre minimale Spannung fällt, da dies sonst die Zelle beschädigen würde. Deshalb muss der Be-/Entladevorgang immer kontrolliert werden und sobald die erste Zelle die minimale oder maximale Spannung erreicht hat sollte der entgegengesetzte Vorgang starten. Also: Werden die Zellen zum Beispiel geladen und die erste erreicht die maximale Spannung sollen alle Zellen entladen werden. Sobald dann die erste Zelle die minimale Spannung erreicht, sollen alle Zellen wieder beladen werden und soweiter.

Da die Zellen nicht alle die identischen Parameter haben, erreichen nicht alle Zellen immer gleichzeitig die maximale/minimale Spannung. Dadurch werden eingie Zellen nicht voll be-/entladen. Nach mehrmaligen Be- und Entladen müsste deshalb ein "Auseinanderdriften" der Spannungskennlinien erkennbar sein.

Soweit die Theorie.

Mein modell ist nun eigentlich fertig nur habe ich das Problem, dass mein Ladevorgang immer einen Fehler aufwirft. Ich lasse mein Modellsimulation laufen und sobald die erste Zelle die minimale Spannung erreicht hat bricht Matlab ab und gib die Fehlermeldung raus:

"At time 7024.743641428188, simulation hits (1000) consecutive zero crossings. Consecutive zero crossings will slow down the simulation or cause the simulation to hang. To continue the simulation, you may 1) Try using Adaptive zero-crossing detection algorithm or 2) Disable the zero crossing of the blocks shown in the following table."

Leider arbeite ich mit Matlab erst seit kurzem und weiß leider nicht, wie ich das lösen kann. Ich habe schon versucht die zero-crossing detection ein-bzw auszuschalten und auch in simulation>configuration parameters>solver>zero-crossing den Algorithmus auf adaptive zu setzen, jedoch erhalte ich dann die Fehlermeldung:

"Trouble solving algebraic loop containing 'batterymodel2/MinMax' at time 7025.171634417325. Stopping simulation. There may be a singularity in the solution. If the model is correct, try reducing the step size (either by reducing the fixed step size or by tightening the error tolerances)."

Ich bin echt am verzweifeln und weiß nicht weiter! Hoffentlich kann mir einer von euch helfen. Sollte mein Modell an Stellen vereinfacht werden können, wäre ich auch hier für Tips dankbar!

Ein sehr großes Dankeschön, an alle, die ihre Zeit investieren um mir hier auf die Sprünge zu helfen.

bevor man das simulink file ausführen kann müssen die beiden mat-dateien in matlab geladen werden; die datei panasonic ist für eine soc-ocv kennlinie hinterlegt; die datei zellparameter beinhaltet parameter für zwölf zellen, welche eine streuung haben.

batterymodel.zip
 Beschreibung:

Download
 Dateiname:  batterymodel.zip
 Dateigröße:  32.26 KB
 Heruntergeladen:  539 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.04.2013, 14:25     Titel:
  Antworten mit Zitat      
Hallo,

ist natürlich schwierig, dazu etwas zu sagen, ohne im Detail zu wissen, was eigentlich modelliert wird.

Was mir jedoch auffällt: dein Modell scheint auf den ersten Blick keine diskrete oder kontinuierliche Dynamik zu enthalten, und das ist für etwas so komplexes mit Rückführungen doch sehr ungewöhnlich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
spungia
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2013, 14:40     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke, dass du mir so schnell zurückschreibst.

die blöcke, welche ich in Zelle1 modelliere sind die bauteile, welche in einem Batterieersatzschaltbild vorkommen. Ich denke nicht, dass diese falsch sind, es ist eher der lade und entladevorgang.

was genau meinst du mit diskreter oder kontinuierlicher dynamik?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.04.2013, 15:13     Titel:
  Antworten mit Zitat      
Hallo,

was ist "Zelle1"?

Es geht mir weniger um die Einzelteile als deren Zusammensetzung.

Diskreten Dynamiken liegen Differenzengleichungen zugrunde, während kontinuierlichen Dynamiken über Differenzialgleichungen dargestellt werden.

Deine Modellierung drückt beispielsweise aus, dass der Eingang von "Pack" ohne jegliche Verzögerung auf eine Veränderung des Ausgangs reagiert.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
spungia
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2013, 13:34     Titel:
  Antworten mit Zitat      
hallo harald!

Zelle1 ist der name des subsystems, in welchem die batteriebauteile enthalten sind.

wie kann ich dann eine solche dynamik in mein modell einbauen?und welche ist für mein modell besser geeignet?

um nochmal auf mein anfangsproblem zurückzukommen: gibt es denn eine möglichkeit die schleife welche ich habe zu umgehen, indem man jedesmal die werte in eine konstante in matlab speichert. Im nächsten schritt kann ich diese ja dann wieder abfragen.
Leider weiß ich aber nicht wie ich dies implementieren kann.
oder wie würdest du mein problem lösen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.04.2013, 16:47     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
wie kann ich dann eine solche dynamik in mein modell einbauen?und welche ist für mein modell besser geeignet?


Das musst an sich du aus der Anwendung heraus entscheiden. Man kann natürlich einfach Unit Delay oder Memory-Blöcke einbauen, muss sich aber darüber im klaren sein, dass man so die Dynamik des simulierten Systems verändert - und das ist normal keine gute Idee.

Zitat:
gibt es denn eine möglichkeit die schleife welche ich habe zu umgehen, indem man jedesmal die werte in eine konstante in matlab speichert.

Ich sehe nicht, wie das das Problem lösen sollte.

Zitat:
oder wie würdest du mein problem lösen?

Ich würde mir nochmal genau überlegen, was hier eigentlich modelliert werden soll. Aufgrund welchen Gleichungen baust du denn das ganze auf?

Gründe,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
spungia
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2013, 20:06     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe nun nochmals mein Zellmodell neu aufgebaut und es etwas vereinfacht. Die Spannung meines Batteriepacks setzt sich nun nur aus der eigentlichen Batteriespannung und der Spannung welche am Innenwiderstand abfällt zusammen.

Nun muss dieses Batteriepack, welches sich im Moment aus zwei Zellen zusammen setzt, geladen und entladen werden können. Dazu wie ich schon geschrieben habe ist wichtig zu wissen, dass nur bis 4 Volt geladen und nur bis 3 Volt entladen werden darf. deshalb benötige ich doch eine Schleife oder?

oder wie wäre dein weiteres vorgehen um die batterie laden zu können?

batterymodell_1.zip
 Beschreibung:

Download
 Dateiname:  batterymodell_1.zip
 Dateigröße:  27.24 KB
 Heruntergeladen:  402 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.04.2013, 20:43     Titel:
  Antworten mit Zitat      
Hallo,

das neue Modell ist ziemlich unvollständig.
Zitat:
Warning: Matching "From" for "Goto"
'batterymodell_1/Batteriezelle/Goto5' not found
Warning: Matching "From" for "Goto"
'batterymodell_1/Batteriezelle/Goto6' not found
Warning: Unconnected input line found on
'batterymodell_1/Batteriezelle' (input port: 1)


Mal ein anderer Ansatz: die Embedded MATLAB Function soll ja anscheinend zwischen Laden und Entladen schalten. Momentan sieht das für mich so aus:
Schalte in den Entladevorgang, außer das Minimum ist erreicht. In diesem Moment schalte auf Laden. Dieses Umschalten zwischen Entladen und Laden müsste nach deiner Modellierung aber quasi beliebig oft geschehen, so dass genau der Minimum-Zustand eingehalten wird, und das ist, wenn ich das richtig verstehe, nicht das, was du möchtest.

Wenn keiner der Schwellwerte angenommen wird, möchtest du ja, dass weiter ge- bzw. entladen wird? Dann müsstest du mit persistent - Variablen arbeiten. Ich habe mal angehängt, wie ich mir das vorstelle.

Grüße,
Harald

batterymodel2.mdl
 Beschreibung:

Download
 Dateiname:  batterymodel2.mdl
 Dateigröße:  83.28 KB
 Heruntergeladen:  442 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
spungia
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2013, 11:46     Titel:
  Antworten mit Zitat      
Hey harald!

erst einmal vielen vielen Dank für deine echt tolle Hilfe! und tut mir leid, dass ich eine unvollständige version hochgeladen hatte!

Ich habe nun die persistent - Variablen in mein neues modell als Embedded MATLAB Function eingebaut. er bricht jetzt schon mal nicht mehr die simulation ab...außerdem habe ich denn code umgeschrieben wie du es vorgeschlagen hast. es war vollkommen richtig wie du den lade und entladevorgang verstanden hast!!!

ABER jetzt gibt es andere Probleme Sad

1) lasse ich nun die Simulation laufen, wird der Stromwert geändert ohne dass eine Zellspannung die Grenzwerte erreicht.
2) der Spannungsverlauf sowie die be-/entlade vorgänge variieren mit der anzahl der zellen. wird die simulation mit einer zelle durchgeführt (Zellen1.mat) so wird weniger oft be- und entladen als mit zwei Zellen (Zellen2.mat)
außerdem springt der Strom bei einer Zelle nicht von -1 auf 1 sondern steigt über einen kurzen zeitraum an, was er bei zwei Zellen nicht tut.

Diese beiden Probleme versteh ich einfach nicht und finde auch keinen Fehler im Modell...An was kann das liegen?An den persistent - Variablen?

Grüße

batterymodell_3.zip
 Beschreibung:

Download
 Dateiname:  batterymodell_3.zip
 Dateigröße:  30 KB
 Heruntergeladen:  495 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.04.2013, 21:01     Titel:
  Antworten mit Zitat      
Hallo,

zu 1)
Das sieht nur so aus. Simulink macht recht große Schritte. Wenn der Schritt zu weit ist und wir unter Minimum bzw. über Maximum geraten sind, wird quasi schon vorbeugend die Richtung geändert, ohne dass wir da überhaupt hingekommen sind.
Das Problem ist hier also wohl die persistent-Variable, die sich auch Dinge merkt, die sie sich nicht merken soll. Was man versuchen könnte:
- die Embedded MATLAB Function durch Simulink-Blöcke ersetzen. Sollte sich an sich machen lassen
- den Wechsel zwischen Laden und Entladen über Stateflow modellieren. Laden und Entladen sind zwei Zustände, und du kannst die Bedingungen definieren, unter denen zwischen den Zuständen hin- und hergewechselt wird. Ich bin allerdings kein Stateflow-Experte.

zu 2)
Das liegt an den verwendeten Blöcken. Multiport-Switch hat keine Nulldurchgangserkennung, d.h. ein Signalwechsel wird nicht erfasst. Wenn du stattdessen einen Switch-Block verwendest, ist zumindest dieses Problem behoben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
spungia
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2013, 11:57     Titel:
  Antworten mit Zitat      
hey harlad!
also mein modell klappt nun soweit!!! danke für deine hilfe!!!
grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.04.2013, 13:55     Titel:
  Antworten mit Zitat      
Hallo,

kannst du kurz beschreiben, was du angepasst hast? Nur zur Befriedigung meiner Neugier und falls mal jemand ähnliche Probleme haben sollte.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
spungia
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2013, 20:42     Titel:
  Antworten mit Zitat      
hallo harald,

tut mir leid, dass dies nun so lange gedauert hat! hatte im eifer des gefechts ganz vergessen hier zu antworten.

ich habe wie du mir geradten hast einen Switch-Block verwendet sowie aus der matlabfunktion einen recht einfachen aber sehr wirkungsvollen stateflow-block gebastelt. und schon funktioniert es Smile

danke nochmals für deine super hilfe!!! wäre ohne dich noch sehr viel länger an diesem problem verzweifelt!!!

und nochmal entschuldigung für den verspäteten eintrag!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.