Forum: Mikrocontroller und Digitale Elektronik Mikrocontrollerprogrammierung: Matlab Coder vs. Handgeschriebener C-Code


von Flo (Gast)


Lesenswert?

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.)

von Amateur (Gast)


Lesenswert?

>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...

von ui (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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.

von Stm M. (stmfresser)


Lesenswert?

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

von Christian M. (chrigi001)


Lesenswert?

Stm M. schrieb:
> Python + numpy + sympy + scipy + matplotlib

Super. Und das alles auf einem uC und in Echtzeit?

von Stm M. (stmfresser)


Lesenswert?

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.

von Pandur S. (jetztnicht)


Lesenswert?

>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.

von A. S. (Gast)


Lesenswert?

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

von Amateur (Gast)


Lesenswert?

@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.

von Peter D. (peda)


Lesenswert?

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.

von Stm M. (stmfresser)


Lesenswert?

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

von Pandur S. (jetztnicht)


Lesenswert?

> .. 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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.