Rotační displej

Bc. Gabriel Cséfalvay a Bc. Tomáš Kollár
xcsefa00'zavin'stud.feec.vutbr.cz, xkolla00'zavin'stud.feec.vutbr.cz

Obsah

  1. Úvod
  2. Realizace HW
  3. Realizace SW
  4. Závěr
  5. Literatura

Úvod

Jedním z vlastností lidského oka je setrvačnost vidění. Na základě této nedokonalosti funguje například TV na minimálně 50Hz a různé zobrazovací zařízení. Základ jevu spočívá v tom, že když na sítnici dopadne hodně světlý bod, pak tento bod po vypnutí světelného zdroje nezmizí v ten okamih z naši perspektivy. Taky se dá zpozorovat, že když tento světelný bod posuneme jistou rychlostí do nějakého směru před okem, uvidíme světelnou čáru. Tato čára samozřejmě ztrácí časem ze své intenzity, a to od začátku lineárně ke konci, kde se bod právě nachází. V našem zařízení jsme využili pro zobrazování právě tento jev. Při použití 16 SMD LED a ventilátoru o průměru 80mm jsme sestrojili Rotační Displej (dále jen RoD), který umí zobrazit kruhový obrázek s rozlíšením 32 obrazových bodů v radiálním směru a 256 v axiálním. Deska s plošným spojem byla namontována na upravený ventilátor.

Realizace HW

Aby byl obraz co nejjemnější, musí se použít co nejvíce obrazových bodů. Pochopitelně ve směru otáčení není velký problém zvyšovat počet pixlů, protože to je otázkou pouze změny softwaru. Problém nastává ve druhém směru, kde rozlíšení závisí na fyzické velikosti LED diod. Čím menší diody, tím větší dostaneme rozlíšení. V našem případě při použití SMD diod, jsme dosáhli toho, že jsme byli schopni zaletovat už zmiňovaných 16 kusů LED na 4 cm. Šířka jedné SMD diody typu 1206 je 1,6mm. Toto rozlišení by se dalo zvýšit použitím součástek s menším pouzdrem.

Pro napájení se v počátku uvažovalo o použití uhlíkových kartáčů. Tento koncept se dostal i do fáze realizace, ale v důsledku nedokonalosti této techniky se muselo použít jiné řešení. Problémem bylo, že ventilátor se otáčel příliš pomalu v důsledku brzdění uhlíkovými kartáči (ve skutečnosti se použil grafit) a byl příliš hlučný. Jako řešení jsme použili neobvyklý typ trafa se vzduchovým jádrem. Takové trafo sestává ze dvou prstencových vinutí. Jeden má šířku větší, takže druhé (menší) lze vsunout do něho. Tyto vinutí nejsou navzájem mechanicky spojeny. Jeden je připevněn na stator, druhý na rotor a tím pádem se rotor může volně otáčet, přičemž se energie dostává přes trafo k plošnému spoji.

Trafa se vzduchovým jádrem se používají ve VF technice např. ve filtrech, ale nejsou vhodné pro převod velikých výkonů. Toto v našem případě nevadí, protože celkový odběr systému nebude velký. U těchto typů transformátorů ale musíme vědět, že zdaleka nemají takové parametry jak transformátory s ferromagnetickým jádrem. Z literatury se dá zjistit, že transformátory se vzduchovým jádrem ztrácí své negativní vlastnosti na vyšších frekvencích, a dají se použít od frekvencí několik kHz, typicky 20kHz. Naše speciální trafo se vzduchovým jádrem se skládá z lakovaného drátu o průřezu 0,28mm, z papíru a lepící pásky. Navíjeli jsme ručně primární i sekundární vinutí. Počet závitů je stejný pro primární i sekundární stranu, a to 30x5, čili 150 závitů.

Na plošném spoji je na vstupu pro napájení diodový můstek pro usměrnění napětí, pak kondenzátor a nakonec stabilizátor. Napájecí napětí je na primární straně 12V ss. a zařízení je pak napájeno 5V ss. Abychom dostali z 12V ss. střídavé napětí a to dokonce o frekvenci několik kHz, použili jsme nastavitelný generátor funkcí, který řídil výkonový tranzistor. Ten pak s touto frekvencí spíná ss. napětí 12V. Pro spínání se používá pravoúhlý signál, protože způsobuje menší ztráty ve spínacím tranzistoru a v důsledku toho se tranzistor i méně zahřívá. Negativní vlastností pak je, že vyrábí více harmonických složek, což může ovlivnit příjem DV nebo SV v blízkosti zařízení.

Návrh hardwaru
Zapojení se vyvíjelo v programu Eagle, kde se taky navrhoval plošní spoj. Deska je oboustranná. Základem zapojení je mikroprocesor od firmy Atmel, typ: ATmega8-16AU, který je v pouzdře SMD. Pro programování se používá speciální vstupy pro SPI sériové rozhraní, které jsou vyvedeny pomocí 5x2 pinů. Tento typ programování využívá speciální ISP (In-System Programming) programátor, který jsme také zkonstruovali pro tento - v budoucnu ale samozřejmě i jiný - účel. Aby se dalo zjistit kde se právě apertura nachází na dané okružné dráze na ventilátoru, je zapotřebí mít nějaký výchozí bod. Pro tento účel bylo původně vymyšleno použití hallovy sondy. Problém ale nastal při použití transformátoru se vzduchovým jádrem. S určitostí se dá říct, že nesprávnou funkčnost způsobovalo naše speciální trafo. Pravděpodobně generovalo příliš silné magnetické pole, v důsledku čeho použití hallovy sondy dále nepřipadalo v úvahu. Jako alternativní řešení, jsme použili pro detekci fototranzistor. Referenční bod na kruhové dráze je určen jednou infračervenou LED, která je snímána tímto fototranzistorem. Jeho proudový výstup je konvertován na napětí jedním rezistorem a je veden přímo do vstupu externího přerušení. Zapojení obsahuje ještě jednu část, která ale zatím nebyla využita. Původně se totiž plánovalo i možnost zobrazení streamovaného videa pomocí infračervené diody z portu RS-232 z PC. Tato možnost nyní zůstává nevyužita, ale v budoucnu se plánuje rozšíření softwaru. Pro přenos informace by se dalo využít i modulační přenos přes transformátor. Na desce se nachází ještě už zmiňována část pro napájení, a jako poslední část samozřejmě LED diody. Před každou diodu je sériově zapojený odpor pro nastavení proudu. Mikroprocesor plně vyhovuje našim účelům, ovšem kdyby bylo potřeba použít více LED, tak by se musel použít MCU s více porty. Druhou možností by bylo použití posuvných registrů. V tom případě by byl přenos sériový pro všechny LED a celé zapojení by bylo mnohem jednodušší co se týče realizace i výroby. Pro zapojení bylo použito většinou SMD součástek, aby se dosáhlo co největší integrace.

Realizace SW

Základní problém spočívá v tom, že k správnému zobrazení třeba znát periodu otáček. To může být vyjádřeno v libovolných jednotkách, ale v tomto případě je nejjednodušší v hodinových taktech. Trvání jednoho radiálního "řádku" musí být rovno tomuto číslu, děleno 256-ti. Toto měření se nejjednodušeji realizuje inktementováním jedné proměnné v obsluze přerušení při každém přetečení osmibitového čítače TIMER0. Tento způsob zrovna implicitně zahrnuje i dělení s 256.
	ISR(TIMER0_OVF_vect) {	//mereni hodinovych cyklu
	  meas_a++;
	}
Postupné zobrazování zmíněných "řádků" se taky nejjednodušeji realizuje pomocí přerušení, tentokrát ale pomocí 16-ti bitového čítače TIMER1, který dovoluje určit svoji maximální hodnotu, teda periodu. Tak lze zapsáním hodnoty do registru OCR1A změnit periodu zobrazování. Registr OCR1A je dvojnásobně bufferovaný, může se zapisovat do něho kdykoliv a nemůže dojít k opominutí zjistění skutečnosti, že čítač dosáhl nastavěnou hodnotu, při změně hodnoty z většího na menší.
	ISR(TIMER1_OVF_vect) {		// zobrazeni jednolivych radku
	  ledout(pgm_read_word(pcpix + lindex));	//cteni z pgm. pameti
	  lindex++;			//nasl. radek
	  if (lindex==AXIAL) lindex=0;
	}

