Hitech ile PID uygulaması yapan varmı?

Başlatan serdararikan, 23 Ocak 2010, 13:58:38

serdararikan

PID ile motor kontrolü yapmak istiyorum.tecrübesi olan birisi bizimle paylaşabilirmi?

Salih

Ben yapmadım ama aşağıda örnek bir program linkini verdim. Belki size faydalı olabilir.
http://rapidshare.com/files/340238237/pic_c_ornek.rar

serdararikan

üniversitede bu işlerin üzerinde pek durmamıştık ama günlük hayatta anlatılanların ne kadar önemli ve uygulamaya yönelik bilgiler olduğunu her geçen gün daha iyi anlıyoruz.aslında PID matematiği çok zor bir uygulama değil ama aradan baya sene geçti şimdi tekrar kontrol teorisi dersi konularını açıp üzerinden geçmek lazım.hatırlatıcı bilgiler arıyorum.

mihri

#define Kp 1
#define Ki 1
#define Kd 0.05
#define INTERVAL 0.02 //Örnekleme peryodu

signed int pid_control(signed char setpoint, signed char currentpoint)
{
   static signed int last_error;
   signed int P;
   signed int D;
   static signed int I;
   signed int PID;

   P = (setpoint - currentpoint);
   I = (I + (setpoint - currentpoint) * INTERVAL);
   D = (((setpoint - currentpoint) - last_error) / INTERVAL);

   last_error = setpoint - currentpoint;

   PID = (Kp * P) + (Ki * I) + (Kd * D);

   return (PID);
}


Paralel programlama yöntemine öre yapı yukarıdaki gibi. Değişken tiplerinde düzenleme gerekebilir.
"Eppur si muove!"

serdararikan

Buradaki INTERVAL değeri zamana bağlı bir değer olması gerekmiyormu?benmi yanılıyorum?

mihri

Yanında örnekleme peryodu diye açıklama yapmışım. Bunu zamandan saymıyosun heralde.  :?
"Eppur si muove!"

Erol YILMAZ

PID matematiği gayet basit bir uygulama,
Yalnız her noktasının anlaşılması gerektiğini düşünüyorum.
Bunun bir kısmını düşünerek halledebiliriz.

P ne iş yapar ?

I nasıl etki eder ?

Bunlar çözülmeli yoksa bu formül de kullanılamaz :D

Ondan sonra da hemen uygulamaya...

// bu arada Mihri'ye teşekkürler :)

serdararikan

Alıntı yapılan: "mihri"Yanında örnekleme peryodu diye açıklama yapmışım. Bunu zamandan saymıyosun heralde.  :?

evet o yazdığını gördüm ama koda bakınca INTERVAL sabit bir sayı gibi görünüyor.Anladığım kadarı ile verdiğin kodda 20ms lik bir örnekleme zamanı kullanılmış.buda demek oluyorki bu kodu 20ms lik Timer kesmesi içinden çağırarak gerekli hesaplamaları yapacağız.

mihri

Örnekleme peryodu zaten PID algoritması koşturulurken değişmez sabittir.
"Eppur si muove!"

serdararikan

Alıntı yapılan: "mihri"Örnekleme peryodu zaten PID algoritması koşturulurken değişmez sabittir.

@mihri üstad ben örnekleme zamanı değişiyor demedimki.INTERVAL in örnekleme zamanı olduğunu söyledim.

emrahmrcn

Bazı terimleri hatırlatalım;

P: Oransal kontrol demektir, yani atıyorum giriş 5V iken çıkış 1V olsun lineer bir yapıdadır, tek başına kullanılırsa değişimlere karşı cevap süresi hızlıdır fakat bir türlü istediğiniz band aralığına oturtamazsınız

I: İntegral kontrol demektir, zamana bağlı olarak hataları toplar ve buna göre cevap verir diyebiliriz kısaca, yanıt süresi üzerinde yavaşlatma eğilimi vardır fakat banda oturması kolay olur.

D: Türevsel kontrol demektir, bir zaman aralığındaki değişimlerin etkisini yavaşlatır, ani değişsen değerlerde yumuşama etkisi gösterir diyebiliriz.
Benim yaradılışımda bir ayrıcalık varsa o da TÜRK olmamdır. M.K ATATÜRK

serdararikan

Alıntı yapılan: "emrahmrcn"Bazı terimleri hatırlatalım;

P: Oransal kontrol demektir, yani atıyorum giriş 5V iken çıkış 1V olsun lineer bir yapıdadır, tek başına kullanılırsa değişimlere karşı cevap süresi hızlıdır fakat bir türlü istediğiniz band aralığına oturtamazsınız

I: İntegral kontrol demektir, zamana bağlı olarak hataları toplar ve buna göre cevap verir diyebiliriz kısaca, yanıt süresi üzerinde yavaşlatma eğilimi vardır fakat banda oturması kolay olur.

D: Türevsel kontrol demektir, bir zaman aralığındaki değişimlerin etkisini yavaşlatır, ani değişsen değerlerde yumuşama etkisi gösterir diyebiliriz.

@emrahmrcn : açıklamalar için teşekkür ederiz.emeğine sağlık gayet yalın ve anlaşılır olmuş

OptimusPrime

PID basit görünür ama mükemmelleştirmeye kalktığınızda ADCnin kendi gürültüsünü dijital olarak bastırmaya kadar gider.

PID ile ilgili bir uygulama yaptım ondada INC bir ADC ile çalıştığımdan çok uğraştım.

PID in can sıkıcı bir yeride ayarlamasıdır. ben Ziegler–Nichols metodunu uygulamıştım.

http://en.wikipedia.org/wiki/PID_controller#Loop_tuning

kolay gelsin.
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 ||