Kleines Simulink-Modell auf µC flashen

Gast #4054806
Lesenswert?

Hallo leute,

ich habe im Rahmen einer Projektarbeit ein Versuchsstand aufgebaut, mit 
der eine Kugel im Magnetfeld schwebt, ähnlich wie hier:

http://www.bis0uhr.de/index.htm?http://www.bis0uhr.de/projekte/schwebekugel/index.html%99http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAA&url=http%3A%2F%2Fwww.bis0uhr.de%2Fprojekte%2Fschwebekugel%2Findex.html&ei=ohMHVYK8HYL5ygOZ_4HgBg&usg=AFQjCNHHvmC3aky-ANSuJpwUvpDlH538wg&bvm=bv.88198703,d.bGQ


Das ganze muss gereglt betrieben werden, da sonst das System instabil 
ist.

Den Regler entwerfe ich in Simulink, als Board nehme ich einen einfachen 
Arduino-Uno. Nun meine Frage:

Woher weiß ich bzw. wie kann ich überprüfen, ob das Simulink-Modell von 
der Speichergröße auf mein UNO Board passt ? Und wie sieht es mit der 
Geschwindigkeit aus, reichen die 16MHz vom Uno für die Regelung aus ?

Ich bin kein µC-Fachmann, daher bitte entschuldigen, wenn die Fragen 
vermeintlich einfach sidn.
#4054830
Lesenswert?

Ich hatte auch mal einen Magnetschweberegler mit einem ATmega 
realisiert.

Das war bei mir ein einfacher PID-Regelstrecke.
Input ADC, Output PWM und UI mit Taster und Display

Device: atmega644p

Program:    5298 bytes (8.1% Full)
(.text + .data + .bootloader)

Data:        294 bytes (7.2% Full)
(.data + .bss + .noinit)
Angehängte Dateien:
Gast #4055059
Lesenswert?

Christian K. schrieb:
> Ich hatte auch mal einen Magnetschweberegler mit einem ATmega
> realisiert.
>
> Das war bei mir ein einfacher PID-Regelstrecke.
> Input ADC, Output PWM und UI mit Taster und Display
>
> Device: atmega644p
>
> Program:    5298 bytes (8.1% Full)
> (.text + .data + .bootloader)
>
> Data:        294 bytes (7.2% Full)
> (.data + .bss + .noinit)

Danke für die Antwort.

Nur wo bekomme ich aus dem Simulink Modell genau diese Daten her ?

Wie viel Speicherplatz das ganze mich kostet und ob die Taktfrequenz 
dafür reicht ?
Gast #4055087
Lesenswert?

Welche Toolboxen hast du zur Verfügung?
Es gibt für Matlab/Simulink Toolboxen, die tatsächlich das Modell als 
fertigen Code in den Controller packen können.

Das geht aber nut sehr bedingt mit einer handvoll Boards, glaube nicht, 
dass das Arduino-Uno dabei ist.

Es gibt auch "einfachere" Toolboxen, die nur den eigentlichen Regler in 
C generieren. Den Code für Sensor/Aktor des uC musst du dann noch selbst 
hinzufügen.

Ein einfacher PID braucht nicht viel Ressourcen.
Gast #4055407
Lesenswert?

Tilo L. schrieb:
> Welche Toolboxen hast du zur Verfügung?
> Es gibt für Matlab/Simulink Toolboxen, die tatsächlich das Modell als
> fertigen Code in den Controller packen können.
>
> Das geht aber nut sehr bedingt mit einer handvoll Boards, glaube nicht,
> dass das Arduino-Uno dabei ist.

Doch ist dabei ! Habe auch schon einfache Sachen mit Arduino + Simulink 
gemacht.

Ich würde ja gerne wissen, wie viel Speicherplatz und Rechenkapazität.
Gast #4055552
Lesenswert?

Patrick schrieb:
> Doch ist dabei ! Habe auch schon einfache Sachen mit Arduino + Simulink
> gemacht.
>
> Ich würde ja gerne wissen, wie viel Speicherplatz und Rechenkapazität.

Ich habe es nie selber verwendet, aber schon mal jemanden beraten, der 
an so was gearbeitet hat (Simulink auf Arduino Mega 2560). Mein Eindruck 
war damals (ohne Anspruch auf Allgemeingültigkeit): Performance bzw. 
Ressourcenverbrauch waren verglichen mit einer "direkten" 
µC-Programmierung in C irgendwo zwischen Faktor 2 und Faktor 200 
schlechter.

