PID Kontrol

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

LukeSkywalker

Üstad tamam bu method ile katsayıları hesaplamak kolay. Fakat ben çizgi izleyen robotun salınıma girmesini  nasıl anlayacağım veya salınım periyodunu hangi periyodu baz alarak ne cinsinden bulacağım?

LukeSkywalker

Zamzam, üstad verdiğin bilgiler çok yararlı oldu. Teşekkür ederim. Peki dt değerini nasıl hesapladınız?

zamzam23

dt süresi senin ilk hata ile sonraki hatayı hesaplama süren arasındakı fark: yani sana kalmıs sen kaca ayarlarsan artık. mesela timerı 10ms yeye kurup timer içinde hata hesaplarsan dt=0.01 olur. bu linkteki dosya da işine yarayabilir.

http://hotfile.com/dl/88308987/0aa4eda/00964A.pdf.html

LukeSkywalker

Hocam süpersin eyvallah. Birçok kişi faydalanacaktır eminimki bu konudan. Teşekkür ederim.

Tagli

Bu işlemde bölen sayıyı 2'nin kuvveti olarak seçersen PIC sana duacı olur :) Gerçe derleyici olayı anlar mı bilmiyorum. Sen kendin kaydırma yap bence.
Gökçe Tağlıoğlu

zamzam23

#20
estgfrllah rica ederim. sende öğrendiklerini başı sıkışık başka birine aktarırsın ödeşiriz :)

LukeSkywalker

@tagli
bölen derken dt değerinden bahsediyorsunuz anladığım kadarı ile. Derleyicinin üretmiş olduğu asm koda bakıp PID döngüsünün nekadar sürede tamamlandığını öğrenmem lazım dt değerini bulabilmek için. İnşallah çift sayı çıkar.

@zamzam23
;)

Tagli

Evet, dt'den bahsediyorum. Bu süreyi timer kesmesini uygun şekilde ayarlayarak sen belirlemelisin zaten. 2'nin katı değil, kuvveti olmalı: Mesela 64, 128 gibi. Derleyici, bölme komutu verdiğinde kaydırma yapmayı kendisi akıl edemeyebilir, bunu bilmiyorum. İşi şansa bırakmamak için kaydırma işlemini senin yapman daha iyi olur.
Gökçe Tağlıoğlu

LukeSkywalker

PID çevrimini en kısa sürede tamamlamak benim için aslında en iyi olanı. Yani bu değer float bir değer olacak, örneğin 0.001 gibi...

Tagli

0.0039 saniye kurtarır mı mesela? Deminden beri AN964'e bakıyorum, benim de kafamı karıştırmıştı daha önce ama şimdi durum netleşti gibi. Ts'i (sampling time) 3.9 ms alıyor, böylece frekans yaklaşık 256 Hz oluyor. Ts'e bölmek ve frekans ile çarpmak aynı şey sonuçta. Adam bulduğu farkı 256 ile çarpıyor. Ayrıca o notta daha farklı bir durum daha var: Son okuduğu değeri bir önceki değil 3 önceki okumayla karşılaştırıyor. O kısmı tam anlayamadım ama sanırım önce normal yöntemi denemek daha doğru olur.
Gökçe Tağlıoğlu

LukeSkywalker

#25
Burada türev değeri kd katsayısı ile çarpıldıktan sonra 32'ye bölünmüş. 256 değerini göremedim ben.
//Calculate the differential term
derivative_term = en0 - en3;
if(derivative_term > 120){
derivative_term = 120;
}
if(derivative_term < -120){
derivative_term = -120;
}
derivative_term = derivative_term * kd;
derivative_term =derivative_term>>5;
//divide by 32
}
if(derivative_term > 120){
derivative_term = 120;
}
if(derivative_term> -120){
derivative_term = -120;
}

Tagli

Hımm... Koda bakmamıştım. Şimdi benim de kafam karıştı.  ???
Gökçe Tağlıoğlu

LukeSkywalker

Hocam çözerseniz bizide haberdar edin..

inventor

#28
Konu biraz eskimiş ama yine de birilerine faydası olabilir. Geçen gün ETE hocanın web sitesinde bu konuda bir tartışma çıkmıştı ve PID ve PIC kodları hususunda uzunca bir yazı yayınlamıştık.PID nedir nasıl yapılır ve gerekli dosyalar. Aynısını buraya aktarmak yerine link vereyim dedim.

http://etepic.com/index.php?topic=190.msg1539#msg1539

Benzer Konular (5)