Mikrocontrollerprogrammierung: Matlab Coder vs. Handgeschriebener C-Code

Gast #4877208
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.)
Gast #4877273
>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...
Gast #4877284
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.
Gast #4877292
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.
#4877308
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
#4877472
>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.
Gast #4877490
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
Gast #4877508
@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.
#4877533
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.
#4877656
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
#4877691
> .. 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.