Mündəricat:

PID Controller VHDL: 10 addım
PID Controller VHDL: 10 addım

Video: PID Controller VHDL: 10 addım

Video: PID Controller VHDL: 10 addım
Video: FPGA HDMI TX Demo - DE10-Nano Projects 2024, Noyabr
Anonim
PID nəzarətçi VHDL
PID nəzarətçi VHDL
PID nəzarətçi VHDL
PID nəzarətçi VHDL

Bu layihə, Cork Texnologiya İnstitutundan bakalavr dərəcəsi almaq üçün son layihəm idi. Bu Təlimat iki hissəyə bölünür, birincisi, layihənin əsas məqsədi olan PID kodunun əsas hissəsini, ikinci hissə isə Basys 3 inkişaf lövhəsində tətbiq olunan və sonra stolüstü tennis topu ilə əlaqələndirilən kodu birləşdirməyi əhatə edir. levitasiya qurğusu. Teorik və qurulmuş qurğu əlavə edilmiş şəkillərdə göstərilmişdir.

Təchizat

Simulyasiya

Vivado Design Suite

İcra (mötərizədə layihəm üçün istifadə olunan şeydir)

  • Rəqəmsal/Analog siqnalları daxil edə və çıxara bilən FPGA lövhəsi (Basys 3)
  • tək bir geribildirim mənbəyi ilə idarə edilə bilən bir sistem (Ping Pong Ball Levitation Rig)

Qurğu

  • Polikarbonat borusu
  • 5V Fan
  • IR Sensor
  • 3D Çaplı Baza (Bu təlimat, geribildirim vermək üçün sensorun qurğunun inşasını sənədləşdirir, lakin qurğu ümumiyyətlə eyni idi)
  • 1k rezistorlar
  • 5V və GND Rail ilə çörək paneli

Addım 1: Əsas nəzarət nəzəriyyəsi

Əsas nəzarət nəzəriyyəsi
Əsas nəzarət nəzəriyyəsi

Düşündüm ki, bəzi əsas nəzarət nəzəriyyəsi əlavə etmək, bu kodu sınamaq və tətbiq etmək istəyən hər kəsə başlamaq üçün yaxşı bir baza verəcək.

Əlavə edilmiş diaqram tək bir döngə nəzarətçisinin sxemidir.

r- İstinaddır. Bu, nəzarətçinin hara getmək istədiyini müəyyənləşdirir.

e-xətadır. Sensorunuzdakı dəyərlə istinadınız arasındakı fərq budur. məs. e = r- (d+sensorun çıxışı).

K-Bu nəzarətçi. Bir nəzarətçi üç termindən ibarət ola bilər. Bu şərtlər P, I və D -dir. Hər üç termin də Kp, Ki və Kd adlı çarpanlara malikdir. Bu dəyərlər nəzarətçinin cavabını təyin edir.

  • P-mütənasib. Ciddi bir P nəzarətçisinin cari səhvlə mütənasib bir çıxışı olacaq. Bir P nəzarətçisini tətbiq etmək və sürətli işləmək asandır, ancaq təyin etdiyiniz dəyərə heç vaxt çatmayacaq (istinad).
  • I-İnteqral. Qəti şəkildə ayrılmaz bir nəzarətçi, nəticədə istədiyiniz arayışa çatacaq əvvəlki xətanı yekunlaşdıracaq. Bu nəzarətçi ümumiyyətlə çox yavaş işləyir. P termini əlavə etmək, referansa çatmaq üçün lazım olan vaxtı azaldacaq. Girişin nümunə götürüldüyü vaxt, inteqral terminin zamana görə inteqrasiya olunduğunu nəzərə almalıdır.
  • D-Törəməsi. Törəmə terminin səhv dəyişmə sürətindən asılı olan bir çıxışı olacaq. Bu termin ümumiyyətlə bir P terminində və ya bir PI terminində istifadə olunur. Bu, səhvin dəyişmə sürətinə mütənasib olduğundan, səs -küylü bir təkil sistemin qeyri -sabit olmasına səbəb ola biləcək səs -küyünü artıracaq. Törəmə termin də zamana aid olduğu üçün vaxt da nəzərə alınmalıdır.

U- Bu nəzarət siqnaldır. Bu siqnal qurğunun girişidir. Bu layihədə u sürəti dəyişdirmək üçün fan üçün PWM siqnal girişidir.

