İçindekiler:

PID Denetleyici VHDL: 10 Adım
PID Denetleyici VHDL: 10 Adım

Video: PID Denetleyici VHDL: 10 Adım

Video: PID Denetleyici VHDL: 10 Adım
Video: Cosplay by b.tech final year at IIT Kharagpur 2024, Temmuz
Anonim
PID Denetleyici VHDL
PID Denetleyici VHDL
PID Denetleyici VHDL
PID Denetleyici VHDL

Bu proje, Cork Teknoloji Enstitüsü'nden Yüksek Lisans Derecemi tamamlamak için son projemdi. Bu Eğitim, iki bölüme ayrılmıştır, ilki projenin ana amacı olan PID kodunun ana gövdesini kapsayacaktır ve ikinci bölüm, bir Basys 3 geliştirme kartında uygulanan ve ardından bir pinpon topuna arayüzlenen kodun arayüzlenmesini kapsar. havaya yükselme teçhizatı. Teorik ve yapılı teçhizat ekli resimlerde gösterilmektedir.

Gereçler

simülasyon

Vivado Tasarım Süiti

Uygulama (parantez içinde projem için kullanılanlar)

  • Dijital/Analog sinyallerin giriş ve çıkışını yapabilen FPGA Kartı(Basys 3)
  • tek bir geri besleme kaynağı ile kontrol edilebilen bir sistem (Ping Pong Ball Levitation Rig)

Teçhizat

  • Polikarbonat Tüp
  • 5V Fan
  • Kızılötesi Sensör
  • 3D Baskılı Taban (Bu eğitim, geri bildirim sağlamak için sensörün eklendiği teçhizatın yapısını belgelemektedir, ancak teçhizat genellikle aynıydı)
  • 1k Dirençler
  • 5V ve GND Raylı Breadboard

Adım 1: Temel Kontrol Teorisi

Temel Kontrol Teorisi
Temel Kontrol Teorisi

Bazı temel kontrol teorilerini eklemenin, bu kodu denemek ve uygulamak isteyen herkese başlamak için iyi bir temel sağlayacağını düşündüm.

Ekli şema, tek bir döngü denetleyicisinin düzenidir.

r- Referanstır. Bu, denetleyicinin nereye gitmek istediğini belirler.

e-Hata mı? Bu, sensörünüzdeki değer ile referansınız arasındaki farktır. Örneğin. e=r-(d+sensör çıkışı).

K-Bu kontrolör. Bir denetleyici üç terimden oluşabilir. Bu terimler P, I ve D'dir. Her üç terimin de Kp, Ki ve Kd olarak adlandırılan çarpanları vardır. Bu değerler kontrolörün tepkisini belirler.

  • P-Oransal. Kesin olarak P kontrolör, mevcut hatayla orantılı bir çıkışa sahip olacaktır. Bir P kontrolörünün uygulanması ve hızlı çalışması kolaydır ancak asla ayarladığınız değere (referans) ulaşamaz.
  • I-İntegral. Kesin bir integral denetleyici, sonunda istenen referansa ulaşacak olan önceki hatayı toplayacaktır. Bu denetleyici genellikle uygulamak için çok yavaştır. Bir P terimi eklemek, referansa ulaşmak için geçen süreyi azaltacaktır. Girdinin örneklendiği zaman dikkate alınmalıdır, integral terimi zamana göre entegre edilmiştir.
  • D-Türev. Türev terimi, hata değişim oranına bağlı bir çıktıya sahip olacaktır. Bu terim genellikle bir P terimi veya bir PI terimi ile birlikte kullanılır. Bu, hatanın değişim oranıyla orantılı olduğundan, gürültülü bir single'ın gürültüsü, bir sistemin kararsız olmasına neden olabilecek şekilde yükseltilecektir. Türev terimi de zamana göre olduğu için zaman da dikkate alınmalıdır.

U- Bu kontrol sinyali. Bu sinyal teçhizata bir girdidir. Bu projede u, hızı değiştirmek için fana verilen bir PWM sinyal girişidir.

