Buggfix Plus
Aktuellt datum och tid: 14.14 2019-03-22

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 264 inlägg ]  Gå till sida Föregående  1 ... 14, 15, 16, 17, 18  Nästa
Författare Meddelande
InläggPostat: 17.56 2019-01-06 
Användarvisningsbild

Blev medlem: 18.17 2004-02-11
Inlägg: 9033
Ort: Knivsta
Om inget annat blir jag väldigt sugen på att testa...

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.


Upp
 Profil  
 
InläggPostat: 18.11 2019-01-06 
Användarvisningsbild

Blev medlem: 22.59 2012-09-11
Inlägg: 2800
Ort: The U.S - Chicago
Jag använder Atollic. Om någon som har lyckas att implementera GSL liblioteket för STM32 så skriv här. Det vore mycket perfekt om man kunde få allt I ett istället för att ha: C <---> Java <---> MATLAB


Upp
 Profil  
 
InläggPostat: 18.28 2019-01-06 
Användarvisningsbild

Blev medlem: 22.59 2012-09-11
Inlägg: 2800
Ort: The U.S - Chicago
Jag har ett annat sätt där man kan använda kvadratisk programmering i endast i matrisform. Dock så blir det ingen signalbegränsning då i beräkningen. Men det kanske man tillämpa, utan några problem.


Upp
 Profil  
 
InläggPostat: 18.59 2019-01-06 
Användarvisningsbild

Blev medlem: 22.59 2012-09-11
Inlägg: 2800
Ort: The U.S - Chicago
Exempel så skulle man kunna göra så här:

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
>> 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


Då testar vi att simulera våran modell med U insigal. Perfekt! Men i verkligheten så kanske U kan max vara 255. Vi säger att vi säger att alla över 255 ska vara 255!

Bilaga:
Skärmbild från 2019-01-06 18-55-16.png


Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
>> 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);


Och här är resultatet. Tystnad uppstår.....helt plötsligt var PID asatråkigt! :mrgreen:

Så vad tror ni? Kan jag implementera detta i en uC?

Bilaga:
Skärmbild från 2019-01-06 18-58-01.png


Glömde också att säga att alla värden som är under 0 ska vara 0.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
>> U2(U2 < 0) = 0;
>> y = lsim(sysd, U2', t);


Resultat då:

Bilaga:
Skärmbild från 2019-01-06 19-01-57.png


Nej TomasL! Du kan inte ta patent på detta. Rätt så gammal teknik.


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 15.41 2019-01-11 

Blev medlem: 21.44 2015-10-21
Inlägg: 147
Vad menar du är det som hindrar det här från att implementeras på en µC?


Upp
 Profil  
 
InläggPostat: 16.08 2019-01-11 

Blev medlem: 20.01 2009-10-29
Inlägg: 1634
Al_Bundy skrev:
Och här är resultatet. Tystnad uppstår.....helt plötsligt var PID asatråkigt! :mrgreen:
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.
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?


Upp
 Profil  
 
InläggPostat: 16.54 2019-01-11 
Användarvisningsbild

Blev medlem: 22.59 2012-09-11
Inlägg: 2800
Ort: The U.S - Chicago
Shimonu skrev:
Vad menar du är det som hindrar det här från att implementeras på en µC?


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?


Upp
 Profil  
 
InläggPostat: 16.57 2019-01-11 
Användarvisningsbild

Blev medlem: 22.59 2012-09-11
Inlägg: 2800
Ort: The U.S - Chicago
Glattnos skrev:
Al_Bundy skrev:
Och här är resultatet. Tystnad uppstår.....helt plötsligt var PID asatråkigt! :mrgreen:
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.
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?


En PID har följande nackdelar:

1. D-delen tål ej frekvenser
2. Den har bara 1-steg prediktion som är väldigt dålig.
3. Du måste hitta parametrarna P,I och D.
4. I-delen gör den seg vid vissa tillfällen

Övrigt så är PID riktigt bra vid snabba system.

En PID vill ju ha förstärkning, integrering och derivering. En MPC räknar helt enkelt bara ut det värdet vi ska ha igenom att minimera en kvadratisk kostfunktion. Så länge du har en matematisk beskrivning av systemet så kommer du inte behöva trimma in din regulator. Därför applicerar jag alltid systemidentifiering med MPC och då har man i praktiken machine learning.


Upp
 Profil  
 
InläggPostat: 17.08 2019-01-11 

Blev medlem: 20.01 2009-10-29
Inlägg: 1634
Tackar för beskrivningen :)
Kan det användas för att stabilisera en drönare? :humm:


Upp
 Profil  
 
InläggPostat: 17.14 2019-01-11 

Blev medlem: 20.20 2010-08-30
Inlägg: 3108
Ort: Umeå
Al_Bundy skrev:
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?


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.

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? :D


jag fattar fortfarande inte hur du menar?

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.

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


PID fungerar utmärkt för temperaturreglering,
ä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?


Upp
 Profil  
 
InläggPostat: 18.23 2019-01-11 
Användarvisningsbild

Blev medlem: 22.59 2012-09-11
Inlägg: 2800
Ort: The U.S - Chicago
Glattnos skrev:
Tackar för beskrivningen :)
Kan det användas för att stabilisera en drönare? :humm:


Japp. Det kan den. Det finns många som redan har implementerat en MPC för en drönare.


Upp
 Profil  
 
InläggPostat: 18.25 2019-01-11 
Användarvisningsbild

Blev medlem: 22.59 2012-09-11
Inlägg: 2800
Ort: The U.S - Chicago
svanted skrev:
Al_Bundy skrev:
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?


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.

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? :D


jag fattar fortfarande inte hur du menar?

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.

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


PID fungerar utmärkt för temperaturreglering,
ä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?


PID fungerar utmärkt för temperaturreglering, tills du inser att du har inte råd med överskjut.

PID skulle jag säga passar väldigt bra för snabba system, då man kan bygga en PID från analog elektronik också.

Tekokaren kom från ingenstans.
Du kan inte implementera en kylning om man inte har råd.
MPC?


Upp
 Profil  
 
InläggPostat: 23.26 2019-01-11 

Blev medlem: 15.42 2006-08-31
Inlägg: 4874
Ort: Jamtland
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.


Upp
 Profil  
 
InläggPostat: 04.22 2019-01-12 
Användarvisningsbild

Blev medlem: 22.59 2012-09-11
Inlägg: 2800
Ort: The U.S - Chicago
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.


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.

Nackdelen med kvadratisk programmering är att man behöver större mjukvara och större processor. När en PID duger så finns det ingen anledning att ha MPC.
Jag skulle säga att om du har ett snabbt SISO system så duger PID riktigt bra. Har du ett MIMO system som är snabbt så duger en LQR. Men har du ett SISO eller MIMO system som har tröghet eller låg dämpning så är nog MPC det bästa alternativet.

Det finns inget ultimat reglersystem. Däremot finns det häftiga reglersystem som drar åt sig uppmärksamhet.


Upp
 Profil  
 
InläggPostat: 11.04 2019-01-12 

Blev medlem: 13.07 2005-12-30
Inlägg: 419
Men jobbet att ta fram en korrekt matematiskt modell för ett system måste väl ändå vara jobbigare/mer tidskrävande än att räkna ut PID konstanterna?


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 264 inlägg ]  Gå till sida Föregående  1 ... 14, 15, 16, 17, 18  Nästa

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010