Elektronika.lt
 2017 m. gruodžio 16 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2017 12 16, 20:32. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » PID algoritmaa
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 22
Pereiti prie Atgal  1, 2
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 PID algoritmaa
PranešimasParašytas: 2017 04 18, 17:40 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Uzvesiu biski ant kelio:
Jei mechaninis pasipriesinimas i abi puses daug maz vienodas, tai kiek energijos idesi geritejant, panasiai tiek reikes sustabdant, jei pradesi stabdyti per tiek pat laipsniu anskciau tikslo.
Po keli(u)olikos iteraciju turesi atatinkama statistika ir galesi tiksliau pataikyti is pirmo karto.
 PID algoritmaa
PranešimasParašytas: 2017 04 19, 07:34 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
AlgisL pamiršo variklio starto charakteristikas... Very Happy
 PID algoritmaa
PranešimasParašytas: 2017 04 19, 11:10 Pranešti apie taisyklių pažeidimą Atsakyti su citata
bachurelis
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
andriusa rašo:
Kadangi visose PID formulėse dalyvauja laipsniai, tai ir u(t) gauname laipsnius.

Netiesa. Formulės yra bendro pobūdžio, vienetai gali būti ir metrai ir temperatūros laipsniai, ir kampo laipsniai.
Tavo atveju duty cycle apsprendžia įtampą. O "apmokymas" vyksta eksperimentiškai parenkant Kp, Ki, Kd. Yra ir savireguliavimo algoritmai, bet tai tikrai sudėtinga.
 PID algoritmaa
PranešimasParašytas: 2017 04 19, 12:09 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
krienas rašo:
AlgisL pamiršo variklio starto charakteristikas... Very Happy

Cia priklauso kaip parinksi variklio darbo rezima.
Jei kaip tu matomai siulai parinkti pacioj pradzioj, kai variklis teisnaudoja 10% savo galios, tai tavo tiesa, jis tikrai sunkiai prades suktis...
Jei parinksi taip, kad variklis darbo metu bus isnaudojamas arti 80% - bus atvirksciai, nes tie 20% nueis tik tepimo/dilimo nuostoliams kompensuoti.
 PID algoritmaa
PranešimasParašytas: 2017 04 19, 12:54 Pranešti apie taisyklių pažeidimą Atsakyti su citata
andriusa
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
Gerai imkim iškarto realius pavyzdžius. Pasisukus išorinei ašiai (yra pavarų dėžė) 360 laipsnių bus sugeneruota 1102500 impulsų iš encoderio. Tarkim ta ašis turi rodyklę ir stovi ties 100 laipsnių (skaičius d'306250' REAL_POSITION registre mikrovaldiklyje). Iš klaviatūros įvedama nauja pozicija, 120 laipsnių (įrašoma d'367500' į NEED_POSITION registrą mikrovaldiklyje). Taigi pirmasis reikšmių erroras bus e(t) = d'367500' - d'306250' = d'61250'. Sakykim esam pasirinkę visus gain koeficientus lygius 1. Tada

P(t) = Kp * e(t) = d'1' * d'61250' = d'61250';
I(t) = I(t — 1) + Ki * e(t) = d'0' + d'1' * d'61250' = d'61250';
D(t) = Kd * {e(t) — e(t — 1)} = d'1' * {d'61250' — d'0'} = d'61250';
u(t) = P(t) + I(t) + D(t) = d'61250' + d'61250' + d'61250' = d'183750'

Ir kas toliau? Gavau, kad reikia atlikti poveikį d'183750', bet vis dar nežinau kaip tai valgoma.
 PID algoritmaa
PranešimasParašytas: 2017 04 19, 14:46 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Po pido stovi dėžė kur max sūkiai riboti, ir stovi dėžė kur rampa...
Čia dėžė tipo struktūrinis elementas...
 PID algoritmaa
