čtvrtek 23. srpna 2012

Kamera TCM8230MD


Kameře na letounu bylo věnováno několik málo řádků v předchozím příspěvku. Touto problematikou se dále zabývám a tak bych rád doplnil několik dalších informací.

Nejprve upřesním samotné zapojení kamery. Parametry modulu jsou nastavovány pomocí registrů dostupných po I2C sběrnici, tou je možné pouze kameru inicializovat (v požadovaném nastaví). Samotnou obrazovou informaci zprostředkovává 8 datových pinů a 4 řídící.

Pro chod kamery je nezbytně nutné připojení hodin (EXTCLK), které určují „frame rate“ ale současně musí být aktivní i při inicializaci kamery! V případě, že odešleme kameře požadavek na nastavení registru s absencí hodinového signálu, modul potvrdí (potvrzením je myšleno nastavení ACK bitu do „0“) pouze svojí adresu (0x3C) a adresu registru a tudíž i hodnotu, kterou chceme zapsat, nepotvrdí. Zbylé 3 řídící piny jsou výstupní a jedná se o hodinový výstup (DCLK), jehož frekvence je poloviční oproti EXTCLK a s náběžnou hranou pulzu se čte byte z DOUT0-DOUT7 (neplatí pro každý pulz)


Další dva výstupy (HD, VD) slouží jako příznaky nového řádku a nového obrázku. Frame rate, se tedy odvíjí od frekvence hodinového signálu.

Při testování bylo nastaveno EXTCL na 15MHz, což po připojení sondy osciloskopu způsobilo značné rušení I2C sběrnice, stačilo i připojení drátku s délkou jednotek centimetrů a data na I2C byla rušena. Tuto skutečnost píši jako varování pro ty, co ve svých aplikacích s tímto modulem budou navrhovat DPS.

STM32F103, ke kterému je kamera připojena má za úkol čtení obrazových dat, ale i jeho zpracování do podoby vektoru pohybu obrazu. Použití MCU nemá periferii pro připojení kamery, a aby stihl data přečíst i zpracovat, je třeba tyto data načítat pomocí DMA, které poskytne čas, pro zpracování.

DMA tedy „Direct Memory Access“ nám dovoluje přímý přístup do paměti z paměti, nebo nějaké periferie (a opačně) bez interakce samotného výkonného jádra procesoru. Samotný přenos dat je trigrován například těmito periferiemi:



Přenos bohužel nelze trigrovat externím přerušením, proto je zatím myšlenka triigeru postavena na timeru (TIM1_CH1 – připojený na DCLK), ten by měl pracovat v režimu input capture mode. V tomto režimu je pin timeru nastaven jako vstup, který dovoluje vyvolání přerušení či DMA request.


Tlumení vibrací


Motory, které jsou umístěny na ramenech kvadrotoru, jsou zdrojem vibrací, tyto vibrace, způsobují značný šum na výstupním signálu z akcelerometru, proto je třeba maximálně omezit přenos mechanických kmitů. Amplituda kmitů je závislá na mechanice, která je šíří, na její délce, tuhosti, tvaru atd. Pomocí zmíněných parametrů lze například posouvat rezonanční kmitočet v závislosti na otáčkách motorů. Cílem by mělo být, dostat rezonanční kmitočet mimo pásmo pracovních otáček.

Taková konfigurace, která by takový požadavek splňovala, ovšem není dostačující a vlivem rozdílných otáček každého z motorů může být těžko dosažitelná. Velký význam při generování parazitních kmitů motory, tvoří také vrtule, které zvyšují amplitudu vibrací. Je tak nutné, aby byly vrtule co nejlépe vyvážené.
V praxi byla problematika vibrací řešena pružným uchycením řídící jednotky a zbroušením listů vrtule, tak aby byly vrtule co nejlépe vyvážené.

Jednotka je připevněna ve čtyřech bodech, pružnými silikonovými lanky, které jsou původně určeny k navlékání bižuterie. Silikonové lanko má vhodnou pružnost i pevnost a přitom nepodléhá puchření, jako pryž. Také bylo nutné použít dostatečně flexibilní vodiče, které propojují řídící jednotku s křížem nanoQUADU.

Popsané řešení, velice dobře plní svůj účel a slouží jako mechanický filtr.

neděle 29. července 2012

ARM STM32F

Další činnost byla zaměřena na 32b ARM mikroprocesory, kterými je letoun osazen. Prioritou je nanoQUAD co nejrychleji dostat do stavu schopného letu, proto další kroky vedou k navázání na již hotové a zprovoznění nezbytných částí pro let.

Nejprve bylo třeba seznámit se prostřednictvím dokumentací se základními informacemi, jako je princip práce s registry a jejich rozvržení, s periferiemi, zdrojem hodin (RCC) atd. Následně došlo k samotnému programování (v jazyce C). Z praktických důvodů se pro toto seznámení s STM32 zvolil vývojový kit DISCAVERY.

Součástí systému stabilizace je kamera TCM8230MD, která slouží k detekci pohybu v horizontální rovině. Kamera je připojena k STM32F103, který komunikuje s řídícím STM32 prostřednictvím sběrnice I2C. Jelikož konfigurace kamery je řešená přes stejnou sběrnici, kterou použitý STM32F103 disponuje pouze jednou, I2C kamery bylo připojeno na volné I/O piny mikroprocesoru. Z tohoto důvodu bylo třeba vytvořit I2C softwarově a k tomuto účelu byla napsána knihovna (využívající časovač) nakonfigurovatelná na libovolné I/O piny.