G- Kontrol edilen sistem budur. Bu sistem matematiksel olarak S veya Z Alanında modellenebilir. Sistemler n. sıraya kadar olabilir, ancak kontrole yeni başlayan biri için, hesaplanması çok daha kolay olduğu için muhtemelen birinci dereceden bir sistem varsayılmalıdır. Çevrimiçi olarak bulunabilecek modelleme sistemi hakkında çok sayıda bilgi var. Sensörün örnekleme süresine bağlı olarak sistemin modeli ya kesikli ya da süreklidir. Bunun kontrolör üzerinde ciddi bir etkisi vardır, bu nedenle her ikisinin de araştırılması tavsiye edilir.

d- Sisteme eklenen rahatsızlıktır. Bozulma, sistem modelinin hesaba katmadığı dış güçlerdir. Bunun kolay bir örneği, 5 metrede süzülmek isteyeceğiniz bir dron olabilir, bir rüzgar esip dronu 1 metre düşürür ve kontrolör, rahatsızlık meydana geldikten sonra dronu yeniden konumlandırır. Bu, rüzgar tekrarlanamaz olduğundan, bu modellenemez olduğundan rahatsızlık olarak bilinir.

Denetleyiciyi ayarlamak için adlandırılacak çok fazla kural var ama başladığım bazı iyi kurallar Cohen Coon ve Zieger Nichols.

Bir sistemin modellenmesi genellikle en önemli kısımdır, doğru bir model olmadan tasarlanan kontrolör istenilen şekilde yanıt vermeyecektir.

Burada, bazı bireysel araştırmalarla birlikte denetleyicinin nasıl çalıştığını anlamak için yeterli bilgi bulunmalıdır ve bir denetleyicinin altındaki kod, üç terimin herhangi bir kombinasyonu ile uygulanabilir.

Adım 2: PID Kodu Yazma

PID Kodu Yazma
PID Kodu Yazma

Aşağıdaki linkte bulunan kodun temel prensibi, bu kod çalışmadığı için alınmış ve değiştirilmiştir, ancak birçok ilke hakkı vardır ve bu da iyi bir başlangıç noktası vermiştir. Orijinal PID Kodun aşağıdaki gibi birkaç hatası vardı:

  • Sürekli Çalışma - denetleyici kalıtsal olarak ayrıdır, bu nedenle denetleyicinin yalnızca yeni bir giriş mevcut olduğunda 3 terimi de hesaplayacak şekilde ayarlanması gerekir. Bu simülasyonun çözümü, girdinin son seferden bu yana değişip değişmediğini kontrol etmekti. bu yalnızca kodun doğru şekilde çalışmasını simüle etmek için çalışır.
  • Örnek Zamanın integral ve türev terimi üzerinde hiçbir etkisi yoktu - Denetleyici, örneğin alındığı zamanı da dikkate almadı, bu nedenle integral ve türev terimlerinin doğru üzerinde çalıştığından emin olmak için zamana bölücü adı verilen bir değer eklendi Aralık.
  • Hata yalnızca pozitif olabilir - hatayı hesaplarken, hata asla negatif olamayacağı için bir sorun da vardı, yani geri besleme sinyali referans değerini aştığında, kontrol cihazının, azaltması gerektiğinde çıkışı artırmaya devam edeceği anlamına gelir.
  • 3 terim için kazanç değerleri tamsayıydı - deneyimlerime göre, Basys 3'ün kayan nokta sayısına sahip olmaması nedeniyle denetleyicideki 3 terimin değerlerinin her zaman kayan noktalı sayılar olduğunu buldum, değerlere bir pay değeri ve bir Bu sorunu aşmak için bir çalışma olarak hizmet edecek payda değeri.

Kod aşağıda eklenmiştir, kodun ana gövdesi ve kodu simüle etmek için bir test tezgahı vardır. Zip klasörü, Vivado'da bulunan kodu ve testbench'i içerir, böylece zaman kazanmak için açılabilir. Ayrıca, referansı takip eden çıktıyı gösteren, kodun simüle edilmiş bir testi vardır; bu, kodun amaçlandığı gibi çalıştığını kanıtlar.