PranešimasParašytas: 2017 04 19, 14:51 Pranešti apie taisyklių pažeidimą Atsakyti su citata
bachurelis
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Kadangi gain=1 tai ir gaunasi neaiškumas Smile
Pradėkim nuo P. Jei erroras 61250, o PWM 8 bitų, tai Kp galima įsivaizduoti 0,001 (teks parinkti eksperimentiškai). Tada poveikis gaunasi 61.
Toliau D. Spėju Kd galėtų būti 0,0005. Tada D poveikis bus -30. Bet tu neteisingai skaičiuoji, momentu t jis bus 0.
I kol kas nerūpi. Taigi bendras poveikis 61-30=31.
Aiškiau?
Aš kai PID aiškinaus, Excelyje formules surašiau ir kreives paišiau.


Paskutinį kartą redagavo bachurelis, 2017 04 19, 15:02. Redaguota 3 kartus(ų)
 PID algoritmaa
PranešimasParašytas: 2017 04 19, 14:53 Pranešti apie taisyklių pažeidimą Atsakyti su citata
bachurelis
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Na taip, šiuo atveju bendrą poveikį reikia riboti 255 (8 bitų PWM)
 PID algoritmaa
PranešimasParašytas: 2017 05 08, 20:00 Pranešti apie taisyklių pažeidimą Atsakyti su citata
valentinas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
As domejausi ant arduino PID.
Gal ka pritaikysi. Cia bicas pasakoja kaip jis tobulino ta koda nuo nulio gali pasiskaityti. As tai ne programeris tai man labai daug klausimu ten kilo. Cia parasyta biblioteka arduinui kuri toliau naudojama arduino programoje. Nudojant sia programa gali pats susikonfiguruot kokiu daznumu skaiciuosi PID, nustatyti integravimo, diferenciavimo ir proporcini koficiantus. As bandziau su skaitmeniniu temperaturos davikliu tai gavos nesamones matyt kaskas nesutinka, reikia analoginio matyt.

http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/

Kodas:
/*working variables*/
unsigned long lastTime;
double Input, Output, Setpoint;
double ITerm, lastInput;
double kp, ki, kd;
int SampleTime = 1000; //1 sec
double outMin, outMax;
bool inAuto = false;
 
#define MANUAL 0
#define AUTOMATIC 1
 
void Compute()
{
   if(!inAuto) return;
   unsigned long now = millis();
   int timeChange = (now - lastTime);
   if(timeChange>=SampleTime)
   {
      /*Compute all the working error variables*/
      double error = Setpoint - Input;
      ITerm+= (ki * error);
      if(ITerm> outMax) ITerm= outMax;
      else if(ITerm< outMin) ITerm= outMin;
      double dInput = (Input - lastInput);
 
      /*Compute PID Output*/
      Output = kp * error + ITerm- kd * dInput;
      if(Output> outMax) Output = outMax;
      else if(Output < outMin) Output = outMin;
 
      /*Remember some variables for next time*/
      lastInput = Input;
      lastTime = now;
   }
}
 
void SetTunings(double Kp, double Ki, double Kd)
{
  double SampleTimeInSec = ((double)SampleTime)/1000;
   kp = Kp;
   ki = Ki * SampleTimeInSec;
   kd = Kd / SampleTimeInSec;
}
 
void SetSampleTime(int NewSampleTime)
{
   if (NewSampleTime > 0)
   {
      double ratio  = (double)NewSampleTime
                      / (double)SampleTime;
      ki *= ratio;
      kd /= ratio;
      SampleTime = (unsigned long)NewSampleTime;
   }
}
 
void SetOutputLimits(double Min, double Max)
{
   if(Min > Max) return;
   outMin = Min;
   outMax = Max;
   
   if(Output > outMax) Output = outMax;
   else if(Output < outMin) Output = outMin;
 
   if(ITerm> outMax) ITerm= outMax;
   else if(ITerm< outMin) ITerm= outMin;
}
 
void SetMode(int Mode)
{
    bool newAuto = (Mode == AUTOMATIC);
    if(newAuto && !inAuto)
    {  /*we just went from manual to auto*/
        Initialize();
    }
    inAuto = newAuto;
}
 
