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.
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)
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 ?
Ich weiß ja nicht was du in Simulink gemacht hast. Schaltung, Mathematische Formel, Regelstrecke? Das musst du dann in selbst in C Implementieren. Nach dem Compilerlauf siehst du dann wie groß dein Programm geworden ist.
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.
...ich vermute auch kaum das Atmel Teil des RTW Codegen ist. Wenn, wäre es danach ja nur noch ein kleiner Sprung. Klaus.
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.
Code generieren und übersetzen, ich wüsste nicht, dass es anders ginge. Aber meine Erfahrungen mit Simulink sind da begrenzt.
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.
Patrick schrieb: > Ich würde ja gerne wissen, wie viel Speicherplatz und Rechenkapazität. Das wird dir keiner sagen können. Du wirst den Code generieren müssen und dann schauen, was raus kommt. Wenn der uC dabei ist müsste der Compiler einen Fehler ausgeben, wenn die Ressourcen nicht mehr reichen.
Ok, ich verstehe. Ich dachte vll. kann man sehen, was das Effektiv an Speicherkapazität kosten würde, wenn man solch ein Simulink-Modell direkt auf den µC flashen würde. Wie siehts mit der Taktfrequenz aus ? Wenn 16 MHz angegeben sind, woher weiß ich, ob meine µC-Geschwindigkeit für eine einfache Regelung ausreicht ?
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.
Je nach toolchain gibt es einen entsprechenden Befehlt, z.B. : avr-size --mcu=atmega328p -C main.elf Hier ein Beispiel der Ausgabe: AVR Memory Usage ---------------- Device: atmega328p Program: 29290 bytes (89.4% Full) (.text + .data + .bootloader) Data: 1643 bytes (80.2% Full) (.data + .bss + .noinit)
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
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.
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 ?
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.
lieber Mathias, danke für deine Antwort ! War sehr hilfreich !
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
