Indholdsfortegnelse:
- Trin 1: Vivado hardwareopsætning
- Trin 2: Opsætning af blokdesign
- Trin 3: Opret brugerdefineret PWM IP -blok
- Trin 4: Føj PWM IP -blok til Design
- Trin 5: Konfigurer HDL Wrapper og Konfigurer begrænsningsfil
- Trin 6: Generering af Bitstream
- Trin 7: Opsætning af projekt i SDK
- Trin 8: FreeRTOS -kodeændringer
- Trin 9: 3D -udskrivning til stabilisator
- Trin 10: Samling af delene
- Trin 11: Tilslutning af Zybo til stabilisator
- Trin 12: Ægte nordkorrektion
- Trin 13: Kørsel af programmet
Video: Håndholdt kamerastabilisator: 13 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Introduktion
Dette er en vejledning til oprettelse af en 3-akset håndholdt kamerastabiliseringsrigg til en GoPro ved hjælp af et Digilent Zybo Zynq-7000 Development Board. Dette projekt blev udviklet til CPE Real-Time Operating Systems klasse (CPE 439). Stabilisatoren bruger tre servoer og en IMU til at korrigere brugerens bevægelse for at holde kameraet i vater.
Dele påkrævet til projektet
- Digilent Zybo Zynq-7000 Development Board
- Sparkfun IMU Breakout - MPU 9250
- 2 HiTec HS-5485HB Servoer (køb 180 graders bevægelse eller program fra 90 til 180 grader)
- 1 HiTec HS-5685MH Servo (køb 180 graders bevægelse eller program fra 90 til 180 grader)
- 2 standard servobeslag
- 1 brødbræt
- 15 tromler fra mand til mand
- 4 han-til-hun trøjer
- Varm lim
- Greb eller håndtag
- 5 mm diameter træpind
- GoPro eller andet kamera og monteringshardware
- Strømforsyning, der kan levere 5V.
- Adgang til 3D -printer
Trin 1: Vivado hardwareopsætning
Lad os komme i gang med at skabe det underliggende blokdesign til projektet.
- Åbn Vivado 2016.2, klik på ikonet "Opret nyt projekt", og klik på "Næste>".
- Navngiv dit projekt, og klik på "Næste>".
- Vælg RTL -projektet, og tryk på "Næste>".
- Skriv i søgefeltet xc7z010clg400-1, og vælg derefter delen, og tryk på "Næste>" og "Afslut".
Trin 2: Opsætning af blokdesign
Nu begynder vi at generere blokdesignet ved at tilføje og opsætte Zynq IP Block.
- Klik på "Opret blokdesign" i panelet til venstre under IP Integrator, og klik derefter på "OK".
- Højreklik på fanen "Diagram" og vælg "Tilføj IP …".
- Skriv "ZYNQ7 Processing System", og klik på markeringen.
- Dobbeltklik på den Zynq -blok, der vises.
- Klik på "Importer XPS -indstillinger", og importer den medfølgende "ZYBO_zynq_def.xml" -fil.
- Gå til "MIO Configuration", og vælg "Application Processor Unit" og aktiver Timer 0 og Watchdog timere.
- I den samme fane under "I/O -periferiudstyr" skal du vælge ENET 0 (og ændre rullemenuen til "MIO 16.. 27", USB 0, SD 0, UART 1, I2C 0.
- Under "GPIO" skal du markere GPIO MIO, ENET Reset, USB Reset og I2C Reset.
- Naviger nu til "Urkonfiguration". Vælg FCLK_CLK0 under PL Fabric Clocks. Klik derefter på "OK".
Trin 3: Opret brugerdefineret PWM IP -blok
Denne IP -blok giver kortet mulighed for at sende et PWM -signal ud for at styre servoernes bevægelse. Værket var stærkt baseret på vejledningen af Digitronix Nepal, der findes her. Logik blev tilføjet for at bremse uret, så pulsen udsendte med den korrekte hastighed. Blokken tager et tal fra 0 til 180 og konverterer det til en puls fra 750-2150 usec.
- Nu under fanen Værktøjer i øverste venstre hjørne skal du klikke på "Opret og pakke IP …" og trykke på Næste.
- Vælg derefter "Opret en ny AXI4 perifer" og tryk på Næste.
- Navngiv din PWM IP -blok (vi kaldte den pwm_core), og klik på Næste, og klik derefter på Næste også på den næste side.
- Klik nu på "Rediger IP" og tryk på Afslut. Dette åbner et nyt vindue til redigering af pwm -blokken.
- I fanen "Kilder" og under "Designkilder" skal du udvide 'pwm_core_v1_0' (erstat pwm_core med dit navn) og åbne den fil, der bliver synlig.
- Kopier og indsæt koden under 'pwm_core_v1_0_S00_AXI.v' i zip -filen nederst i projektet. Ctrl + Shift + R, og erstat 'pwm_core' med dit navn til ip -blokken.
- Åbn derefter 'navn _v1_0' og kopier den angivne kode i filen 'pwm_core_v1_0.v'. Ctrl + Shift + R, og erstat 'pwm_core' med navn.
- Naviger nu til fanen 'Pakke IP - navn' og vælg "Tilpasningsparametre".
- I denne fane vil der være en gul bjælke øverst, der har linket tekst. Vælg dette, og "Skjulte parametre" vises i boksen.
- Gå nu til "Tilpasning GUI" og højreklik på Pwm Counter Max vælg "Rediger parameter …".
- Marker afkrydsningsfelterne "Synlig i tilpasning GUI" og "Angiv område".
- Skift rullemenuen "Type:" til Hele tal, og sæt minimum til 0 og maksimum til 65535, og markér feltet "Vis område". Klik nu på OK.
- Træk Pwm Counter Max under træet 'Side 0'. Gå nu til "Gennemgang og pakke" og klik på knappen "Re-Package IP".
Trin 4: Føj PWM IP -blok til Design
Vi tilføjer IP -blokken til blokdesignet for at give brugeren adgang til PWM IP -blokken via processoren.
- Højreklik på diagramfanen og klik på "IP -indstillinger …". Naviger til fanen "Repository Manager".
- Klik på den grønne plus -knap, og vælg den. Find nu ip_repo i Filhåndtering og tilføj det til projektet. Tryk derefter på Apply og derefter på OK.
- Højreklik på diagramfanen, og klik på "Tilføj IP …". Indtast dit PWM IP -bloknavn, og vælg det.
- Der skal være en grøn bjælke øverst på skærmen, vælg først "Kør forbindelse automatisering" og klik på OK. Klik derefter på "Kør blokautomatik" og klik på OK.
- Dobbeltklik på PWM -blokken, og skift Pwm Counter Max til 1024 fra 128.
- Hold musemarkøren over PWM0 på PWM -blokken. Der skal være en lille blyant, der dukker op, når du gør det. Højreklik og vælg "Opret port …", og klik på OK, når et vindue åbnes. Dette skaber en ekstern port, som signalet skal sendes til.
- Gentag også trin 6 for PWM1 og PWM2.
- Find det lille cirkulære ikon med dobbelt pil på sidepanelet, og klik på det. Det vil genskabe layout, og dit blokdesign skal ligne billedet ovenfor.
Trin 5: Konfigurer HDL Wrapper og Konfigurer begrænsningsfil
Vi skal nu generere High Level Design til vores Block Design og derefter kortlægge PWM0, PWM1 og PWM2 til Pmod pins på Zybo boardet.
- Gå til fanen "Kilder". Højreklik på din blokdesignfil under "Designkilder" og klik på "Opret HDL -indpakning …". Vælg "Kopier genereret indpakning for at tillade brugerredigeringer", og klik på OK. Dette genererer design på højt niveau for det blokdesign, vi har oprettet.
- Den Pmod, vi vil udsende til, er JE.
- Vælg "Tilføj kilder …" under Fil, vælg "Tilføj eller opret begrænsninger", og klik på Næste.
- Klik på tilføj filer, og vælg den medfølgende "ZYBO_Master.xdc" -fil. Hvis du kigger i denne fil, vil du bemærke, at alt er ukommenteret bortset fra seks "set_property" -linjer under "## Pmod Header JE". Du vil bemærke, at PWM0, PWM1 og PWM2 er argumenterne for disse linjer. De kortlægger til Pin 1, Pin 2 og Pin 3 i JE Pmod.
Trin 6: Generering af Bitstream
Vi er nødt til at generere bitstrømmen for hardware -designet til at eksportere til SDK, før vi går videre.
- Vælg "Generer Bitstream" under "Program og fejlfinding" på sidebjælken. Dette vil køre syntese, derefter implementering og derefter generere bitstream til designet.
- Ret eventuelle fejl, der dukker op, men advarsler kan generelt ignoreres.
- Gå til Fil-> Start SDK, og klik på OK. Dette åbner Xilinx SDK.
Trin 7: Opsætning af projekt i SDK
Denne del kan være lidt frustrerende. Hvis du er i tvivl, skal du lave en ny BSP og udskifte den gamle. Dette sparede os en masse fejlfindingstid.
- Start med at downloade den nyeste version af FreeRTOS her.
- Uddrag alt fra download og importer FreeRTOS til SDK ved at klikke på File-> Import, og klik på "Eksisterende projekter i arbejdsområdet" under "Generelt", klik derefter på Næste.
- Gå til "FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702" i FreeRTOS -mappen. Importer kun "RTOSDemo" fra denne placering.
- Opret nu en Board Support Package (BSP) ved at klikke på File-> New Board Support Package.
- Vælg "ps7_cortexa9_0", og markér "lwip141", og klik på OK.
- Højreklik på RTOSDemo blå mappe og vælg "Projektreferencer".
- Fjern markeringen af "RTOSDemo_bsp", og tjek den nye BSP, som vi lige har oprettet.
Trin 8: FreeRTOS -kodeændringer
Koden, vi giver, kan opdeles i 7 forskellige filer. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.h og iic_imu.h. Koden i iic_main_thread.c er blevet tilpasset fra Kris Winer's bibliotek, som kan findes her. Vi transformerede hovedsageligt hans kode til at inkorporere opgaver og få den til at fungere med Zybo -kortet. Vi tilføjede også funktioner til beregning af korrektionen af kameraets orientering. Vi har efterladt i flere trykte erklæringer, der er nyttige til fejlfinding. De fleste af dem kommenteres, men hvis du føler behov for det, kan du kommentere dem.
- Den nemmeste måde at ændre main.c -filen på er at erstatte koden med kopieret kode fra vores medfølgende main.c -fil.
- For at oprette en ny fil skal du højreklikke på src -mappen under RTOSDemo og vælge C -kildefil. Navngiv denne fil "iic_main_thread.c".
- Kopiér koden fra den medfølgende "iic_main_thread.c" og indsæt den i din nyoprettede fil.
- Gentag trin 2 og 3 med de resterende filer.
- kræver en linkinstruktion i gcc. For at tilføje dette til build -stien skal du højreklikke på RTOSDemo og vælge "C/C ++ Build Settings".
- Et nyt vindue åbnes. Naviger til ARM v7 gcc linker-> Libraries. Vælg den lille tilføjelsesfil i øverste højre hjørne og indtast "m". Dette vil inkludere det matematiske bibliotek i projektet.
- Byg projekt med Ctrl + B for at bekræfte, at alt fungerer. Kontroller de advarsler, der genereres, men du kan muligvis ignorere dem.
- Der er et par steder, der skal ændres, hovedsageligt den magnetiske deklination af din nuværende placering. Vi vil forklare, hvordan du ændrer dette i kalibreringsdelen af selvstudiet.
Trin 9: 3D -udskrivning til stabilisator
Du skal 3D -udskrive et par dele til dette projekt. Man kan sandsynligvis købe dele, der har lignende dimensioner/størrelser som vores trykte dele.
- Brug de medfølgende filer til at udskrive armen og beslaget til GoPro.
- Du skal tilføje stilladser til.stl -filen.
- Trim/rengør dele af overskydende stilladser, når de er udskrevet.
- Du kan udskifte træpinden med en 3D -printet del, hvis du ønsker det.
Trin 10: Samling af delene
Det er flere dele til samling af stabilisatoren. De købte beslag leveres med 4 selvskærende skruer og 4 bolte med møtrikker. Da der er 3 servoer, skal et af servohornene tappes for at tillade 2 af boltene at passe igennem.
- Lod 8 stifter på IMU breakout, 4 på hver side.
- IMU'en er fastgjort til det 3D -trykte holdebeslag til GoPro i midten af beslaget.
- Orienter beslaget, så servomontagehullerne er på din venstre side. Placer IMU'en på den nærmeste kant til dig, med stifterne hængende fra kanten. Placer derefter GoPro -holderen oven på IMU'en ved at sætte IMU'en og holderen på plads på beslaget.
- Sæt en HS-5485HB på servobeslaget, der er integreret i den 3D-trykte arm.
- Skru GoPro -beslaget ind i den arm vedhæftede servo, og sørg for, at servoen er indstillet, så den er midt i dens bevægelsesområde.
- Sæt derefter HS-5685MH-servoen på et servobeslag. Tryk derefter på servohornet med en af skruerne. Fastgør nu servoen til bunden af den sidste servobeslag.
- Sæt nu den sidste servo fast på beslaget, som HS-5685MH-servoen er skruet i. Skru derefter armen i denne servo, og sørg for, at armen er skruet på, så den kan bevæge sig 90 grader hver vej.
- For at afslutte konstruktionen af gimbalen skal du tilføje et lille stykke træspindel til at forbinde mellem GoPro -beslaget og den 3D -trykte arm. Du har nu samlet stabilisatoren.
- Endelig kan du tilføje et håndtag, der er forbundet til det nederste servobeslag.
Trin 11: Tilslutning af Zybo til stabilisator
Der er et par ting, man skal være forsigtig med, når man gør dette. Du vil sikre dig, at 5V fra strømforsyningen aldrig går ind i Zybo -kortet, da dette ville føre til problemer med kortet. Sørg for at dobbelttjekke dine jumpere for at bekræfte, at der ikke skiftes ledninger.
- For at fastgøre Zybo til stabilisatoren skal du bruge 15 mandlige til mandlige springere og 4 mandlige til kvindelige springere.
- Tilslut først to jumpere til din 5V strømforsyning langs + og - skinnerne på brødbrættet. Disse vil levere strøm til servoer.
- Tilslut derefter 3 par jumpere til + og - skinnerne på brødbrættet. Disse vil være strømmen til hver af servoerne.
- Sæt den anden ende af + og - jumpere i hver af servoerne.
- Tilslut en jumper mellem - skinnen på brødbrættet og en af GND -benene på Zybo JE Pmod (se trin 5 billede). Dette vil skabe en fælles grund mellem Zybo -kortet og strømforsyningen.
- Tilslut derefter en signalkabel til pin 1, pin 2 og pin 3 på JE Pmod. Pin 1 kort til den nederste servo, pin 2 kort til servoen på enden af armen og pin 3 kort til den midterste servo.
- Sæt de 4 hunledninger i GND, VDD, SDA og SCL benene på IMU breakout. GND og VDD sættes i GND og 3V3 på JF benene. Sæt SDA -pin i pin 8 og SCL i pin 7 på JF (se trin 5 billede).
- Tilslut til sidst computeren til kortet ved hjælp af et mikro -usb -kabel. Dette tillader uart -kommunikation og giver dig mulighed for at programmere Zybo -kortet.
Trin 12: Ægte nordkorrektion
Kalibreringen af magnetometeret i IMU er vigtig for den korrekte funktion af enheden. Den magnetiske deklination, som korrigerer magnetisk nord til sand nord.
- For at korrigere forskellen fra magnetisk og sand nord skal du bruge en kombination af to tjenester, Google Maps og NOAAs magnetfeltberegner.
- Brug Google Maps til at finde din breddegrad og længdegrad for din nuværende placering.
- Tag din nuværende længde- og breddegrad og tilslut den til magnetfeltberegneren.
- Det, der returneres, er den magnetiske deklination. Indsæt denne beregning i koden på linje 378 i "iic_main_thread.c". Hvis din deklination er øst, skal du trække fra yaw -værdien, hvis vest derefter tilføje til yaw -værdien.
*foto er taget fra Sparkfun's MPU 9250 tilslutningsguide, fundet her.
Trin 13: Kørsel af programmet
Det øjeblik, du har ventet på! Den bedste del af projektet er at se det fungere. Et problem, vi har bemærket, er, at der er drift fra de værdier, der er rapporteret fra IMU. Et lavpasfilter kan hjælpe med at rette op på denne drift, og fiddling med magnetometeret, acceleration og gyrokalibreringer vil også hjælpe med at korrigere denne drift.
- Byg først alt i SDK, dette kan gøres ved at trykke på Ctrl + B.
- Sørg for, at strømforsyningen er tændt og indstillet til 5V. Dobbelttjek, at alle ledninger går til deres korrekte steder.
- Tryk derefter på den grønne trekant øverst i midten af proceslinjen for at køre programmet.
- Når programmet kører, nulstilles servoerne alle til deres 0 -positioner, så vær klar til at riggen kan bevæge sig. Når programmet initialiseres, klikker servoerne tilbage til deres 90 graders positioner.
- En magnetometer kalibreringsfunktion kører, og retninger udskrives til UART -terminalen, som du kan oprette forbindelse til via en seriel skærm, f.eks. 'Kitt' eller den serielle skærm, der findes i SDK'et.
- Kalibreringen får dig til at flytte enheden i en figur 8 i omkring 10 sekunder. Du kan fjerne dette trin ved at kommentere linje 273 i "iic_main_thread.c". Hvis du kommenterer det, skal du fjerne linjerne 323 - 325 "iic_main_thread.c". Disse værdier blev oprindeligt indsamlet fra magnetometerkalibreringen ovenfor og derefter tilsluttet som værdier.
- Efter kalibreringen initialiseres stabiliseringskoden, og enheden holder kameraet stabilt.
Anbefalede:
Håndholdt BASIC -computer: 6 trin (med billeder)
Håndholdt BASIC -computer: Denne vejledning beskriver min proces med at bygge en lille håndholdt computer, der kører BASIC. Computeren er bygget op omkring ATmega 1284P AVR -chippen, som også inspirerede det fjollede navn til computeren (HAL 1284). Denne build er STORT inspireret af
MutantC V3 - modulær og kraftfuld håndholdt pc: 9 trin (med billeder)
MutantC V3 - Modulær og kraftfuld håndholdt pc: En Raspberry -pi håndholdt platform med et fysisk tastatur, display- og udvidelseshoved til brugerdefinerede tavler (som Arduino Shield) .mutantC_V3 er efterfølgeren til mutantC_V1 og V2. Tjek mutantC_V1 og mutantC_V2.https: //mutantc.gitlab.io/https: // gitla
Håndholdt natlys: 7 trin (med billeder)
Håndholdt natlys: Min 5-årige blev ved med at vække os om natten, og vi blev ved med at forelægge ham for at lade mor og far sove, indtil jeg indså, at han faktisk ikke var i stand til selv at afgøre, om det var søvntid eller leg Han ville bede os om at tænde lyset
[3D Print] 30W håndholdt lanterne med høj effekt: 15 trin (med billeder)
[3D -udskrivning] 30W højeffekt håndholdt lanterne: Hvis du læser dette, har du sandsynligvis set en af disse Youtube -videoer, der viser DIY ekstremt kraftfulde lyskilder med enorme køleplader og batterier. Sandsynligvis kalder de endda dette "Lanterner", men jeg havde altid et andet begreb om lant
Håndholdt konsol med trådløse controllere og sensorer (Arduino MEGA & UNO): 10 trin (med billeder)
Håndholdt konsol med trådløse controllere og sensorer (Arduino MEGA & UNO): Hvad jeg brugte:- Arduino MEGA- 2x Arduino UNO- Adafruit 3.5 " TFT 320x480 Touchscreen HXD8357D- Buzzer- 4Ohm 3W højttaler- 5mm LED-lamper- Ultimaker 2+ printer m/ sort PLA filament- Laserskærer m/ MDF træ- Sort spraymaling (til træet)- 3x nRF24