Turinys:

Rankinis fotoaparato stabilizatorius: 13 žingsnių (su nuotraukomis)
Rankinis fotoaparato stabilizatorius: 13 žingsnių (su nuotraukomis)

Video: Rankinis fotoaparato stabilizatorius: 13 žingsnių (su nuotraukomis)

Video: Rankinis fotoaparato stabilizatorius: 13 žingsnių (su nuotraukomis)
Video: Pazymetas.lt 2015 10 13 per LRT radiją laidoje "112" 2024, Liepa
Anonim
Rankinis fotoaparato stabilizatorius
Rankinis fotoaparato stabilizatorius

Įvadas

Tai vadovas, skirtas sukurti 3 ašių rankinio fotoaparato stabilizavimo įrenginį „GoPro“naudojant „Digilent Zybo Zynq-7000“kūrimo plokštę. Šis projektas buvo sukurtas CPE realiojo laiko operacinių sistemų klasei (CPE 439). Stabilizatorius naudoja tris servo ir IMU, kad ištaisytų vartotojo judesius, kad fotoaparatas būtų lygus.

Projektui reikalingos dalys

  • „Digilent Zybo Zynq-7000“plėtros valdyba
  • „Sparkfun IMU Breakout“- MPU 9250
  • 2 „HiTec HS-5485HB Servo“(nusipirkite 180 laipsnių judesį arba programą nuo 90 iki 180 laipsnių)
  • 1 „HiTec HS-5685MH Servo“(nusipirkite 180 laipsnių judesį arba programą nuo 90 iki 180 laipsnių)
  • 2 standartiniai servo laikikliai
  • 1 Duonos lenta
  • 15 jungiamųjų laidų nuo vyrų iki vyrų
  • 4 jungiamieji laidai nuo vyrų iki moterų
  • Karštas klijai
  • Rankena arba rankena
  • 5 mm skersmens medinis kaištis
  • „GoPro“ar kita fotoaparato ir tvirtinimo įranga
  • Maitinimo šaltinis, galintis išvesti 5 V įtampą.
  • Prieiga prie 3D spausdintuvo

1 žingsnis: „Vivado“aparatinės įrangos sąranka

„Vivado“aparatinės įrangos sąranka
„Vivado“aparatinės įrangos sąranka

Pradėkime kurti pagrindinį projekto bloko dizainą.

  1. Atidarykite „Vivado 2016.2“, spustelėkite piktogramą „Sukurti naują projektą“ir spustelėkite „Kitas>“.
  2. Pavadinkite savo projektą ir spustelėkite „Kitas>“.
  3. Pasirinkite RTL projektą ir spustelėkite „Kitas>“.
  4. Įveskite paieškos juostoje xc7z010clg400-1, tada pasirinkite dalį ir paspauskite „Kitas>“ir „Baigti“.

2 veiksmas: bloko dizaino nustatymas

Dabar pradėsime kurti bloko dizainą pridėdami ir nustatydami „Zynq IP Block“.

  1. Kairiajame skydelyje, skiltyje „IP Integrator“, spustelėkite „Sukurti bloko dizainą“, tada spustelėkite „Gerai“.
  2. Dešiniuoju pelės mygtuku spustelėkite skirtuką „Diagrama“ir pasirinkite „Pridėti IP…“.
  3. Įveskite „ZYNQ7 Processing System“ir spustelėkite pasirinkimą.
  4. Dukart spustelėkite pasirodžiusį „Zynq“bloką.
  5. Spustelėkite „Importuoti XPS nustatymus“ir importuokite pateiktą failą „ZYBO_zynq_def.xml“.
  6. Eikite į „MIO Configuration“ir pasirinkite „Application Processor Unit“bei įjunkite laikmatį 0 ir „Watchdog“laikmačius.
  7. Tame pačiame skirtuke, skiltyje „I/O išoriniai įrenginiai“, pasirinkite ENET 0 (ir pakeiskite išskleidžiamąjį meniu į „MIO 16.. 27“, USB 0, SD 0, UART 1, I2C 0.
  8. Skiltyje „GPIO“patikrinkite GPIO MIO, ENET Reset, USB Reset ir I2C Reset.
  9. Dabar eikite į „Laikrodžio konfigūracija“. Pasirinkite „FC Fabric Clocks“skiltyje FCLK_CLK0. Tada spustelėkite „Gerai“.

3 veiksmas: sukurkite pasirinktinį PWM IP bloką

Šis IP blokas leidžia plokštei išsiųsti PWM signalą, kad būtų galima valdyti servo judėjimą. Darbas buvo labai pagrįstas čia esančia „Digitronix Nepal“pamoka. Buvo pridėta logika, kad sulėtėtų laikrodis, todėl pulsas sklido teisingu greičiu. Blokas ima skaičių nuo 0 iki 180 ir paverčia jį impulsu nuo 750 iki 2150 naudojimoc.

  1. Dabar skirtuke „Įrankiai“, esančiame viršutiniame kairiajame kampe, spustelėkite „Sukurti ir pakuoti IP…“ir paspauskite Pirmyn.
  2. Tada pasirinkite „Sukurti naują AXI4 periferinį įrenginį“ir paspauskite Pirmyn.
  3. Pavadinkite savo PWM IP bloką (mes jį pavadinome pwm_core) ir spustelėkite Pirmyn, tada kitame puslapyje taip pat spustelėkite Pirmyn.
  4. Dabar spustelėkite „Redaguoti IP“ir spustelėkite Baigti. Tai atvers naują langą pwm blokui redaguoti.
  5. Skirtuke „Šaltiniai“ir skiltyje „Dizaino šaltiniai“išskleiskite „pwm_core_v1_0“(pakeiskite pwm_core savo vardu) ir atidarykite matomą failą.
  6. Nukopijuokite ir įklijuokite kodą, pateiktą skiltyje „pwm_core_v1_0_S00_AXI.v“zip faile projekto apačioje. „Ctrl“+ „Shift“+ R ir pakeiskite „pwm_core“savo ip bloko vardu.
  7. Tada atidarykite „name _v1_0“ir nukopijuokite pateiktą kodą į failą „pwm_core_v1_0.v“. Ctrl + Shift + R ir pakeiskite „pwm_core“pavadinimu.
  8. Dabar eikite į skirtuką „Paketo IP - pavadinimas“ir pasirinkite „Tinkinimo parametrai“.
  9. Šio skirtuko viršuje bus geltona juosta su susietu tekstu. Pasirinkite tai ir laukelyje bus rodomi „Paslėpti parametrai“.
  10. Dabar eikite į „Tinkinimo grafinė sąsaja“ir dešiniuoju pelės mygtuku spustelėkite „Pwm Counter Max“, pasirinkite „Redaguoti parametrą …“.
  11. Pažymėkite langelius „Matoma tinkinimo GUI“ir „Nurodyti diapazoną“.
  12. Pakeiskite išskleidžiamąjį meniu „Tipas:“į sveikųjų skaičių diapazoną ir nustatykite minimalų 0, o maksimalų - 65535 ir pažymėkite laukelį „Rodyti diapazoną“. Dabar spustelėkite Gerai.
  13. Vilkite „Pwm Counter Max“po „Page 0“medžiu. Dabar eikite į „Peržiūra ir paketas“ir spustelėkite mygtuką „Iš naujo supakuoti IP“.

4 veiksmas: pridėkite PWM IP bloką prie dizaino

Pridėkite PWM IP bloką prie dizaino
Pridėkite PWM IP bloką prie dizaino

Mes pridėsime IP bloką prie bloko dizaino, kad vartotojas galėtų pasiekti PWM IP bloką per procesorių.

  1. Dešiniuoju pelės mygtuku spustelėkite diagramos skirtuką ir spustelėkite „IP nustatymai…“. Eikite į skirtuką „Saugyklos tvarkyklė“.
  2. Spustelėkite žalią pliuso mygtuką ir pasirinkite jį. Dabar failų tvarkyklėje raskite „ip_repo“ir pridėkite tai prie projekto. Tada paspauskite Taikyti ir tada Gerai.
  3. Dešiniuoju pelės mygtuku spustelėkite diagramos skirtuką ir spustelėkite „Pridėti IP…“. Įveskite savo PWM IP bloko pavadinimą ir pasirinkite jį.
  4. Ekrano viršuje turėtų būti žalia juosta, pirmiausia pasirinkite „Vykdyti ryšio automatizavimą“ir spustelėkite Gerai. Tada spustelėkite „Vykdyti blokavimo automatizavimą“ir spustelėkite Gerai.
  5. Dukart spustelėkite PWM bloką ir pakeiskite „Pwm Counter Max“į 1024 iš 128.
  6. Užveskite pelės žymeklį ant PWM bloko PWM0. Kai tai padarysite, turėtų būti mažas pieštukas. Dešiniuoju pelės mygtuku spustelėkite ir pasirinkite „Sukurti prievadą…“, o kai atsidarys langas, spustelėkite Gerai. Tai sukuria išorinį prievadą signalui perduoti.
  7. Pakartokite 6 veiksmą ir PWM1 bei PWM2.
  8. Šoninėje juostoje raskite mažą apskritą dvigubos rodyklės piktogramą ir spustelėkite ją. Tai atkurs išdėstymą, o jūsų bloko dizainas turėtų atrodyti taip, kaip parodyta aukščiau.

5 veiksmas: sukonfigūruokite „HDL Wrapper“ir nustatykite apribojimų failą

Konfigūruokite „HDL Wrapper“ir nustatykite apribojimų failą
Konfigūruokite „HDL Wrapper“ir nustatykite apribojimų failą

Dabar mes sukursime savo bloko dizaino aukšto lygio dizainą, o tada „Zybo“plokštėje susiesime PWM0, PWM1 ir PWM2 į „Pmod“kaiščius.

  1. Eikite į skirtuką „Šaltiniai“. Dešiniuoju pelės mygtuku spustelėkite savo bloko dizaino failą skiltyje „Dizaino šaltiniai“ir spustelėkite „Sukurti HDL įvyniojimą…“. Pasirinkite „Kopijuoti sukurtą įvyniojimą, kad naudotojai galėtų redaguoti“ir spustelėkite Gerai. Tai sukuria aukšto lygio dizainą mūsų sukurtam blokiniam dizainui.
  2. Pmod, kurį mes išleisime, yra JE.
  3. Skiltyje „Failas“pasirinkite „Pridėti šaltinių …“, pasirinkite „Pridėti arba kurti apribojimus“ir spustelėkite Pirmyn.
  4. Spustelėkite pridėti failus ir pasirinkite įtrauktą failą „ZYBO_Master.xdc“. Jei pažvelgsite į šį failą, pastebėsite, kad viskas yra nekomentuojama, išskyrus šešias „set_property“eilutes, esančias po „## Pmod Header JE“. Pastebėsite, kad PWM0, PWM1 ir PWM2 yra šių eilučių argumentai. Jie susiejami su „JE Pmod“1, 2 ir 3 kaiščiais.

6 veiksmas: „Bitstream“generavimas

Prieš tęsdami, turime sukurti bitų srautą, kad aparatūros dizainas būtų eksportuojamas į SDK.

  1. Šoninės juostos skiltyje „Programa ir derinimas“pasirinkite „Generuoti srautą“. Tai atliks sintezę, tada įgyvendinimą ir sukurs dizaino srautą.
  2. Ištaisykite visas iškylančias klaidas, tačiau į įspėjimus paprastai galima nekreipti dėmesio.
  3. Eikite į Failas-> Paleisti SDK ir spustelėkite Gerai. Tai atvers „Xilinx“SDK.

7 veiksmas: projekto nustatymas SDK

Ši dalis gali būti šiek tiek varginanti. Jei abejojate, sukurkite naują BSP ir pakeiskite seną. Taip sutaupėme daug derinimo laiko.

  1. Pradėkite atsisiųsdami naujausią „FreeRTOS“versiją čia.
  2. Išskleiskite viską iš atsisiuntimo ir importuokite „FreeRTOS“į SDK spustelėdami „File-> Import“, o skiltyje „General“spustelėkite „Existing Projects Into Workspace“, tada spustelėkite Next.
  3. „FreeRTOS“aplanke eikite į „FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702“. Importuoti „RTOSDemo“tik iš šios vietos.
  4. Dabar sugeneruokite lentos palaikymo paketą (BSP) spustelėdami Failas-> Naujas lentos palaikymo paketas.
  5. Pasirinkite „ps7_cortexa9_0“, pažymėkite „lwip141“ir spustelėkite Gerai.
  6. Dešiniuoju pelės mygtuku spustelėkite mėlyną aplanką RTOSDemo ir pasirinkite „Projekto nuorodos“.
  7. Atžymėkite „RTOSDemo_bsp“ir patikrinkite ką tik sukurtą naują BSP.

8 veiksmas: „FreeRTOS“kodo pakeitimai

Mūsų pateiktą kodą galima suskirstyti į 7 skirtingus failus. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.h ir iic_imu.h. Kodas iic_main_thread.c buvo pritaikytas iš Kris Winer bibliotekos, kurią rasite čia. Mes daugiausia pakeitėme jo kodą, kad įtrauktume užduotis ir kad jis veiktų su „Zybo“lenta. Taip pat pridėjome funkcijas, skirtas kameros orientacijos korekcijai apskaičiuoti. Mes palikome keletą spausdintų teiginių, kurie yra naudingi derinant. Dauguma jų yra komentuojami, tačiau, jei manote, kad to reikia, galite jų nekomentuoti.

  1. Lengviausias būdas pakeisti failą main.c yra pakeisti kodą nukopijuotu kodu iš mūsų įtraukto main.c failo.
  2. Norėdami sukurti naują failą, dešiniuoju pelės mygtuku spustelėkite src aplanką po RTOSDemo ir pasirinkite C Source File. Pavadinkite šį failą „iic_main_thread.c“.
  3. Nukopijuokite kodą iš pridėto „iic_main_thread.c“ir įklijuokite jį į naujai sukurtą failą.
  4. Pakartokite 2 ir 3 veiksmus su likusiais failais.
  5. reikalinga susiejimo instrukcija gcc. Norėdami tai pridėti prie kūrimo kelio, dešiniuoju pelės mygtuku spustelėkite RTOSDemo ir pasirinkite „C/C ++ Build Settings“.
  6. Bus atidarytas naujas langas. Eikite į ARM v7 gcc linker-> Bibliotekos. Viršutiniame dešiniajame kampe pasirinkite mažą pridėjimo failą ir įveskite „m“. Į šį projektą bus įtraukta matematikos biblioteka.
  7. Sukurkite projektą naudodami „Ctrl + B“, kad patvirtintumėte, jog viskas veikia. Patikrinkite sugeneruotus įspėjimus, bet galite jų nepaisyti.
  8. Yra keletas vietų, kurias reikės modifikuoti, daugiausia jūsų dabartinės vietos magnetinis nuokrypis. Kaip tai pakeisti, paaiškinsime mokymo programos kalibravimo dalyje.

9 veiksmas: 3D spausdinimas stabilizatoriui

3D spausdinimas stabilizatoriui
3D spausdinimas stabilizatoriui

Šiam projektui reikia atspausdinti kelias dalis 3D. Tikriausiai galima įsigyti dalių, kurių matmenys/dydžiai yra panašūs į mūsų spausdintų dalių.

  1. Naudodami pateiktus failus atsispausdinkite „GoPro“ranką ir laikiklį.
  2. Prie.stl failo turite pridėti pastolius.
  3. Atspausdinus nupjaukite/nuvalykite pastolių pertekliaus dalis.
  4. Jei norite, medinį kaištį galite pakeisti 3D spausdinta dalimi.

10 žingsnis: dalių surinkimas

Dalių surinkimas
Dalių surinkimas

Stabilizatoriaus surinkimas susideda iš kelių dalių. Įsigytus laikiklius galima įsigyti su 4 savisriegiais varžtais ir 4 varžtais su veržlėmis. Kadangi yra 3 servovarikliai, vieną iš servo ragų reikia iš anksto prispausti, kad 2 varžtai įsitvirtintų.

  1. Lituokite 8 kaiščius ant IMU pertraukos, po 4 kiekvienoje pusėje.
  2. IMU yra pritvirtintas prie 3D spausdinto laikiklio „GoPro“laikiklio, esančio laikiklio centre.
  3. Laikiklį laikykite taip, kad servo tvirtinimo angos būtų kairėje pusėje. Padėkite IMU ant arčiausiai jūsų esančio krašto, o smeigtukai kabo nuo krašto. Tada uždėkite „GoPro“laikiklį ant IMU, priklijuodami IMU ir laikiklį ant laikiklio.
  4. Pritvirtinkite HS-5485HB prie servo laikiklio, integruoto į 3D spausdintą ranką.
  5. Įsukite „GoPro“laikiklį į prie rankos pritvirtintą servo sistemą, įsitikindami, kad servovariklis nustatytas taip, kad jis būtų jo judesių diapazono viduryje.
  6. Tada pritvirtinkite HS-5685MH servo prie servo laikiklio. Tada vienu iš varžtų bakstelėkite servo ragą. Dabar pritvirtinkite servo prie paskutinio servo laikiklio apačios.
  7. Dabar pritvirtinkite paskutinį servo prie kronšteino, į kurį yra įsuktas HS-5685MH servo. Tada įsukite ranką į šį servo, įsitikinkite, kad ranka yra prisukta, kad ji galėtų pasisukti 90 laipsnių į vieną pusę.
  8. Norėdami baigti gimbalo konstrukciją, pridėkite nedidelį medinio kaiščio gabalėlį, kad sujungtumėte „GoPro“laikiklį ir 3D spausdintą ranką. Dabar surinkote stabilizatorių.
  9. Galiausiai galite pridėti rankeną, prijungtą prie apatinio servo laikiklio.

11 veiksmas: „Zybo“prijungimas prie stabilizatoriaus

„Zybo“prijungimas prie stabilizatoriaus
„Zybo“prijungimas prie stabilizatoriaus

Darydami tai turite būti atsargūs. Norite įsitikinti, kad 5 V maitinimo šaltinis niekada nepatenka į „Zybo“plokštę, nes tai sukeltų problemų su plokšte. Būtinai dar kartą patikrinkite džemperius, kad įsitikintumėte, jog laidai nekeičiami.

  1. Norėdami pritvirtinti „Zybo“prie stabilizatoriaus, jums reikės 15 džemperių iš vyrų ir 4 vyrų ir moterų.
  2. Pirmiausia prijunkite du trumpiklius prie 5 V maitinimo šaltinio išilgai duonos lentos + ir - bėgių. Jie tiekia maitinimą servo sistemoms.
  3. Tada prijunkite 3 poras džemperių prie duonos lentos + ir - bėgių. Tai bus kiekvieno servo galia.
  4. Kitą jungiklio „ +“ir „ -“galą prijunkite prie kiekvieno servo.
  5. Prijunkite trumpiklį tarp duonos lentos bėgelio ir vieno iš „Zybo JE Pmod“GND kaiščių (žr. 5 veiksmo paveikslėlį). Tai sukurs bendrą pagrindą tarp „Zybo“plokštės ir maitinimo šaltinio.
  6. Tada prijunkite signalinį laidą prie „JE Pmod“1, 2 ir 3 kaiščių. Prijunkite 1 žemėlapius prie apatinio servo, 2 kontaktus prie servo, esančio rankos gale, ir 3 žemėlapius prie vidurinio servo.
  7. Prijunkite 4 moteriškus laidus prie IMU išjungimo GND, VDD, SDA ir SCL kaiščių. GND ir VDD jungiami prie GND ir 3V3 ant JF kaiščių. Įkiškite SDA kaištį į 8 kaištį ir SCL į 7 kaištį JF (žr. 5 veiksmo paveikslėlį).
  8. Galiausiai prijunkite kompiuterį prie plokštės naudodami mikro USB kabelį. Tai leis bendrauti uart ir programuoti „Zybo“plokštę.

12 žingsnis: Tikra šiaurės korekcija

Tikra šiaurinė korekcija
Tikra šiaurinė korekcija

Magnetometro kalibravimas IMU yra svarbus tinkamam prietaiso veikimui. Magnetinis nuokrypis, ištaisantis magnetinę šiaurę į tikrąją šiaurę.

  1. Norėdami ištaisyti skirtumą nuo magnetinės ir tikrosios šiaurės, turite naudoti dviejų paslaugų derinį - „Google“žemėlapius ir NOAA magnetinio lauko skaičiuoklę.
  2. Naudodami „Google“žemėlapius raskite dabartinės vietos platumą ir ilgumą.
  3. Paimkite dabartinę ilgumą ir platumą ir prijunkite jį prie magnetinio lauko skaičiuoklės.
  4. Grąžinamas magnetinis nuokrypis. Įtraukite šį skaičiavimą į kodą „iic_main_thread.c“378 eilutėje. Jei jūsų nuokrypis yra į rytus, atimkite iš pasukimo vertės, jei į vakarus, tada pridėkite prie pasukimo vertės.

*nuotrauka paimta iš „Sparkfun“MPU 9250 prijungimo vadovo, kurį rasite čia.

13 žingsnis: paleiskite programą

Programos vykdymas
Programos vykdymas

Akimirka, kurios laukėte! Geriausia projekto dalis yra matyti, kaip jis veikia. Viena problema, kurią pastebėjome, yra tai, kad nukrypstama nuo verčių, apie kurias pranešta IMU. Žemo dažnio filtras gali padėti ištaisyti šį nukrypimą, o magnetometro, pagreičio ir giroskopo kalibravimas taip pat padės ištaisyti šį nukrypimą.

  1. Pirmiausia sukurkite viską SDK, tai galite padaryti paspausdami Ctrl + B.
  2. Įsitikinkite, kad maitinimas įjungtas ir nustatytas į 5 V įtampą. Dar kartą patikrinkite, ar visi laidai eina į teisingas vietas.
  3. Tada, norėdami paleisti programą, viršutiniame užduočių juostos centre paspauskite žalią trikampį.
  4. Kai programa paleidžiama, visos servos atsistatys į 0 padėtį, todėl būkite pasirengę paleisti įrenginį. Kai programa bus inicijuota, servo dalys grįš į 90 laipsnių padėtį.
  5. Bus paleista magnetometro kalibravimo funkcija ir nurodymai bus išspausdinti į UART terminalą, prie kurio galėsite prisijungti per nuoseklųjį monitorių, pvz., „Glaistą“arba SDK pateiktą nuoseklųjį monitorių.
  6. Atlikę kalibravimą, prietaisą perkelsite 8 paveiksle maždaug 10 sekundžių. Galite pašalinti šį veiksmą pakomentuodami „iic_main_thread.c“273 eilutę. Jei komentuosite, turite atšaukti 323–325 eilutes „iic_main_thread.c“. Šios vertės iš pradžių buvo surinktos atlikus aukščiau esantį magnetometro kalibravimą ir tada prijungtos kaip vertės.
  7. Po kalibravimo stabilizavimo kodas bus inicijuotas ir prietaisas išlaikys fotoaparatą stabilų.

Rekomenduojamas: