Frågan är ju om det libet har några jobbiga beroende på andra lib...
Värt att prova, jag kan ju nästan kanske tom se att jag skulle ha ett behov av detta framöver

Fast jag kommer då prova med IAR kompilator.
Kod: Markera allt
>> A = [0 1; -3 -5]; B = [0; 1]; C = [1 0]; Np = 20; Nc = 20; % Våra datamatriser och prediktions nivåer
>> sys = ss(0, A, B, C)
ans = D matrix assumed to be a zero 1x1 matrix
sys =
scalar structure containing the fields:
A =
0 1
-3 -5
B =
0
1
C =
1 0
D = 0
delay = 0
type = SS
sampleTime = 0
>> sysd = c2d(sys, 0.5); % 0.5 samplingsintervall
>> sysd
sysd =
scalar structure containing the fields:
A =
0.8196313 0.1634547
-0.4903640 0.0023580
B =
0.060123
0.163455
C =
1 0
D = 0
delay = 0
type = SS
sampleTime = 0.50000
>> A = sysd.A; B = sysd.B; C = sysd.C; % Hämta våra matriser från sysd
>> function [PHI] = PHImatrix(C, A, Np)
PHI = [];
for i = 1:(Np)
PHI = [PHI; C*A^i];
endfor
endfunction
>> function [GAMMA] = GAMMAmatrix(C, A, B, Np, Nc)
PHI = [];
GAMMA = [];
for j = 1:Nc
for i = (1-j):(Np-j)
if i < 0
PHI = [PHI; 0*C*A^i*B];
else
PHI = [PHI; C*A^i*B];
endif
endfor
% Add to PHI
GAMMA = [GAMMA PHI];
% Clear F
PHI = [];
endfor
endfunction
>>>> PHI = PHImatrix(C, A, Np)
PHI =
0.81963132 0.16345465
0.59164322 0.13435799
0.41904500 0.09702366
0.29588550 0.06872364
0.20881742 0.04852591
0.14735794 0.03424661
0.10398588 0.02416710
0.07337941 0.01705396
0.05178141 0.01203442
0.03654042 0.00849229
0.02578536 0.00599273
0.01819587 0.00422887
0.01284022 0.00298417
0.00906092 0.00210583
0.00639399 0.00148601
0.00451202 0.00104863
0.00318399 0.00073998
0.00224683 0.00052218
0.00158552 0.00036849
0.00111885 0.00026003
>> GAMMA = GAMMAmatrix(C, A, B, Np, Nc)
GAMMA =
Columns 1 through 7:
0.060123 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.075996 0.060123 0.000000 0.000000 0.000000 0.000000 0.000000
0.057533 0.075996 0.060123 0.000000 0.000000 0.000000 0.000000
0.041053 0.057533 0.075996 0.060123 0.000000 0.000000 0.000000
0.029023 0.041053 0.057533 0.075996 0.060123 0.000000 0.000000
0.020486 0.029023 0.041053 0.057533 0.075996 0.060123 0.000000
0.014457 0.020486 0.029023 0.041053 0.057533 0.075996 0.060123
0.010202 0.014457 0.020486 0.029023 0.041053 0.057533 0.075996
0.007199 0.010202 0.014457 0.020486 0.029023 0.041053 0.057533
0.005080 0.007199 0.010202 0.014457 0.020486 0.029023 0.041053
0.003585 0.005080 0.007199 0.010202 0.014457 0.020486 0.029023
0.002530 0.003585 0.005080 0.007199 0.010202 0.014457 0.020486
0.001785 0.002530 0.003585 0.005080 0.007199 0.010202 0.014457
0.001260 0.001785 0.002530 0.003585 0.005080 0.007199 0.010202
0.000889 0.001260 0.001785 0.002530 0.003585 0.005080 0.007199
0.000627 0.000889 0.001260 0.001785 0.002530 0.003585 0.005080
0.000443 0.000627 0.000889 0.001260 0.001785 0.002530 0.003585
0.000312 0.000443 0.000627 0.000889 0.001260 0.001785 0.002530
0.000220 0.000312 0.000443 0.000627 0.000889 0.001260 0.001785
0.000156 0.000220 0.000312 0.000443 0.000627 0.000889 0.001260
Columns 8 through 14:
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.060123 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.075996 0.060123 0.000000 0.000000 0.000000 0.000000 0.000000
0.057533 0.075996 0.060123 0.000000 0.000000 0.000000 0.000000
0.041053 0.057533 0.075996 0.060123 0.000000 0.000000 0.000000
0.029023 0.041053 0.057533 0.075996 0.060123 0.000000 0.000000
0.020486 0.029023 0.041053 0.057533 0.075996 0.060123 0.000000
0.014457 0.020486 0.029023 0.041053 0.057533 0.075996 0.060123
0.010202 0.014457 0.020486 0.029023 0.041053 0.057533 0.075996
0.007199 0.010202 0.014457 0.020486 0.029023 0.041053 0.057533
0.005080 0.007199 0.010202 0.014457 0.020486 0.029023 0.041053
0.003585 0.005080 0.007199 0.010202 0.014457 0.020486 0.029023
0.002530 0.003585 0.005080 0.007199 0.010202 0.014457 0.020486
0.001785 0.002530 0.003585 0.005080 0.007199 0.010202 0.014457
Columns 15 through 20:
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.060123 0.000000 0.000000 0.000000 0.000000 0.000000
0.075996 0.060123 0.000000 0.000000 0.000000 0.000000
0.057533 0.075996 0.060123 0.000000 0.000000 0.000000
0.041053 0.057533 0.075996 0.060123 0.000000 0.000000
0.029023 0.041053 0.057533 0.075996 0.060123 0.000000
0.020486 0.029023 0.041053 0.057533 0.075996 0.060123
>>>> r = 30; % Våran referens (börvärde)
>> R = ones(1, Np)'*r;
>> a = 0.000001; % Parameter för att inv() inte ska balla ur
>> x0 = [0;0]; % Initsiala startvektor på position 0 och hastighet 0
>> U = inv(GAMMA'*GAMMA + a)*GAMMA'*(R-PHI*x0) % Våra insignaler.
U =
498.875
-131.709
187.974
46.667
109.128
81.519
93.722
88.328
90.713
89.658
90.125
89.917
90.013
89.962
90.003
89.942
90.067
89.790
90.415
89.108
>>>> t = 0:0.5:(9.5); % Tidsvektor då vi har 0.5 i samplingsintervall.
>> y = lsim(sysd, U', t); % nu simulerar vi
Kod: Markera allt
>> U2 = U;
>> U2(U2 > 255) = 255;
>> U2
U2 =
255.000
-131.709
187.974
46.667
109.128
81.519
93.722
88.328
90.713
89.658
90.125
89.917
90.013
89.962
90.003
89.942
90.067
89.790
90.415
89.108
>> y = lsim(sysd, U2', t);
Kod: Markera allt
>> U2(U2 < 0) = 0;
>> y = lsim(sysd, U2', t);
Nu jämför du med PID igen. Jag är inget proffs och det är väl därför jag inte förstår, men kan du förklara på vilket sätt detta ersätter PID? Inte hur det fungerar eller hur bra det är, utan på vilket sätt det är en ersättare för PID.Al_Bundy skrev:Och här är resultatet. Tystnad uppstår.....helt plötsligt var PID asatråkigt!
Jag vet inte. Håller på att utveckla ett litet C-bibliotek för linjär algebra. Den ska ha grundläggande funktioner som MATLAB har. Vill folk vara med på tåget?Shimonu skrev:Vad menar du är det som hindrar det här från att implementeras på en µC?
En PID har följande nackdelar:Glattnos skrev:Nu jämför du med PID igen. Jag är inget proffs och det är väl därför jag inte förstår, men kan du förklara på vilket sätt detta ersätter PID? Inte hur det fungerar eller hur bra det är, utan på vilket sätt det är en ersättare för PID.Al_Bundy skrev:Och här är resultatet. Tystnad uppstår.....helt plötsligt var PID asatråkigt!
Hur kan man reglera nått utan att ta hänsyn till vare sig proportion, integral eller förändrningshastighet hos in-signalerna? På många reglersystem så ser jag inte ens hur detta skulle funka. Funkar det bara på data-strukturer och system som är väldefinierade och har matematiska modeller framtagna?
jag fattar fortfarande inte hur du menar?Al_Bundy skrev:Derivator, Integraler fingerar fint. Men tänk om du har en bil utan bromsar. Den enda bromsningen du har är allt luftmotstånd och friktion från vägen. Då gäller det att du måste ha en bra optimerad fot på gaspedalen.svanted skrev:jag fattar absolut inget, om man har ett är värde som ska regleras mot ett börvärde gör man det propotionellt,
vill man ha snabbare stegsvar använder man derivatan,
och vill man ha högre nogrannhet använder man integralen,
vad är teorin bakom att göra på något annat sätt?
Exempel på system som inte har någon "broms" är temperatur och flöde. Processindustrin använder sig alltid av prediktiv reglering. PID fungerar utmärkt för t.ex. servomotorer där man kan "vrida åt andra hållet" om det gick fel.
Vem har en kylare i sin tekokare?
PID fungerar utmärkt för temperaturreglering,Exempel på system som inte har någon "broms" är temperatur och flöde. Processindustrin använder sig alltid av prediktiv reglering. PID fungerar utmärkt för t.ex. servomotorer där man kan "vrida åt andra hållet" om det gick fel.
Japp. Det kan den. Det finns många som redan har implementerat en MPC för en drönare.Glattnos skrev:Tackar för beskrivningen
Kan det användas för att stabilisera en drönare?
PID fungerar utmärkt för temperaturreglering, tills du inser att du har inte råd med överskjut.svanted skrev:jag fattar fortfarande inte hur du menar?Al_Bundy skrev:Derivator, Integraler fingerar fint. Men tänk om du har en bil utan bromsar. Den enda bromsningen du har är allt luftmotstånd och friktion från vägen. Då gäller det att du måste ha en bra optimerad fot på gaspedalen.svanted skrev:jag fattar absolut inget, om man har ett är värde som ska regleras mot ett börvärde gör man det propotionellt,
vill man ha snabbare stegsvar använder man derivatan,
och vill man ha högre nogrannhet använder man integralen,
vad är teorin bakom att göra på något annat sätt?
Exempel på system som inte har någon "broms" är temperatur och flöde. Processindustrin använder sig alltid av prediktiv reglering. PID fungerar utmärkt för t.ex. servomotorer där man kan "vrida åt andra hållet" om det gick fel.
Vem har en kylare i sin tekokare?
du menar att trycket med foten ska regleras?
det är ingen reglering, det är snarare en frikoppling som indikeras av att ett drivande hjul börjar snurra fortare än det icke drivande.
å en sån "reglering" går inte att simulera efterssom det handlar om friktionen mot vägbanan.
PID fungerar utmärkt för temperaturreglering,Exempel på system som inte har någon "broms" är temperatur och flöde. Processindustrin använder sig alltid av prediktiv reglering. PID fungerar utmärkt för t.ex. servomotorer där man kan "vrida åt andra hållet" om det gick fel.
ärvärde ska vara lika med börvärde och PID däremellan.
en servomotor går åckså utmärkt att PID reglera,
ärvärdet är lika med positionen, läses av typ mha en potentiometer eller mätskala,
om man behöver "vrida åt andra hållet" är PID regleringen feljusterad
vart kom tekokaren ifrån?
skulle kylaren vara en broms?
eller har man prediktiv reglering på en tekokare?
Om de inte får överskjut med en PI så betyder det att processen har en hög dämpning och kanske en hög tröghet. Jag har studerat teorin angående detta.Mindmapper skrev:Finns väl massor med industriella processer som är optimerade för att inte ha överskjut.
Fast de flesta använder bara PI.
Du menar alltså att med kvadratisk programmering behövs ingen PID och att det inte har några nackdelar? Vilket borde innebära att det är det ultimata reglersystemet användbart i alla sammanhang!
Själv blir jag alltid skeptisk när folk kommer och säger att de hittat det ultimata systemet, oavsett vad det är.