Tartalomjegyzék:
- Kellékek
- 1. lépés: Alapvető vezérléselmélet
- 2. lépés: PID -kód írása
- 3. lépés: A rendszer módosítása
- 4. lépés: Az I/O kihasználása a Basys 3 -on
- 5. lépés: Zaj az infravörös érzékelő kimenetén
- 6. lépés: A kód általános elrendezése
- 7. lépés: Tesztelés
- 8. lépés: Módosítások a projekt javításához
- 9. lépés: Extra munka
- 10. lépés: Következtetés
Videó: PID vezérlő VHDL: 10 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
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
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
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
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
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:
A vezérlő telepítése, futtatása és csatlakoztatása az emulátorhoz: 7 lépés
Hogyan telepítsünk, futtassunk és csatlakoztassunk egy kontrollert egy emulátorhoz: Ültünk -e valaha, és emlékeztünk gyerekkorunkra, amikor fiatal játékos voltunk, és néha azt kívántuk, hogy tekintsük át a régi régi drágaköveket? Nos, van erre egy alkalmazás … pontosabban van egy játékosok közössége, akik programot készítenek
Önkiegyenlítő robot - PID vezérlő algoritmus: 3 lépés
Önkiegyenlítő robot - PID vezérlő algoritmus: Ez a projekt azért jött létre, mert többet akartam megtudni a vezérlőalgoritmusokról és a funkcionális PID hurkok hatékony megvalósításáról. A projekt még fejlesztési fázisban van, mivel még nincs hozzá Bluetooth modul, amely
Egyszerű négyirányú készlet asszociatív gyorsítótár-vezérlő tervezése VHDL-ben: 4 lépés
Egy egyszerű négyirányú készlet asszociatív gyorsítótár-vezérlő tervezése VHDL-ben: Korábbi utasításomban láttuk, hogyan kell megtervezni egy egyszerű közvetlen leképezett gyorsítótár-vezérlőt. Ezúttal egy lépéssel előre lépünk. Egy egyszerű négyirányú asszociatív gyorsítótár-vezérlőt tervezünk. Előny? Kevesebb kihagyási arány, de perfo árán
Egyszerű gyorsítótár -vezérlő tervezése VHDL -ben: 4 lépés
Egyszerű gyorsítótár -vezérlő tervezése VHDL -ben: Azért írom ezt az utasítást, mert kissé nehezen szereztem be valamilyen referencia -VHDL -kódot a gyorsítótár -vezérlő tervezéséhez. Tehát magam terveztem egy gyorsítótár -vezérlőt a semmiből, és sikeresen teszteltem az FPGA -n. Nekem p
Egyszerű VGA vezérlő tervezése VHDL és Verilog formátumban: 5 lépés
Egyszerű VGA vezérlő tervezése VHDL és Verilog formátumban: Ebben az utasításban egy egyszerű VGA vezérlőt tervezünk RTL -ben. A VGA Controller egy digitális áramkör, amelyet VGA kijelzők meghajtására terveztek. A keretpufferből (VGA memória) olvas, amely a megjelenítendő keretet képviseli, és létrehozza a szükséges