Inhoudsopgave:
- Stap 1: Vivado Hardware-installatie
- Stap 2: Blokontwerp instellen
- Stap 3: Maak een aangepast PWM IP-blok aan
- Stap 4: PWM IP-blok toevoegen aan ontwerp
- Stap 5: HDL-wrapper configureren en bestand met beperkingen instellen
- Stap 6: Bitstream genereren
- Stap 7: Project opzetten in SDK
- Stap 8: FreeRTOS-codewijzigingen
- Stap 9: 3D-printen voor stabilisator
- Stap 10: De onderdelen monteren
- Stap 11: Zybo verbinden met stabilisator
- Stap 12: True North Correction
- Stap 13: Het programma uitvoeren
Video: Handheld camerastabilisator - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
Invoering
Dit is een handleiding voor het maken van een 3-assige handheld camerastabilisatie-rig voor een GoPro met behulp van een Digilent Zybo Zynq-7000 Development Board. Dit project is ontwikkeld voor de klasse CPE Real-Time Operating Systems (CPE 439). De stabilisator gebruikt drie servo's en een IMU om de beweging van de gebruiker te corrigeren om de camera waterpas te houden.
Onderdelen die nodig zijn voor het project
- Digilent Zybo Zynq-7000 Ontwikkelingsbord
- Sparkfun IMU Breakout - MPU 9250
- 2 HiTec HS-5485HB servo's (koop 180 graden beweging of programmeer van 90 tot 180 graden)
- 1 HiTec HS-5685MH Servo (koop 180 graden beweging of programmeer van 90 tot 180 graden)
- 2 standaard servobeugels
- 1 Breadboard
- 15 man-naar-mannelijke jumperdraden
- 4 man-naar-vrouw jumperdraden
- Hete lijm
- Greep of handvat
- Houten deuvel met een diameter van 5 mm
- GoPro of ander camera- en bevestigingsmateriaal
- Voeding die 5V kan leveren.
- Toegang tot 3D-printer
Stap 1: Vivado Hardware-installatie
Laten we beginnen met het maken van het onderliggende blokontwerp voor het project.
- Open Vivado 2016.2, klik op het pictogram "Nieuw project maken" en klik op "Volgende>".
- Geef uw project een naam en klik op "Volgende >".
- Kies het RTL-project en klik op "Volgende >".
- Typ in de zoekbalk xc7z010clg400-1 en selecteer vervolgens het onderdeel en klik op "Volgende >" en "Voltooien".
Stap 2: Blokontwerp instellen
Nu zullen we beginnen met het genereren van het blokontwerp door het Zynq IP-blok toe te voegen en in te stellen.
- Klik in het linkerdeelvenster onder IP Integrator op "Blokontwerp maken" en klik vervolgens op "OK".
- Klik met de rechtermuisknop op het tabblad "Diagram" en kies "IP toevoegen…".
- Typ "ZYNQ7 Processing System" en klik op de selectie.
- Dubbelklik op het Zynq-blok dat verschijnt.
- Klik op "XPS-instellingen importeren" en importeer het meegeleverde bestand "ZYBO_zynq_def.xml".
- Ga naar "MIO Configuration" en selecteer "Application Processor Unit" en schakel Timer 0 en Watchdog-timers in.
- Selecteer in hetzelfde tabblad onder "I/O-randapparatuur" ENET 0 (en verander het vervolgkeuzemenu in "MIO 16.. 27", USB 0, SD 0, UART 1, I2C 0.
- Vink onder "GPIO" GPIO MIO, ENET Reset, USB Reset en I2C Reset aan.
- Navigeer nu naar "Klokconfiguratie". Selecteer FCLK_CLK0 onder PL Fabric Clocks. Klik vervolgens op "OK".
Stap 3: Maak een aangepast PWM IP-blok aan
Met dit IP-blok kan het bord een PWM-signaal verzenden om de beweging van de servo's te regelen. Het werk was sterk gebaseerd op de tutorial van Digitronix Nepal, die hier te vinden is. Logica werd toegevoegd om de klok te vertragen, zodat de puls met de juiste snelheid werd uitgevoerd. Het blok neemt een getal van 0 tot 180 en zet dit om in een puls van 750-2150 usec.
- Klik nu onder het tabblad Tools in de linkerbovenhoek op "Create and Package IP…" en klik op Next.
- Selecteer vervolgens "Maak een nieuw AXI4-randapparaat aan" en klik op Volgende.
- Geef uw PWM IP-blok een naam (we noemden het pwm_core) en klik op Volgende en klik vervolgens ook op Volgende op de volgende pagina.
- Klik nu op "IP bewerken" en klik op Voltooien. Dit opent een nieuw venster om het pwm-blok te bewerken.
- Vouw op het tabblad "Bronnen" en onder "Ontwerpbronnen" 'pwm_core_v1_0' uit (vervang pwm_core door uw naam) en open het bestand dat zichtbaar wordt.
- Kopieer en plak de code onder 'pwm_core_v1_0_S00_AXI.v' in het zipbestand onderaan het project. Ctrl + Shift + R en vervang 'pwm_core' door uw naam voor het ip-blok.
- Open vervolgens ' name _v1_0' en kopieer de meegeleverde code in het bestand 'pwm_core_v1_0.v'. Ctrl + Shift + R en vervang 'pwm_core' door naam.
- Navigeer nu naar het tabblad 'Pakket IP - naam' en selecteer 'Aanpassingsparameters'.
- Op dit tabblad staat bovenaan een gele balk met gekoppelde tekst. Selecteer dit en "Verborgen parameters" verschijnt in het vak.
- Ga nu naar "Customization GUI" en klik met de rechtermuisknop op Pwm Counter Max en selecteer "Edit Parameter…".
- Vink de vakjes "Zichtbaar in Customization GUI" en "Specify Range" aan.
- Wijzig het vervolgkeuzemenu "Type:" in Bereik van gehele getallen en stel minimum in op 0 en maximum op 65535 en vink het vakje "Toon bereik" aan. Klik nu op OK.
- Sleep Pwm Counter Max onder de boom 'Pagina 0'. Ga nu naar "Review and Package" en klik op de knop "Re-Package IP".
Stap 4: PWM IP-blok toevoegen aan ontwerp
We zullen het IP-blok toevoegen aan het blokontwerp om de gebruiker toegang te geven tot het PWM IP-blok via de processor.
- Klik met de rechtermuisknop op het diagramtabblad en klik op "IP-instellingen…". Navigeer naar het tabblad "Repository Manager".
- Klik op de groene plusknop en selecteer deze. Zoek nu ip_repo in Bestandsbeheer en voeg dat toe aan het project. Druk vervolgens op Toepassen en vervolgens op OK.
- Klik met de rechtermuisknop op het diagramtabblad en klik op "IP toevoegen…". Typ uw PWM IP-bloknaam in en selecteer deze.
- Er moet een groene balk bovenaan het scherm zijn, selecteer eerst "Verbindingsautomatisering uitvoeren" en klik op OK. Klik vervolgens op "Blokautomatisering uitvoeren" en klik op OK.
- Dubbelklik op het PWM-blok en verander Pwm Counter Max in 1024 van 128.
- Beweeg uw muisaanwijzer over PWM0 op het PWM-blok. Er zou een klein potlood moeten zijn dat verschijnt als je dat doet. Klik met de rechtermuisknop en selecteer "Poort maken…" en klik op OK wanneer een venster wordt geopend. Dit creëert een externe poort waarnaar het signaal moet worden doorgegeven.
- Herhaal stap 6 ook voor PWM1 en PWM2.
- Zoek het kleine ronde dubbele pijlpictogram in de zijbalk en klik erop. Het zal de lay-out regenereren en uw blokontwerp zou eruit moeten zien als de afbeelding hierboven.
Stap 5: HDL-wrapper configureren en bestand met beperkingen instellen
We gaan nu het ontwerp op hoog niveau voor ons blokontwerp genereren en vervolgens PWM0, PWM1 en PWM2 toewijzen aan Pmod-pinnen op het Zybo-bord.
- Ga naar het tabblad "Bronnen". Klik met de rechtermuisknop op uw blokontwerpbestand onder "Ontwerpbronnen" en klik op "HDL-wrapper maken…". Selecteer "Gegenereerde wrapper kopiëren om gebruikersbewerkingen toe te staan" en klik op OK. Dit genereert het High Level Design voor het Block Design dat we hebben gemaakt.
- De Pmod waarnaar we zullen uitvoeren is JE.
- Selecteer onder Bestand "Bronnen toevoegen…" en selecteer "Beperkingen toevoegen of maken" en klik op Volgende.
- Klik op bestanden toevoegen en selecteer het meegeleverde bestand "ZYBO_Master.xdc". Als je in dit bestand kijkt, zul je merken dat alles zonder commentaar is, behalve zes "set_property" regels onder "##Pmod Header JE". U zult merken dat PWM0, PWM1 en PWM2 de argumenten voor deze regels zijn. Ze zijn toegewezen aan Pin 1, Pin 2 en Pin 3 van de JE Pmod.
Stap 6: Bitstream genereren
We moeten de bitstream genereren voor het hardwareontwerp om naar de SDK te exporteren voordat we verder gaan.
- Selecteer onder "Programma en foutopsporing" in de zijbalk "Bitstream genereren". Hiermee wordt de synthese uitgevoerd, vervolgens de implementatie en wordt vervolgens de bitstream voor het ontwerp gegenereerd.
- Corrigeer eventuele fouten die verschijnen, maar waarschuwingen kunnen over het algemeen worden genegeerd.
- Ga naar Bestand-> SDK starten en klik op OK. Hiermee wordt de Xilinx SDK geopend.
Stap 7: Project opzetten in SDK
Dit deel kan een beetje frustrerend zijn. Maak bij twijfel een nieuwe BSP en vervang de oude. Dit heeft ons een hoop debugging tijd bespaard.
- Begin met het downloaden van de nieuwste versie van FreeRTOS hier.
- Pak alles uit de download en importeer FreeRTOS in de SDK door op Bestand->Importeren te klikken en onder "Algemeen" op "Bestaande projecten in werkruimte" te klikken en vervolgens op Volgende.
- Ga naar "FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702" in de FreeRTOS-map. Importeer "RTOSDemo" alleen vanaf deze locatie.
- Genereer nu een Board Support Package (BSP) door op Bestand->New Board Support Package te klikken.
- Selecteer "ps7_cortexa9_0" en vink "lwip141" aan en klik op OK.
- Klik met de rechtermuisknop op de blauwe map van RTOSDemo en selecteer "Projectreferenties".
- Schakel "RTOSDemo_bsp" uit en vink de nieuwe BSP aan die we zojuist hebben gemaakt.
Stap 8: FreeRTOS-codewijzigingen
De code die we leveren kan worden opgedeeld in 7 verschillende bestanden. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.h en iic_imu.h. De code in iic_main_thread.c is aangepast uit de bibliotheek van Kris Winer, die hier te vinden is. We hebben zijn code voornamelijk getransformeerd om taken op te nemen en te laten werken met het Zybo-bord. We hebben ook functies toegevoegd voor het berekenen van de correctie van de oriëntatie van de camera. We hebben verschillende printinstructies achtergelaten die nuttig zijn voor debuggen. De meeste van hen zijn becommentarieerd, maar als u de behoefte voelt, kunt u ze verwijderen.
- De eenvoudigste manier om het main.c-bestand te wijzigen, is door de code te vervangen door gekopieerde code uit ons meegeleverde main.c-bestand.
- Om een nieuw bestand aan te maken, klikt u met de rechtermuisknop op de src-map onder RTOSDemo en selecteert u C-bronbestand. Noem dit bestand "iic_main_thread.c".
- Kopieer de code van de meegeleverde "iic_main_thread.c" en plak deze in uw nieuw gemaakte bestand.
- Herhaal stap 2 en 3 met de overige bestanden.
- vereist een koppelingsinstructie in gcc. Om dit aan het buildpad toe te voegen, klikt u met de rechtermuisknop op RTOSDemo en selecteert u "C/C++ Build Settings".
- Er wordt een nieuw venster geopend. Navigeer naar ARM v7 gcc linker->Bibliotheken. Selecteer het kleine add-bestand in de rechterbovenhoek en typ "m". Dit zal de wiskundebibliotheek in het project opnemen.
- Bouw een project met Ctrl + B om te bevestigen dat alles werkt. Controleer de waarschuwingen die worden gegenereerd, maar u kunt ze mogelijk negeren.
- Er zijn een paar plaatsen die moeten worden aangepast, voornamelijk de magnetische declinatie van uw huidige locatie. We zullen uitleggen hoe u dit kunt wijzigen in het kalibratiegedeelte van de tutorial.
Stap 9: 3D-printen voor stabilisator
Voor dit project moet je een aantal onderdelen in 3D printen. Men kan waarschijnlijk onderdelen kopen die dezelfde afmetingen/afmetingen hebben als onze gedrukte onderdelen.
- Gebruik de meegeleverde bestanden om de arm en houder voor de GoPro af te drukken.
- U moet steigers toevoegen aan het.stl-bestand.
- Trim / reinig delen van overtollige steigers zodra ze zijn afgedrukt.
- Indien gewenst kunt u de houten deuvel vervangen door een 3D geprint onderdeel.
Stap 10: De onderdelen monteren
Het zijn verschillende onderdelen om de stabilisator te monteren. De gekochte beugels worden geleverd met 4 zelftappende schroeven en 4 bouten met moeren. Aangezien er 3 servo's zijn, moet een van de servohoorns vooraf worden getikt om 2 van de bouten door te laten passen.
- Soldeer 8 pinnen op de IMU breakout, 4 aan elke kant.
- De IMU is bevestigd aan de 3D-geprinte houder voor de GoPro in het midden van de beugel.
- Richt de beugel zodat de servo-montagegaten zich aan uw linkerkant bevinden. Plaats de IMU op de dichtstbijzijnde rand naar u toe, met de pinnen aan de rand. Plaats vervolgens de GoPro-houder op de IMU en plak de IMU en de houder op de beugel.
- Bevestig een HS-5485HB aan de servobeugel die in de 3D-geprinte arm is geïntegreerd.
- Schroef de GoPro-beugel in de aan de arm bevestigde servo en zorg ervoor dat de servo zo is ingesteld dat deze zich in het midden van zijn bewegingsbereik bevindt.
- Bevestig vervolgens de HS-5685MH-servo aan een servobeugel. Tik vervolgens met een van de schroeven op de servohoorn. Bevestig nu de servo aan de onderkant van de laatste servobeugel.
- Bevestig nu de laatste servo aan de beugel waar de HS-5685MH servo in is geschroefd. Schroef vervolgens de arm in deze servo en zorg ervoor dat de arm is vastgeschroefd zodat deze 90 graden in elke richting kan bewegen.
- Om de constructie van de cardanische ophanging te voltooien, voegt u een klein stukje van de houten plug toe om de GoPro-beugel en de 3D-geprinte arm te verbinden. Je hebt nu de stabilisator gemonteerd.
- Ten slotte kunt u een handgreep toevoegen die is aangesloten op de onderste servobeugel.
Stap 11: Zybo verbinden met stabilisator
Er zijn een paar dingen waar u op moet letten wanneer u dit doet. Je wilt er zeker van zijn dat de 5V van de voeding nooit in het Zybo-bord gaat, omdat dit tot problemen met het bord zou leiden. Zorg ervoor dat u uw jumpers dubbel controleert om te bevestigen dat er geen draden worden verwisseld.
- Om de Zybo aan de stabilisator te bevestigen heb je 15 man-man jumpers en 4 man-vrouw jumpers nodig.
- Sluit eerst twee jumpers aan op je 5V-voeding langs de + en - rails van het breadboard. Deze leveren de stroom aan de servo's.
- Verbind vervolgens 3 paar jumpers met de + en - rails van het breadboard. Dit is het vermogen voor elk van de servo's.
- Steek het andere uiteinde van de + en - jumpers in elk van de servo's.
- Sluit een jumper aan tussen de - rail van het breadboard en een van de GND-pinnen op de Zybo JE Pmod (zie afbeelding van stap 5). Dit zorgt voor een gemeenschappelijke basis tussen het Zybo-bord en de voeding.
- Sluit vervolgens een signaaldraad aan op pin 1, pin 2 en pin 3 van de JE Pmod. Pin 1 verwijst naar de onderste servo, pin 2 verwijst naar de servo aan het uiteinde van de arm en pin 3 verwijst naar de middelste servo.
- Steek de 4 vrouwelijke draden in de GND-, VDD-, SDA- en SCL-pinnen van de IMU-breakout. GND en VDD worden aangesloten op de GND en 3V3 op de JF-pinnen. Steek de SDA-pin in pin 8 en SCL in pin 7 op de JF (zie stap 5 afbeelding).
- Sluit ten slotte de computer aan op het bord met behulp van een micro-usb-kabel. Dit maakt uart-communicatie mogelijk en stelt u in staat om het Zybo-bord te programmeren.
Stap 12: True North Correction
De kalibratie van de magnetometer in de IMU is belangrijk voor de juiste werking van het apparaat. De magnetische declinatie, die het magnetische noorden corrigeert naar het ware noorden.
- Om het verschil met het magnetische en het ware noorden te corrigeren, moet u een combinatie van twee services gebruiken, Google Maps en de magnetische veldcalculator van NOAA.
- Gebruik Google Maps om de lengte- en breedtegraad van uw huidige locatie te vinden.
- Neem uw huidige lengte- en breedtegraad en sluit deze aan op de magnetische veldcalculator.
- Wat wordt geretourneerd is de magnetische declinatie. Sluit deze berekening aan op de code op regel 378 van "iic_main_thread.c". Als je declinatie oost is, trek dan af van de yaw-waarde, als west dan optelt bij de yaw-waarde.
* foto is genomen uit Sparkfun's MPU 9250-aansluitgids, hier te vinden.
Stap 13: Het programma uitvoeren
Het moment waar je op hebt gewacht! Het beste deel van het project is om het te zien werken. Een probleem dat we hebben opgemerkt, is dat er een afwijking is van de waarden die door de IMU worden gerapporteerd. Een laagdoorlaatfilter kan deze drift helpen corrigeren, en spelen met de magnetometer, acceleratie- en gyro-kalibraties zal ook helpen deze drift te corrigeren.
- Bouw eerst alles in de SDK, dit kan door op Ctrl + B te drukken.
- Zorg ervoor dat de voeding is ingeschakeld en op 5V is ingesteld. Controleer nogmaals of alle draden naar hun juiste plaatsen gaan.
- Om het programma vervolgens uit te voeren, drukt u op de groene driehoek in het midden bovenaan de taakbalk.
- Wanneer het programma loopt, worden de servo's allemaal gereset naar hun 0-posities, dus wees klaar om de rig te verplaatsen. Zodra het programma is geïnitialiseerd, zullen de servo's terugspringen naar hun 90 graden posities.
- Er wordt een magnetometer-kalibratiefunctie uitgevoerd en aanwijzingen worden afgedrukt naar de UART-terminal, waarop u verbinding kunt maken via een seriële monitor zoals 'putty' of de seriële monitor die in de SDK wordt geleverd.
- De kalibratie zorgt ervoor dat u het apparaat ongeveer 10 seconden in een figuur 8 beweegt. U kunt deze stap verwijderen door commentaar te geven op regel 273 van "iic_main_thread.c". Als je commentaar geeft, moet je de regels 323 - 325 "iic_main_thread.c" verwijderen. Deze waarden werden aanvankelijk verzameld uit de bovenstaande magnetometerkalibratie en vervolgens als waarden aangesloten.
- Na de kalibratie wordt de stabilisatiecode geïnitialiseerd en houdt het apparaat de camera stabiel.
Aanbevolen:
Handheld weerstation: 4 stappen
Handheld weerstation: in deze Instructable zullen we een Arduino, een oled-display en een SparkFun-omgevingssensorcombinatie met CCS811- en BME280-sensoren aan boord gebruiken om een handheld-apparaat te bouwen dat temperatuur, vochtigheid, TVOC-niveaus, barometrische druk, een
GamePi - de handheld-emulatorconsole: 17 stappen (met afbeeldingen)
GamePi - de Handheld Emulator Console: Intro: Dit instructable beschrijft de bouw van een Raspberry Pi 3 aangedreven handheld emulatieconsole - ik heb het GamePi gedoopt. Er zijn veel vergelijkbare instructables voor dergelijke apparaten, maar naar mijn smaak zijn de meeste te groot, te klein, te
Handheld-gameconsole - Arduboy Clone: 6 stappen (met afbeeldingen)
Handheld-gameconsole | Arduboy Clone: Een paar maanden geleden kwam ik Arduboy tegen, dat volgens de officiële website een miniatuur 8-bits spelplatform is dat het gemakkelijk maakt om online games te leren, te delen en te spelen. Het is een open source-platform. De spellen voor de Arduboy zijn gemaakt door de gebruiker
Pocket ZX (Handheld ZX-spectrum): 10 stappen
Pocket ZX (Handheld ZX Spectrum): ik ben een kind van de jaren 80 en heb goede herinneringen aan de 8-bits computers uit die tijd. Mijn eerste computer - een die een speciaal plekje in mijn hart heeft - was een Sinclair ZX Spectrum 48K. Na onlangs een aantal gemeenschappen te hebben ontdekt die gericht zijn op oudere computers
PCB-handheld met Arduino (met een optie om draadloos te gaan!): 3 stappen
PCB-handheld met Arduino (met een optie om draadloos te gaan!): Update 28.1.2019Ik werk momenteel aan de volgende versie van deze handheld. Je kunt het project volgen op mijn YouTube-kanaal of Twitter.Waarschuwing! Ik heb een fout gevonden in de PCB-layout. De linker- en omhoog-knoppen zijn verbonden met alleen analoge pinnen. ik repareerde