Borg Ventilator

Aus LaborWiki
Wechseln zu: Navigation, Suche
LaborLogo2.png

Dieses Projekt ist zusammen mit dieser Seite im entstehen.

Über dieses Projekt

Auch bei diesem Borg geht es natürlich um Blinken und LED's. Diesmal Sitzen die LED's jedoch auf den Flügeln eines Ventilators. Jedes Blatt ist mit RGB LED's bestückt, die von einem FPGA angesteuert werden. Wenn sich der Ventilator dreht, dann wird ein Bild erzeugt.

Vorstellung des Projekts

Im indernett findet man verschiedene rotary clocks, led fans und ähnliches rotierendes leuchtgeborgse. Da dachte ich mir , das probierst du auch mal aus. Dabei hab ich mir hohe Ziele gesteckt:

1) Die Daten werden in Echtzeit von aussen eingespeisst. 2) Keine Schleifkontakte 3) Viele Led's 4) Einen robusten und hochwertigen Aufbau

Als Datenquelle will ich ein Standard VGA Anschluss verwenden. Dieses VGA Signal wird digitalisiert, aufbereitet und auf dem Ventilator dargestellt.

Der Flügel

"An Bord" befinden sich ein FPGA von Xilinx aus der Spartan Baureihe, Plattform Flash, Schieberegister, ein wenig Ram, und jede menge smd rgb Led's. Geplant sind 64 Led's pro Blatt. Macht bei 4 Blättern (ähm rechne.....) 256 Led's. Nun könnte mann noch die Led's auf den Flügeln leicht versetzt anordnen um die Auflösung zu erhöhen. Theoretisch möglich wäre dann eine Auflösung von 512 Bildpunkten in der Diagonalen.


VGA Signal

Das VGA Signal soll von 3 AD Wandlen (für jede Farbe einen) Digitalisiert werden. Dabei versuche ich eine möglichst hohe Auflösung zu erreichen, damit jeder beliebige PC als Signalquelle genommen werden kann. Die AD Wandler werden von einem weiteren FPGA angesteuert.


Stromversorgung

Jetzt wird es ein wenig Schwierig, denn wie bekomm ich Spannung auf die Blätter des Ventilators ? Eine elegante Lösung wäre , die Spannung Induktiv zu Übertragen, wie bei einem Trafo. Mann könnte die Sekundärwicklung mitdrehen lassen. Ob das funktioniert wird sich zeigen.

Datenübertragung

Umgebauter Kopf eines Videorekorders

Wird ebenfalls induktiv übertragen . Am einfachsten währe es wohl das signal des rotierenden trafos zu modulieren. jedoch wird die maximal mögliche Übertragungsrate durch die Induktivität begrenzt. das könnte man umgehen durch eine 2. spule mit nur wenigen windungen. Jörg gab mir den Tip, dass ein Videorekorder-Kopf eigentlich genau das macht, was ich brauche. Also hab ich meinen ausgedienten VCR zerlegt, und ihn seines kopfes beraubt. Der Kopf besitzt 6 rotierende Trafos, die nun an einen FPGA angeschlossen sind. Da ein Trafo keine Gleichspannung übertragen kann, müssen die anzahl Hi Signale gleich der anzahl Low Signale sein. Theoretisch kann das Taktsignal aus den Datensignalen zurückgewonnen werden. Ausserdem muss der Datenstrom so aufgebaut sein, das das Takt signal zurückgewonnen werden kann. Ich verwende den B8B10 Code, der all diese eigenschaften vereint, und 8 Bits in 10 Bits darstellt. Auf 4 der 6 Transformatoren werden Daten zum Flügel transportiert, der 5. Trafo transportiert Daten in die andere Richtung (zum Debuggen und Statusdaten) und der Letzte Trafo überträgt ein Taktsignal für die Kommunikation.

Die Daten Werden Paketweise gesendet. Ein Paket umfasst 520 Byte, und besteht aus 512 Byte Nutzdaten. Danach folgt eine 6 Byte lange Magic Number und noch 2 Byte Checksumme. Mit der Magic Number kann der Empfänger erkennen, ob er immernoch synchron zum Sender Arbeitet und sich notfalls auch neu Synchronisieren. bei Fehlern in der Checksumme wird das Datenpaket ignoriert.

Die Rohdaten werden mit 25 Mbit übertragen, das entspricht etwas 10 MByte pro Sec. (Theoretisch zumindest!!)

Projektfortschritt

Test der Datenübertragung

Im Augenblick versuch ich einen Videokopf so umzubauen, das ich über den kopf genug Daten Transportiert bekomme. Peter hat mir einige Tips zum Hardware Design gegeben. Der Kopf hat bereits Verbindung zum FPGA gefunden. Verschiedene Rechecksignale brachten teilweise kuriose Effekte, aber HF geht ja bekanntlich merkwürdige wege. Ein 50 Mhz Rechteck lies sich übertragen, kam aber eher als Sinus wieder an.

Update: 09/08/08 Es klappt *freu* . Die erste Datenübertragung läuft stabil mit 2 Mbyte/sec Bei 20 Mhz. Allerdings noch ohne Takt Rückgewinnung. Als Sender und Empfänger dient bisher der selbe FPGA

Update 27/08/08 Seit wochen Ärgert mich ein Sporadisch flackerndes Display, es gibt wohl im design eine Race Condition :-( Im Simulator kann ich das Problem leider nicht nachvolziehen, also habe ich den Betroffenen Programmteil einfach noch mal neu geschrieben. Zusätzlich hab ich jetzt ein Mini-FPGA Board von Trenz-elektronik geordert. Das soll auf dem Ventilatorblättern mitrotieren. Leider Passt mein USB-Programmieradapter hier nicht :-(

Update 08/09/08 Das Mini-FPGA Board lässt sich nun programmieren dank eines neuen selbstgebastelten Adapters. Die Taktrückgewinnung klappt auch, aber bisher nur in der Simulation. Bevor ich die beiden FPGA's verbinden kann, muss ich mir erst noch was einfallen lassen um das Problem der Synchronisation zu lösen. Zum einen muss ich erkennen, wo im kontinuirlichen Datenstrom ein Byte zu ende ist, und das nächste anfängt, zum anderen muss ich den Anfang von Datenblöcken erkennen.

Update 05/10/08 Ich hatte leider in den letzten paar Wochen nicht viel Zeit, weiter zu machen. Die Daten werden jetzt Paketweise übertragen. Die Übertragung wird mit Magic Numbers Synchronisiert und per Checksummen gesichert.

Update 11/10/08 Ich habe endlich einen Videokopf mit 6 Köpfen ergattern können. (der alte hatte nur 2) der neue Kopf wird in den nächsten Tagen die beiden FPGA's erstmals verbinden.

Update 15/10/08 Prinzipiell klappt die übertragung von einem FPGA zum anderen. Allerdings sind die Signale stark verzehrt, und dementsprechend voller Übertragungsfehler