Halli hallo,
ich möchte verschiedene Regler auf Mikrocontrollern implementieren.
(Welcher Mikrocontroller genau, ist noch nicht so ganz klar.) Im Studium
haben wir Regelungssimulationen sonst mit Matlab/Simulink erstellt und
ausprobiert, was relativ angenehm war, gerade wenn es sich um
mathematisch eher "abgehobene" Regelungsalgorithmen handelt.
Nun stehe ich vor der Aufgabe, ebenso komplizierte Regler händisch mit C
zu programmieren, wovor es mir ein bisschen graut. Wäre sicher auch mal
eine gute Übung, allerdings schon recht mühsam. Meiner erster Gedanke:
"Bauste vielleicht doch lieber Zuhause in 2h das passende
Simulinkmodell, lässt dir den C-Code autogenerieren, passt den ein
bisschen an und sparst dir dadurch eventuell wochenlange Arbeit, die du
sonst händisch mit C dafür brauchen würdest." Man kann sogar fixed-point
beim Matlab Coder auswählen.
Ein wesentlicher Grund, der gegen Matlab sprechen könnte, ist, dass der
generierte C-Code nicht so ganz ressourcensparend oder zuverlässig(???)
ist. Zumindest habe ich diese Argumente mal irgendwo so aufgeschnappt.
Stimmt das (noch)? (Vielleicht war das früher ja tatsächlich so. Aber es
kann ja sein, dass der Matlab Coder mittlerweile so gut geworden ist,
dass kaum noch ein Unterschied besteht.) Wobei müsste ich denn bei der
Auswahl eines Mikrocontrollers achten, wenn ich mir Code hauptsächlich
automatisch generieren lassen möchte (und der dann auch gut
funktioniert)?
Jemand aktuelle Erfahrung damit? Eventuell sprechen prinzipielle Gründe
dagegen? (Ihr seht, so viel Ahnung habe ich noch nicht von
Mikrocontrollern.)
>Ein wesentlicher Grund, der gegen Matlab sprechen könnte, ist, dass der>generierte C-Code nicht so ganz ressourcensparend oder zuverlässig(???)>ist. Zumindest habe ich diese Argumente mal irgendwo so aufgeschnappt.
Bei gängigen Programmen wie Matlab gilt das so nicht mehr pauschal.
Nutzt Du aber die hinterwäldler Feld-, Wald- und Wiesenbibliothek...
Was aber bei vielen µP dagegensprechen könnte ist der Platzbedarf.
Oft gilt bei solchen Bibliotheken: Die muss auch noch waschen und bügeln
können - auf einem PehZeh kein Problem - aber beim FLASH eines 08/15
µP...
Grundsätzlich spricht nix dagegen.
Gerade was die Reglergeschichten in Simulink angeht gibt es wenig Gründe
die dagegen sprechen. Gerade diese Dinge werden in der Industrie sehr
gerne generiert. Der Code läuft dann letztendlich auch im Auto, die
Codequalität ist i.d.R. bei diesen Dingen gut. Wo Matlab noch defizite
hat sind z.B. Statemachines mit komplexen Ein-/Ausgängen.
Allerdings sollte dir klar sein, dass die Integration des Codes sehr
mühselig sein kann.
Probiers einfach mal aus und teil uns mit. Wenn der Regler nach 2h
fertig ist, kannst ja mal Code generieren und uns dann mitteilen, wie
der so ausschaut.
Ich halte bei uns nichts von unseren Matlab-Verfechtern, die per
Stateflow embedded Steuerungscode modellieren wollen.
Für mathematische Berechnungen (Regler, Matritzen, Geometrie) die über
einfache Gleichungen hinaus gehen, wäre kein Matlab Dummheit.
Sollte der µC gesprengt werden (zeitlich/RAM/ROM), kann man den Code *am
Ende* auch händisch optimieren oder zumindest als
Basis/Testbench/Referenz nutzen. Dann ist aber nicht Matlab schuld,
sondern Stückzahlen oder der, der den µC ausgesucht hat.
Auswahl des µC: C-Compiler vorhanden (ist immer gegeben) und den
Matlab Code auf ein fertiges Demo-Kit bringen (lassen). Dann siehtst Du,
ob Dein Code bei Deiner Aufgabe 1%, 10%, 100% oder 1000% von Zeit oder
Speicher braucht.
Ich verstehe nicht, warum ausgerechnet Matlab für uC Programmierung
eingesetzt wird.
Python + numpy + sympy + scipy + matplotlib können matlab für
regelungstechnische Anwendung 100% ersetzten. Ich bereue immernoch dass
ich damals vor 4J für Matlab 100€ bezahlt habe.
Nenn mir bitte einen Regler der in C schwer zu implementieren ist.
Online Identifizierung (rekursive LSQ) der Strecken sind etwas
kompliziert
Christian M. schrieb:> Stm M. schrieb:>> Python + numpy + sympy + scipy + matplotlib>> Super. Und das alles auf einem uC und in Echtzeit?
wer sagt dass das alles auf dem uC laufen.
Für die Simulation und Berechnung der Reglerverstärkungen können Python
+ genannten Packages eingesetzt werden.
>Für die Simulation und Berechnung der Reglerverstärkungen können Python
+ genannten Packages eingesetzt werden.
Ja, wenn die Strecke denn gleich bleibt. Solche aufwendigen Simulation
benoetigt man ja eher bei komplizierten Systemen, wie zB 5 gekoppelte
Pools mit 2 Wasserfaellen dazwischen.
Und da sollte man schon gewappnet sein, dass sich Parameter aendern. Dh
man sollte die Simulation als Beobachter auf dem System mitlaufen
lassen, und die Abweichung im Auge behalten.
Stm M. schrieb:> wer sagt dass das alles auf dem uC laufen.
Der UP. Er möchte sich ablauffähigen Code erstellen. Die Simulation
(Dimensionierung des Reglers etc.) ist nicht Bestandteil seiner Frage.
Flo schrieb:> Nun stehe ich vor der Aufgabe, ebenso komplizierte Regler händisch mit C> zu programmieren
@Stm Mc
>wer sagt dass das alles auf dem uC laufen.
Vielleicht der Titel dieser Diskussion?
Was ich noch anfügen wollte:
Von Misch-Masch halte ich nicht sehr viel.
Entweder man lässt sich den Code generieren, oder man schreibt ihn sich
selber.
Spätestens wenn zu viele sogenannte "Anpassungen" getätigt werden,
steigt die Fehlerquote immens an. Ob dann der Code-Generator wirklich
noch sein Geld wert ist…
Wenn man mal ein paar Exoten (sowohl µP als auch Regleralgorithmen)
außen vor lässt, sollten für "normale" Mikrokontroller ALLE gängigen
Regler, in vielfach getesteter Form, vorliegen.
Der klassische PID-Regler läßt sich sehr einfach in C programmieren,
vorzugsweise mit float.
Die Abtastzeit wählt man oft so, daß sie gegenüber der Durchlaufzeit der
Regelstrecke (DAC->Stellglied->Sensor->ADC) dominiert. Auf keinen Fall
darf sie die Totzeit unterschreiten.
Sapperlot W. schrieb:>>Für die Simulation und Berechnung der Reglerverstärkungen können Python> + genannten Packages eingesetzt werden.>> Ja, wenn die Strecke denn gleich bleibt. Solche aufwendigen Simulation> benoetigt man ja eher bei komplizierten Systemen, wie zB 5 gekoppelte> Pools mit 2 Wasserfaellen dazwischen.>> Und da sollte man schon gewappnet sein, dass sich Parameter aendern. Dh> man sollte die Simulation als Beobachter auf dem System mitlaufen> lassen, und die Abweichung im Auge behalten.
es geht um einen komplizierten Regler, keinen Beobachter, und schon gar
nicht online Identifizierung der Strecke
> .. keinen Beobachter, und schon gar nicht online Identifizierung der Strecke
Da verpasst du aber was. Egal.
Mir ist nicht ganz klar wie man die Strecke ohne den Regler selbst
identifizieren, rep messen will. Denn der Regler bietet ja das
Stellglied, und die Sensorauswertung. Damit habe ich die Strecke quasi
schon vermessen. Noch nicht modelliert. Das kann man ja extern, per
Schnittstelle, machen.
Und wenn ich die Simulation als Beobachter mitlaufen lasse, habe ich
einen Feedback zur Guete des Modelles. Der Beobachter muss ja nichts zur
Regelung beitragen.