void Initialize()
{
   lastInput = Input;
   ITerm = Output;
   if(ITerm> outMax) ITerm= outMax;
   else if(ITerm< outMin) ITerm= outMin;
}


andriusa rašo:
Gerai imkim iškarto realius pavyzdžius. Pasisukus išorinei ašiai (yra pavarų dėžė) 360 laipsnių bus sugeneruota 1102500 impulsų iš encoderio. Tarkim ta ašis turi rodyklę ir stovi ties 100 laipsnių (skaičius d'306250' REAL_POSITION registre mikrovaldiklyje). Iš klaviatūros įvedama nauja pozicija, 120 laipsnių (įrašoma d'367500' į NEED_POSITION registrą mikrovaldiklyje). Taigi pirmasis reikšmių erroras bus e(t) = d'367500' - d'306250' = d'61250'. Sakykim esam pasirinkę visus gain koeficientus lygius 1. Tada

P(t) = Kp * e(t) = d'1' * d'61250' = d'61250';
I(t) = I(t — 1) + Ki * e(t) = d'0' + d'1' * d'61250' = d'61250';
D(t) = Kd * {e(t) — e(t — 1)} = d'1' * {d'61250' — d'0'} = d'61250';
u(t) = P(t) + I(t) + D(t) = d'61250' + d'61250' + d'61250' = d'183750'

Ir kas toliau? Gavau, kad reikia atlikti poveikį d'183750', bet vis dar nežinau kaip tai valgoma.

360 bus 1102500 impulsai, tuomet vienas laipsnis bus ~3 impulsai jei neskaityti pavaru dezes, jei skaityti turi ziureti jos redukcija ir atatinkamai ivertinti poslinkio ir impulsu santykį. gauni d'183750 tuomet atatinkamai turi suktis ir variklis ta kryptimi ir tiek laipsnių, tačiau kai ašis artėja prie tikslo PID perskaičiuoja viską ir gaunasi vis mažesnis erroras ir nebūna overshooto, cia tavo PID reiksme yra laiko momente t ji keisis kai rodykle artes prie tikslo. Jei didele integracija ir pokytis gali buti oversotas tai cia vienetai gali buti ir per dideli cia kaip ir sake turi ekperimentuoti. As taip suprantu. PID tai nera kad daviau signala sukis ten ir tiek laipsniu PID yra kai sukimosi metu skaiciuojama viskas ir isduodama komanda pastoviai keciasi. Noreciau pabresti PID reikalingas jei istikruju tas overshootas galimas jei inercijos nera didele ir variklis tiksliai sustoja kur reikia jam pid ir nereikia


Paskutinį kartą redagavo valentinas, 2017 05 08, 20:28. Redaguota 2 kartus(ų)
 PID algoritmaa
PranešimasParašytas: 2017 05 08, 20:25 Pranešti apie taisyklių pažeidimą Atsakyti su citata
valentinas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
andriusa rašo:
Gerai imkim iškarto realius pavyzdžius. Pasisukus išorinei ašiai (yra pavarų dėžė) 360 laipsnių bus sugeneruota 1102500 impulsų iš encoderio. Tarkim ta ašis turi rodyklę ir stovi ties 100 laipsnių (skaičius d'306250' REAL_POSITION registre mikrovaldiklyje). Iš klaviatūros įvedama nauja pozicija, 120 laipsnių (įrašoma d'367500' į NEED_POSITION registrą mikrovaldiklyje). Taigi pirmasis reikšmių erroras bus e(t) = d'367500' - d'306250' = d'61250'. Sakykim esam pasirinkę visus gain koeficientus lygius 1. Tada

P(t) = Kp * e(t) = d'1' * d'61250' = d'61250';
I(t) = I(t — 1) + Ki * e(t) = d'0' + d'1' * d'61250' = d'61250';
D(t) = Kd * {e(t) — e(t — 1)} = d'1' * {d'61250' — d'0'} = d'61250';
u(t) = P(t) + I(t) + D(t) = d'61250' + d'61250' + d'61250' = d'183750'