Referenční bod na kruhové dráze, jak už bylo zmíněno, je snímán fototranzistorem. V okamžiku, kdy napětí na vstupu dosáhne prahovou úroveň, vyvolá se přerušení INT0. Provede se výpočet a uložení periody zobrazení. Uloží se pro každý obrázek animace zvlášť, o tom ale později. Změřené hodnoty periody projdou jednoduchým dolním propustem prvního řádu. Doba trvání jednoho obrázku je určen v počtu otáček a lze ji určit zvlášť pro každý snímek.

	// TDX - koeficient DP 1. radu pro mereni frekvence
	#define TDX 2

	ISR(INT0_vect){		//referencni bod na kruhu
	  static uint8_t w;

	  TCNT1=0;		//nove mereni
	  TCNT0=0;
	  meas_a_tmp=meas_a;	//pocet taktu za otoceni
	  meas_a=0;
	  lindex=LIND_C;	//zacatek zobrazeni

	  //DP a ulozeni
	  OCR1A = meas[anix] = ((uint32_t)meas[anix]*(uint32_t)(TDX-1) + (uint32_t)meas_a_tmp ) / TDX;

	  if (w==0) {		
	    anix++;				//nasl. obraz animace
	    if (anix==A_FRAMES) anix=0;

	    w=ani_wait_seq[anix];		//koresp. hodnota casu trvani akt. obr.
	    pcpix=ani0[anix];			//ukazatel akt. obrazu
	  } else w--;
	}

Převod animace z gif
Aby se obrázek mohl zobrazit na takovémto specielním displeji, musí se přetransformovat do axiálno-radiální formy. Pro tento účel vznikl jeden malý program pro Matlab, který realizuje tento přepočet pro animované gif obrázky. Jeho výstupem je - kromě kontrolního vykreslení předpokládaného obrazu na displeji - přímo .h soubor, který obsahuje veškerá obrazová data v textové podobě a může být přímo vkládána do programu pro mikroprocesor. Program načte obrázek do paměti, převede ho na binární (černobílý) obraz a následně ho nevzorkuje postupně dle polárního souřadnicového systému, kterého počátkem je střed obrazu. Opcionálně může být aplikována jednoduchá filtrace (DP) při obrazcích s větším rozlišením pro zabránění aliasingu. Aliasing a maximální prostorový kmitočet obrazu ale není jednoznačně definován v tomto případě, poněvadž vzájemné vzdálenosti obrazových bodů na různých koaxiálních kružnicích jsou rozdílné. Při každém převodu se parametry programu musí nastavit dle vlastního uvážení uživatele. Na obrázku je vidět vlevo vstup, vpravo předpokládaný výstup a dole axiálno-radiálně vzorkovaný obraz vykreslený v kartézských souřadnicích. Tento obraz reprezentuje obsah paměti mikroprocesoru.




















Závěr

Pro plynulý obraz se musí ventilátor otáčet co nejrychleji. Minimální rychlost pro lidské oko je jak známe z TV techniky 25Hz, co znamená v našem případě 25 otáček za sekundu, což odpovídá 1500rpm. Běžné ventilátory tyto otáčky zvládnou bez problémů, jenom čas dosažení maximálních otáček bude delší kvůli přídavné hmotnosti plošného spoje. Při přehrávání statického obrazu, nebo jednoduchých pohyblivých obrázků .gif problém s rychlostí otáček není.

Nedostatkem tohoto zařízení je jeho nízké radiální rozlíšení. Tento problém se ale obtížně řeší, protože ruční pájení SMD součástek vyžaduje neobvyklou zručnost.

Jako další problém bych uvedl nevhodnou volbu typu oscilátoru pro mikrokontolér. V zapojení se nepoužívá stabilní krystalový oscilátor ale vnitřní kalibrovaný RC oscillátor. Jeho frekvence je závislá na hodnotě napájecího napětí, která kolísá podle toho, kolik je svítících bodů na aktuálně zobrazeném obrázku. Důsledkem tohoto kolísání je to, že výsledný obrázek není stabilní. Lze pozorovat roztažení nebo stažení obrazu při změně. Tento problém se částečně vyřešil tak, že pro každý obrázek animace se měří perioda otáčení zvlášť.

Jak už bylo zmíněno jako další směr vývoje by bylo možné přidat real-time streamování videa (v omezeném rozlíšení), textu nebo vytvoření znakové sady a použití tak zařízení jako jednoduchý zobrazovací prvek.


Stahnout rod_komplet.zip.

Literatura

[1] MMIA Počítačové cvičení, 2009