Tartalomjegyzék:

PID vezérlő VHDL: 10 lépés
PID vezérlő VHDL: 10 lépés

Videó: PID vezérlő VHDL: 10 lépés

Videó: PID vezérlő VHDL: 10 lépés
Videó: PID Controller - A Real Example with Animation 2024, Július
Anonim
PHD vezérlő VHDL
PHD vezérlő VHDL
PHD vezérlő VHDL
PHD vezérlő VHDL

Ez a projekt volt az utolsó projektem a Cork Institute of Technology kitüntetéses alapképzésem elvégzéséhez. Ez az oktatóanyag két részre oszlik, az első a PID -kód fő törzsére terjed ki, amely a projekt fő célja, a második rész pedig a Basys 3 fejlesztői táblán megvalósított, majd pingponglabdával összekapcsolt kód illesztésére vonatkozik. levitációs berendezés. Az elméleti és a beépített szerelvény a mellékelt képeken látható.

Kellékek

Szimuláció

Vivado Design lakosztály

Végrehajtás (a zárójelben azt használtam a projektemhez)

  • FPGA kártya, amely digitális/analóg jelek be- és kimenetére képes (Basys 3)
  • egy rendszer, amely egyetlen visszacsatolási forrással vezérelhető (Ping Pong Ball Levitation Rig)

Rig

  • Polikarbonát cső
  • 5V ventilátor
  • IR érzékelő
  • 3D nyomtatott alap (Ez az oktatóanyag dokumentálja a szerelvény felépítését, az érzékelőt visszajelzésként adták hozzá, de a berendezés általában ugyanaz volt)
  • 1k ellenállások
  • Kenyeretábla 5V és GND sínnel

1. lépés: Alapvető vezérléselmélet

Alapvető irányítási elmélet
Alapvető irányítási elmélet

Azt hittem, hogy néhány alapvető vezérlési elmélet hozzáadásával mindenki, aki szeretné kipróbálni és végrehajtani ezt a kódot, jó kiindulópontot jelenthet.

A mellékelt diagram egy hurkos vezérlő elrendezése.

r- A referencia. Ez határozza meg, hogy a vezérlő hova kíván menni.

e-a hiba. Ez a különbség az érzékelő és a referencia értéke között. például. e = r- (d+érzékelő kimenete).

K-Ez a vezérlő. A vezérlő három kifejezésből állhat. Ezek a kifejezések P, I és D. Mindhárom tag szorzója Kp, Ki és Kd. Ezek az értékek határozzák meg a vezérlő válaszát.

  • P-Arányos. Egy szigorúan P vezérlőnek az aktuális hibával arányos kimenete lesz. A P vezérlő egyszerűen megvalósítható és gyorsan működik, de soha nem éri el a beállított értéket (referencia).
  • I-integrál. Egy szigorúan integrált vezérlő összegzi az előző hibát, amely végül eléri a kívánt referenciát. Ez a vezérlő általában túl lassú a megvalósításhoz. A P kifejezés hozzáadása csökkenti a referencia eléréséhez szükséges időt. A bemenet mintavételezésének idejét figyelembe kell venni.
  • D-származék. A származtatott kifejezés olyan kimenettel rendelkezik, amely a hiba változási sebességétől függ. Ezt a kifejezést általában P kifejezéssel vagy PI kifejezéssel használják. Mivel ez arányos a hiba változásának arányával, egy zajos kislemez erősíti a zaját, ami a rendszer instabilitását okozhatja. Az időt is figyelembe kell venni, mivel a származtatott kifejezés is az idő függvénye.

U- Ez a vezérlőjel. Ez a jel bemenet a berendezéshez. Ebben a projektben az u egy PWM jel bemenet a ventilátorhoz a sebesség megváltoztatásához.

G- Ez az a rendszer, amelyet irányítanak. Ez a rendszer matematikailag modellezhető az S vagy Z tartományban. A rendszerek az n -edik rendűek lehetnek, de ha valaki elkezdi a vezérlést, valószínűleg elsőrendű rendszert kell feltételeznie, mivel ez sokkal könnyebben kiszámítható. A modellezési rendszerrel kapcsolatos információk sokasága megtalálható az interneten. Az érzékelő mintavételi idejétől függően a rendszer modellje diszkrét vagy folyamatos. Ez drasztikus hatással van a vezérlőre, ezért tanácsos mindkettőt kutatni.

d- Ez a rendszerhez hozzáadott zavar. A zavar olyan külső erők, amelyeket a rendszer modellje nem vesz figyelembe. Egy egyszerű példa erre egy drón, amelyet 5 méteres magasságban szeretne lebegtetni, és szélroham érkezik, és leejti a drónt 1 métert, a vezérlő a zavar bekövetkezése után áthelyezi a drónt. Ezt zavarásnak nevezik, mivel a szél nem ismételhető, így ezt nem lehet modellezni.

A vezérlő hangolásához túl sok szabályt kell megnevezni, de néhány jó, amellyel kezdtem, Cohen Coon és Zieger Nichols.

A rendszer modellezése általában a legfontosabb rész pontos modell nélkül, a tervezett vezérlő nem reagál a kívánt módon.

Itt elegendő információnak kell lennie ahhoz, hogy megértsük, hogyan működik a vezérlő, néhány egyedi kutatással együtt, és a vezérlő alatti kód a három kifejezés bármilyen kombinációjával megvalósítható.

2. lépés: PID -kód írása

PID kód írása
PID kód írása

Az alábbi linken található kód alapelvét átvettük és módosítottuk, mivel ez a kód nem működött, de sok elve helyes volt, ami jó kiindulópontot adott. Eredeti PID A kód számos hibát tartalmazott, mint pl

  • Folyamatos működés - a vezérlő öröklődően diszkrét, ezért a vezérlőt úgy kellett beállítani, hogy csak akkor számítsa ki mind a 3 kifejezést, amikor új bemenet áll rendelkezésre. Ennek a szimulációnak az volt a feladata, hogy ellenőrizze, változott -e a bemenet az utolsó alkalom óta. ez csak a kód helyes működésének szimulálására szolgál.
  • A mintavételi idő nem volt hatással az integrál és a származtatott kifejezésre - A vezérlő szintén nem vette figyelembe a minta átvételének idejét, ezért az időosztónak nevezett értéket hozzáadták annak biztosításához, hogy az integrál és a származtatott feltételek megfelelően működjenek. intervallum.
  • A hiba csak posztív lehet - a hiba kiszámításakor szintén probléma merült fel, mivel a hiba soha nem lehet negatív jelentésű, ha a visszacsatolási jel meghaladta azt a referenciaértéket, amely szerint a vezérlő tovább növeli a kimenetet, amikor csökkennie kell.
  • A 3 kifejezés nyereségértéke egész szám volt - tapasztalatom szerint mindig azt tapasztaltam, hogy a vezérlőben lévő 3 kifejezés értéke mindig lebegőpontos szám, mivel a Basys 3 nem rendelkezik lebegőpontos számmal, az értékeket meg kell adni egy számlálóértéket és egy nevezőérték, amely a probléma meghaladását célzó munkaként szolgálna.

A kódot alább csatoljuk, a kód fő törzse és egy tesztpad található a kód szimulálásához. A zip mappa tartalmazza a Vivado -ban már található kódot és tesztpadot, így az időtakarékosság érdekében megnyitható. van egy szimulált teszt is a kódra, amely azt mutatja, hogy a kimenet követi a hivatkozást, ami azt bizonyítja, hogy a kód rendeltetésszerűen működik.

3. lépés: A rendszer módosítása

Először is, nem minden rendszer egyforma, elemezni kell a rendszer bemeneteit és kimeneteit. Esetemben a berendezésem kimenete, amely értéket adott a pozícióhoz, analóg jel, a rendszer bemenete pedig PWM jel. Ez azt jelenti, hogy ADC konverzióra volt szükség. Szerencsére a Basys 3 beépített ADC-vel rendelkezik, így ez nem jelentett problémát, az infravörös érzékelő kimenetét 0V-1V-ra kellett csökkenteni, mivel ez a fedélzeti ADC maximális hatótávolsága. Ez egy feszültségosztó áramkör használatával történt, amely 1k ellenállásokból készült, és 3k ellenállásként sorba állítva 1k ellenállással. Az analóg jel az ADC hatótávolságán belül volt. A ventilátor PWM bemenetét közvetlenül vezérelheti a Basys 3 PMOD portjának kimenete.

4. lépés: Az I/O kihasználása a Basys 3 -on

A Basys 3 -on számos I/O található, amelyek lehetővé tették a hibakeresést a kód futása közben. az I/O a következőképpen lett beállítva.

  • Hét szegmenses kijelző - Ezt használtuk a referencia és az ADC értékének megjelenítésére voltban. A hét szegmenses kijelző első két számjegye az ADC-érték tizedesjegye utáni két számjegyet mutatja, mivel az érték 0-1V között van. A hét szegmenses kijelző három és négy számjegye a referenciaértéket adja meg voltban, ez a tizedesjegy utáni első két számjegyet is mutatja, mivel a tartomány is 0-1V között van.
  • 16 LED - A LED -ek a kimenet értékének megjelenítésére szolgáltak annak biztosítására, hogy a kimenet telítődjön és a kimenet megfelelően változzon.

5. lépés: Zaj az infravörös érzékelő kimenetén

Zaj volt az érzékelő kimenetén, hogy megoldja ezt a problémát, átlagoló blokkot helyeztek el, mivel ez elegendő volt, és nagyon kevés munkát igényelt.

6. lépés: A kód általános elrendezése

A kód általános elrendezése
A kód általános elrendezése

Van egy kódrészlet, amelyről még nem esett szó. Ez a kód egy óraosztó, amelyet triggernek hívnak. ez a kódrészlet kiváltja az ADC kódot mintavételre. az ADC -kód legfeljebb 2US -t vesz igénybe, így az aktuális bemenet és az előző bemenet átlagolásra kerül. 1us ezen átlagolás után a vezérlő kiszámítja a P, I és D feltételeket. a kód és az interfészek minden elrendezését a rögtönzött kapcsolási diagram mutatja.

7. lépés: Tesztelés

Tesztelés
Tesztelés

A kódot telepítették a Basys 3 -ra, és rögzítették a következő választ. a referencia 2 érték között változott. ami a mellékelt befejezett projektkód esetében is így van. A mellékelt videó valós időben mutatja ezt a választ. Az oszcillációk gyorsabban romlanak a cső felső részén, mivel a vezérlőt erre a területre tervezték, de a szabályozó nem működik olyan jól a csőben lefelé, mivel a rendszer nem lineáris.

8. lépés: Módosítások a projekt javításához

A projekt a terveknek megfelelően működött, de van néhány módosítás, amelyet elvégeztem volna, ha a projektet meghosszabbíthatták volna.

  • Digitális szűrő alkalmazása a zaj teljes csillapítására
  • állítsa be az ADC -kódot, az átlagkódot és az integrációs kódot, hogy egymás után aktiválja őket.
  • használjon más érzékelőt a visszacsatoláshoz, mivel ennek az érzékelőnek a nemlineáris válasza sokféle problémát okozott ezzel a projekttel, de ez inkább a vezérlő oldalon van, nem a kódolási oldalon.

9. lépés: Extra munka

A nyár folyamán írtam egy kódot egy kaszkádvezérlőhöz, és végrehajtottam azokat a módosításokat, amelyeket az egyhurkos PID vezérlőhöz javasoltam.

A szokásos PID szabályozó módosításai

· A FIR szűrő sablon megvalósította az együtthatókat a kívánt határfrekvencia elérése érdekében. A jelenlegi megvalósítás egy 5 csapos fenyő szűrő.

· A kód időzítését úgy állítottuk be, hogy a szűrő továbbítsa az új mintát, és amikor a kimenet készen áll, az integrál kifejezés aktiválódik, ami azt jelenti, hogy a kód módosítható úgy, hogy különböző időközönként működjön, kevesebb erőfeszítéssel a változtatásra kód.

· A programot hajtó hurok fővonala szintén csökkent, mivel ez a ciklus 7 ciklust vett igénybe korábban, ami lelassította a vezérlő maximális működési sebességét, de a ciklus t 4 állapotának csökkentésével ez azt jelenti, hogy a fő kódblokk működhet 4 óra cikluson belül.

Tesztelés

Ezt a kontrollert rendeltetésszerűen tesztelték és hajtották végre. Nem készítettem képeket erről a bizonyításról, mivel a projektnek ez a része csak az elme aktív tartását szolgálta. A teszteléshez szükséges kód és a tesztpad itt lesz elérhető, így tesztelheti a programot a megvalósítás előtt.

Miért érdemes kaszkádvezérlőt használni?

A kaszkádvezérlő a rendszer két részét vezérli. Ebben az esetben a kaszkádvezérlő külső hurokkal rendelkezik, amely egy vezérlő, amely visszajelzést ad az infravörös érzékelőtől. A belső hurok a fordulatszámmérő impulzusai között idő formájában visszacsatolást tartalmaz, amely meghatározza a ventilátor forgási sebességét. Az ellenőrzés végrehajtásával jobb válasz érhető el a rendszerből.

Hogyan működik a kaszkádvezérlő?

A vezérlő külső ciklusa egy értéket ad a ciklusok közötti ideig a belső hurokvezérlőnek. Ez a vezérlő ezután növeli vagy csökkenti a működési ciklust, hogy elérje a kívánt időt az impulzusok között.

A módosítások végrehajtása a berendezésen

Sajnos nem tudtam végrehajtani ezeket a módosításokat a szerelvényen, mivel nem volt hozzáférésem hozzá. Kipróbáltam a felülvizsgált egyhurkos vezérlőt, amely rendeltetésszerűen működik. A kaszkádvezérlőt még nem teszteltem. Bízom benne, hogy a vezérlő működni fog, de előfordulhat, hogy némi módosítást igényel, hogy megfelelően működjön.

Tesztelés

Nem tudtam tesztelni a vezérlőt, mivel nehéz volt két bemeneti forrást szimulálni. Az egyetlen problémát látom a kaszkádvezérlővel kapcsolatban, hogy mivel a külső hurok megpróbálja növelni a belső ciklushoz adott alapértéket, a nagyobb alapérték valójában alacsonyabb RPS a ventilátor számára, de ez könnyen megoldható. vegye le az alapértéket az alapjel maximális értékéből (4095 - alapjel - tacho_eredmény).

10. lépés: Következtetés

Összességében a projekt úgy működik, ahogy terveztem, amikor a projekt elkezdődött, így elégedett vagyok az eredménnyel. Köszönjük, hogy időt szakított arra, hogy elolvassa a PHD -vezérlő VHDL -ben történő fejlesztésére tett kísérletemet. Ha valaki megpróbál ennek valamilyen változatát megvalósítani egy rendszeren, és némi segítségre van szüksége a kód megértéséhez, lépjen kapcsolatba velem, mielőbb válaszolok. Aki kipróbálja az elvégzett, de nem végrehajtott többletmunkát, vegye fel velem a kapcsolatot. Nagyon megköszönném, ha valaki, aki megvalósítja, elmondaná, hogyan megy.

Ajánlott: