Forum: Mikrocontroller und Digitale Elektronik matlab + digitaler regler


von tobias hofer (Gast)


Lesenswert?

Hallo

Gerne würde ich einmal wissen wie man am besten einen digitalen PI 
Regelalgorithmus in Maltlab testen kann.

Und zware möchte ich den programmierten PI-Regler mit der entsprechenden 
Strecke in Matlab simulieren um die Regelparameter einstellen zu können.

Ideal wäre es wenn man für die Strecke nicht extra eine DGL austellen 
müsste und die diskret durchrechnen sondern die Matlab Befehle wie TF() 
usw brauchen könnte.

Hat jemand von euch schoneinmal so etwas realisiert?

von gabi (Gast)


Lesenswert?

ja, ich!

von tobias hofer (Gast)


Lesenswert?

Na ja freut mich zu höhren.

Kannst du mir hier ein paar tips geben wie du das realisiert hast?
oder ein entsprechendes matlab file?

gruss

von gabi (Gast)


Lesenswert?

mit matlab-workspace ->simulink

von tobias hofer (Gast)


Lesenswert?

Hallo Gabi

Ehrlich gesagt eine nicht sehr hilfreiche Antwort!
Ich verstehe nicht so recht was du mit diesen Antworten bezweckst. Wenn 
du keine Auskunft geben willst, kannst dann musst du ja nicht zwingend 
Antworten.

Ich kenne Matlab und ich kenne Simulink. Mir ist aber nicht klar wie ich 
in Simulink einen Regel-Algorithmus einbinden kann, das war ja meine 
Frage. Dazu wäre ich froh ein paar tips oder bsp. zu bekommen.

Gruss Tobias

von gabi (Gast)


Lesenswert?

ok... das ist ein konkretes problem.
wie lautet dein regel-algorithums?
um was für eine regelstrecke handelt es sich?

von tobias hofer (Gast)


Lesenswert?

>wie lautet dein regel-algorithums?
normaler PI regler

>um was für eine regelstrecke handelt es sich?
um anzufangen und einarbeitung in matlab einfache PT1 strecke

von gabi (Gast)


Lesenswert?

nice... schau mal hier
Beitrag "Re: MATLAB (digitaler Regler)"
hilft dir das schon weiter?

von tobias hofer (Gast)


Lesenswert?

Danke für den Link. Was ich jetzt noch vermisse wie binde ich meinen 
algorithmus den ich ja programmiere in das simulink model(anstelle der 
simulink blöcke) ein?

Es gibt sicherlich eine möglichkeit einen Simulink Block selbst zu 
erstellen der dann meine programmierte funktion aufruft.

von gabi (Gast)


Lesenswert?

im einfachsten fall -> transfer funktion... wo du dann zähler, nenner 
nach doppelklick eingeben kannst (num, den)!

von tobias hofer (Gast)


Lesenswert?

meine idee:

in matlab programmiere ich den pi-regler gleich wie ich den in meinem 
zielsystem prozessor porgrammieren würde.
das ist ja eigentlich der sinn der ganzen geschichte.

in simulink arbeite ich mit den blöcken transferfkt. für die strecke 
oszilloskop für die ausgabe usw. damit muss ich in matlab weniger 
programmieren.

kann man diese module zusammenschalten wie ich mir das vorstelle? wenn 
ja wie?

von gabi (Gast)


Lesenswert?

du kannst mit gedrückter linker maustaste von den ausgängen der blöcke 
verbindungen zu den eingängen anderer blöche ziehen (abzweigungen mit 
zusätzlich gedrückter strg-taste)... kannst dir dann beliebige 
regelkreise aufbauen.
im einfachten fall:
sollwert -> summierstelle -> regler -> strecke -> rückkopplung auf 
summierstelle (vorzeichen beachten)...

von tobias hofer (Gast)


Lesenswert?

wie kann ich selbst einen block programmieren?
bzw. wie kann ich dann die verbindung von simulink zu meinem 
programmcode herstellen?

von Thomas (Gast)


Lesenswert?

schau dir mal den "Embedded Matlab Function" Block an.

von tobias hofer (Gast)


Lesenswert?

@Thomas

Das ist genau was ich gesucht habe, funktioniert bestens.

Besten Dank

von tobias hofer (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Nun bin ich ein bisschen am Üben. Das erste Beispiel Programm sollte ein
einfaches RC-Glied sein das ich wie folgt in die Funktion PT1 
programmiert habe.
1
function y = pt1(u)
2
3
dt = 0.001;
4
tau = 0.02;
5
6
uc_1 = 0;
7
8
for k=1:length(u)
9
    y(k) = 1/tau*(u(k)-uc_1)*dt + uc_1;
10
    uc_1 = y(k);    
11
end

uc_1 sollte in dieser funktion eingentlich gespeichert werden bis zum 
nächsten aufruf von Simulink. Das funktioniert jedoch noch nicht so 
richtig.

Hat jemand eine Idee wie ich das richtig realisieren kann?

Im Anhang das Simulink Model.

von Thomas (Gast)


Lesenswert?

1
persistent uc_1;
2
if isempty(uc_1)
3
     uc_1 = 0;
4
end

deinen Code solltest du aber auch nochmal überarbeiten, in deiner 
Embedded Matlab Function sind u und y Skalare.

von tobias hofer (Gast)


Lesenswert?

Hallo Thomas

Besten dank funtioniert, der Code für alles diese Interessiert
sieht folgendermassen aus:
1
function y = pt1(u)
2
3
    dt = 0.001;
4
    tau = 0.02;
5
6
    persistent uc_1;
7
    if isempty(uc_1)
8
         uc_1 = 0;
9
    end
10
    
11
    y = 2*1/tau*(u-uc_1)*dt + uc_1;
12
    uc_1 = y;

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.