Das ist natürlich ein ziemlich grober Rahmen. Es hing stark davon ab, 
wie tief man in die gesamte Code-Erzeugung für den µC eingestiegen ist 
(als Zwischenschritt der Toolchain wird C-Code erzeugt, den man sich 
anschauen kann, um Performancebremsen zu finden).

Es hat die Sache z.B. schon deutlich beschleunigt, wenn man dem System 
abgewöhnte, jeden doofen Zähler in Gleitkommarithmetik zu rechnen (was 
damals zu Beginn der Default war). Wenn man sein System erst mal im 
Griff hat, kommen solche Anfängerfehler hoffentlich nicht mehr vor.

Für eine konkrete Aufgabenstellung kann ich auch nur empfehlen: einfach 
mal implementieren, ausprobieren und analysieren.
Gast #4055841
Lesenswert?

Das sollte in der Dokumentation zur Toolbox stehen.
Ansonsten in deinem Fall:
Laufen lassen und schauen wie stabil die Regelung ist.
Eventuell kannst du am Ausgang ein Oszi anschließen und schauen, wie 
schnell sich die Werte ändern.
Den Wert kannst du dann mit der Frequenz des Reglers aus dem Modell 
vergleichen.

Alternativ wäre ein Zwischenschritt möglich, schau dir den C bzw. 
ASM-Code an und zähle die Taktschritte.
Gast #4055881
Lesenswert?

was problemlos geht ist das Modell mit dSpace Targetlink aus Simulink 
heraus zu generieren. Das läuft auch problemlos auf nem mega2560. 
Codequalität und Effizienz sind nicht schlecht für einen Generator. Dazu 
braucht es natürlich zwingend ein Bios auf dem mega. Das lässt sich zwar 
auch als Customcode modellbasiert machen, ist aber eine echte 
Quälerei...

Gruss
Frank
Gast #4055936
Lesenswert?

Der Regler ist ja für eine gewisse Abtastrate ausgelegt.

Sagen wir Abtastzeit 400 Hz. Wieviele Befehle schafft dein Controller in 
der Zeitspanne?

Nehmen wir grob an, dass jeder Befehl einen Takt langbraucht:

A: 1/400 [s] / (1/16M) [n/s] = 40.000 Befehle

Wenn dein Regelalgorithmus weniger als 40.000 Befehle braucht, dann 
würde es sich ausgehen bei einer Abtastzeit vom 1/400 s.

Es kann Dir niemand ohne den generierten Algorithmus von Simulink sagen, 
ob es sich ausgeht oder nicht.
Gast #4056137
Lesenswert?

Erst mal Danke alle für eure Antworten.

Kurze Frage:
Wenn ich in Arduino ein Programm kompiliere, bekomme ich folgendes 
angezeigt:
Binäre Sketchgröße: 1.636 Bytes (von einem Maximum von 258.048 Bytes)

Was passiert, wenn das maximum erreicht ist ? Passiert irgendwas 
überhaupt oder wird das Programm nicht auf den µC geladen?

Matthias schrieb:
> Sagen wir Abtastzeit 400 Hz. Wieviele Befehle schafft dein Controller in
> der Zeitspanne?

Matthias schrieb:
> Nehmen wir grob an, dass jeder Befehl einen Takt langbraucht:
>
> A: 1/400 [s] / (1/16M) [n/s] = 40.000 Befehle

Die Rechnung versteh ich nicht ganz. Geht das vll. bitte ausführlicher ?
Gast #4056247
Lesenswert?

Dein digitaler Regler ist für von eine Abtastrate ausgelegt worden von 
dir.

Ich habe da mal jetzt dafür 400Hz angenommen. Das heißt, dass dein 
Regelalgorithmus maximal 1/400 Sekunden (= 2500µs) brauchen darf.

Wenn man davon ausgeht, dass jede Instruktion deines Kontrollers einen 
Takt braucht und dieser 16MHz beträgt, dann wird alle 62,5 ns 
(=1/f_cpu=1/16M) ein Befehl abgearbeitet. Dein Regler muss aber alle 
2500µs einen neuen Stellwert liefern...

Das ergibt dann eben maximal 40.000 Befehle, die dein µC schafft.
Überspitzt gesagt: Nur weiß keiner ob du einen Regler im Zustandsraum 
mit Beobachter oder einen Zweipunktregler gebaut hast.

D.h. entweder du zählst die Instruktionen deines generierten Codes oder 
du toggelst einen Pin am Begin des Algorithmus und misst mit dem oszi.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren