PID Kontrol Mantığı

Başlatan ete, 23 Ekim 2004, 10:57:02

z

Alıntı yapılan: "aster"ben bunu daha önce bir kaç MW güç geçen hattın yanıda yapmış ve havada ~3-5 kg demirin asılı kalmasını izlemiştim yere düşmesi zaten imkansız bir durum ortaya çıkıyor

Aster sanirim yanlis anladin. Amac demirin magnetik alan etkisinde tele temas ederek kalmasi değil. Hic bir yere temas etmeden helikopter misali havada asili kalmasi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

picusta

Kanunihan à:
Asagidaki konuda sicaklik kontrolü için PID kodu Klein tarafindan verilmisti:
http://picproje.org/index.php/topic,12630&start=15

Bunalmis à:

Benim gibi bir amatör PID kontrol ile oyuncagi havada asiyor, bunun için PWM ile sürülmüs 3 kapi zili bobini ve LED-fototransistor kullanmis galiba:
http://www.elektor.de/Portals/0/R8C/Contest/Transrapid.zip

z

Picusta

Bir selenoid bir dizi optik sensor, basit bir denetleyici, parmaklar arasinda tutulan demir topu yavasca selenoide yaklastirma islemi ve hoop havada asili kalan top.

Zaten bir nokta civarinda sistem lineer kabul edilebildigi icin cok sorun yok.

Bu aradigim cozum değil.  Sistem soyle olacak.

Yerden 5 yada daha iyisi 10 cm yukarida selenoid. Zeminde ise havalanmayi bekleyen 5 mm yada 10mm capinda demir topolacak.

Sistemi calistiracagiz ve topu 0 la 10 cm arasinda mesela 0.1 mm cozunurlukle diledigimiz yerde pozisyonlayacagiz.

Iste soru bu.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

picusta

Hocam bu soru bana non lineer yazilisinda ocakta sorulmustu. Kagidi belki bulabilirim, verdigim cevaplari bulamayabilirim.
Sistemin denklemlerini yazinca kare'li degiskenler elde ediyoruz. örnegin topa uygulanan güç mesafenin karesi ile orantili idi. Bu denklemleri elde ettigimizde dedginiz gibi normalde denge noktasinin civarinda lineerlestiriz.
Fakat  non lineer yazilisi oldugu için amacimiz önce sistemi lineerlestiren durum geribeslemesi tasarlamakti.
Bu konu hakkinda internette arastirmalar ne veriyor?

z

Internetteki uygulamalari soruyorsan topu ya parmaklariyla ara noktaya kendileri koyuyor ve sistem orada sabit tutuyor, yada sistem calistirilinca top hizla orta noktaya geliyor ve orada kaliyor.  

Tabi isin icinde bir suru uc kagit var. Selenoidin yerden yuksekligi, topun kutlesi...

Soruyu dedigim gibi ele alani gormedim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

serdararikan

yazıların tamamını okudum.bu konuda tecrübesi olan bilgisi olan birçok arkadaşımız var ama nedense hiçbiri ufacık bi örnek kod bile yazmamış.bu konuda ufak bi örnek bu işi merak eden arkadaşları güdüleyebilir bence.bu konuda bilgisi olan arkadaşlar bi örnek uygulama koyabilirlerse seviniriz.

yufuk

'TEMSİLİ KOD
'Aşağıdaki tüm isimler bir değişkendir. Kullandığınız programlama dilinde nasıl gerekiyorsa o şekilde tanımlayın.

'-----------------------------------------------------------------------------------------
'Bizim sisteme girdi olarak vereceğimiz bilgiler bunlar.
Dim setpoint As Word 'Sistemin ulaşmasını istediğimiz değer.
Dim Kp As Word 'Oransal ayar değişkeni.
Dim Ki As Word  'İntegral ayar değişkeni.
Dim Kd As Word 'Türev ayar değişkeni.
Dim dt As Word  'Zaman değeri. (saniye-milisaniye)
'-----------------------------------------------------------------------------------------
Dim actual_position As Word 'Sistemden geri dönüş bilgisi. O anki değeri.
Dim integral As Word 'Hesaplamada kullanılmak üzere üretilmiş sıradan bir değişken.
Dim derivative As Word 'Hesaplamada kullanılmak üzere üretilmiş sıradan bir değişken.
'-----------------------------------------------------------------------------------------
Dim output As Word 'Tüm hesabın sonunda sisteme vereceğimiz çıkış değeri.
'-----------------------------------------------------------------------------------------
Dim error As Word 'Hata; sistemin olmasını istediğimiz değerle o andaki değeri arasındaki farkı.
Dim previous_error as word 'Bir önceki hata değeri.
'++++++++++++++++++++++++++++++++++++++++++++++++++++
previous_error = 0
integral = 0
'//////////////////////////////////////////////////////////////////////////////////////////77
start:
    error = setpoint - actual_position
    integral = integral + (error * dt)
    derivative = (error - previous_error) / dt
    output = (Kp * error) + (Ki * integral) + (Kd * derivative)
    previous_error = error
    wait(dt)
goto start
'//////////////////////////////////////////////////////////////////////////////////////////77

computerboy

#82
Merhaba arkadaşlar bende cnc kontrol etmek için pid uygulaması geliştirmek istiyorum ama pek kavrayamadım. bayadır araştırıyorum özellikle bu forumdan baya yararlandım yufuk kardeşimizin verdiği örnek üzerinden gideyim dedim ama kp,kd,ki veri atamaları boş kalıyor bu sebepten program çalışmıyor bilen yada fikir vermek isteyen arkadaşlar konuyu daha iyi kavramamız açısından biraz daha açarsa çok memnun olurum.

Örnek Uygulama Kod Mantığı

1 Tur = 3600 pulse sinyali
PC'den gelen veri X motoru 1 tur dönsün. (3600 pulse sinyali) XPulseVeri = 3600

Mikroişlemci Programlama Mantığı

'-----------------------------------------------------------------------------------------
'Bizim sisteme girdi olarak vereceğimiz bilgiler bunlar.
Dim XPulse As Word 'Sistemin ulaşmasını istediğimiz değer.
Dim Kp As Word 'Oransal ayar değişkeni.
Dim Ki As Word  'İntegral ayar değişkeni.
Dim Kd As Word 'Türev ayar değişkeni.
Dim dt As Word  'Zaman değeri. (saniye-milisaniye)
'-----------------------------------------------------------------------------------------
Dim XEnkoder As Word 'Sistemden geri dönüş bilgisi. O anki değeri.
Dim integral As Word 'Hesaplamada kullanılmak üzere üretilmiş sıradan bir değişken.
Dim derivative As Word 'Hesaplamada kullanılmak üzere üretilmiş sıradan bir değişken.
'-----------------------------------------------------------------------------------------
Dim output As Word 'Tüm hesabın sonunda sisteme vereceğimiz çıkış değeri.
'-----------------------------------------------------------------------------------------
Dim Hata As Word 'Sistemin olmasını istediğimiz değerle o andaki değeri arasındaki farkı.
Dim previous_error as word 'Bir önceki hata değeri.
'++++++++++++++++++++++++++++++++++++++++++++++++++++
Veri Atamaları

previous_error = 0
integral = 0

XPulse=XPulseVeri '(3600 pulse sinyali)
XEnkoder = XEnkoderVeri ' (0 dan 3600'e kadar 1 er 1 er artar)

'//////////////////////////////////////////////////////////////////////////////////////////
Basla:
    Hata = XPulse - XEnkoder
    integral = integral + (Hata * dt)
    derivative = (Hata - previous_error) / dt
    output = (Kp * Hata) + (Ki * integral) + (Kd * derivative)
    previous_error = Hata
    wait(dt)
goto Basla
'//////////////////////////////////////////////////////////////////////////////////////////


Birde step motor uygulamasını pid ile kontrol etmemiz için illaki enkoder gerekiyormu daha farklı yöntem varmı acaba ?

muhittin_kaplan

kontrol edeceğiiz her ne ise o anki duumunu alıp bir geri besleme vermsi gerek. step moorun o anki durumunu geri besleme ile verecek eleman e ise onu kullanın.

univli

ii geceler benimde bir sorum olacaktı cevaplarsanız sevinirim.
fonksiyonu 6/s^2+3s+11 olan bir sisteme bağlanan PID var.
sistem kararlı ise bu sisteme yerleştirilen 3. kutbun ( (s+a) gibi ) sistemi etkilememesi için Ki, Kd, ve Kp katsayıları hakkında teorik bilyi yorumlayınız.
Sistem birim geribeslemelidir.

muhittin_kaplan

türkçe, böyle bir kontrol teknikleri kitabını banada hibe edecek yada  1 ay yada bilemedin 2 ay sonra geri gönderebileceğim biri aranıyor.

computerboy

Banada lazım arkadaşlar :) foruma her mesaj geldiğinde banadır diye bakıyorum  :)

Maxim

fxdev
bu simulink, matlabın bir ek programı sanırım
bunun içinde PID hesaplamaları için hazır kalıplarmı var ?

efekaan

benim bir araştırmam var pıd ayarlama işlemi için şu 3 yöntemi kullanıcam bunlarla ilgili bildiğin bi kaynak varmı
1-chien-hrones reswick
2-wang- juang-chan
3-zhuang-atherton

atlake

paylaşım için sağolun arkadaşlar.