avatar_inventor

PID ( Oransal - İntegral - Türev ) Kontrol ve PIC

Başlatan inventor, 04 Aralık 2011, 10:42:26

inventor

PID kontrol ve PicBasic kodları hakkında forumda yazdıklarımızın word belgesi olarak toplanmış halini ekte bulabilirsiniz.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

Mucit23

Hocam bende bunu düşünüyordum. Ellerinize sağlık gerçekten pıd konusunda çok faydalı bir yazı oldu.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Maxim

#2
Alıntı yapılan: inventor - 04 Aralık 2011, 10:42:26
PID kontrol ve PicBasic kodları hakkında forumda yazdıklarımızın word belgesi olarak toplanmış halini ekte bulabilirsiniz.

merhaba üstad
pid konusunda birşeyler yapmak istiyorum
ekte verdiğin dosyayı okuyordum teşekkürler.

şöyle bir paragraf var:

"Ancak incelediğim cihazlarda işin teori kısmında bu formülü uygularken pratik kod yazılımlarında farklı bir yol izlemişler.
Bende oturup niye böyle yapıyorlar diye hiç incelemedim."


acaba bu konuda gelişme oldumu ?
bu dosyaya eklenmesi gereken şeyler varmı sizin tarafınızda geçen 2 sene sonra ?

slm

0nur

Merhaba,

Şuanda bende PID konusu ile ilgileniyorum. Amacım motorun hızını sabit tutmak.Yapacağım şey motora bir yük bindiğinde devri düşecekken pid algoritması ile bunu tekrar istenilen seviyeye getirmek. Bunun için oransal kontrol oldukça yetersiz kalıyor. Tam istenilen değerde tutulması mümkün değil diyebiliriz sebebi çok fazla salınım olması, PID konusunu incelerseniz oradaki grafik mevcut. Şuan için integral kontrolüde ekleyip PI kontrolu sağlamaya çalışıyorum fakat birkaç problem var sebebini bende net anlayamadım.

Teorikle uygulamanın uyuşmaması noktasında benim anladığım birkaç husus var.

Örneğin integral kontrol için belirli aralıklarla hata değeri ölçülerek toplanıp kaç ölçüm alındıysa ona bölünüyor (aritmatik ortalaması alınıyor) buda bizim hata değerimiz oluyor. Burada teoriktede yapılan işlem zamana göre integre etmek ve okunan tüm değerlerin toplamı şeklinde değeri okumak. Fakat verilen örnekte zamanla alakalı bir parametre mevcut değil. Sayac değerini 1 arttırılmış ama bu kod gecikmelerine bırakılmış oluyor fakat bunu timerı set ederek yapmak peryodik ölçümler almak açısından daha cazip olabilir.

Maxim

bilemiyorum bende yolun başındayım
fakat bazı değerlerin hesaplanması için matlab kullanıyorlarmış
yükledinizmi?

0nur

Matlab yüklemedim fakat yükleyerekte sorunu çözebileceğimi pek sanmıyorum. Ben Sistem Dinamiği ve Otomatik kontrol dersi ve Bilgisayar Destekli Sistem Modelleme dersi aldım ama inanın uygulamadaki sistemle teorinin arasında çok büyük farklılıklar var.

Ben sistemi matlabda modellesemde orada belirli katsayılara ihtiyacım olacak. Bunlar örneğin motor için;

T = kt* I   Bu formul motorun akım tork bağıntısı için kullanılıyor ve buradaki kt değerini bilmeden herhangi bir işlem yapmak çok zor. Ancak sistemi parametrik olarak çözebiliriz ki bununda netice açısından bir anlamı olmuyor. PID konusunda hernekadar birçok teorik örnek mevcut olsada (bence) kullandığınız malzemenin teknik değerlerinin tümünü biliyorsanız (örn:kt) ve bundan eminseniz ancak ozaman teorik+pratik sonucuna yaklaşmak mümkün. Aksi halde deneme yanılma metodu ve katsayıları ayarlamak haricinde bir seçenek yok gibi gözüküyor. Fakat ben yinede belki aydınlatıcı olur ve uygulama hususunda önümüzü açar düşüncesi ile teorik sorulardan bir tanesinin çözümünü yapıp burada paylaşacağım.


esesibo26

Ben pic ve pid kullanarak dc bir motora sonsuz turlu bir pot bağlayarak dc motorun pozisyonu yine başka bir sonsuz turlu pot ile kontrol etmek istiyorum. Potlar eşlenik olacak. Yani pot hangi  derecede ise dc motor da o derecede dönecek ve duracak. Bu konuda yardım edebilir misiniz? Ayrıca sonsuz turlu potlar arştırdığım kadarıyla biraz pahalı. Ben bunu daha ucuz bir yöntemle nasıl yapabilirim? Teşekkürler.

Burak

#7
Ben uzunca bir süre PID filtresinin analog ifadesinin sayısallaştırılması ile uğraştım ve sonunda hedefime ulaştım , SET değerini gölge gibi izleyen bir kod yazdım ... Sorun herzaman sadece PI ve sadece PD kontrol kullanılması sonucunda meydana geldi , bunun sebebi wind-up denilen integral akümülasyonlarının ortak etki ifadesine istenmeyen etkilerde bulunması oldu veya oturma zamanının türevsel kazanç etkisinden dolayı yüksek derecede gecikme oluşturması oldu,  ekte board üzerinde PicBasic'te yazılmış iki farklı devirde DC motor için oluşturulmuş 16F648A'da çalışan PID filtresinin videolarını bulabilirsiniz ... Her ne kadar kodun kendisini paylaşamasamda (Ticari sebeplerden) Analitik çözümleme kısımlarında takılan herkese vaktim oldukça yardımcı olabilirim ... Analog PID ifadesini S düzlemindeki çözümlemeler ile Ayrık zamanlı çalışan sistemlerde gömülü olarak çalıştırmanın yolu bu ifadeyi matematiksel olarak çözümlemekten geçiyor .. Otomatik kontrol ve özellikle sayısal kontrol sistemleri adı altında yazılmış çok fazla kitap okudum ve başka bir çözümleme yöntemide  bulamadım zaten ...

https://onedrive.live.com/?cid=0e46342379eeb9a9&id=E46342379EEB9A9%21168&ithint=folder,mp4&authkey=!AHVtl2dRqoLvFRA

Burak
Ω Gens Una Sumus Ω

esesibo26

Güzel bir çalışma olmuş. Ancak bu konuda bana bir yol haritası tavsiye edebilir misiniz? Ben iki pot değerininin adc kanalları ile pice girip orada işlem yapmam gerektiğini düşünüyorum. Ancak PID yazılımı nasıl yapmam gerekli. Aslında sanki PWM üretmem gerekiyor.

Burak

Alıntı yapılan: esesibo26 - 11 Mayıs 2015, 23:05:46
Güzel bir çalışma olmuş. Ancak bu konuda bana bir yol haritası tavsiye edebilir misiniz? Ben iki pot değerininin adc kanalları ile pice girip orada işlem yapmam gerektiğini düşünüyorum. Ancak PID yazılımı nasıl yapmam gerekli. Aslında sanki PWM üretmem gerekiyor.

Bu işin akademik kısmında ne derece yol aldığını bilmediğim için öneride bulunmam maalesef mümkün değil ... Denetleyeceğin motor DC motor ise elbette Darbe genişlik modülasyonunda doluluk oranını değiştirerek kontrol sağlamak zorundasın .. Dc gerilimlerde maalesef başka hiçbir opsiyon yok ,, PID filtresi değişken gerilimde Triyak ateşleme açısı kontrolünde çok daha efektif sonuçlar verdi .. Bunun sebeplerini burada uzun uzadıya açıklamak ayrı bir konu başlığının cevabı olmalı ...

PID kodunu (filtresini) nasıl oluştururum sorusuna ise şöyle cevap verebiliriz .. Öncelikle PID nedir , konum kontrolünde ne gibi bir algoritma gütmelisin onu düşünmelisin ..Mesela ben konum kontrolünde KALMAN filtresine yönel derim çünkü en hassas konum kontrolü uygulamaları estimation (tahmin / öngörü) parametreleri ile kontrol edilir ..... PID bu işin en çok reklamı yapılan filtresi maalesef ... Sana ilaç değil aslında tetkik lazım anladığım kadarıyla ...

Burak
Ω Gens Una Sumus Ω

esesibo26

Yani  benim projem ucuz bir yöntem ile dc motoru hassas olmasa da + - 5 derece tolerans olabilir referans konuma eşitlemek.
H köprülü bir devre kullanmam lazım ve bunu PWM ile sürüp istenen yerde ise frenlemem lazım değil mi

ete

DC motorların frenlenmesi çok kolaydır. İki ucuna aynı voltajı ver frenler.
İleri ve geri hareket için ya röle yada H köprü kullanacaksın.
Konumlama için motor miline bağlı ya encoder yada daha iyisi bir pot bağlaman gerekir.
Ete

esesibo26

Ete hocam teşekkür ederim. H köprüsü ile PID kontrolü yapmak istiyorum. Bunun için PİC Basic yazılımında PID algoritmasını işleterek hassas konumlama yapmak istiyorum. Ancak eşlenik iki pot sonsuz turlu olacak ancak aralarındaki fark belli bir açı olduğunda konumlama yapacak. Örneğin referans potum 355 derecede benim dc motorum ise dc motora bağlı pot yani 0 derecede o zaman hareket ettirmeyeceğim. Yani +-5 derecelik bir tolerensım olacak. Ancak motora bağlı potum mesela 50 derecede o anda motor sağa değil sola dönecek. Çünkü sağa dönerse daha fazla tur atması gerekecek. Bunu PIC ve PID yazılımla yapmayı düşünüyorum. Nasıl bir yol izlemem lazım

ete

+- 5 derecelik tolerans için PID kullanman yersiz.+-0,5 yad 1 derecelik tolerans dersen anlarım ama 5 derece epeyce büyük bir toleranstır. Ben hiç pot kullanmadan direk pot okuması ile motoru istediğim yerde durdurabiliyordum. Ancak motor devrş bu işte çok önemlidir. Kullanacağın motorun redüktörlü bir motor olduğunu düşünerek bunları söylüyorum. Redüktörsüz yüksek devirli motorlarda konum tutturmak gerçekten zordur.

PID algoritmasının asıl olması gerektiği bu sited ebir ara işlenmiş idi. Bu tür konularda hep genel bilgi bulursun. Kimse buraya şuda benin PID örneğim deyip örnek kod koymaz çünki aynı kod başka sistenlere uymaz. PID parametreleri tatbik edildiği sisteme göre belirlenen unsurlardır. Sana genel fikir lazım onuda sitede aratırsan bulacaksın. INVENTOR isimli arakadşın bu konuda epeyce açıklaması var idi yardımcı olacağını umuyorum.

Ete


esesibo26

Ete hocam redüktörlü olacak motorum. Hocam pot okuma ile nasıl yapıyorsun. Yani DC motordan geri besleme almıyormusun. Tek pot ile hallediliyor mu konum kontrolü?

Powered by EzPortal