G- Bu idarə olunan sistemdir. Bu sistem S və ya Z Alanında riyazi olaraq modelləşdirilə bilər. Sistemlər n -ci sırada ola bilər, amma kimsə nəzarətə başlayanda, ehtimal ki, birinci dərəcəli sistem qəbul edilməlidir, çünki hesablamaq daha asandır. İnternetdə tapıla bilən modelləşdirmə sistemi haqqında bir məlumatdır. Sensorun seçmə vaxtından asılı olaraq sistemin modeli ya diskret, ya da fasiləsizdir. Bu nəzarətçiyə kəskin təsir göstərir, buna görə hər ikisini də araşdırmaq məsləhət görülür.

d- Bu sistemə əlavə olunan bir narahatlıqdır. Narahatlıq, sistem modelinin hesaba almadığı xarici qüvvələrdir. Bunun asan bir nümunəsi, 5 metr məsafədə uçmaq istədiyiniz bir pilotsuz təyyarə ola bilər və külək əsir və dronu 1 metrə endirir. Külək təkrarlanmadığı üçün bu narahatlıq olaraq bilinir, buna görə modelləşdirilə bilməz.

Nəzarətçini tənzimləmək üçün adlandırmaq üçün çoxlu qaydalar var, amma başladığım bəzi yaxşı qaydalar Cohen Coon və Zieger Nicholsdur.

Sistemin modelləşdirilməsi, dizayn edilmiş nəzarətçi istədiyi kimi cavab verməyəcək dəqiq bir model olmadan ümumiyyətlə ən vacib hissədir.

Nəzarətçinin bəzi fərdi araşdırmalarla birlikdə necə işlədiyini başa düşmək üçün kifayət qədər məlumat olmalıdır və üç termindən ibarət hər hansı bir birləşmə ilə bir nəzarətçinin altındakı kod tətbiq oluna bilər.

Addım 2: PID Kodunun Yazılması

PID kodu yazmaq
PID kodu yazmaq

Aşağıdakı linkdə tapılan kodun əsas prinsipi alındı və dəyişdirildi, çünki bu kod işləmədi, amma yaxşı bir başlanğıc nöqtəsi verən bir çox prinsiplərə sahib idi. Orijinal PID Kodunda bir neçə səhv var idi

  • Davamlı Əməliyyat - nəzarətçi miras olaraq ayrıdır, buna görə yeni bir giriş olduqda bütün 3 şərtləri hesablamaq üçün nəzarətçi qurulmalı idi. Bu simulyasiya üçün iş, girişin sonuncu dəfə dəyişdiyini yoxlamaq idi. Bu, yalnız kodun düzgün işləməsini təqlid etmək üçün işləyir.
  • Nümunə Vaxtının inteqral və törəmə terminə heç bir təsiri olmamışdır - Nəzarətçi nümunənin alındığı vaxtı da nəzərə almamışdır, buna görə də inteqral və törəmə terminlərin düzgün işlədilməsini təmin etmək üçün zamana bölücü adlanan bir dəyər əlavə edilmişdir. interval.
  • Səhv yalnız pozitiv ola bilər - xətanı hesablayarkən bir problem də var idi, çünki geribildirim siqnalı nəzarətçinin çıxışı artırmağa davam edəcəyi istinad dəyərini aşdıqda səhv heç vaxt mənfi məna kəsb edə bilməzdi.
  • 3 termin üçün qazanan dəyərlər tam ədədlər idi - təcrübəmdə həmişə tapdım ki, nəzarətçi içərisində olan 3 termin üçün dəyərlərin hər zaman üzən nöqtə nömrəsi olmaması səbəbindən Basys 3 -ə görə üzən nöqtə nömrələri olsun. məxrəcin dəyəri bu problemi aşan bir iş olaraq xidmət edəcək.

Kod aşağıda kodun əsas gövdəsi və kodu simulyasiya etmək üçün bir test masası var. Zip qovluğunda artıq Vivadoda olan kod və testbench var ki, vaxta qənaət etmək üçün açılsın. kodun nəzərdə tutulduğu kimi işlədiyini sübut edən istinadın izlənməsini göstərən bir simulyasiya testi də var.

Addım 3: Sisteminizi necə dəyişdirə bilərsiniz

