Sadržaj:
- Korak 1: Postavljanje hardvera Vivado
- Korak 2: Postavljanje dizajna bloka
- Korak 3: Kreirajte prilagođeni PWM IP blok
- Korak 4: Dodajte PWM IP blok u dizajn
- Korak 5: Konfigurirajte HDL omotač i postavite datoteku ograničenja
- Korak 6: Generiranje Bitstream -a
- Korak 7: Postavljanje projekta u SDK -u
- Korak 8: Izmjene FreeRTOS koda
- Korak 9: 3D štampanje za stabilizator
- Korak 10: Sklapanje dijelova
- Korak 11: Povezivanje Zybo -a sa stabilizatorom
- Korak 12: Korekcija pravog sjevera
- Korak 13: Pokretanje programa
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
Uvod
Ovo je vodič za stvaranje troosne ručne stabilizacijske kamere za GoPro pomoću Digilent Zybo Zynq-7000 razvojne ploče. Ovaj projekat je razvijen za klasu CPE operativnih sistema u realnom vremenu (CPE 439). Stabilizator koristi tri servo servera i IMU za ispravljanje kretanja korisnika kako bi kamera bila u nivou.
Dijelovi potrebni za projekat
- Digilent Zybo Zynq-7000 razvojni odbor
- Sparkfun IMU Breakout - MPU 9250
- 2 servera HiTec HS-5485HB (kupite pokrete za 180 stepeni ili programirajte od 90 do 180 stepeni)
- 1 HiTec HS-5685MH servo (kupite pokret od 180 stepeni ili program od 90 do 180 stepeni)
- 2 standardna servo držača
- 1 Breadboard
- 15 žica kratkospojnika muško-muško
- 4 žice kratkospojnika muško-žensko
- Hot Glue
- Drška ili ručka
- Drveni klin promjera 5 mm
- GoPro ili drugi fotoaparat i hardver za montažu
- Napajanje sposobno za izlaz 5V.
- Pristup 3D štampaču
Korak 1: Postavljanje hardvera Vivado
Započnimo s stvaranjem temeljnog dizajna bloka za projekt.
- Otvorite Vivado 2016.2, kliknite ikonu "Kreiraj novi projekt", a zatim "Dalje>".
- Imenujte svoj projekt i kliknite "Dalje>".
- Odaberite RTL projekt i pritisnite "Dalje>".
- Upišite u traku za pretraživanje xc7z010clg400-1, a zatim odaberite dio i pritisnite "Dalje>" i "Završi".
Korak 2: Postavljanje dizajna bloka
Sada ćemo početi stvarati dizajn bloka dodavanjem i postavljanjem Zynq IP bloka.
- Na lijevoj ploči, pod IP integrator, kliknite "Kreiraj dizajn bloka", a zatim kliknite "U redu".
- Desnom tipkom miša kliknite karticu "Dijagram" i odaberite "Dodaj IP …".
- Upišite "ZYNQ7 Processing System" i kliknite na odabir.
- Dvaput kliknite na Zynq blok koji se pojavi.
- Pritisnite "Uvoz XPS postavki" i uvezite priloženu datoteku "ZYBO_zynq_def.xml".
- Idite na "MIO konfiguracija" i odaberite "Aplikacijska procesorska jedinica" i omogućite Timer 0 i Watchdog timers.
- Na istoj kartici, pod "I/O periferija", odaberite ENET 0 (i promijenite padajući izbornik na "MIO 16.. 27", USB 0, SD 0, UART 1, I2C 0.
- U odjeljku "GPIO" provjerite GPIO MIO, ENET resetiranje, USB resetiranje i I2C resetiranje.
- Sada idite na "Konfiguracija sata". Odaberite FCLK_CLK0 pod PL Satovi od tkanine. Zatim kliknite "U redu".
Korak 3: Kreirajte prilagođeni PWM IP blok
Ovaj IP blok omogućuje ploči da šalje PWM signal za kontrolu kretanja servomotora. Rad je u velikoj mjeri zasnovan na vodiču Digitronixa iz Nepala, koji se nalazi ovdje. Dodana je logika za usporavanje takta, tako da se puls emitirao ispravnom brzinom. Blok uzima broj od 0 do 180 i pretvara ga u impuls od 750-2150 usec.
- Sada na kartici Alati u gornjem lijevom kutu kliknite "Kreiraj i upakiraj IP …" i pritisnite Dalje.
- Zatim odaberite "Kreiraj novi periferni uređaj AXI4" i pritisnite Dalje.
- Imenujte svoj PWM IP blok (nazvali smo ga pwm_core) i kliknite Dalje, a zatim kliknite Sljedeće na sljedećoj stranici.
- Sada kliknite "Uredi IP" i pritisnite Završi. Ovo će otvoriti novi prozor za uređivanje pwm bloka.
- Na kartici "Izvori" i pod "Izvori dizajna" proširite "pwm_core_v1_0" (zamijenite pwm_core svojim imenom) i otvorite datoteku koja postaje vidljiva.
- Kopirajte i zalijepite kôd pod 'pwm_core_v1_0_S00_AXI.v' u zip datoteku na dnu projekta. Ctrl + Shift + R i zamijenite 'pwm_core' svojim imenom za ip blok.
- Zatim otvorite 'name _v1_0' i kopirajte navedeni kôd u datoteku 'pwm_core_v1_0.v'. Ctrl + Shift + R i zamijenite 'pwm_core' imenom.
- Sada idite na karticu 'Paket IP - naziv' i odaberite "Parametri prilagođavanja".
- Na ovoj kartici će se na vrhu nalaziti žuta traka koja povezuje tekst. Odaberite ovo i "Skriveni parametri" će se pojaviti u okviru.
- Sada idite na "Prilagođavanje grafičkog sučelja" i desnim klikom na Pwm Counter Max odaberite "Uredi parametar …".
- Označite okvire "Vidljivo u grafičkom sučelju za prilagođavanje" i "Navedi raspon".
- Promijenite padajući izbornik "Vrsta:" na Raspon cijelih brojeva i postavite minimum na 0, a maksimum na 65535 i označite okvir "Prikaži raspon". Sada kliknite OK.
- Povucite Pwm brojač Max ispod stabla 'Page 0'. Sada idite na "Pregled i paket" i kliknite gumb "Ponovo pakiraj IP".
Korak 4: Dodajte PWM IP blok u dizajn
Dodaćemo IP blok u dizajn bloka kako bismo omogućili korisniku pristup PWM IP bloku kroz procesor.
- Desnom tipkom miša kliknite karticu dijagrama i kliknite "IP postavke …". Idite na karticu "Menadžer spremišta".
- Pritisnite zeleno dugme plus i odaberite ga. Sada pronađite ip_repo u Upravitelju datoteka i dodajte to u projekt. Zatim pritisnite Primijeni, a zatim U redu.
- Desnom tipkom miša kliknite karticu dijagrama i kliknite "Dodaj IP …". Upišite naziv svog PWM IP bloka i odaberite ga.
- Na vrhu zaslona trebala bi biti zelena traka, prvo odaberite "Pokreni automatizaciju veze" i kliknite U redu. Zatim kliknite "Pokreni automatizaciju bloka" i kliknite U redu.
- Dvaput kliknite na PWM blok i promijenite Pwm Counter Max na 1024 sa 128.
- Zadržite pokazivač miša iznad PWM0 na PWM bloku. Trebala bi postojati mala olovka koja se pojavi kad to učinite. Desnom tipkom miša kliknite i odaberite "Create Port …", a zatim pritisnite OK kada se prozor otvori. Ovo stvara vanjski port na koji se signal prosljeđuje.
- Ponovite korak 6 i za PWM1 i PWM2.
- Pronađite malu kružnu ikonu dvostruke strelice na bočnoj traci i kliknite na nju. Regenerirat će izgled, a dizajn vašeg bloka trebao bi izgledati kao na gornjoj slici.
Korak 5: Konfigurirajte HDL omotač i postavite datoteku ograničenja
Sada ćemo generirati dizajn visokog nivoa za naš dizajn blokova, a zatim preslikati PWM0, PWM1 i PWM2 u Pmod pinove na Zybo ploči.
- Idite na karticu "Izvori". Desnom tipkom miša kliknite datoteku dizajna bloka pod "Izvori dizajna" i kliknite "Kreiraj HDL omot …". Odaberite "Kopiraj generirani omot da biste dozvolili korisnička uređivanja" i kliknite U redu. Ovo generira dizajn visoke razine za blok dizajn koji smo stvorili.
- Pmod na koji ćemo izlaziti je JE.
- U odjeljku Datoteka odaberite "Dodaj izvore …" i odaberite "Dodaj ili kreiraj ograničenja" i kliknite Dalje.
- Kliknite na dodavanje datoteka i odaberite uključenu datoteku "ZYBO_Master.xdc". Ako pogledate ovu datoteku, primijetit ćete da sve nije komentirano osim šest redova "set_property" pod "## Pmod Header JE". Primijetit ćete da su PWM0, PWM1 i PWM2 argumenti za ove retke. Mapiraju na Pin 1, Pin 2 i Pin 3 JE Pmod -a.
Korak 6: Generiranje Bitstream -a
Moramo generirati bitstream za hardverski dizajn za izvoz u SDK prije nego nastavimo.
- U odjeljku "Program i otklanjanje pogrešaka" na bočnoj traci odaberite "Generiraj Bitstream". Ovo će pokrenuti sintezu, zatim implementaciju, a zatim generirati tok bitova za dizajn.
- Ispravite sve greške koje se pojave, ali upozorenja se općenito mogu zanemariti.
- Idite na Datoteka-> Pokreni SDK i kliknite U redu. Ovo će otvoriti Xilinx SDK.
Korak 7: Postavljanje projekta u SDK -u
Ovaj dio može biti pomalo frustrirajući. Ako ste u nedoumici, napravite novi BSP i zamijenite stari. Ovo nam je uštedjelo hrpu vremena za otklanjanje grešaka.
- Počnite preuzimanjem najnovije verzije FreeRTOS -a ovdje.
- Izvucite sve iz preuzimanja i uvezite FreeRTOS u SDK tako što ćete kliknuti Datoteka-> Uvoz, a pod "Općenito" kliknite "Postojeći projekti u radni prostor", a zatim kliknite Dalje.
- Idite na "FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702" unutar foldera FreeRTOS. Uvozite samo "RTOSDemo" s ove lokacije.
- Sada generirajte Board Support Package (BSP) klikom na File-> New Board Support Package.
- Odaberite "ps7_cortexa9_0" i označite "lwip141" i kliknite U redu.
- Desnim klikom na RTOSDemo plavu mapu odaberite "Reference projekta".
- Poništite oznaku "RTOSDemo_bsp" i provjerite novi BSP koji smo upravo stvorili.
Korak 8: Izmjene FreeRTOS koda
Kod koji nudimo može se podijeliti u 7 različitih datoteka. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.h i iic_imu.h. Kôd u iic_main_thread.c prilagođen je iz biblioteke Kris Winer, koja se nalazi ovdje. Uglavnom smo transformirali njegov kôd kako bismo uključili zadatke i omogućili mu da radi sa Zybo pločom. Dodali smo i funkcije za izračunavanje korekcije orijentacije kamere. Napisali smo nekoliko ispisa za štampanje koji su korisni za otklanjanje grešaka. Većina njih je komentirana, ali ako osjećate potrebu, možete ih komentirati.
- Najlakši način za izmjenu datoteke main.c je zamjena koda kopiranim kodom iz naše uključene datoteke main.c.
- Da biste stvorili novu datoteku, desnom tipkom miša kliknite mapu src pod RTOSDemo i odaberite C Izvorna datoteka. Dajte datoteci ime "iic_main_thread.c".
- Kopirajte kôd s priloženog "iic_main_thread.c" i zalijepite ga u novostvorenu datoteku.
- Ponovite korake 2 i 3 s preostalim datotekama.
- zahtijeva uputstvo za povezivanje u gcc. Da biste ovo dodali putanji izgradnje, desnom tipkom miša kliknite RTOSDemo i odaberite "C/C ++ Build Settings".
- Otvorit će se novi prozor. Idite na ARM v7 gcc povezivač-> Knjižnice. Odaberite malu datoteku za dodavanje u gornjem desnom kutu i upišite "m". Ovo će uključiti matematičku biblioteku u projekat.
- Izgradite projekt pomoću Ctrl + B da biste potvrdili da sve radi. Provjerite upozorenja koja se generiraju, ali ćete ih možda moći zanemariti.
- Postoji nekoliko mjesta koja će biti potrebna izmjena, uglavnom magnetska deklinacija vaše trenutne lokacije. Objasnit ćemo kako to promijeniti u kalibracijskom dijelu vodiča.
Korak 9: 3D štampanje za stabilizator
Za ovaj projekt trebate 3D ispisati nekoliko dijelova. Vjerovatno se mogu kupiti dijelovi sličnih dimenzija/veličina kao naši štampani dijelovi.
- Iskoristite priložene datoteke za ispis ruke i držača za GoPro.
- Morate dodati skele u.stl datoteku.
- Odrežite/očistite dijelove viška skele nakon štampanja.
- Ako želite, drveni klin možete zamijeniti 3D tiskanim dijelom.
Korak 10: Sklapanje dijelova
Sastavljanje stabilizatora sastoji se od nekoliko dijelova. Kupljeni držači dolaze s 4 samorezna vijka i 4 vijka s maticama. Budući da postoje 3 servo motora, jedan od servo sirena mora biti prethodno navučen kako bi se omogućilo provlačenje 2 vijka.
- Lemite 8 pinova na IMU prekidač, 4 sa svake strane.
- IMU je pričvršćen na 3D štampani držač za GoPro u sredini nosača.
- Okrenite držač tako da rupe za servo montažu budu s vaše lijeve strane. Postavite IMU na sebi najbliži rub, a igle vise s ruba. Zatim postavite GoPro nosač na vrh IMU -a, zalijepivši IMU i nosač na držač.
- Pričvrstite HS-5485HB na servo držač koji je integriran u 3D štampanu ruku.
- Uvrnite GoPro držač u servo pričvršćen za ruku, pazeći da je servo postavljen tako da je u sredini svog raspona kretanja.
- Zatim pričvrstite servo HS-5685MH na servo držač. Zatim jednim od vijaka dodirnite servo trubu. Sada pričvrstite servo na dno posljednjeg servo držača.
- Sada pričvrstite posljednji servo na držač u koji je pričvršćen servo HS-5685MH. Zatim uvrnite ruku u ovaj servo, pazeći da je ruka pričvršćena tako da se može pomicati za 90 stupnjeva u svakom smjeru.
- Da biste dovršili konstrukciju gimbala, dodajte mali komad drvenog tipla za spajanje između GoPro držača i 3D štampane ruke. Sada ste sastavili stabilizator.
- Na kraju, možete dodati ručku povezanu na donji servo nosač.
Korak 11: Povezivanje Zybo -a sa stabilizatorom
Nekoliko stvari na koje morate biti oprezni dok ovo radite. Želite biti sigurni da 5V iz napajanja nikada ne ulazi u Zybo ploču jer bi to moglo dovesti do problema s pločom. Ponovno provjerite jesu li kratkospojnici sigurni da se žice ne prebacuju.
- Za pričvršćivanje Zyba na stabilizator trebat će vam 15 muških i muških skakača i 4 muško -ženska.
- Prvo spojite dva kratkospojnika na napajanje od 5 V duž + i - šina matične ploče. Oni će napajati servo pogone.
- Zatim spojite 3 para kratkospojnika na + i - vodilice matične ploče. To će biti snaga za svaki od servo pogona.
- Uključite drugi kraj + i - kratkospojnika u svaki od servo pogona.
- Spojite kratkospojnik između - šine matične ploče i jednog od GND pinova na Zybo JE Pmodu (pogledajte sliku korak 5). Ovo će stvoriti zajedničko tlo između Zybo ploče i napajanja.
- Zatim spojite signalnu žicu na pin 1, pin 2 i pin 3 JE Pmod -a. Zakačite 1 karte na donji servo, zakačite 2 karte na servo na kraju kraka i zakačite 3 karte na srednji servo.
- Uključite 4 ženske žice u GND, VDD, SDA i SCL pinove prekidača IMU. GND i VDD se priključuju na GND i 3V3 na JF pinovima. Uključite SDA pin u pin 8 i SCL u pin 7 na JF -u (pogledajte sliku koraka 5).
- Na kraju, spojite računar na ploču pomoću mikro USB kabla. To će omogućiti uart komunikaciju i programirati Zybo ploču.
Korak 12: Korekcija pravog sjevera
Kalibracija magnetometra u IMU važna je za ispravan rad uređaja. Magnetska deklinacija, koja ispravlja magnetni sjever na pravi sjever.
- Da biste ispravili razliku od magnetskog i pravog sjevera, morate koristiti kombinaciju dviju usluga, Google mapa i NOAA -inog kalkulatora magnetskog polja.
- Pomoću Google karata pronađite svoju zemljopisnu širinu i dužinu na vašoj trenutnoj lokaciji.
- Uzmite trenutnu zemljopisnu dužinu i širinu i uključite ih u kalkulator magnetskog polja.
- Vraća se magnetska deklinacija. Uključite ovaj izračun u kôd na liniji 378 "iic_main_thread.c". Ako je vaša deklinacija istočna, tada oduzmite vrijednost zakretanja, ako je zapad, tada dodajte vrijednost zakretanja.
*fotografija je preuzeta iz Sparkfun -ovog vodiča za spajanje MPU 9250, koji se nalazi ovdje.
Korak 13: Pokretanje programa
Trenutak koji ste čekali! Najbolji dio projekta je vidjeti kako funkcionira. Jedan problem koji smo primijetili je da postoji odstupanje od vrijednosti prijavljenih od IMU -a. Niskopropusni filter može pomoći u ispravljanju ovog pomaka, a petljanje s magnetometrom, ubrzanjem i žiro kalibracijama također će pomoći u ispravljanju ovog pomaka.
- Prvo, sastavite sve u SDK -u, to se može učiniti pritiskom na Ctrl + B.
- Provjerite je li napajanje uključeno i postavljeno na 5V. Dvaput provjerite da li sve žice idu na svoja mjesta.
- Zatim, da biste pokrenuli program, pritisnite zeleni trokut u gornjem središtu programske trake.
- Kad se program pokrene, svi servo upravljači će se vratiti na svoje 0 pozicije, pa budite spremni za pomicanje opreme. Nakon što se program inicijalizira, servo upravljači će se zatim vratiti na svoje položaje od 90 stupnjeva.
- Pokrenut će se funkcija kalibracije magnetometra i upute će se ispisati do UART terminala, s kojim se možete povezati putem serijskog monitora, poput 'kit -a' ili serijskog monitora navedenog u SDK -u.
- Kalibracijom ćete pomaknuti uređaj na slici 8 oko 10 sekundi. Ovaj korak možete ukloniti komentiranjem retka 273 "iic_main_thread.c". Ako to komentarišete, morate ukloniti komentare iz redova 323 - 325 "iic_main_thread.c". Ove su vrijednosti u početku prikupljene iz gornje kalibracije magnetometra, a zatim su uključene kao vrijednosti.
- Nakon kalibracije, stabilizacijski kôd će se inicijalizirati i uređaj će držati kameru stabilnom.