Är en STM32 bra att använda som USB I/O-modul?
Re: Är en STM32 bra att använda som USB I/O-modul?
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.
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.
Re: Är en STM32 bra att använda som USB I/O-modul?
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
Re: Är en STM32 bra att använda som USB I/O-modul?
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.
Re: Är en STM32 bra att använda som USB I/O-modul?
Exempel så skulle man kunna göra så här:
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!
Och här är resultatet. Tystnad uppstår.....helt plötsligt var PID asatråkigt!
Så vad tror ni? Kan jag implementera detta i en uC?
Glömde också att säga att alla värden som är under 0 ska vara 0.
Resultat då:
Nej TomasL! Du kan inte ta patent på detta. Rätt så gammal teknik.
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);
Så vad tror ni? Kan jag implementera detta i en uC?
Glömde också att säga att alla värden som är under 0 ska vara 0.
Kod: Markera allt
>> U2(U2 < 0) = 0;
>> y = lsim(sysd, U2', t);
Nej TomasL! Du kan inte ta patent på detta. Rätt så gammal teknik.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Är en STM32 bra att använda som USB I/O-modul?
Vad menar du är det som hindrar det här från att implementeras på en µC?
Re: Är en STM32 bra att använda som USB I/O-modul?
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?
Re: Är en STM32 bra att använda som USB I/O-modul?
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?
Re: Är en STM32 bra att använda som USB I/O-modul?
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?
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.
Re: Är en STM32 bra att använda som USB I/O-modul?
Tackar för beskrivningen
Kan det användas för att stabilisera en drönare?
Kan det användas för att stabilisera en drönare?
Re: Är en STM32 bra att använda som USB I/O-modul?
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?
Re: Är en STM32 bra att använda som USB I/O-modul?
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?
Re: Är en STM32 bra att använda som USB I/O-modul?
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?
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?
-
- Inlägg: 6421
- Blev medlem: 31 augusti 2006, 16:42:43
- Ort: Jamtland
Re: Är en STM32 bra att använda som USB I/O-modul?
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.
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.
Re: Är en STM32 bra att använda som USB I/O-modul?
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.
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.
Re: Är en STM32 bra att använda som USB I/O-modul?
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?