Əvvəla, bütün sistemlər eyni deyil, sistemin giriş və çıxışlarını təhlil etmək lazımdır. Mənim vəziyyətimdə mənə mövqe üçün dəyər verən qurğumun çıxışı analoq siqnal və sistemdən giriş PWM siqnalı idi. ADC çevrilməsinə ehtiyac olduğunu ifadə edir. Xoşbəxtlikdən, Basys 3-də ADC quraşdırılmışdır, buna görə də IR sensoru 0V-1V-ə endirilməlidir, çünki bu heç bir problem yaratmadı, çünki bu, ADC-nin maksimum diapazonudur. Bu, 1k rezistorlu seriyalı 3k rezistor kimi qurulmuş 1k rezistorlardan hazırlanmış bir gərginlik bölücü dövrə istifadə edərək edildi. Analoq siqnal artıq ADC -nin əhatə dairəsində idi. Fana PWM girişi, Basys 3 -də bir PMOD portunun çıxışı ilə birbaşa idarə oluna bilər.

Addım 4: Basys 3 -də I/O -dan faydalanın

Basys 3 -də kod işləyərkən daha asan ayıklamaya imkan verən bir sıra I/O var. G/Ç aşağıdakı kimi quruldu.

  • Yeddi Segment Ekranı - Bu, ADC üzərindəki istinadın və dəyərin volt olaraq göstərilməsində istifadə edilmişdir. Yeddi seqmentli ekranın ilk iki rəqəmi ADC dəyərinin ondalık yerindən sonra iki rəqəmi göstərir, çünki dəyər 0-1V arasındadır. Yeddi seqment ekranındakı üç və dörd rəqəmlər voltdakı istinad dəyərini göstərir, bu da ondalık işarədən sonra ilk iki rəqəmi göstərir, çünki aralıq da 0-1V arasındadır.
  • 16 LED - Çıxışın doymuş olmasını və çıxışın düzgün dəyişməsini təmin etmək üçün LED -lər çıxışın dəyərini göstərmək üçün istifadə edilmişdir.

Addım 5: IR Sensor Çıxışında səs -küy

Bu problemi həll etmək üçün sensor çıxışında səs -küy var idi, çünki bu kifayət idi və başa çatdırmaq üçün çox az iş tələb olunurdu.

Addım 6: Ümumi Kod Düzeni

Ümumi Kod Düzeni
Ümumi Kod Düzeni

Hələ danışılmayan bir kod parçası var. Bu kod tətik adlanan bir saat bölücüdür. bu kod biti ADC kodunu nümunə götürməyə tetikler. ADC kodunu tamamlamaq üçün maksimum 2us tələb olunur, beləliklə cari giriş və əvvəlki giriş ortalamadır. 1us bundan sonra nəzarətçi P, I və D şərtlərini hesablayır. kodun bütün quruluşu və əlaqələndirilməsi müvəqqəti əlaqə diaqramında göstərilmişdir.

Addım 7: Test

Test
Test

Kod Basys 3 -də yerləşdirildi və aşağıdakı cavab qeyd edildi. istinad 2 dəyər arasında dəyişdi. tamamlanmış layihə kodunda belədir. Əlavə edilmiş video bu cavabı real vaxt rejimində göstərir. Nəzarətçi bu bölgə üçün nəzərdə tutulduğundan borunun yuxarı hissəsində salınımlar daha tez çürüyür, lakin sistem xətti olmadığından nəzarətçi borudan aşağıya doğru yaxşı işləmir.

Addım 8: Layihəni təkmilləşdirmək üçün dəyişikliklər

Layihə nəzərdə tutulduğu kimi çalışdı, amma layihənin uzadılması mümkün olsaydı bəzi dəyişikliklər edərdim.

  • Səs -küyü tamamilə azaltmaq üçün rəqəmsal filtr tətbiq edin
  • ADC kodunu, Orta kodu və İnteqrasiya kodunu ardıcıl olaraq işə salın.
  • geribildirim üçün fərqli bir sensor istifadə edin, çünki bu sensorun qeyri-xətti cavabı bu layihə ilə əlaqədar müxtəlif problemlərə səbəb oldu, lakin bu daha çox kodlaşdırma tərəfində deyil, nəzarət tərəfindədir.

Addım 9: Əlavə iş

Yaz boyunca bir kaskad nəzarətçi üçün kod yazdım və tək döngəli PID nəzarətçisi üçün tövsiyə etdiyim dəyişiklikləri tətbiq etdim.

Adi PID nəzarətçisində edilən dəyişikliklər

· İstənilən kəsmə tezliyinə nail olmaq üçün əmsallar dəyişdirilmiş FIR filtr şablonu dəyişdirilməlidir. Mövcud tətbiq, 5 vuruşlu bir fir filtridir.

· Kodun vaxtı, filtrin yeni nümunəni yayması və çıxışı hazır olduqda inteqral terminin işə salınması üçün qurulmuşdur ki, bu da kodun fərqli vaxt aralığında işləmək üçün daha az səy sərf etməklə dəyişdirilə biləcəyini bildirir. kod.

· Proqramı idarə edən döngə üçün əsas da azaldıldı, çünki bu dövrü 7 dövrə çəkdi, bu əvvəllər Controller -in maksimum iş sürətini yavaşlatdı, lakin t 4 döngəsini azaldaraq bu, əsas kod blokunun işləyə biləcəyini bildirir. 4 saat dövrü ərzində.

Test

Bu nəzarətçi sınaqdan keçirildi və təyin olunduğu kimi həyata keçirildi, çünki bu sübutun şəkillərini çəkmədim, çünki layihənin bu hissəsi yalnız ağlı aktiv saxlamaq üçün idi. Testbench kimi eyni zamanda test kodu da burada mövcud olacaq, beləliklə proqramı tətbiq etməzdən əvvəl test edə bilərsiniz.

Niyə bir kaskad nəzarətçi istifadə edin

Bir kaskad nəzarətçisi sistemin iki hissəsini idarə edir. Bu vəziyyətdə bir kaskad nəzarətçi, IR sensoru ilə əlaqəli bir nəzarətçi olan xarici bir döngəyə sahib olardı. Daxili döngədə, fanın fırlanma sürətini təyin edən takometrdən gələn impulslar arasında vaxt şəklində əks əlaqə var. Nəzarəti tətbiq etməklə sistemdən daha yaxşı bir reaksiya əldə edilə bilər.

Kaskad nəzarətçisi necə işləyir?

Nəzarətçi xarici döngəsi, pulslar arasındakı daxili döngə nəzarətçisinə qədər olan müddət üçün bir dəyər verəcəkdir. Bu nəzarətçi, zərbələr arasında istədiyiniz vaxta çatmaq üçün vəzifə dövrünü artıracaq və ya azaldacaq.

Qurğuda dəyişikliklərin tətbiqi

Təəssüf ki, daxil olmadığım üçün bu dəyişiklikləri qurğuda tətbiq edə bilmədim. Nəzərdə tutulduğu kimi işləyən yenidən işlənmiş tək döngə nəzarətçisini sınadım. Kaskad nəzarətçisini hələ sınamamışam. Əminəm ki, nəzarətçi işləyəcək, amma istədiyi kimi işləmək üçün bəzi kiçik dəyişikliklər tələb oluna bilər.

Test

İki giriş mənbəyini simulyasiya etmək çətin olduğu üçün nəzarətçini sınaya bilmədim. Kaskad nəzarətçi ilə görə biləcəyim yeganə problem, xarici döngənin daxili döngəyə verilən həddi artırmağa çalışmasıdır ki, daha böyük bir təyinat nöqtəsi əslində fan üçün daha aşağı RPS-dir, lakin bu asanlıqla düzəldilə bilər. set nöqtəsi siqnalının maksimum dəyərindən götürün (4095 - setpoint - tacho_result).

Addım 10: Nəticə

Ümumilikdə layihə planlaşdırdığım kimi işləyir və nəticədən məmnunam. VHDL -də bir PID nəzarətçi hazırlamaq cəhdimi oxumaq üçün vaxt ayırdığınız üçün təşəkkür edirəm. Kimsə bunun bir versiyasını bir sistemdə tətbiq etməyə çalışırsa və kodu anlamaq üçün bir az kömək tələb edirsə, ən qısa zamanda cavab verərəm. Tamamlanmış, lakin yerinə yetirilməmiş əlavə işi görən hər kəs mənimlə əlaqə saxlaya bilər. Bunu həyata keçirən hər kəs bunun necə getdiyini mənə bildirsəydi çox minnətdar olaram.

Tövsiyə: