pid motor kontrol

Başlatan bulut_01, 16 Ocak 2018, 22:46:46

bulut_01

Alıntı yapılan: berat23 - 17 Ocak 2018, 21:36:50
bence pid kontrolcüden önce kontrol nedir neden yapılır kısmına bakmak daha doğru. yoksa pid kodu hava cıvadır, önemli olan kontrolcüdür.

yani sistemin modeli nedir, kararlı mıdır bilmeden kontrolcü yapılmaz. sonra ezber oluyor, p olunca responsive olur, ı olunca steady state error olmaz gibi. önce kullandığın sistem yani motorun transfer fonksiyonuna bak. sonra integral neye yarıyor ya da neden derivative kullanımı gerekli değil ortaya çıkıyor. öyle bakınca başka şeyler de göreceksin, mesela integral aslında ne kadar tehlikelidir gibi.

ayıca kod-proteus ikilisinden ziyade bu işin doğrusu bence simulink'tir. hem orda kararlılık ya da parametreleri tune etmek için araçlar da var, teoriyi doğrularsın. sonra mcu'ya gömmekte birşey yok, altı üstü çarpma toplama

arkadasım elektronik bölüm mezunuyum biliyoruz birseyler pid konusunda yabancıyım ugrasmadıgım bölüm pid konusunda eksiklerimi tamamlamaya calısıyorum amacım ezber değil ortada örnek algoritma uzerinden bilmediklerimi yada yanlıs bildiklerimi düzeltmeye calısıyorum
amacım jilet gibi dönen dc motor kontrol yapmak istiyorum motorun teknik verileri yok kp ki kd degiskenlerıyle oynayarak en stabil calısma seklini olusturmak.
YENİLMEZ..

foseydon

Alıntı yapılan: berat23 - 17 Ocak 2018, 21:36:50
bence pid kontrolcüden önce kontrol nedir neden yapılır kısmına bakmak daha doğru. yoksa pid kodu hava cıvadır, önemli olan kontrolcüdür.

yani sistemin modeli nedir, kararlı mıdır bilmeden kontrolcü yapılmaz. sonra ezber oluyor, p olunca responsive olur, ı olunca steady state error olmaz gibi. önce kullandığın sistem yani motorun transfer fonksiyonuna bak. sonra integral neye yarıyor ya da neden derivative kullanımı gerekli değil ortaya çıkıyor. öyle bakınca başka şeyler de göreceksin, mesela integral aslında ne kadar tehlikelidir gibi.

ayıca kod-proteus ikilisinden ziyade bu işin doğrusu bence simulink'tir. hem orda kararlılık ya da parametreleri tune etmek için araçlar da var, teoriyi doğrularsın. sonra mcu'ya gömmekte birşey yok, altı üstü çarpma toplama

Berat usta kontrolcü nedir?

OptimusPrime

Yine donup dolasip verdigim linkteki kodu yazacaz ama hadi hayirlisi bakalim

//bu fonksiyon bir timer kesme ritini icinde cagirilmali. 
void PID(void)
{
float kp=6;
float ki=1;
float kd=1;
float pid=0;

//burada hatayi ve referansi -1 +1 araligina cekmelisin

Hata = Ref - rpm ;

HD = Hata - EHata;                                     

P = Kp * Hata;
I = I + Ki * Hata;
D = Kd * HD;
//burada PID degerlerin limitlemelisin (en azindan I yi limitlemelisin - ucup gitmesin)

PID = P + I + D;
//Burada PID toplamini limitlemelisin

//PID degeri bu noktadan sonra PWM register ina yazilacagindan araligi degistirmelisin
set_pwm1_duty(PID);

EHata = Hata;


https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

bulut_01

@OptimusPrime hocam tsk ederim yardımlarınız için aradaki acıklamalarınızı kodlada yardım etsenız örnek olarak

burada PID degerlerin limitlemelisin (en azindan I yi limitlemelisin - ucup gitmesin) cümlenizdeki I nasıl sabitliyecegız kod yazabilirmisiniz bunun için ?

//burada hatayi ve referansi -1 +1 araligina cekmelisin --- bunun kod karsılıgı nedir ?
YENİLMEZ..

berat23

valla kusura bakmayın da pid nedir bilen biri gidip dt nedir diye sormaz. ya da saturation nedir, windup nedir gibi soruların da cevabını bilir. yoksa pid nedir, toplamda iki satır kod ki defalarca örnek verilmiş...

her soru tamam ama böyle temelden eksik gelip biliyoruz yaa tribi atmak nedir anlamıyorum...

bulut_01

#20
Alıntı yapılan: berat23 - 17 Ocak 2018, 23:05:54
valla kusura bakmayın da pid nedir bilen biri gidip dt nedir diye sormaz. ya da saturation nedir, windup nedir gibi soruların da cevabını bilir. yoksa pid nedir, toplamda iki satır kod ki defalarca örnek verilmiş...

her soru tamam ama böyle temelden eksik gelip biliyoruz yaa tribi atmak nedir anlamıyorum...
Yukarda belirtmişim pid konusunda yabancıyım bilmiyorum diye triple ne alakası var bilen arkadaslarımız abilerimiz elinden geldiğince yardımcı oluyor sen biliyosun yada bilmiyosun demiyorlar sende birseyler biliyosan örnek üzerinden sordugum sorulara cvp yaz I nasıl sabitlenir - 1+1 kurulanı anlat nasıl çevrilir biliyosan bunlara cvp yaz bilmiyosanda trip atıyosun vs vs tarzında cümleler bu teknik konuya gitmiyor arkadas.
YENİLMEZ..

bulut_01

Alıntı yapılan: bulut_01 - 17 Ocak 2018, 22:39:06
@OptimusPrime

burada PID degerlerin limitlemelisin (en azindan I yi limitlemelisin - ucup gitmesin) cümlenizdeki I nasıl sabitliyecegız kod yazabilirmisiniz bunun için ?

//burada hatayi ve referansi -1 +1 araligina cekmelisin --- bunun kod karsılıgı nedir ?

Bu konuda yardımlarınızı bekliyorum arkadaslar I sabitlemeyi nasıl yapabilirim?
YENİLMEZ..

Zoroaster

Yi=Yi+Err*DT;
if Yi>Ymax Yi=Ymax;
else if Yi<-Ymax Yi=-Ymax;

Boylece hatanin integralinin cok buyuk degerler almasi engellenmis olur.
Seytan deliginden kacti.

bulut_01

Tşk ederim bülent abim verdiğin kodun basına I=Yi mi koymalıyım yada direk Yi yerlerine direk I yazmalıyım.
YENİLMEZ..

Cemre.

Alıntı yapılan: Zoroaster - 19 Ocak 2018, 00:46:29
Yi=Yi+Err*DT;
if Yi>Ymax Yi=Ymax;
else if Yi<-Ymax Yi=-Ymax;

Boylece hatanin integralinin cok buyuk degerler almasi engellenmis olur.

Integrali saturasyona sokmaktansa aktuatore giden değeri aktuator sınırları ile sature edip integral için anti-windup implemente edilse daha güzel olur diye düşünüyorum. Öyle çok zor bir şey de değil. Saturasyona girmeden önceki değeri saturasyondan çıkan değerden çıkartıyorsunuz (böylece çıkışın limitlerden ne kadar fazla saptığını yani aradaki farkı buluyoruz), bunu integral hesabına giden hata ile topluyoruz.

Aşağıdaki dökümanı incelemenizi tavsiye ederim.
http://cse.lab.imtlucca.it/~bemporad/teaching/ac/pdf/AC2-09-AntiWindup.pdf

bulut_01

#25
linke baktım Umin Umax mı kast ediyosunuz saturasyon için.
YENİLMEZ..

Cemre.

Alıntı yapılan: bulut_01 - 19 Ocak 2018, 08:39:42
linke baktım Umin Umax mı kast ediyosunuz saturasyon için.

Evet, o kısımda saturasyon anlatılıyor. @Zoroaster hocanın verdiği kod parçası da zaten bunu yapıyor...

bulut_01

Bülent abim saolsun yardımcı oluyor eve gidince deneyecegim kodları

-1+1 değişkenler sabitleme olayı var onuda çözebilirsem biraz yol kat etmiş olacagım.
YENİLMEZ..

Zoroaster

Alıntı yapılan: bulut_01 - 19 Ocak 2018, 07:59:41
...verdiğin kodun basına I=Yi mi koymalıyım yada direk Yi yerlerine direk I yazmalıyım.

PIDout =Yp+Yi+Yd

Yi denen cikis PID cikisinin integral bileseni. Verdigim kod orneginde Ki integral katsayisini eklemeyi unutmusum.

Dogrusu asagidaki gibi olmali;

Yi=Yi+Err*Ki*DT;
if Yi>Ymax Yi=Ymax;             // opampdaki +Vcc  gibi davran
else if Yi<-Ymax Yi=-Ymax;    // opampdaki -Vee  gibi davran

Analog devrelerde integral alan opamp devresine hic bir ek onlem almasan bile zaten opamp cikisi besleme voltajinin ustune cikamayacagi icin saturasyon olayi kendiliginden gerceklesir. Verdigim ornek kod parcasi da aynen analog devredeki bu durumu simule eder.
Seytan deliginden kacti.

bulut_01

Bülent abim tsk ederim eve gecince kodu ekleyip deneyecegim.
YENİLMEZ..