Innehållsförteckning:
- Steg 1: Vivado Hardware Setup
- Steg 2: Konfigurera blockdesign
- Steg 3: Skapa anpassat PWM IP -block
- Steg 4: Lägg till PWM IP Block till Design
- Steg 5: Konfigurera HDL Wrapper och Konfigurera begränsningsfil
- Steg 6: Generera Bitstream
- Steg 7: Konfigurera projekt i SDK
- Steg 8: FreeRTOS -kodändringar
- Steg 9: 3D -utskrift för stabilisator
- Steg 10: Montering av delarna
- Steg 11: Anslutning av Zybo till stabilisator
- Steg 12: True North Correction
- Steg 13: Kör programmet
Video: Handhållen kamerastabilisator: 13 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Introduktion
Detta är en guide för att skapa en 3-axlig stabiliseringsrigg för handhållna kameror för en GoPro med hjälp av en Digilent Zybo Zynq-7000 Development Board. Detta projekt utvecklades för CPE Real-Time Operating Systems-klass (CPE 439). Stabilisatorn använder tre servon och en IMU för att korrigera användarens rörelse för att hålla kameran jämn.
Delar som krävs för projektet
- Digilent Zybo Zynq-7000 Development Board
- Sparkfun IMU Breakout - MPU 9250
- 2 HiTec HS-5485HB Servos (köp 180 graders rörelse eller program från 90 till 180 grader)
- 1 HiTec HS-5685MH Servo (köp 180 graders rörelse eller program från 90 till 180 grader)
- 2 standard servobeslag
- 1 brödbräda
- 15 tröjor från man till han
- 4 tröjor från man till kvinna
- Hot Lim
- Grepp eller handtag
- 5 mm diameter träpinne
- GoPro eller annan kamera och monteringsutrustning
- Strömförsörjning som kan mata ut 5V.
- Tillgång till 3D -skrivare
Steg 1: Vivado Hardware Setup
Låt oss komma igång med att skapa den underliggande blockdesignen för projektet.
- Öppna Vivado 2016.2, klicka på ikonen "Skapa nytt projekt" och klicka på "Nästa>".
- Ge ditt projekt ett namn och klicka på "Nästa>".
- Välj RTL -projektet och tryck på "Nästa>".
- Skriv i sökfältet xc7z010clg400-1 och välj sedan delen och tryck på "Nästa>" och "Slutför".
Steg 2: Konfigurera blockdesign
Nu börjar vi generera blockdesignen genom att lägga till och konfigurera Zynq IP Block.
- På den vänstra panelen, under IP Integrator, klicka på "Skapa blockdesign" och klicka sedan på "OK".
- Högerklicka på fliken "Diagram" och välj "Lägg till IP …".
- Skriv "ZYNQ7 Processing System" och klicka på valet.
- Dubbelklicka på Zynq -blocket som visas.
- Klicka på "Importera XPS -inställningar" och importera den medföljande "ZYBO_zynq_def.xml" -filen.
- Gå till "MIO Configuration" och välj "Application Processor Unit" och aktivera Timer 0 och Watchdog timers.
- På samma flik, under "I/O Peripherals", välj ENET 0 (och ändra rullgardinsmenyn till "MIO 16.. 27", USB 0, SD 0, UART 1, I2C 0.
- Under "GPIO", markera GPIO MIO, ENET Reset, USB Reset och I2C Reset.
- Navigera nu till "Clock Configuration". Välj FCLK_CLK0 under PL -tygklockor. Klicka sedan på "OK".
Steg 3: Skapa anpassat PWM IP -block
Detta IP -block gör att kortet kan skicka ut en PWM -signal för att styra rörelserna i servon. Arbetet var starkt baserat på handledningen från Digitronix Nepal, som finns här. Logik lades till för att sakta ner klockan så att pulsen matade ut med rätt hastighet. Blocket tar ett tal från 0 till 180 och omvandlar det till en puls från 750-2150 usec.
- Klicka nu på "Skapa och paketera IP …" under fliken Verktyg nära det övre vänstra hörnet och klicka på Nästa.
- Välj sedan "Skapa en ny AXI4 -kringutrustning" och tryck på Nästa.
- Namnge ditt PWM IP -block (vi kallade det pwm_core) och klicka på Nästa och klicka sedan på Nästa på nästa sida också.
- Klicka nu på "Redigera IP" och tryck på Slutför. Detta öppnar ett nytt fönster för att redigera pwm -blocket.
- På fliken "Källor" och under "Designkällor", expandera "pwm_core_v1_0" (ersätt pwm_core med ditt namn) och öppna filen som blir synlig.
- Kopiera och klistra in koden under 'pwm_core_v1_0_S00_AXI.v' i zip -filen längst ner i projektet. Ctrl + Skift + R och ersätt 'pwm_core' med ditt namn för ip -blocket.
- Öppna sedan "namn _v1_0" och kopiera in den angivna koden i filen "pwm_core_v1_0.v". Ctrl + Skift + R och ersätt 'pwm_core' med namn.
- Navigera nu till fliken "Paketets IP - namn" och välj "Anpassningsparametrar".
- På den här fliken kommer det att finnas ett gult fält längst upp som har länkad text. Välj detta så visas "Dolda parametrar" i rutan.
- Gå nu till "Customization GUI" och högerklicka på Pwm Counter Max välj "Edit Parameter …".
- Markera rutorna "Synlig i anpassnings -GUI" och "Ange intervall".
- Ändra rullgardinsmenyn "Typ:" till Helhetsintervall och ställ in lägst till 0 och maximalt till 65535 och markera rutan "Visa intervall". Klicka nu på OK.
- Dra Pwm Counter Max under trädet "Sida 0". Gå nu till "Granska och paketera" och klicka på knappen "Paketera om IP".
Steg 4: Lägg till PWM IP Block till Design
Vi kommer att lägga till IP -blocket i blockdesignen för att ge användaren åtkomst till PWM IP -blocket via processorn.
- Högerklicka på diagramfliken och klicka på "IP -inställningar …". Navigera till "Repository Manager" -fliken.
- Klicka på den gröna plusknappen och välj den. Hitta nu ip_repo i Filhanteraren och lägg till det i projektet. Tryck sedan på Apply och sedan OK.
- Högerklicka på diagramfliken och klicka på "Lägg till IP …". Skriv in ditt PWM IP -blocknamn och välj det.
- Det ska finnas en grön stapel högst upp på skärmen, välj först "Kör anslutningsautomation" och klicka på OK. Klicka sedan på "Kör Block Automation" och klicka på OK.
- Dubbelklicka på PWM -blocket och ändra Pwm Counter Max till 1024 från 128.
- Håll muspekaren över PWM0 på PWM -blocket. Det ska finnas en liten penna som dyker upp när du gör det. Högerklicka och välj "Skapa port …" och klicka på OK när ett fönster öppnas. Detta skapar en extern port för signalen som ska skickas till.
- Upprepa steg 6 för PWM1 och PWM2 också.
- Hitta den lilla cirkulära dubbelpilen på sidofältet och klicka på den. Det kommer att återskapa layout och din blockdesign ska se ut som på bilden ovan.
Steg 5: Konfigurera HDL Wrapper och Konfigurera begränsningsfil
Vi ska nu generera designen på hög nivå för vår blockdesign och sedan kartlägga PWM0, PWM1 och PWM2 till Pmod -stiften på Zybo -kortet.
- Gå till fliken "Källor". Högerklicka på din blockdesignfil under "Designkällor" och klicka på "Create HDL Wrapper …". Välj "Kopiera genererad omslag för att tillåta användarredigeringar" och klicka på OK. Detta genererar High Level Design för Block Design vi skapade.
- Pmod vi kommer att leverera till är JE.
- Under Arkiv, välj "Lägg till källor …" och välj "Lägg till eller skapa begränsningar" och klicka på Nästa.
- Klicka på lägg till filer och välj den medföljande filen "ZYBO_Master.xdc". Om du tittar i den här filen kommer du att märka att allt är okommenterat förutom sex "set_property" -rader under "## Pmod Header JE". Du kommer att märka att PWM0, PWM1 och PWM2 är argumenten för dessa rader. De kartlägger till Pin 1, Pin 2 och Pin 3 i JE Pmod.
Steg 6: Generera Bitstream
Vi måste generera bitströmmen för att hårdvarudesignen ska kunna exporteras till SDK innan vi går vidare.
- Under "Program och felsökning" i sidofältet, välj "Generera Bitstream". Detta kommer att köra syntes, sedan implementering och sedan generera bitströmmen för designen.
- Korrigera eventuella fel som dyker upp, men varningar kan i allmänhet ignoreras.
- Gå till Arkiv-> Starta SDK och klicka på OK. Detta öppnar Xilinx SDK.
Steg 7: Konfigurera projekt i SDK
Den här delen kan vara lite frustrerande. Om du är osäker, gör en ny BSP och byt ut den gamla. Detta sparade oss en massa felsökningstid.
- Börja med att ladda ner den senaste versionen av FreeRTOS här.
- Extrahera allt från nedladdningen och importera FreeRTOS till SDK genom att klicka på Arkiv-> Importera, och klicka på "Existerande projekt i arbetsytan" under "Allmänt" och klicka sedan på Nästa.
- Gå till "FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702" i FreeRTOS -mappen. Importera endast "RTOSDemo" från den här platsen.
- Skapa nu ett Board Support Package (BSP) genom att klicka på File-> New Board Support Package.
- Välj "ps7_cortexa9_0" och markera "lwip141" och klicka på OK.
- Högerklicka på den blå mappen RTOSDemo och välj "Projektreferenser".
- Avmarkera "RTOSDemo_bsp" och kontrollera den nya BSP som vi just skapade.
Steg 8: FreeRTOS -kodändringar
Koden vi tillhandahåller kan delas upp i sju olika filer. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.h och iic_imu.h. Koden i iic_main_thread.c har anpassats från Kris Winer's bibliotek, som finns här. Vi transformerade huvudsakligen hans kod för att införliva uppgifter och få den att fungera med Zybo -kortet. Vi har också lagt till funktioner för att beräkna korrigeringen av kamerans orientering. Vi har lämnat i flera tryckta uttalanden som är användbara för felsökning. De flesta av dem kommenteras men om du känner behov kan du kommentera dem.
- Det enklaste sättet att ändra main.c -filen är att ersätta koden med kopierad kod från vår medföljande main.c -fil.
- För att skapa en ny fil, högerklicka på src -mappen under RTOSDemo och välj C -källfil. Ge den här filen namnet "iic_main_thread.c".
- Kopiera koden från den medföljande "iic_main_thread.c" och klistra in den i din nyskapade fil.
- Upprepa steg 2 och 3 med de återstående filerna.
- kräver en länkningsinstruktion i gcc. För att lägga till detta i byggvägen högerklickar du på RTOSDemo och väljer "C/C ++ Build Settings".
- Ett nytt fönster öppnas. Navigera till ARM v7 gcc linker-> Libraries. Välj den lilla tilläggsfilen i det övre högra hörnet och skriv in "m". Detta kommer att inkludera det matematiska biblioteket i projektet.
- Bygg projekt med Ctrl + B för att bekräfta att allt fungerar. Kontrollera de varningar som genereras men du kanske kan ignorera dem.
- Det finns ett par platser som kommer att behöva ändras, främst den magnetiska deklinationen av din nuvarande plats. Vi kommer att förklara hur du ändrar detta i kalibreringsdelen av handledningen.
Steg 9: 3D -utskrift för stabilisator
Du måste 3D -skriva ut ett par delar för detta projekt. Man kan förmodligen köpa delar som har liknande dimensioner/storlekar som våra tryckta delar.
- Använd filerna för att skriva ut armen och hållarfästet för GoPro.
- Du måste lägga till byggnadsställningar till.stl -filen.
- Trimma/rengör delar av överskott av byggnadsställningar när de har skrivits ut.
- Du kan byta ut träpinnen med en 3D -tryckt del om du vill.
Steg 10: Montering av delarna
Det finns flera delar för att montera stabilisatorn. De köpta fästena levereras med 4 självgängande skruvar och 4 bultar med muttrar. Eftersom det finns tre servon måste ett av servohornen vara för-tappat för att 2 av bultarna ska passa igenom.
- Löd 8 stift på IMU -utbrottet, 4 på varje sida.
- IMU är ansluten till den 3D -tryckta hållarfästet för GoPro i mitten av fästet.
- Rikta fästet så att servomontagehålen är på din vänstra sida. Placera IMU på den närmaste kanten till dig, med stiften hängande utanför kanten. Placera sedan GoPro -fästet ovanpå IMU, fäst IMU och fästet på plats på fästet.
- Fäst en HS-5485HB på servofästet som är integrerat i den 3D-tryckta armen.
- Skruva fast GoPro -fästet i den armfästa servon och se till att servon är inställd så att den är mitt i sitt rörelseområde.
- Fäst sedan HS-5685MH-servon på en servofäste. Knacka sedan på servohornet med en av skruvarna. Fäst nu servon i botten av den sista servofästet.
- Fäst nu den sista servon på fästet som HS-5685MH-servon är skruvad i. Skruva sedan in armen i denna servo och se till att armen är skruvad så att den kan röra sig 90 grader åt varje håll.
- För att avsluta konstruktionen av gimbalen, lägg till en liten bit av träpluggen för att ansluta mellan GoPro -fästet och den 3D -tryckta armen. Du har nu monterat stabilisatorn.
- Slutligen kan du lägga till ett handtag anslutet till den nedre servofästet.
Steg 11: Anslutning av Zybo till stabilisator
Det finns ett par saker att vara försiktig med när du gör detta. Du vill se till att 5V från strömförsörjningen aldrig går in i Zybo -kortet, eftersom detta skulle leda till problem med kortet. Var noga med att dubbelkolla dina hoppare för att bekräfta att inga ledningar byts.
- För att fästa Zybo på stabilisatorn behöver du 15 manliga till manliga hoppare och 4 manliga till kvinnliga hoppare.
- Anslut först två hoppare till din 5V strömförsörjning längs + och - skenorna på panelen. Dessa kommer att leverera strömmen till servona.
- Anslut sedan 3 par hoppare till + och - skenorna på panelen. Dessa kommer att vara kraften för var och en av servona.
- Anslut den andra änden av + och - hopparna till var och en av servona.
- Anslut en bygel mellan - skenan på brödbrädan och en av GND -stiften på Zybo JE Pmod (se steg 5 bild). Detta skapar en gemensam grund mellan Zybo -kortet och strömförsörjningen.
- Anslut sedan en signalkabel till stift 1, stift 2 och stift 3 på JE Pmod. Pin 1 kartor till den nedre servon, pin 2 kartor till servo på armens ände och pin 3 kartor till den mellersta servon.
- Anslut de fyra hankablarna till GND-, VDD-, SDA- och SCL -stiften på IMU -utbrytningen. GND och VDD ansluts till GND och 3V3 på JF -stiften. Anslut SDA -stift till stift 8 och SCL till stift 7 på JF (se bild 5 i steg 5).
- Slutligen, anslut datorn till kortet med en mikro -usb -kabel. Detta kommer att tillåta kommunikation och låta dig programmera Zybo -kortet.
Steg 12: True North Correction
Kalibreringen av magnetometern i IMU är viktig för att enheten ska fungera korrekt. Den magnetiska deklinationen, som korrigerar magnetisk norr till sann norr.
- För att korrigera skillnaden från magnetisk och sann norr måste du använda en kombination av två tjänster, Google Maps och NOAA: s magnetfältskalkylator.
- Använd Google Maps för att hitta din latitud och longitud för din nuvarande plats.
- Ta din nuvarande longitud och latitud och anslut den till magnetfältets räknare.
- Det som returneras är den magnetiska deklinationen. Anslut denna beräkning till koden på rad 378 i "iic_main_thread.c". Om din deklination är österut, subtrahera sedan från yaw -värdet, om västerut lägg sedan till yaw -värdet.
*fotot är taget från Sparkfun's MPU 9250 -anslutningsguide, som finns här.
Steg 13: Kör programmet
Det ögonblick du har väntat på! Den bästa delen av projektet är att se det fungera. Ett problem vi har märkt är att det finns avvikelse från de värden som rapporterats från IMU. Ett lågpassfilter kan hjälpa till att korrigera denna drift, och att tjata med magnetometern, acceleration och gyrokalibreringar hjälper också till att korrigera denna drift.
- Bygg först allt i SDK, detta kan göras genom att trycka på Ctrl + B.
- Se till att strömförsörjningen är på och inställd på 5V. Dubbelkolla att alla ledningar går till rätt plats.
- Tryck sedan på den gröna triangeln i det övre mitten av aktivitetsfältet för att köra programmet.
- När programmet körs återställs alla servon till sina 0 -positioner, så var redo för att riggen ska flytta. När programmet initierats kommer servon att snäppa tillbaka till sina 90 graders positioner.
- En magnetometerkalibreringsfunktion körs och riktningar skrivs ut till UART -terminalen, som du kan ansluta till via en seriell bildskärm, till exempel "kitt" eller seriell bildskärm i SDK.
- Kalibreringen gör att du flyttar enheten i figur 8 i cirka 10 sekunder. Du kan ta bort detta steg genom att kommentera rad 273 i "iic_main_thread.c". Om du kommenterar det måste du kommentera raderna 323 - 325 "iic_main_thread.c". Dessa värden samlades inledningsvis från magnetometerkalibreringen ovan och kopplades sedan in som värden.
- Efter kalibreringen initieras stabiliseringskoden och enheten håller kameran stabil.
Rekommenderad:
Handhållen BASIC -dator: 6 steg (med bilder)
Handhållen BASIC -dator: Denna instruktionsbok beskriver min process för att bygga en liten handdator som kör BASIC. Datorn är byggd kring ATmega 1284P AVR -chipet, som också inspirerade det dumma namnet på datorn (HAL 1284) .Denna konstruktion är TYCKLIGT inspirerad av
MutantC V3 - modulär och kraftfull handhållen dator: 9 steg (med bilder)
MutantC V3 - Modulär och kraftfull handhållen PC: En Raspberry -pi -handhållen plattform med ett fysiskt tangentbord, display- och expansionshuvud för anpassade kort (som Arduino Shield) .mutantC_V3 är efterföljare av mutantC_V1 och V2. Kolla in mutantC_V1 och mutantC_V2.https: //mutantc.gitlab.io/https: // gitla
Handhållen nattlampa: 7 steg (med bilder)
Handhållen nattlampa: Min 5-åring fortsatte att väcka oss på natten, och vi fortsatte att föreläsa honom om att låta mamma och pappa sova tills jag insåg att han faktiskt inte kunde avgöra själv om det var sömntid eller lek Dessutom ber han oss att tända lampan.
Handhållen konsol med trådlösa kontroller och sensorer (Arduino MEGA & UNO): 10 steg (med bilder)
Handhållen konsol med trådlösa kontroller och sensorer (Arduino MEGA & UNO): Vad jag använde:- Arduino MEGA- 2x Arduino UNO- Adafruit 3.5 " TFT 320x480 pekskärm HXD8357D- summer- 4Ohm 3W högtalare- 5mm LED-lampor- Ultimaker 2+ skrivare m/ svart PLA-filament- Laserskärare m/ MDF-trä- Svart sprayfärg (för träet)- 3x nRF24
Arduino kamerastabilisator DIY: 4 steg (med bilder)
Arduino kamerastabilisator DIY: Jag gjorde en kamerastabilisator med hjälp av arduino för ett skolprojekt. Du behöver: 1x Arduino Uno3x servomotor1x Gyroskop MP60502x knapp1x potentiometer1x brödbräda (1x extern strömförsörjning)