Forum: Mikrocontroller und Digitale Elektronik Machbar?


von Christopher (Gast)


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.

von A.K. (Gast)


Lesenswert?

> Mein µC besitzt

Schön für dich. Und wir sollen anhand dieser Daten nun erraten, was das 
für ein Typ ist?

von Christopher (Gast)


Lesenswert?

Entschuldigung das hab ich vergessen. Freescale 56F8347.

von Thomas (Gast)


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

von A.K. (Gast)


Lesenswert?

Google wirft mir dazu das Kürzel DSP aus. Und dazu gibt es eine eigene 
Ecke im Forum.

von Pflorz (Gast)


Lesenswert?

Was soll float ?  Das sollte man am besten vermeiden. Zum Einen weil der 
dynamische Bereich eh nicht gebraucht wird, zum Anderen haben integer 
derselben Breite eine höhere Auflösung.

P.

von Christopher (Gast)


Lesenswert?

Hallo Thomas,

das stimmt die Position kann nicht so schnell angefahren werden, aber 
sie kann schneller reagieren.

von Thomas (Gast)


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?

von Christopher (Gast)


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.

von Christopher (Gast)


Lesenswert?

Der Regler läuft schon. Hab halt nur noch das Sollwert Problem.

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.