Ir kas toliau? Gavau, kad reikia atlikti poveikį d'183750', bet vis dar nežinau kaip tai valgoma.

360 bus 1102500 impulsai, tuomet vienas laipsnis bus ~3 impulsai jei neskaityti pavaru dezes, jei skaityti turi ziureti jos redukcija ir atatinkamai ivertinti poslinkio ir impulsu santykį. gauni d'183750 tuomet atatinkamai turi suktis ir variklis ta kryptimi ir tiek laipsnių, tačiau kai ašis artėja prie tikslo PID perskaičiuoja viską ir gaunasi vis mažesnis erroras ir nebūna overshooto, cia tavo PID reiksme yra laiko momente t ji keisis kai rodykle artes prie tikslo. Jei didele integracija ir pokytis gali buti oversotas tai cia vienetai gali buti ir per dideli cia kaip ir sake turi ekperimentuoti. As taip suprantu. PID tai nera kad daviau signala sukis ten ir tiek laipsniu PID yra kai sukimosi metu skaiciuojama viskas ir isduodama komanda pastoviai keciasi.
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie Atgal  1, 2
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

www.bigbox.lt

TMS ELECTRONICS
TMS ELECTRONICS

www.rslietuva.com – nemokamas elektronikos komponentų pristatymas

www.matuok.lt - Interneto spartos matavimo sistema

LTV.LT - lietuviškų tinklalapių vitrina

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Technologijos.lt

Mokslo festivalis „Erdvėlaivis Žemė

RaskInterneta.lt – plačiajuosčio ryšio žemėlapis

„EParašas“ – elektroninio parašo mokymo sistema

www.esaugumas.lt – apsaugok savo kompiuterį!

www.cert.lt – praneškite apie incidentą viešuosiuose elektroninių ryšių tinkluose arba informacinėse sistemose

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Farmingmods2015.com
FS maps, farming simulator 2015 mods, FS 15 tractors
ATS mods
ATS trailers, American Truck Simulator Mods, ATS trucks
Amazon sellers
Ebay sellers, Walmart sellers, Etsy sellers
FS 17 Combines
Farming Simulator 17 Mods, FS 17 Trucks, FS 2017 Mods
FS 17 maps, FS 17 truck
FS 17 Trailers, Farming Simulator 2017 Mods
Farming Simulator 2017
FS 2017 Trailers, FS 17 Maps, FS 17 Tractors
FS 17 Tractors
Farming Simulator 17 Mods, FS17 Combines, FS17 Maps
MudRunner Tractors
Spintires Mods, MudRunner Trucks, MudRunner Cars
Farming Simulator 2017
FS17 Mods, FS17 Maps, FS17 Trucks
Cattle and Crops
Farming Simulator 17 Mods, FS2017 Maps, FS17 Tractors
Pardavimų valdymas
Klientų valdymo sistema, projektų valdymo sistema
Desk International
Higher Education, Studies Abroad, Universities Abroad
YouTube Downloader
http://www.freemake.com/ free_video_downloader/
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Farming Simulator 2017 Mods, FS 17 Mods
ls2017.com
„TV programa“ – tiksli
televizijos programa

www.tvprograma.lt
„Google“ reklama,
logotipų kūrimas

www.cet.lt
Wireless, point to point, backhaul, PTP
www.ligowave.com
Svarstyklės, matuokliai, laboratorinė įranga
www.moris.lt
Lietuvių k. informacinėse technologijose
www.likit.lt
ETS 2 Mods, ETS 2 Truck Mods, ETS 2 Map Mods
www.ets2world.com
Farming Simulator 2017 Mods, FS 17 Maps, FS 17
www.fs2017mod.com
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Geriausių lietuviškų tinklalapių katalogas
www.ltv.lt/technologijos/
Farming Simulator 2017, FS 17 Map, FS 17 Tractor
www.farming2015mods.com
Projektas „Mokslas verslui ir visuomenei“
www.mokslasplius.lt
Reklama


Reklama