Adım 3: Sisteminiz İçin Nasıl Değiştirilir

Öncelikle tüm sistemler aynı değildir, sistemin girdi ve çıktılarını analiz etmek gerekir. Benim durumumda, konum için bana bir değer veren teçhizatımın çıkışı bir analog sinyaldi ve sistemden gelen giriş bir PWM sinyaliydi. Bu, bir ADC dönüşümüne ihtiyaç duyulduğu anlamına gelir. Neyse ki Basys 3'ün yerleşik bir ADC'si var, bu nedenle bu, yerleşik ADC'nin maksimum aralığı olduğu için IR sensörünün çıkışının 0V-1V'a ölçeklendirilmesi gerekmedi. Bu, 1k dirençle seri olarak 3k direnç olarak ayarlanmış 1k dirençlerden yapılmış bir voltaj bölücü devre kullanılarak yapıldı. Analog sinyal artık ADC'nin menzili içindeydi. Fanın PWM girişi, Basys 3'teki bir PMOD bağlantı noktasının çıkışı tarafından doğrudan çalıştırılabilir.

Adım 4: Basys 3'te G/Ç'den Yararlanma

Basys 3'te, kod çalışırken daha kolay hata ayıklamaya izin veren bir dizi G/Ç vardır. G/Ç aşağıdaki gibi ayarlandı.

  • Yedi Segment Ekran - Bu, ADC'deki referansın değerini ve değerini volt olarak göstermek için kullanıldı. Yedi segmentli ekranın ilk iki hanesi, değer 0-1V arasında olduğu için ADC değerinin ondalık hanesinden sonraki iki haneyi gösterir. Yedi segmentli ekrandaki üç ve dört haneler volt cinsinden referans değerini gösterir, bu da aralık 0-1V arasında olduğundan ondalık basamaktan sonraki ilk iki haneyi de gösterir.
  • 16 LED - LED'ler, çıkışın doygun olduğundan ve çıkışın doğru şekilde değiştiğinden emin olmak için çıkışın değerini göstermek için kullanıldı.

Adım 5: IR Sensör Çıkışında Gürültü

Bu sorunu çözmek için sensör çıkışında gürültü vardı, bu yeterli olduğundan ve tamamlanması çok az iş gerektirdiğinden bir ortalama blok yerleştirildi.

Adım 6: Genel Kod Düzeni

Genel Kod Düzeni
Genel Kod Düzeni

Henüz konuşulmamış bir kod parçası var. Bu kod, tetik adı verilen bir saat bölücüdür. bu kod parçası, örneklenecek ADC kodunu tetikler. ADC kodunun tamamlanması maksimum 2us sürer, böylece mevcut giriş ve önceki girişin ortalaması alınır. 1us bu ortalamayı aldıktan sonra kontrolör P, I ve D terimlerini hesaplar. kodun ve arabirimin tüm düzeni, geçici bağlantı şemasında gösterilir.

7. Adım: Test Etme

Test yapmak
Test yapmak

Kod, Basys 3'te konuşlandırıldı ve aşağıdaki yanıt kaydedildi. referans 2 değer arasında değişti. ekteki tamamlanmış proje kodundaki durum budur. Ekli video, bu yanıtı gerçek zamanlı olarak gösterir. Kontrolör bu bölge için tasarlandığından, salınımlar tüpün üst kısmında daha hızlı azalır, ancak sistem doğrusal olmadığı için kontrolör tüpün aşağısında o kadar iyi çalışmaz.

Adım 8: Projeyi İyileştirmeye Yönelik Değişiklikler

Proje istendiği gibi çalıştı, ancak proje uzatılabilseydi yapacağım birkaç değişiklik vardı.

  • Gürültüyü tamamen azaltmak için dijital filtre uygulayın
  • sırayla tetiklemek için ADC kodunu, Ortalama kodu ve Entegrasyon kodunu ayarlayın.
  • geri bildirim için farklı bir sensör kullanın, çünkü bu sensörün doğrusal olmayan yanıtı bu projede çok çeşitli sorunlara neden oldu, ancak bu daha çok kodlama tarafında değil kontrol tarafında.

9. Adım: Ekstra Çalışma

Yaz boyunca kademeli kontrolör için kod yazdım ve tek döngülü PID kontrolör için önerdiğim değişiklikleri uyguladım.

Normal PID kontrolöründe yapılan değişiklikler

· İstenen kesme frekansına ulaşmak için uygulanan FIR filtre şablonu katsayıları değiştirilmelidir. Mevcut uygulama, 5 kademeli bir köknar filtresidir.

· Kodun zamanlaması, filtrenin yeni örneği yayacağı şekilde ayarlandı ve çıktı hazır olduğunda integral terimi tetiklenecek, bu da kodun farklı zaman aralıklarında çalışmak için daha az çaba sarf ederek değiştirilebileceği anlamına gelecek. kod.

· Programı çalıştıran ana for döngüsü de azaltılmıştır, çünkü bu for döngüsü 7 döngü daha önce bu, Denetleyicinin maksimum çalışma hızını yavaşlatmıştır, ancak for döngüsünü t 4 azaltarak bu, ana kod bloğunun çalışabileceği anlamına gelir. 4 saat döngüsü içinde.

Test yapmak

Bu kontrolör amaçlandığı gibi test edildi ve uygulandı. Projenin bu kısmı sadece zihni aktif tutmak için olduğu için bu kanıtın fotoğraflarını çekmedim. Uygulamadan önce programı test edebilmeniz için test tezgahının yanı sıra test kodu da burada bulunacaktır.

Neden kademeli denetleyici kullanmalısınız?

Bir kademeli denetleyici, sistemin iki parçasını kontrol eder. Bu durumda, kademeli bir kontrolör, IR sensöründen geri beslemeye sahip bir kontrolör olan bir dış döngüye sahip olacaktır. İç döngü, fanın dönüş hızını belirleyen takometreden gelen darbeler arasındaki zaman biçiminde geri bildirime sahiptir. Kontrol uygulanarak, sistemden daha iyi bir yanıt alınabilir.

Kademeli kontrolör nasıl çalışır?

Denetleyici dış döngüsü, darbeler arasındaki süre için iç döngü denetleyicisine bir değer besleyecektir. Bu kontrolör daha sonra darbeler arasında istenen süreyi elde etmek için görev döngüsünü artıracak veya azaltacaktır.

Donanım üzerinde modifikasyonların uygulanması

Ne yazık ki, erişimim olmadığı için bu değişiklikleri teçhizat üzerinde uygulayamadım. Amaçlandığı gibi çalışan revize edilmiş tek döngü denetleyicisini test ettim. Kademeli denetleyiciyi henüz test etmedim. Denetleyicinin çalışacağından eminim, ancak amaçlandığı gibi çalışması için bazı küçük değişiklikler gerekebilir.

Test yapmak

İki giriş kaynağını simüle etmek zor olduğu için denetleyiciyi test edemedim. Kademeli kontrolörde görebildiğim tek sorun, dış döngü iç döngüye sağlanan ayar noktasını artırmaya çalıştığında, daha büyük bir ayar noktasının aslında fan için daha düşük bir RPS olduğu, ancak bu kolayca düzeltilebilir. ayar noktası sinyalinin maksimum değerinden ayar noktasını alın (4095 - ayar noktası - tacho_result).

Adım 10: Sonuç

Genel olarak proje, proje başladığında istediğim gibi işliyor, bu yüzden sonuçtan memnunum. VHDL'de bir PID denetleyicisi geliştirme girişimimi okumaya zaman ayırdığınız için teşekkür ederim. Herhangi biri bir sistemde bunun bazı varyasyonlarını uygulamaya çalışıyorsa ve kodu anlamak için biraz yardıma ihtiyaç duyarsa, benimle iletişime geçin, en kısa sürede yanıt vereceğim. Yapılmış ama uygulanmamış ekstra çalışmaları deneyenler, herhangi bir el için lütfen benimle iletişime geçin. Bunu uygulayan biri nasıl olduğunu bana bildirirse çok minnettar olurum.

Önerilen: