PID Kontrol

Başlatan LukeSkywalker, 08 Aralık 2010, 20:50:22

LukeSkywalker

Merhaba arkadaşlar. PID kontrol tekniği ile çizgi izleyen robot yapacağım. Daha önce P kontrol ile yaptığım ve yarışmalarda derece aldığım iki adet robotum var fakat artık PID kontrol tekniğine geçmemiz gerektiğini düşünüyorum. Yaklaşık 1 aydır bu teknik üzerinde araştırmalar yapıyorum. Burada yardım alabileceğimi düşündüğüm için bu konuyu açmaya karar verdim. Şimdi sorularım şunlar;

--------------------------------------------------------------------------------------------------------------

1-) 8 adet sensör dizisinden gelen verileri analog olarak okuduktan sonra PID döngüsüne bu verileri ne şekilde girmem gerekiyor?

--------------------------------------------------------------------------------------------------------------

2-) Error = target_pos – current_pos      //hatanın hesaplanması
     P = Error * Kp                                //hata ile oransal katsayının çarpımı
     P I = I + Error                               //Üretilen hatanın integrale eklenmesi
     I = I * Ki                                       //İntegral değerinin integral katsayısı ile çarpılması
     D = Error – Previos_error                //Türevin bulunması
     Correction = P + I + D           // Düzeltme değerinin bulunması.

     Yukarıdaki PID döngüsündeki Kp,Ki,Kd değerleri nasıl hesaplanabilir?

--------------------------------------------------------------------------------------------------------------

3-) Düzeltme verisi sağ ve sol motorlara ne şekilde aktarılacak?

--------------------------------------------------------------------------------------------------------------

Bu 3 konuda edeceğiniz yardımlardan eminim ki bir çok arkadaş faydalanacaktır. Dc motor kontrolünde çok önemli bir konu olan PID tekniği ülkemizde yaygın olarak bilinmiyor. Katkıda bulunmanızı diliyorum. Teşekkürler.


justice_for_all

hocam pwmlw yapmaniz gerek cikan sonucu pwm dutynize ekleyip veya cikarip max dutynize gore ayarlama yapabilirsiniz...

ornegin su sekilde;

SpeedError = DesiredSpeed - ActualSpeed;
			SpeedIntegral += SpeedError;
	DutyCycle = (((long)Kps*(long)SpeedError + (long)Kis*(long)SpeedIntegral) >> 16);
	PDC1 = PDC1 + DutyCycle;	
	if (PDC1 < 50)
		{PDC1 = 50;SpeedIntegral = 0;}
	if (PDC1 > 512)
		{PDC1 = 512;SpeedIntegral = 0;} 
	PDC2 = PDC1;
	PDC3 = PDC1;
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

necati

[email]entegreterbiyecisi@yahoo.com[/email]

LukeSkywalker

Alıntı yapılan: justice_for_all - 08 Aralık 2010, 21:11:56
hocam pwmlw yapmaniz gerek cikan sonucu pwm dutynize ekleyip veya cikarip max dutynize gore ayarlama yapabilirsiniz...

ornegin su sekilde;

SpeedError = DesiredSpeed - ActualSpeed;



			SpeedIntegral += SpeedError;
	DutyCycle = (((long)Kps*(long)SpeedError + (long)Kis*(long)SpeedIntegral) >> 16);
	PDC1 = PDC1 + DutyCycle;	
	if (PDC1 < 50)
		{PDC1 = 50;SpeedIntegral = 0;}
	if (PDC1 > 512)
		{PDC1 = 512;SpeedIntegral = 0;} 
	PDC2 = PDC1;
	PDC3 = PDC1;


Cevaplarınız için teşekkür ederim.
Vermiş olduğunuz kodda PDC1 bizim pwm değerimiz yanılmıyorsam. 512 max değer 50 ise min PWM değeri doğru mudur? Bir de eğerki iki adet motor kontrol edeceksem hem çizginin sağ tarafında kalan sensörler için bir PWM değeri hem de sağdaki sensörler için başka bir pwm değeri üretip ayrı iki adet PID döngüsüne sokup motorları ayrı ayrı kontrol edeceğim yanılmıyorsam, vermiş olduğunuz koda göre hareket edersem?

justice_for_all

hocam ne icin yapiyosunuz pid kontrolu,sensor olarak ne kullancaksiniz?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

LukeSkywalker

PID kontrolü çizgi izleyen robot yapımında kullanacağım. Sensör olarak http://www.pololu.com/catalog/product/960 adresindeki 8 adet sıralı IR led -Foto transistör çiftini kullanacağım.

justice_for_all

benim gonderdigim program hiz kontrolu uygulamalarinda kullaniliyo hocam egerki sizde hiz kontrolu yapcaksiniz kullanabilirsiniz...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

LukeSkywalker

Peki sizin vermiş olduğunuz kodda PDC1 >50 diye işlem yaptırırken PWM değerinin minimum değerinin 50 olması gerektiğini,PDC1 > 512 derkende max değerin 512 olması gerektiğini mi söylüyorsunuz ?

justice_for_all

simdi hocam 0 deger kullandiginiz denetleyiciye,pwm frekansina gore degisebilir..bunlar hakkinda cevaplar verebilirsen daha net konusabilirim...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

zamzam23

Alıntı yapılan: maytere - 08 Aralık 2010, 20:50:22


--------------------------------------------------------------------------------------------------------------

2-) Error = target_pos – current_pos      //hatanın hesaplanması
     P = Error * Kp                                //hata ile oransal katsayının çarpımı
     P I = I + Error                               //Üretilen hatanın integrale eklenmesi
     I = I * Ki                                       //İntegral değerinin integral katsayısı ile çarpılması
     D = Error – Previos_error                //Türevin bulunması
     Correction = P + I + D           // Düzeltme değerinin bulunması.

     Yukarıdaki PID döngüsündeki Kp,Ki,Kd değerleri nasıl hesaplanabilir?

arkadasım türev boyle alınmaz. hani nerde örnekleme aralıgına bolmemıssın.

LukeSkywalker

Hocam O formülün doğrusu şu şekilde olmalı

D = Error – Previos_error*Kd


Peki bu Kp, Ki, Kd katsayılarını nasıl hesaplayacağız veya bulacağız? Bana bu değerlerin hesabı lazım. 

zamzam23

bencede şöyle olmalı:
D = ((Error – Previos_error)/dt)*Kd

o parametreleri ben deneme yanılmayla buldum sende oyle yapabılırsın. yada motorun parametrelerını bılıyorsan simulınkte de bulursun

LukeSkywalker

Deneme yanılma yöntemini izlerken nasıl bir yol izlediniz. Mesela ilk olarak hangi değeri verdiniz?

Tagli

Ziegler-Nichols yöntemi başlangıç değerlerinin belirlenmesi için sıkça kullanılan bir yöntem. Sonradan elle ince ayar yapılabilir. Ama bu yöntemi her sisteme uygulamak mümkün olmayabilir.
Gökçe Tağlıoğlu

zamzam23