Mundarija:

VHDL PID tekshiruvi: 10 qadam
VHDL PID tekshiruvi: 10 qadam

Video: VHDL PID tekshiruvi: 10 qadam

Video: VHDL PID tekshiruvi: 10 qadam
Video: Lecture 73: Digital PID Control Implementation using Verilog HDL Programming 2024, Noyabr
Anonim
VHDL PID boshqaruvchisi
VHDL PID boshqaruvchisi
VHDL PID boshqaruvchisi
VHDL PID boshqaruvchisi

Bu loyiha mening Cork Texnologiya Institutining bakalavr darajasini olish bo'yicha yakuniy loyiham edi. Bu darslik ikki qismga bo'lingan, birinchisi loyihaning asosiy maqsadi bo'lgan PID kodining asosiy qismini o'z ichiga oladi, ikkinchi bo'lim esa Basys 3 ishlab chiqish kartasida amalga oshirilgan va keyin stol tennisi to'pi bilan bog'langan kodni o'z ichiga oladi. levitatsiya qurilmasi. Nazariy va qurilgan dastgoh ilova qilingan rasmlarda ko'rsatilgan.

Ta'minotlar

Simulyatsiya

Vivado dizayn to'plami

Amalga oshirish (qavs ichida mening loyiham uchun ishlatilgan)

  • Raqamli/analog signallarni kiritishi va chiqarishi mumkin bo'lgan FPGA platasi (Basys 3)
  • bitta teskari aloqa manbai bilan boshqariladigan tizim (Ping Pong Ball Levitation Rig)

Rig

  • Polikarbonat quvurlari
  • 5V fanati
  • IQ sensori
  • 3D bosma bazasi (bu o'quv qo'llanmasi teskari aloqa qilish uchun sensori qo'shilgan, lekin qurilmasi umuman bir xil bo'lgan)
  • 1k rezistorlar
  • 5V va GND Rail bilan ishlaydigan non paneli

1 -qadam: Boshqarish nazariyasi

Boshqarish nazariyasi
Boshqarish nazariyasi

Menimcha, ba'zi bir asosiy boshqaruv nazariyasini qo'shish, ushbu kodni sinab ko'rishni istagan har bir kishiga yaxshi asos yaratadi.

Ilova qilingan diagramma bitta pastadir boshqaruvchisining sxemasi.

r- Malumot. Bu tekshirgich qayerga ketishini aniqlaydi.

e-xato. Bu sensordagi qiymat va mos yozuvlar o'rtasidagi farq. masalan e = r- (d+sensorning chiqishi).

K-Bu nazoratchi. Nazoratchi uchta atamadan iborat bo'lishi mumkin. Bu atamalar P, I va D. uchala atamada ham Kp, Ki va Kd ko'paytgichlari bor. Bu qiymatlar tekshiruvchining javobini aniqlaydi.

  • P-mutanosib. Qat'iy P tekshiruvi joriy xato bilan mutanosib ravishda chiqishga ega bo'ladi. P tekshirgichni bajarish juda oson va tez ishlaydi, lekin siz o'rnatgan qiymatga hech qachon etib bormaydi (mos yozuvlar).
  • I-integral. Qat'iy integral nazoratchi avvalgi xatoni umumlashtiradi, natijada kerakli ma'lumotga etib boradi. Bu tekshirgich odatda juda sekin amalga oshiriladi. P terminini qo'shish ma'lumotga etib borish vaqtini kamaytiradi. Namuna olinadigan vaqtni hisobga olish kerak, bu vaqtga nisbatan yaxlit atama birlashtirilgan.
  • D-lotin. Derivativ atama xato o'zgarish tezligiga bog'liq bo'lgan natijaga ega bo'ladi. Bu atama odatda P atamasi yoki PI atamasi bilan ishlatiladi. Bu xato o'zgarish tezligiga mutanosib bo'lgani uchun, shovqinli singlning shovqini kuchayadi, bu esa tizimning beqaror bo'lishiga olib kelishi mumkin. Vaqtni ham hisobga olish kerak, chunki lotin termin ham vaqtga bog'liq.

U- Bu nazorat signalidir. Bu signal qurilmaga kirishdir. Ushbu loyihada u tezlikni o'zgartirish uchun fanga PWM signalidir.