Dále je třeba provést konfiguraci kamery, zprovoznit paralelní komunikaci s kamerou a implementaci potřebného algoritmu ke zpracování obrazu.

neděle 15. července 2012

Horizontální sonar


Práce na projektu začala obecným seznámením s hardwarem a principy, které budou použity při řízení a pro které je hardware také navržen. Jednalo se zejména o možnosti reprezentací polohy v prostoru (quaternion, rotační matice, Eulerovy úhly), stručný popis tvorby modelu v MATLABu a vysvětlení práce horizontálního sonaru.

Horizontální sonar tvoří všesměrový ultrazvukový vysílač a čtyři přijímače, které budou vůči sobě natočené o 90°. Obvod přijímače je založený na širokopásmovém mikrofonu a frekvenční násobičce, díky které bude provedena selekce echa od šumu a jiných nežádoucích signálů (rušení od motorů atd.).  Buzení ultrazvukového vysílače bude obdélníkový signál s neměnnou amplitudou a frekvencí, která bude odpovídat násobku frekvence buzení motorů.

Frekvenci signálu, který bude detekován, nastavíme obdélníkovými signály o požadovaném kmitočtu, vzájemně posunuté o ½ π, můžeme si to představit jako sinovou a kosinovou služku. Vynásobením a následnou integrací obou složek získáme normy obou vektorů (které jsou vzájemně posunuté o ½ π). Z těchto informací jednoduše spočítáme fázový posun signálu, díky kterému zvýšíme rozlišovací schopnost sonaru pod vlnovou délku, na které pracuje. Současně vektorovým součtem ověřujeme kmitočet přijatého signálu.
Zmíněný princip byl simulován MATLABem, schéma můžeme vidět zde:



Po vynásobení je signál přiveden k filtrům, jejichž výstupem je střední hodnota vynásobeného signálu. Úhel, který odpovídá fázovému posunu přijatého signálu a vektorový součet (norma), závisející na kmitočtu tohoto signálu je třeba odečíst s ohledem na kvadrant, ve kterém se vektor nachází, informaci o kvadrantu jednoduše získáme pomocí znamének obou integrálů.
Po rozboru principu činnosti sonaru, proběhlo měření směrovosti přijímače a jeho oživování. Směrovost byla měřena následovně:
Senzor byl umístěn na podložku s vyznačenými úhly (po 5,625°), jednalo se o úhly vůči ose, ve které se nacházel ultrazvukový vysílač. Otáčením přijímače a vzdalováním vysílače (po 5cm), byly získány potřebné hodnoty k zjištění směrovosti přijímače. Hodnoty byly zapsány ve formě peak-to-peak (měřeno osciloskopem na výstupu OZ IC100-A).

Postup oživování:

Byl naprogramován jednoduchý generátor dvou obdélníkových signálů o frekvenci 40kHz (frekvence testovacího ultrazvukového vysílače) s fázovým posunem ½ π. Oba signály byly přivedeny na vstupy 3 a 6 (vstupy switchů), na vstup 5 byla přivedena reference 1.5V (polovina napájecího napětí OZ - pro symetrické zesílení). Po přivedení napájení a vyslání několika ultrazvukových impulzů byly měřeny výstupy senzorové desky a některé uzly obvodu.
Měřením byl odhalen zkrat na desce, zkrat byl odstraněn a upravila se časová konstanta filtrů (změna kapacity kondenzátorů na 1nF). Oživení bylo úspěšné.
Další kroky povedou k seznámení se s MCU na řídící desce (ARM Cortex-M4).

neděle 8. července 2012

Motivace



Projekt nanoQUAD začal hardwarovým návrhem Ing. Jaromíra Dvořáka roku 2011 pro ČVUT FEL, DCE AA4CC. V současnosti je vyvíjen software a pracuje se na oživení, prozatím dílčích částí letounu.

Projekt si klade za cíl návrh a studium řízení formací těchto letounů. Aby to bylo možné, je nanoQUAD osazen modulem GPS, vertikálním ultrazvukovým dálkoměrem, horizontálním sonarem, vertikálním infračerveným dálkoměrem, který dokáže měřit i intenzitu osvětlení, vertikální kamerou, 3D gyrem, 3D akcelerometrem, 3D magnetometrem a tlakoměrem. Komunikace je řešena pomocí RF modulu NRF24L01, který poskytuje přenos dat téměř bez latence, což je výhodné při vzájemné detekci letounů ve formaci. Rozměry nanoQUADU bez vrtulí jsou 105x105mm (171x171mm s vrtulemi), letová hmotnost v současné konfiguraci činí 55g a maximální tah motorů je 1,1N.

Proč kvadrotor? Oproti ostatním vznášedlům a vrtulníkům je toto řešení výhodné z hlediska mechaniky, s výjimkou rotorů, neobsahuje žádné pohyblivé části. Není třeba naklápění listů vrtule, ani celého rotoru, jak je tomu například u tří vrtulové varianty, kde se moment vzniklý rotací vrtulí kompenzuje naklápěním jednoho z motorů. V případě sudého počtu rotorů, lze vzniklý moment kompenzovat rozdílným smyslem otáčení protilehlých motorů. Kvadrotor je tak mechanicky jednoduchým a ekonomicky výhodným řešením pro tuto úlohu.

S podobnou problematikou jsem se už zabýval, konkrétně se jednalo o trikoptéru. Na tomto projektu mě zaujala velikost a současně možnosti navrženého hardwaru. Také let ve formaci považuji za zajímavou úlohu, která lze rozdělit na pod úlohy využitelné i pro jiné aplikace.