Kendinden ayarlamalı PID benzeri bir denetleyici nasıl uygulanır


15

Aşağıdaki özelliklere sahip bir sistemde sıcaklığı kontrol etmek için bir mikro denetleyici programı yazmaya çalışıyorum:

  • çıkış sadece Açık veya Kapalı olabilir, sabit çevrim frekansları ile (saatte ~ 2-10)
  • Bitki yavaş yanıt veriyor (sıcaklıktaki ölçülebilir değişikliklerin> 10 dakika uzun sürmesi).
  • Bitki çevresel koşullara bağlı olarak sıcaklığı kaybeder.
  • ayar noktası, kullanıcı talebine bağlı olarak büyük adımlarla değişebilir.

Bir girdi olarak sağlanan döngü hızına bağlı kalmanın yanı sıra hatayı en aza indirmeyi amaçlayan bir denetleyici yazıyorum.

Bu, bir PI kontrolörü ile kolayca yapılabilir ve çıktısı görev döngüsüne dönüştürülür. Sorun, programın otomatik olarak ayarlanması ve doğru Kp, Ki sabitlerini seçmesi ve değişen çevresel koşullara ve ısıtma kapasitesindeki değişikliklere uyum sağlaması gerektiğidir. Bu nedenle, PI kontrolörünü önceden ayarlamak çok yararlı değildir.

Gerçek bir PI veya PID kullanmak şart değildir. Yardımcı olursa Fuzzy-Logic kullanımına açıkım, ayrıca çip üzerinde sistem tepkisini ve ısı kaybını (doğrusal yaklaşık) ölçen adım yanıtı hakkında bilgi öneren bir makine öğrenme algoritması var . Sadece bu bilgiyle ne yapacağımı bilmiyorum.

Birkaç gönderi, modelleme verilerini PI'yi çevrimiçi olarak ayarlamak için kullanabileceğimi ve ayrıca PI'yi ayarlamak için Bulanık-Mantık kullanabileceğimi öneren laboratuvar görünümü kılavuzunu önermektedir.

Benim sorum, bu tür bir senaryo için en iyi yaklaşım nedir (örneğin, PID, bulanık-pid, evrişim, vb.) Ve bunu yazılım / uygulamada gerçekte nasıl uygulayacağım.

Ben bir EE değilim, bu yüzden herhangi bir girdi büyük mutluluk duyacağız.


1
Robotics SE'de ilgi çekici olabilecek PID denetleyicilerini otomatik olarak ayarlamak için bir simpleks algoritması kullanma hakkında bir cevap yazdım .
embedded.kyle

@ embedded.kyle harika, simpleks / en büyük-acenteleri anlıyorum. X1, x2 için ne kullandığını söyleyebilir misin? Bunları PID sabitleriyle ilişkilendirmede sorun yaşıyorum.
MandoMando

1
Bir süre oldu ama ağırlık merkezi x1 = P, x2 = I, x3 = D. x0 gibi bir şey kullandığımıza inanıyorum. Benim uygulama motor kontrolümde iki döngü vardı. Birinden x0 hız, diğerinden x0 günceldi. Daha fazlası için buraya bakın .
embedded.kyle

@ embedded.kyle Yorumunuzu bir cevaba dönüştürmek ister misiniz? isterseniz ek bilgi ekleyin. -thx
MandoMando

Ödül mü? Ah, oğlum! Bitti ve bitti.
embedded.kyle

Yanıtlar:


7

Ben PID modası geçmiş aramak kadar ileri gitmek değildir. Ancak kesinlikle iyileştirilmesi gereken yerler var. Otomatik ayarlanmış PID kontrol döngülerine sahip olmamın bir yolu, bir tepe tırmanma simpleks algoritması olan Nelder-Mead yöntemini kullanmaktır . Zaman içinde hareket eden bir hedef parametrede yakınsama ve yeniden birleşebilme avantajına sahiptir.

Nelder-Mead yöntemi yokuş tırmanışı

Gönderen Bu yazıda :

Örneğin, {K P , K I , KD D } ayarlayan PID parametreleri örneğimizde bir simpleks tetrahedrondur. Nelder – Mead, simpleks olarak düzenlenen her test noktasında ölçülen objektif fonksiyonun davranışını tahmin ederek yeni bir simpleks test pozisyonu üretir. Algoritma daha sonra bu test noktalarından birini yeni test noktasıyla değiştirmeyi seçer ve böylece teknik ilerler.

Benim özel uygulamam motor kontrolü içindi. İki döngümüz vardı, bir PID akım kontrol döngüsü ve bir PI hız kontrol döngüsü. Köşelerimizi sırasıyla P, I ve D'ye ayarladık ve istatistikleri döngü çıktısı üzerinde çalıştırdık. Ardından, oluşturulan mevcut veya hız kontrol hedefleri birkaç standart sapma içinde oluncaya kadar yansıma, genişleme, daralma ve azaltmayı tekrar tekrar çalıştırdık.

Ürünümüz ile VP, motorun nasıl "kulağa" geldiğiyle çok ilgiliydi. Ve ortaya çıktığı gibi, mevcut hedef matematiksel olarak en uygun olandan biraz daha fazla sıçradığında daha iyi geldi. Bu nedenle, motor çalışırken algoritmanın arama yapmasına izin vermemiz için ayarımız "canlı" olarak gerçekleştirildi, böylece kullanıcının motor sesi algısı da dikkate alındı. Beğendiğimiz parametreleri bulduktan sonra, bunlar kodlanmış ve değiştirilmemiştir.

"Otomatik ayarın bir parçası olarak kullanıcılar için kabul edilemez olsa bile, sistemi salınıma sokmak" diye belirttiğiniz için bu muhtemelen sizin için ideal olmaz. Sistemimiz kesinlikle otomatik ayar yaparken salınacak ve diğer korkunç şeyleri yapacaktı.

Ancak, PID denetleyicisinin iki kopyasını çalıştırabilirsiniz. Biri "canlı" ve aslında süreci kontrol ediyordu. Ve "canlı" denetleyiciyle aynı girişlerle beslenirken sürekli otomatik olarak ayarlanan bir saniye. Otomatik ayarlanan denetleyicinin çıkışı "daha iyi" veya daha kararlı hale geldiğinde, katsayıları "canlı" denetleyiciye değiştirebilirsiniz. Daha sonra kontrolör, istenen performans elde edilene kadar proseste düzeltmeler yapacaktır. Bu, otomatik ayarlama sırasında kullanıcı tarafından algılanabilecek salınımları önleyecektir. Ancak girişler büyük ölçüde değişiyorsa ve PID kontrolörü artık optimum değilse, otomatik ayarlama yeni katsayılarda kullanılabilir olduklarında değişebilir.


NM yöntemi, nesnel işlevde (yani kullanıcının gerçek dünyası) vahşi noktalarını çalıştırmayı gerektirir. Ancak, sensör ölçümlerine dayanarak mikro denetleyicinin üzerine ham bir modelin (uzay-durum?) İnşa edilebileceğine inanıyorum. Daha sonra optimize ettiğiniz gibi 'gölge' PI denetleyicinizi çalıştırır. Bu bir aşırı öldürme emin değilim, çünkü bir PI bilinen bir ayara ayarlamak ve daha sonra sensör okumaları ve sistem yanıtı temelinde Kp ve Ki ölçeklemek mümkün olabilir . Her iki durumda da aferin efendim.
MandoMando

@MandoMando Çok teşekkür ederim! Ve gerçekten 'gölge' PI denetleyicisi terimini seviyorum.
embedded.kyle

3

Bir PID kontrolörü, kontrol edilen sistemin davranışının kontrol uyaranı, kontrol uyaranının integrali ve bu ilk integralin integrali olarak makul bir şekilde tahmin edilebildiği durumlarda yararlıdır. Bazı sıcaklık kontrol sistemleri, uyarıcı tarafından eşit olarak ısıtılan bir nesne varsa ve bu nesne, aralarındaki sıcaklık farkıyla orantılı bir oranda ısıyı başka bir nesneye eşit olarak aktarıyorsa, böyle bir kriteri karşılayabilir. Örneğin, birinci nesne bir ısıtma elemanı olabilir ve ikinci nesne, havanın tek bir muntazam sıcaklığa sahip olması için yeterli hava sirkülasyonu varsa, bir odada dolaşan hava olabilir. Bundan daha karmaşık termal modeller için (örneğin katı bir ortam içinde termal gradyanlar içerebilenler),

Isıtıcının açık olduğu zaman, kontrolörün, çıkış derhal kapatılırsa regüle edilen cihazın ne kadar ısınacağını ve eğer bundan sonra ısıtıcı en kısa sürede çalıştırılmıştır. Isıtıcı başka bir saniye, iki saniye, üç saniye vb. İçin açık kalırsa bu değerlerin ne olacağını da tahmin edin. Bu değerler elde edilebilecek kadar iyi olduklarında ısıtıcıyı kapatın. Daha sonra ısıtıcı kapatıldıktan sonra benzer hesaplamaları yapmaya başlayın, ancak ne zaman tekrar açılacağına karar vermek için açık / kapalı, sıcak / soğuk vb. Sistemin termal davranışına bağlı olarak, bir veya iki adım ileriye bakmak için bir 'min / maks' ileriye bakış stratejisi kullanmak gerekebilir.


1

Kontrolün durumunu saatte 2-10 kez (açık veya kapalı) değiştirebilmek, görev döngüsü kontrolüne katkıda bulunmaz. Bir PI döngüsünün çıkışı, hatanın bir fonksiyonu olarak büyüklükte değişen bir kontrol sinyali olacaktır ve tesisiniz (gerçekçi olarak) kontrolün 'frekansı' nedeniyle sadece bir ikili girişi (kapalı veya açık) kabul edebilir kabul edilebilecek görev döngüsü, bir hertzin bir kısmıdır.

Bir şeyleri basitleştirmek ve histerik kontrol ile gitmek isteyebilirsiniz:

  • sıcaklık alt limiti geçtiğinde sistem açılır
  • sıcaklık bir üst limiti geçtiğinde sistem kapanır
  • kontrol çıkışının sıçramasını önlemek için üst ve alt sınırlar arasında yeterli mesafe vardır

fikir PI çıktı almak demek:% 60 ve zamanında açma =% 60 döngü -> 0.6 x 30 dakika -> 18 dakika açık ve 30 dakika döngü sırasında 12 dakika kapalı. önerdiğiniz bang-bang kontrol cihazı, gerekli döngü hızına (açma, saatte n defadan fazla değil) bağlı kalmayı ve aynı zamanda düşük bir hatayı korumayı garanti etmez. sistemin, çalışma dışı durumdaki kaybı dengelemek için bir süre geçici olarak aşması gerekebilir.
MandoMando

1

Tipik (bunu kabul etmenin basit bir yolu olmasına rağmen) kazanç planlama olarak adlandırılır. Sisteminizin değiştirdiği (çizelgeleme parametresi) gözlemlenebilir bir değişken (veya değişkenler) olduğunda doğrusal olmayan kontrole klasik bir yaklaşımdır. Sisteminizde bu değişken büyük olasılıkla sıcaklık olacaktır. Buradaki fikir, çizelgeleme parametresinin (sıcaklık) farklı değerlerinde kontrolör kazançlarının bir listesini oluşturmanız ve çizelgeleme parametresi değiştikçe kontrol cihazınızda (PI, PID, durum geri bildirimi veya her ne olursa olsun) bu kazançları kullanmanızdır. Bu gerçekten basit görünüyorsa, çünkü. Ancak çalışır ve bazı çok karmaşık sistemlerde kullanılır.

Süslü olmak istiyorsanız, kazanç matrisinizi oluşturmak için bir makine öğrenme algoritması uygulayabilirsiniz. Bu, tanımladığınız evrim geçiren ve öğrenen denetleyiciyle sonuçlanır. Bununla birlikte, sistemin tam olarak karakterize edilebilmesi aşırıya kaçabilir.

Edit: Üzgünüm, biraz yanlış okudum. Sıcaklığı kontrol etmeye çalışıyorsunuz, böylece bahsettiğiniz "çevresel koşullar" sizin programlama parametreniz olacaktır.


0

Astrom ve Wittenmark , Adaptive Control gibi tam üflemeli Tekrarlamalı En Küçük Kareler denetleyicisine gidebilirsiniz , ancak mikrodenetleyicinin bunu yapmak için yeterli oomph olup olmayacağını bilmiyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.