G- Bu nazorat qilinadigan tizim. Ushbu tizimni S yoki Z domenida matematik tarzda modellashtirish mumkin. Tizimlar n -chi tartibda bo'lishi mumkin, lekin kimdir nazorat qilishni boshlasa, birinchi tartibli tizimni qabul qilish kerak, chunki uni hisoblash ancha oson. Bu Internetda topiladigan modellashtirish tizimi to'g'risidagi ma'lumotlar to'plami. Sensorning namuna olish vaqtiga qarab tizim modeli diskret yoki uzluksiz bo'ladi. Bu boshqaruvchiga keskin ta'sir qiladi, shuning uchun ikkalasini ham o'rganish tavsiya etiladi.

d- bu tizimga qo'shilgan buzilish. Buzilish - bu tizim modeli hisobga olinmaydigan tashqi kuchlar. Bunga yaqqol misol, siz 5 metr balandlikda shamol uchib, dronni 1 metrga tushirib yubormoqchi bo'lgan dron bo'la oladi. Bu tartibsizlik deb ataladi, chunki shamol takrorlanmaydi, shuning uchun uni modellashtirish mumkin emas.

Tekshirish moslamasini sozlash uchun juda ko'p qoidalar bor, lekin men boshlagan yaxshi qoidalar - Koen Kun va Ziger Nikols.

Tizimni modellashtirish, odatda, eng muhim qism bo'lib, aniq model bo'lmasa, boshqaruvchi kerakli tarzda javob bermaydi.

Bu erda nazoratchi qanday ishlashini tushunish uchun etarli ma'lumot bo'lishi kerak va ba'zi bir individual tadqiqotlar va uchta atamaning kombinatsiyasiga ega bo'lgan nazoratchi ostidagi kodni amalga oshirish mumkin.

2 -qadam: PID kodini yozish

PID kodini yozish
PID kodini yozish

Quyidagi havolada topilgan kodning asosiy printsipi qabul qilingan va o'zgartirilgan, chunki bu kod ishlamadi, lekin ko'p printsiplarga ega edi, bu esa yaxshi boshlanish nuqtasini berdi. Original PID Kodida bir nechta xatolar bor edi, masalan

  • Uzluksiz ishlash - boshqaruvchi o'z -o'zidan diskretdir, shuning uchun tekshirgichni yangi kirish mavjud bo'lganda faqat 3 ta shartni hisoblash uchun sozlash kerak edi. Bu simulyatsiyaning asosiy vazifasi kirish oxirgi marta o'zgarganligini tekshirish edi. bu faqat kodning to'g'ri ishlashini simulyatsiya qilish uchun ishlaydi.
  • Namuna vaqti integral va lotin atamalarga ta'sir qilmadi - nazoratchi ham namuna olingan vaqtni hisobga olmadi, shuning uchun integral va lotin atamalarning to'g'ri ishlashini ta'minlash uchun vaqtni ajratuvchi deb nomlangan qiymat qo'shildi. interval.
  • Xato faqat passiv bo'lishi mumkin edi - xatoni hisoblashda muammo ham bor edi, chunki teskari aloqa signali mos yozuvlar qiymatidan oshib ketganda, xato hech qachon salbiy ma'noga ega bo'lolmaydi, chunki nazoratchi chiqishni kamaytirishi kerak.
  • 3 ta atama uchun qiymatlar tamsayılar edi - men o'z tajribamda har doim tekshirgichdagi 3 ta atama uchun qiymatlar o'zgaruvchan nuqta raqamlari bo'lmaganligi uchun Basis 3 tufayli har doim o'zgaruvchan nuqta raqamlari bo'lishini aniqladim. bu muammoni engib o'tishga yordam beradigan denominator qiymati.

Kod quyida biriktirilgan, uning asosiy qismi va kodni simulyatsiya qilish uchun test stoli. Zip papkasida Vivadoda allaqachon kod va testbench bor, shuning uchun vaqtni tejash uchun ochiladi. kodning simulyatsiya qilingan testi ham bor, u chiqishni kuzatishni ko'rsatadi, bu kod maqsadga muvofiq ishlashini isbotlaydi.

3 -qadam: tizimni qanday o'zgartirish kerak

Birinchidan, barcha tizimlar bir xil emas, tizimning kirish va chiqishlarini tahlil qilish kerak. Mening holatimda, menga pozitsiyani baholagan qurilmamning chiqishi analog signal va tizimdan kirish PWM signalidir. Demak, ADC konvertatsiyasi kerak edi. Yaxshiyamki, Basys 3-da ADC o'rnatilgan, shuning uchun IQ sensori chiqishi 0V-1V ga kamaytirilishi kerak edi, chunki bu bortdagi ADCning maksimal diapazoni. Bu 1k rezistorli ketma -ket 3k rezistor sifatida o'rnatilgan 1k rezistorlardan tashkil topgan kuchlanish bo'luvchi sxemasi yordamida amalga oshirildi. Analog signal endi ADC chegarasida edi. Ventilyatorga PWM usuli to'g'ridan -to'g'ri Basys 3 -dagi PMOD portining chiqishi bilan boshqarilishi mumkin.

4 -qadam: Basys 3 -da kirish -chiqishning afzalliklaridan foydalanish

Basys 3 -da kod ishlayotganda disk raskadrovka qilishni osonlashtiradigan bir qancha kirish -chiqish moslamalari mavjud. kirish -chiqish quyidagi tarzda o'rnatildi.

  • Etti segmentli displey - bu ADC ma'lumotnomasi va qiymatini voltlarda ko'rsatish uchun ishlatilgan. Etti segmentli displeyning birinchi ikkita raqami ADC qiymatining o'nlik kasridan keyingi ikki raqamni ko'rsatadi, chunki qiymat 0-1V orasida. Etti segmentli displeyda uchta va to'rtinchi raqamlar voltli mos yozuvlar qiymatini ko'rsatadi, shuningdek, kasrdan keyingi birinchi ikkita raqamni ko'rsatadi, chunki diapazon ham 0-1V oralig'ida.
  • 16 LED - Chiqish to'yinganligini va chiqish to'g'ri o'zgarishini ta'minlash uchun LEDlar chiqish qiymatini ko'rsatish uchun ishlatilgan.

5 -qadam: IQ sensori chiqishidagi shovqin

Sensor chiqishida shovqin bor edi, bu muammoni hal qilish uchun o'rtacha blok o'rnatildi, chunki bu etarli va bajarish uchun juda kam ish kerak edi.

6 -qadam: Umumiy kod tartibi

Umumiy kod tartibi
Umumiy kod tartibi

Hali muhokama qilinmagan bitta kod bor. Bu kod tetik deb nomlangan soatni ajratuvchi. kodning bu qismi ADC kodini namuna olishiga olib keladi. ADC kodini to'ldirish uchun maksimal 2us kerak bo'ladi, shunda joriy kirish va oldingi kirish o'rtacha hisoblanadi. 1usdan so'ng, nazoratchi o'rtacha, P, I va D shartlarini hisoblab chiqadi. kodning umumiy joylashuvi va interfeysi ulanish sxemasida ko'rsatilgan.

7 -qadam: sinov

Sinov
Sinov

Kod Basys 3 -da joylashtirilgan va quyidagi javob yozilgan. mos yozuvlar 2 qiymat orasida o'zgargan. bu to'ldirilgan loyiha kodiga ilova qilingan holat. Qo'shilgan videoda bu javob real vaqtda ko'rsatilgan. Naychaning yuqori qismida tebranishlar tezroq parchalanadi, chunki nazoratchi bu hudud uchun mo'ljallangan edi, lekin nazoratchi trubadan pastda ishlamaydi, chunki tizim chiziqli emas.

8 -qadam: Loyihani takomillashtirishga o'zgartirishlar

Loyiha rejalashtirilganidek ishladi, lekin agar loyihani uzaytirgan bo'lsam, bir nechta o'zgartirishlar kiritgan bo'lardim.

  • Shovqinni butunlay kamaytirish uchun raqamli filtrni qo'llang
  • ketma -ket ishga tushirish uchun ADC kodini, O'rtacha kodni va Integratsiya kodini o'rnating.
  • teskari aloqa uchun boshqa sensorni ishlating, chunki bu sensorning chiziqli bo'lmagan javobi ushbu loyihada juda ko'p muammolarni keltirib chiqardi, lekin bu ko'proq kodlash tomonida emas.

9 -qadam: qo'shimcha ish

Yoz davomida men kaskadli kontroller uchun kod yozdim va bitta halqali PID kontrolleriga tavsiya qilgan o'zgartirishlarni kiritdim.

Oddiy PID tekshirgichiga o'zgartirishlar kiritildi

· Kiritilgan FIR filtr shabloni kerakli kesish chastotasiga erishish uchun koeffitsientlarni o'zgartirish kerak. Joriy dastur-bu 5-tapli archa filtri.

· Kodning vaqti shunday tuzilganki, filtr yangi namunani uzatadi va chiqish tayyor bo'lgach, ajralmas atama ishga tushadi, bu esa kodni o'zgartirish uchun kam harakat bilan har xil vaqt oralig'ida ishlashini o'zgartirishi mumkinligini bildiradi. kod

· Dasturni boshqaradigan asosiy tsikl ham qisqartirildi, chunki bu tsikl 7 tsikldan iborat edi, bu ilgari Controller -ning maksimal ish tezligini sekinlashtirgan, lekin t 4 -tsiklini kamaytirish orqali bu kodning asosiy bloki ishlashi mumkinligini bildiradi. 4 soat tsikli ichida.

Sinov

Bu nazoratchi sinovdan o'tkazildi va maqsadga muvofiq amalga oshirildi, men bu dalilni suratga olmaganman, chunki loyihaning bu qismi faqat ongni faol saqlash uchun qilingan. Testbench singari test kodi ham shu erda bo'ladi, shuning uchun dasturni amalga oshirishdan oldin sinab ko'rishingiz mumkin.

Nima uchun kaskad tekshirgichidan foydalanish kerak

Kaskadni boshqaruvchi tizimning ikki qismini boshqaradi. Bunday holda, kaskadni boshqaruvchi tashqi tsiklga ega bo'ladi, bu esa IQ sensori orqali teskari aloqa o'rnatadigan nazoratchi. Ichki tsiklda fanning aylanish tezligini aniqlaydigan takometr pulslari orasidagi vaqt ko'rinishidagi teskari aloqa mavjud. Nazoratni amalga oshirish orqali tizimdan yaxshiroq javob olish mumkin.

Kaskadni boshqaruvchi qanday ishlaydi?

Tekshirgichning tashqi tsikli pulslar orasidagi ichki tsikl boshqaruvchisigacha bo'lgan vaqtni beradi. Bu nazoratchi impulslar orasidagi kerakli vaqtga erishish uchun ish aylanishini oshiradi yoki kamaytiradi.

Qurilmaga o'zgartirishlar kiritish

Afsuski, men ushbu o'zgartirishlarni qurilmada amalga oshira olmadim, chunki unga kirish imkoni yo'q edi. Men mo'ljallangan tarzda ishlaydigan qayta ko'rib chiqilgan bitta pastadir boshqaruvchisini sinab ko'rdim. Men kaskad boshqaruvchisini hali sinovdan o'tkazmaganman. Ishonchim komilki, nazoratchi ishlaydi, lekin maqsadga muvofiq ishlash uchun biroz o'zgartirish kerak bo'lishi mumkin.

Sinov

Men tekshirgichni sinovdan o'tkaza olmadim, chunki ikkita kirish manbasini simulyatsiya qilish qiyin edi. Men ko'radigan yagona muammo shundaki, kaskad tekshirgichi shundaki, tashqi pastadir ichki pastadir uchun belgilangan qiymatni oshirishga harakat qilganda, katta sozlash nuqtasi fan uchun pastroq RPS bo'ladi, lekin buni osonlikcha tuzatish mumkin. belgilangan nuqtadagi signalning maksimal qiymatidan (4095 - belgilangan nuqta - tacho_result) belgilangan nuqtani oling.

10 -qadam: Xulosa

Umuman olganda, loyiha men rejalashtirganidek ishlaydi, men natijadan mamnunman. Vaqt ajratib, VHDLda PID boshqaruvchisini ishlab chiqish urinishimni o'qiganingiz uchun tashakkur. Agar kimdir bu tizimda ba'zi o'zgarishlarni amalga oshirmoqchi bo'lsa va kodni tushunish uchun biroz yordam talab qilsa, men bilan bog'laning, men tezda javob beraman. Kim to'ldirilgan, lekin bajarilmagan qo'shimcha ishni sinab ko'rsa, har qanday qo'l uchun men bilan bog'laning. Agar kim buni amalga oshirsa, menga bu qanday ketayotganini aytib bersa, men bundan juda minnatdorman.

Tavsiya: