Giriş
İlk olarak, bu şeyin bir sistemin dürtü yanıtı tam olarak ne olduğunu ve bunun ne anlama geldiğini düşünmeliyiz . Bu, görselleştirilmesi biraz düşünen soyut bir kavramdır. Ben titiz matematiğe girmeyeceğim. Demek istediğim, bu şeyin ne olduğunu bir sezgi vermeye çalışmak, bu da onu nasıl kullanabileceğinize yol açıyor.
Örnek kontrol problemi
Üzerine bir sıcaklık sensörü monte edilmiş büyük bir yağ gücü direncine sahip olduğunuzu düşünün. Her şey başlar ve ortam sıcaklığında başlar. Gücü açtığınızda, sensördeki sıcaklığın sonunda artacağını ve dengeleneceğini bilirsiniz, ancak kesin denklemi tahmin etmek çok zor olacaktır. Diyelim ki, sistemin 1 dakika civarında bir zaman sabiti var, ancak "zaman sabiti" tamamen uygulanamaz, çünkü sıcaklık tek kutuplu bir sistemde olduğu gibi hoş bir üstel olarak yükselmiyor ve bu nedenle tek bir zaman sabiti . Sıcaklığı doğru bir şekilde kontrol etmek istediğinizi varsayalım ve yeni bir seviyeye geçmesini ve uygun güç seviyesinde açıp beklemeniz durumunda ne olacağından çok daha hızlı bir şekilde orada kalmasını istediğinizi varsayalım.
Temel olarak, kontrol sistemi sorununuz var. Açık döngü yanıtı makul şekilde tekrarlanabilir ve bir yerde onu yeterince iyi modelleyen bir denklem vardır, ancak sorun bu denklemi türetmeniz için çok fazla bilinmeyen olmasıdır.
PID kontrolü
Bunu çözmenin klasik bir yolu bir PID denetleyicisidir. Bu, analog elektronikte yapılması gerektiğinde pleistosende, insanlar zeki oldular ve eldeki analog yeteneklerle iyi çalışan bir şema buldular. Bu şemaya Oransal , İntegral ve Türev için "PID" adı verildi .
P terimi
Hatayı ölçmeye başlarsınız. Bu sadece ölçülen sistem tepkisidir (bizim durumumuzda sensör tarafından rapor edilen sıcaklık) eksi kontrol girişi (istenen sıcaklık ayarı). Genellikle bunlar voltaj sinyalleri olarak mevcut olacak şekilde düzenlenebilir, bu nedenle hatayı bulmak sadece analog bir farktı, bu da yeterince kolaydır. Bunun kolay olduğunu düşünebilirsiniz. Yapmanız gereken tek şey, direnci ne kadar yüksek olursa direnci sürmektir. Bu, çok soğuk olduğunda otomatik olarak daha sıcak ve çok sıcak olduğunda daha soğuk yapmaya çalışacaktır. İşe yarıyor, sortof. Bu şemanın sıfır dışında herhangi bir kontrol çıkışına (rezistörü çalıştıran güç) neden olması için bazı hatalara ihtiyacı olduğunu unutmayın. Aslında, ihtiyaç duyulan güç ne kadar yüksek olursa, hata o kadar büyük olur, çünkü yüksek gücü elde etmenin tek yolu budur. Şimdi tek yapmanız gereken kazancı arttırmaktır, böylece hata yüksek güçte bile kabul edilebilir. Sonuçta, opampların birçok devrede nasıl kullanıldığının temeli budur. Haklısınız, ancak gerçek dünya genellikle bundan kurtulmanıza izin vermez. Bu, bazı basit kontrol sistemleri için işe yarayabilir, ancak yanıta her türlü ince kırışıklık olduğunda ve önemli bir zaman alabildiğinde, kazanç çok yüksek olduğunda salınan bir şeyle sonuçlanırsınız. Başka bir deyişle, sistem kararsız hale gelir. ancak tepkiye her türlü ince kırışıklık olduğunda ve önemli bir zaman alabildiğinde, kazanç çok yüksek olduğunda salınan bir şeyle sonuçlanırsınız. Başka bir deyişle, sistem kararsız hale gelir. ancak tepkiye her türlü ince kırışıklık olduğunda ve önemli bir zaman alabildiğinde, kazanç çok yüksek olduğunda salınan bir şeyle sonuçlanırsınız. Başka bir deyişle, sistem kararsız hale gelir.
Yukarıda tarif ettiğim, PID'nin P (proprotional) kısmı idi. Çıkışı hata sinyaliyle orantılı yapabileceğiniz gibi, hatanın zaman türevine ve integraline orantılı terimler de ekleyebilirsiniz. Bu P, I ve D sinyallerinin her birinin, kontrol çıkış sinyalini üretmek için toplanmadan önce kendi ayrı kazancı vardır.
Terim
I terimi, hatanın zaman içinde sıfırlanmasına izin verir. Olumlu bir hata olduğu sürece, I terimi birikmeye devam eder ve sonunda kontrol çıkışını genel hatanın ortadan kalktığı noktaya yükseltir. Örneğimizde, sıcaklık sürekli olarak düşükse, çıkış sıcaklığı nihayet artık düşük olmayana kadar dirençteki gücü sürekli olarak artıracaktır. Umarım bunun yüksek P teriminden bile daha hızlı kararsız olabileceğini görebilirsiniz. AI terimi tek başına kolayca salınımlara neden olabilir, bu da kolayca salınım haline gelir.
D terimi
D terimi bazen dışarıda bırakılır. D teriminin temel kullanımı, P ve I terimlerinin daha agresif olabilmesi için biraz kararlılık eklemektir. D terimi temel olarak şu anda doğru yöne gidersem, şu an sahip olduğumuz şey bizi oraya götürdüğü için biraz gaza yatın diyor .
PID'yi ayarlama
PID kontrolünün temelleri oldukça basittir, ancak P, I ve D terimlerini doğru yapmak doğru değildir. Bu genellikle çok sayıda deneme ve ayarlama ile yapılır. Nihai amaç, çıktının olabildiğince çabuk yanıt verdiği, ancak aşırı aşma veya zil sesi olmadan genel bir sistem elde etmektir ve elbette kararlı olması gerekir (kendi başına salınmaya başlamamak). PID kontrolü üzerine yazılmış çok sayıda kitap var, denklemlere küçük kırışıklıklar nasıl ekleniyor, ama özellikle onları "ayarlayabiliyor". Ayarlama, optimum P, I ve D kazançlarının bölünmesini ifade eder.
PID kontrol sistemleri çalışır ve bunların iyi çalışması için kesinlikle bol miktarda irfan ve püf noktası vardır. Ancak, PID kontrolü bir kontrol sistemi için tek doğru cevap değildir. İnsanlar ilk etapta neden PID'nin seçildiğini unutmuş gibi görünüyor, ki bu bir tür evrensel optimum kontrol şeması olmaktan çok analog elektroniklerin kontrastlarıyla ilgiliydi. Ne yazık ki, bugün çok fazla mühendis "kontrol sistemi" ni küçük düşünen diz sarsıntısı tepkisinden başka bir şey olmayan PID ile eşitliyor. Bu, bugünün dünyasında PID kontrolünü yanlış yapmaz, ancak bir kontrol problemine saldırmanın birçok yolundan sadece biridir.
PID Ötesinde
Günümüzde, bir mikrodenetleyicide sıcaklık örneği gibi bir şey için kapalı bir döngü kontrol sistemi yapılacaktır. Bunlar bir hata değerinin türevini ve integralini almaktan çok daha fazlasını yapabilir. Bir işlemcide bölmeler, kare kökler yapabilir, son değerlerin geçmişini tutabilir ve çok daha fazlasını yapabilirsiniz. PID dışındaki birçok kontrol şeması mümkündür.
Dürtü yanıtı
Bu yüzden analog elektroniklerin sınırlamalarını unutun ve geri adım atın ve ilk prensiplere geri dönen bir sistemi nasıl kontrol edebileceğimizi düşünün. Ya her küçük kontrol çıkışı için sistemin ne yapacağını biliyor olsaydık. Sürekli kontrol çıkışı sadece çok sayıda küçük parçanın toplamıdır. Her bir parçanın sonucunun ne olduğunu bildiğimiz için, önceki kontrol çıktıları geçmişinin sonucunun ne olduğunu bilebiliriz. Şimdi kontrol çıkışının "küçük bir parçasının" dijital kontrole iyi uyduğuna dikkat edin. Kontrol çıkışının ne olacağını hesaplayacak ve buna ayarlayacaksınız, sonra geri dönüp girişleri tekrar ölçecek, yeni kontrol çıkışını hesaplayacak ve tekrar ayarlayacaksınız, vb. Kontrol algoritmasını bir döngüde çalıştırıyorsunuz, ve girişleri ölçer ve her bir döngü yinelemesini kontrol çıkışını yeniden ayarlar. Girişler ayrık zamanlarda "örneklenir" ve çıkış aynı şekilde sabit bir aralıkta yeni değerlere ayarlanır. Bunu yeterince hızlı yapabildiğiniz sürece, bunun sürekli bir süreç içinde olduğunu düşünebilirsiniz. Normalde yerleşmesi birkaç dakika süren bir rezistans ısıtması durumunda, kesinlikle saniyede birkaç kez, sistem doğal olarak, 4 Hz'de çıkışın güncellenmesinin sisteme sürekli görüneceği anlamlı bir şekilde yanıt verdiğinden çok daha hızlıdır. Bu, dijital olarak kaydedilen müzikle tamamen aynıdır, aslında 40-50 kHz aralığında ayrı adımlarla çıkış değerini değiştirir ve o kadar hızlıdır ki kulaklarımız duyamaz ve orijinal gibi sürekli ses çıkarır. bunun sürekli bir süreç içinde olduğunu düşünebilirsiniz. Normalde yerleşmesi birkaç dakika süren bir rezistans ısıtması durumunda, kesinlikle saniyede birkaç kez, sistem doğal olarak, 4 Hz'de çıkışın güncellenmesinin sisteme sürekli görüneceği anlamlı bir şekilde yanıt verdiğinden çok daha hızlıdır. Bu, dijital olarak kaydedilen müzikle tamamen aynıdır, aslında 40-50 kHz aralığında ayrı adımlarla çıkış değerini değiştirir ve o kadar hızlıdır ki kulaklarımız duyamaz ve orijinal gibi sürekli ses çıkarır. bunun sürekli bir süreç içinde olduğunu düşünebilirsiniz. Normalde yerleşmesi birkaç dakika süren bir rezistans ısıtması durumunda, kesinlikle saniyede birkaç kez, sistem doğal olarak, 4 Hz'de çıkışın güncellenmesinin sisteme sürekli görüneceği anlamlı bir şekilde yanıt verdiğinden çok daha hızlıdır. Bu, dijital olarak kaydedilen müzikle tamamen aynıdır, aslında 40-50 kHz aralığında ayrı adımlarla çıkış değerini değiştirir ve o kadar hızlıdır ki kulaklarımız duyamaz ve orijinal gibi sürekli ses çıkarır. kesinlikle saniyede birkaç kez, sistem doğal olarak yanıt verdiğinden çok daha hızlıdır, yani 4 Hz'de çıkışın güncellenmesi sisteme sürekli görünecektir. Bu, dijital olarak kaydedilen müzikle tamamen aynıdır, aslında 40-50 kHz aralığında ayrı adımlarla çıkış değerini değiştirir ve o kadar hızlıdır ki kulaklarımız duyamaz ve orijinal gibi sürekli ses çıkarır. kesinlikle saniyede birkaç kez, sistem doğal olarak yanıt verdiğinden çok daha hızlıdır, yani 4 Hz'de çıkışın güncellenmesi sisteme sürekli görünecektir. Bu, dijital olarak kaydedilen müzikle tamamen aynıdır, aslında 40-50 kHz aralığında ayrı adımlarda çıkış değerini değiştirir ve o kadar hızlıdır ki kulaklarımız duyamaz ve orijinal gibi sürekli ses çıkarır.
Peki, herhangi bir kontrol çıktı örneği nedeniyle sistemin zaman içinde ne yapacağını bilmenin bu sihirli yoluna sahip olsaydık ne yapabilirdik? Gerçek kontrol yanıtı sadece bir örnek dizisi olduğundan, tüm örneklerden yanıtı toplayabilir ve ortaya çıkan sistem yanıtının ne olacağını bilebiliriz. Başka bir deyişle, herhangi bir keyfi kontrol yanıtı dalga formu için sistem yanıtını tahmin edebiliriz.
Bu harika, ama sadece sistem yanıtını tahmin etmek sorunu çözmez. Bununla birlikte, işte aha anı, bunu tersine çevirebilir ve istenen sistem yanıtını almak için alacağı kontrol çıkışını bulabilirsiniz. Bunun kontrol problemini tam olarak çözdüğünü, ancak tek bir keyfi kontrol çıkış örneğine sistem yanıtını bir şekilde bildiğimiz takdirde unutmayın.
Muhtemelen düşünüyorsunuz, bu kolay, sadece büyük bir nabız verin ve ne yaptığını görün. Evet, bu teoride işe yarayabilir, ancak pratikte genellikle işe yaramaz. Çünkü herhangi bir kontrol numunesi, hatta büyük bir örnek bile, sistemin şemasında o kadar küçüktür ki, sistemin neredeyse hiç ölçülebilir bir yanıtı vardır. Unutmayın, her bir kontrol numunesi , şema düzeninde küçük olmalıdır, böylece kontrol numuneleri dizisi sistemde sürekli hissedilir. Bu yüzden bu fikir işe yaramaz, ancak pratikte sistem yanıtı o kadar küçüktür ki ölçüm gürültüsüne gömülür. Direnç örneğinde, dirence 100 ms için 100 W ile vurmak ölçmek için yeterli sıcaklık değişikliğine neden olmaz.
Adım yanıtı
Ama yine de bir yolu var. Tek bir kontrol numunesini sisteme koymak bize bireysel numunelere doğrudan yanıt verirken, yine de sisteme bilinen ve kontrollü bir dizi kontrol yanıtı koyarak ve bunlara cevabını ölçerek bunu çıkarabiliriz. Genellikle bu bir kontrol adımı koyarak yapılırGerçekten istediğimiz, küçük bir düşüşe verilen yanıttır, ancak tek bir adıma verilen yanıt sadece bunun ayrılmaz bir parçasıdır. Direnç örneğinde, her şeyin 0 W'da sabit durumda olduğundan emin olabiliriz, sonra aniden gücü açıp dirence 10 W koyabilirsiniz. Bu, sonuçta çıkışta güzel ölçülebilir bir sıcaklık değişikliğine neden olacaktır. Doğru ölçeklemeyle bunun türevi, bunu doğrudan ölçemesek bile, bireysel bir kontrol örneğine yanıtı bize söyler.
Özetlemek gerekirse, bilinmeyen bir sisteme bir adım kontrol girişi koyabilir ve ortaya çıkan çıktıyı ölçebiliriz. Buna adım yanıtı denir . Sonra dürtü yanıtı adı verilen zaman türevini alırız . Herhangi bir kontrol giriş örneğinden kaynaklanan sistem çıktısı, basitçe, bu kontrol numunesinin mukavemetine uygun şekilde ölçeklenen dürtü tepkisidir. Tüm kontrol numuneleri geçmişine sistem yanıtı, her kontrol girişi için zaman içinde toplanan, ölçeklenen ve eğriltilmiş dürtü yanıtlarının bir demetidir. Bu son operasyon çok ortaya çıkıyor ve özel evrişim adına sahip .
Evrişim kontrolü
Böylece, istediğiniz herhangi bir sistem çıkışı seti için, bu çıkışa neden olacak kontrol girişlerinin sırasını bulabileceğinizi hayal edebilmelisiniz. Ancak, bir gotcha var. Sistemden ne istediğinize karşı çok agresif olursanız, bunu başarmak için kontrol girişlerinin yüksek ve düşük değerlerle elde edilmesi gerekmez. Temel olarak, sistemin ne kadar hızlı tepki vermesini beklerseniz, her iki yönde de kontrol değerlerinin o kadar büyük olması gerekir. Direnç örneğinde, matematiksel olarak hemen yeni bir sıcaklığa gitmesini istediğinizi söyleyebilirsiniz, ancak bu elde etmek için sonsuz bir kontrol sinyali alır. Sıcaklığın yeni değere değişmesine ne kadar yavaş izin verirseniz, dirence atmak için ihtiyacınız olan maksimum güç o kadar düşük olur. Başka bir kırışıklık, dirence giren gücün bazen de düşmesi gerektiğidir. Yapabilirsin'
Bununla başa çıkmanın bir yolu, kontrol sisteminin dahili olarak kullanmadan önce kullanıcı kontrol girişini alçak geçiren filtrelemesidir. Şekil kullanıcıları, kullanıcıların yapmak istediklerini yaparlar. Girişi hızlı bir şekilde çarpmalarına izin verin. Dahili olarak alçak geçiren filtre, onu düzeltmek ve direnç içine koyabileceğiniz maksimum ve minimum güç göz önüne alındığında, gerçekleştirebileceğiniz en hızlı şekilde yavaşlatmak için.
Gerçek dünya örneği
İşte gerçek dünya verilerini kullanan kısmi bir örnek. Bu, diğer şeylerin yanı sıra belirli sıcaklıklarda çeşitli kimyasal rezervuarları korumak için birkaç düzine ısıtıcıyı kontrol etmek zorunda olan gerçek bir üründeki gömülü bir sistemden. Bu durumda, müşteri PID kontrolü yapmayı seçti (rahat hissettikleri şey), ancak sistemin kendisi hala var ve ölçülebilir. Bir adım girişi ile ısıtıcılardan birini sürmek için ham veriler. Döngü yineleme süresi 500 ms idi, bu da sistemin 2 saat sonra hala bu ölçek grafiğine gözle görülür şekilde oturduğunu düşünen çok kısa bir süredir.
Bu durumda, ısıtıcının yaklaşık .35 büyüklüğünde ("Çıkış" değeri) çalıştırıldığını görebilirsiniz. 1.0 adımını uzun süre kullanmak çok yüksek sıcaklıklara neden olabilir. Başlangıç ofseti kaldırılabilir ve sonuç, birim adım yanıtını çıkarmak için küçük giriş adımını hesaba katacak şekilde ölçeklendirilebilir:
Bundan, dürtü yanıtını almanın sadece ardışık adım yanıt değerlerini çıkarmanın olacağını düşünürdünüz. Teoride bu doğru, ancak pratikte sistem 500 ms'de çok az değiştiği için çoğunlukla ölçüm ve niceleme gürültüsü elde edersiniz:
Ayrıca değerlerin küçük ölçeğine de dikkat edin. Dürtü yanıtı 10 ile ölçekli olarak gösterilmektedir 6 .
Bireysel ve hatta birkaç okuma arasındaki açıkça büyük varyasyonlar sadece gürültüdür, bu nedenle yüksek frekanslardan (rastgele gürültü) kurtulmak için bunu düşük geçişli filtreleyebiliriz, bu da umarım daha yavaş altta yatan yanıtı görmemizi sağlar. İşte bir deneme:
Bu daha iyi ve gerçekten anlamlı veriler olduğunu, ancak yine de çok fazla gürültü olduğunu gösteriyor. İşte ham dürtü verilerinin daha düşük geçişli filtrelenmesiyle elde edilen daha faydalı bir sonuç:
Şimdi bu aslında üzerinde çalışabileceğimiz bir şey. Kalan gürültü genel sinyale göre küçüktür, bu yüzden yoluna girmemelidir. Sinyal hala oldukça sağlam görünüyor. Bunu görmenin bir yolu, 240 pikinin hızlı bir görsel kontrol ve bir önceki komployu filtrelemeden göz küresi hakkında olduğunu görmektir.
Şimdi durun ve bu dürtü tepkisinin gerçekte ne anlama geldiğini düşünün. İlk olarak, 1M kez görüntülendiğine dikkat edin, bu yüzden tepe gerçekten 0.000240 tam skaladır. Bu, teoride, sistem yalnızca 500 ms'lik zaman dilimlerinden biri için tek bir tam ölçekli darbe ile sürüldüyse, bunun, yalnız bırakılana göre ortaya çıkan sıcaklık olacağı anlamına gelir. Herhangi bir 500 ms'lik sürenin katkısı, sezgisel olarak anlaşıldığı gibi, çok küçüktür. Bu nedenle, dürtü tepkisini doğrudan ölçmek de işe yaramaz, çünkü tam ölçekli 0.000240 (4000'de yaklaşık 1 parça) gürültü seviyemizin altındadır.
Artık herhangi bir kontrol giriş sinyali için sistem yanıtını kolayca hesaplayabilirsiniz. Her 500 ms'lik kontrol çıkış örneği için, bu kontrol örneğinin boyutuna göre ölçeklendirilmiş bu dürtü yanıtlarından birine ekleyin. Nihai sistem çıkış sinyaline bu dürtü yanıtı katkısının 0 zamanı, kontrol örneğinin zamanıdır. Bu nedenle, sistem çıkış sinyali, her biri o anda kontrol numunesi seviyesine göre ölçeklendirilmiş, birbirinden 500 ms uzaklıktan bu dürtü tepkilerinin art ardadır.
Sistem yanıtı, bu örnekte her 500 ms'de bir olan her kontrol örneğini hesaplayan kontrol girişinin bu dürtü yanıtı ile evrilmesidir. Bundan bir kontrol sistemi yapmak için, istenen sistem çıkışıyla sonuçlanan kontrol girişini belirlemek için geriye doğru çalışırsınız.
Bu dürtü yanıtı, klasik bir PID kontrol cihazı yapmak isteseniz bile oldukça kullanışlıdır. Bir PID kontrol cihazını ayarlamak çok fazla deneme gerektirir. Her yineleme, gerçek sistemde bir veya iki saat sürecek ve bu da yinelemeli ayarlamayı çok yavaş hale getirecektir. Dürtü yanıtı ile, bir saniye içinde bir bilgisayarda sistem yanıtını simüle edebilirsiniz. Artık yeni PID değerlerini değiştirebildiğiniz kadar hızlı deneyebilir ve gerçek sistemin yanıtını göstermesi için bir iki saat beklemek zorunda kalmazsınız. Nihai değerler elbette her zaman gerçek sistem üzerinde kontrol edilmelidir, ancak işin çoğu zamanın çok kısa bir sürede simülasyonla yapılabilir. Sorunuzda belirttiğiniz pasajda "Eski moda PID kontrolü için parametreleri bulmak için bunu bir simülasyon tabanı olarak kullanabilirsiniz" ile kastediyorum .