Machbar?

Gast #500179
Lesenswert?
• ▲
▼
Guten Morgen,

ich habe mit einem µC zwei digitale Regler programmiert.

1. Positionsregelung
2. Nachfahren einer Ventilkennlinie

Mein µC besitzt folgenden Speicheraufbau:

Program Flash 128KB
Data Flash 8KB
Program RAM 4KB
Data RAM 8KB
Program Boot Flash 8KB

Für die Ventilkennline speichere ich mehrere Sollwerte ab, die ich dann 
zyklisch durchlaufe. Das sind nur 20 float Werte. Das ist alles kein 
Problem.

Aber für die Positionsreglung muss ich mehrere Werte einlesen.
Bei einer Abtastzeit von 1ms sind das 1000 float Werte pro Sekunde.
Wenn ich nun also eine Fahrkurve von 10 Sekunden fahren will, sind das 
10000 Werte. Bei einem Data Flash von 8KB -> 65536 Bit, dass ganze 
geteilt durch ein float mit je 32 bit -> macht nur 2048 Werte. Bitte 
berichtigt mich wenn ich mich verrechnet habe. Ich kann die Fahrkurven 
auch nicht mit Funktionen oder Taylorreihen oder Fourierreihen 
nachbilden da diese nicht periodisch und völlig willkürlich sind.

Also muss ein größerer Speicher her. Das ist für mich neu, was kann man 
da machen? Im Datenblatt steht das ich 32MB extern adressieren kann. Ich 
habe auch von SD Kartenlesern gehört. Bitte schreibt mir eure Ideen.
Gast #500187
Lesenswert?
• ▲
▼
Hat dein uC überhaupt eine FPU? Wenn nein dann unbedingt auf integer 
skalieren! Und glaubst du wirklich, dass es was bringt mit jedem Sample 
auch nen neuen Sollwert vorzugeben? So schnell kann die Position eh 
nicht angefahren werden...
Gast #500257
Lesenswert?
• ▲
▼
Trotzdem glaube ich nicht, dass 1000 neue Sollwertvorgaben / Sekunde 
Sinn machen. Solche Sachen am besten vor der Implementierung in Simulink 
simulieren. Ich weiß ja nicht, um was für ein System es sich handelt, 
aber vielleicht tuts ja auch ne kleinere Abtastrate.
Hast du denn schon ein Modell der Strecke? Ist der Regler schon 
implementiert und kalibriert?
Gast #500263
Lesenswert?
• ▲
▼
Hallo Thomas,

also die Übertragungsfunktion für die Strecke ist wie folgt:

Drehzahl

G1(s)= 350/(0.000234*s^2+0.0253*s+1)

Position

G2(s)=G1(s)*5/60*1/s

Du hast ja recht ich könnte auch auf 10ms hochgehen, aber trotzdem hab 
ich dann immer noch ein Speicherproblem.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.