Die Community zu .NET und Classic VB.
Menü

Rund um meine Propeller Clock

 von 

Einleitung 

Wie die Teilnehmer des ActiveVB-Workshops 2006 wissen, habe ich vor einiger Zeit als "Spielerei" eine Propeller Clock gebaut. Was das ist und wie es funktioniert möchte ich im folgenden Text zeigen. Allerdings muss ich gleich sagen, dass diese PropClock nach wie vor nicht wirklich fertig ist, sie ist immer noch auf demselben Stand wie beim Workshop vor ungefähr einem halben Jahr. Das hat zur Folge, dass einiges noch relativ buggy und auch noch nicht vollständig ist. Ich hoffe aber, dass ich in nächster Zeit dazu komme, das Ding mal zu vollenden. Dann wird es auch ein Update dieses "Vortrags" geben.
Für die, die nicht warten wollen, folgt hier nun also der Text. Viel Spass!

Philipp Burch

Propeller Clock? Was ist denn das?  

Als Erstes möchte ich hier kurz erklären, was eine Propeller Clock, bzw. abgekürzt PropClock denn eigentlich ist. Einfach ausgedrückt handelt es sich dabei um ein paar drehende Lichter, die - richtig angesteuert - mithilfe der Trägheit des menschlichen Auges Bilder in der Luft schweben lassen können. Doch ein Bild sagt ja bekanntlich mehr als tausend Worte:


Abbildung 1: Eine PropClock in Aktion

Wie kommt man auf sowas?  

An dieser Stelle ist es wohl angebracht, dass ich mal erkläre, wie ich überhaupt auf die Idee gekommen bin, so etwas wie eine Propeller Clock zu bauen. Nun, ich kann versichern, auf diese Idee bin ich nicht als erstes gekommen. Den Ausschlag gaben mehrere Threads im Forum www.mikrocontroller.net. Als ich mir da mal einige dieser Modelle angesehen hatte, dachte ich mir "Wow, das sieht ja recht cool aus!". Und wie es dann halt so ist, ich wollte mir so ein Ding bauen, habe erstmal einige Bauteile aus der Bastelkiste gekramt und angefangen...

Aufgabe 1: Stromversorgung  

Nachdem ich mich also schlau gemacht hatte, wie sowas aussehen könnte, wollte ich mich erstmal darum kümmern, eine relativ grundlegende Aufgabe zu lösen: Die Leuchtdioden auf dem Rotor müssen irgendwie mit Strom versorgt werden, sonst tut sich da erstmal gar nichts. Da ich als Zielhardware bereits einen PC-Lüfter im Kopf hatte, hatte ich auch schon eine vage Vorstellung davon, wie gross diese Konstruktion werden sollte. Nachfolgend also die Möglichkeiten, ob passend oder nicht, wie man die Energie vom Stator auf den Rotor bekommt:

  • Schleifringe
  • Generator auf dem Rotor
  • Kugellager anstelle eines Schleifringes
  • Batterie/Akku auf dem Rotor
  • Transformator aus zwei Luftspulen

Bestimmt gäbe es noch tausend Alternativen, aber wirklich in Betracht gezogen, hatte ich die oben genannten. Nun ging es also darum, zu entscheiden, welche denn passend ist bzw. wäre. Den Generator auf dem Rotor des Lüfters konnte ich schon von Anfang an streichen, da diese Lüfter nunmal eine sehr begrenzte Leistung haben, mit der es für die Beleuchtung sicher nicht mehr reichen würde. Ebenso war die Batterie, bzw. der Akku nicht möglich, da das enorm gross und vor Allem schwer geworden wäre.
Nun musste ich mich also noch entscheiden, was ich nun nehmen soll. Am "natürlichsten" erschienen mir die Schleifringe, die auch gleich eine relativ simple Art und Weise zur Datenübertragung zum Rotor ermöglicht hätten. Allerdings ist es mir nicht gelungen, eine Konstruktion zu erstellen, die ruhig und zuverlässig läuft. Ausserdem war auch hier wieder das Problem des begrenzten Drehmoments des Lüfters. Auch die Variante mit einem, bzw. mehreren Kugellagern hatte ich aus konstruktiven Gründen nicht bauen können, allerdings lag das wohl eher daran, dass mir einfach gerade keine gescheite Platzierung der Lager einfallen wollte...

Tja, nun blieb nicht mehr viel übrig. Eigentlich dachte ich schon von Anfang an, dass die Variante mit den Luftspulen wohl der gescheiteste Weg sein wird, allerdings hatte ich das möglichst rausgeschoben, da das nicht ganz so einfach zum Ausprobieren ist. Immerhin braucht man zwei Spulen, die erstmal gewickelt werden müssen und dann natürlich auch noch eine entsprechende Ansteuerung, sprich ein Wechselrichter, da Transformatoren ja bekanntlich nur mit Wechselspannung funktionieren...
"Na dann, frisch an's Werk", dachte ich mir und habe mich im Internet informiert, wie man sowas am gescheitesten realisiert. Dabei bin ich auch darauf gestossen, dass man sogar die Datenübertragung über den Transformator realisieren kann, indem das Signal auf die Trägerfrequenz aufmoduliert wird (Frequenzmodulation).
Nun wusste ich eigentlich schon ziemlich genau, wie denn die Stromversorgung der PropClock aussehen sollte. Ich brauche einen Mikrocontroller zur Erzeugung der Wechselspannung mit den aufmodulierten Daten. Für diese Aufgabe erschien mir ein Controller der Reihe ATmega8 von Atmel recht passend. Als H-Brücke zur Erzeugung der Wechselspannung wurde mir in einem Forum zum L6203 geraten. Dieser Treiber ist zwar relativ teuer, hat aber einen guten Wirkungsgrad (Basiert auf Feldeffekttransistoren mit einem sehr kleinen Widerstand im durchgeschalteten Zustand) und ist einfach zu verwenden. Da der Controller für diese Aufgabe aber gerade mal zwei seiner über 20 frei verwendbaren Pins benötigt, musste noch etwas mehr auf die Platine. Da ist erstmal ein MAX232 von Maxim als Pegelwandler für die RS232, damit die Daten für den Rotor auch irgendwo herkommen. Und dann noch, passend für den Einbau in einen PC, Anschlüsse für sechs LEDs und vier Lüfter. Und natürlich ein Taktgeber.

So, das war's auch schon, ca. eine Woche später hatte ich einen ersten Prototypen auf einer selbst geätzen Platine vor mir. Was dann folgte, überraschte mich selbst nicht schlecht. Ich konnte die Hardware aufbauen, ein kleines Progrämmchen zur Erzeugung der Wechselspannung schreiben und, nicht zu vergessen, die Spulen wickeln. Und siehe da, bereits der erste Test war erfolgreich. Auf der Basisplatine steuerte ich die Spule mit 12V und ca. 10kHz an (100 Windungen) und an der Sekundärwicklung (150 Windungen) konnte ich ungefähr 18V messen. Im Leerlauf versteht sich.

Ein paar weitere Tests ergaben dann folgende Daten:

  • Den besten Wirkungsgrad kann ich mit ca. 10kHz erreichen
  • Unter Volllast (16 LEDs) bricht die Spannung auf knapp über 6V ein, also gerade noch ausreichend um stabile 5V zu erzeugen
  • Der Wirkungsgrad liegt je nach Belastung bei 50% oder mehr

Damit war die Aufgabe der Stromversorgung erfolgreich gelöst :)


Abbildung 2: Der fertige Aufbau

Aufgabe 2: Konstruktion des Rotors  

Nachdem die Stromversorgung nun also bereits funktionierte, ging es nun an den Rotor. Diesen hatte ich zuerst testweise auf Lochraster aufgebaut. Die Pads zu halbieren damit ich da 16 SMD-LEDs nebeneinanderpacken konnte war zwar etwas mühsam, ist aber ziemlich praktisch. Als Controller hatte ich hier einen ATtiny26 verwendet. Mit seinen 2kByte Flash (Programmspeicher) ist er zwar etwas knapp bemessen, reichte aber aus. Assembler ist eben schon genügsam...

Nachdem der elektronische Teil des Rotors nun also mehr oder weniger fertig war, ging es daran, die Platine mit der Spule irgendwie auf den Rotor des Lüfters zu bekommen. Auf meinem 80mm-Lüfter den ich für den Prototypen verwendete war das noch relativ einfach, da dieser vergleichsweise langsam dreht (ca. 1600U/min), zumindest hatte ich weit weniger Probleme mit dem Auswuchten als mit dem 60mm-Lüfter den ich beim zweiten Versuch benutzte. Auf jeden Fall ging es erstaunlich schnell, bis ich einen leuchtenden Kreis auf den Lüfter zaubern konnte.
Damit war also auch die zweite Aufgabe gelöst.


Abbildung 3: Der erste Prototyp...

Was jetzt noch fehlte war die Erkennung für den Rotor, wann eine Umdrehung vollendet ist. Das konnte ich relativ einfach realisieren, indem ich eine Infrarot-Sendediode an der Primärspule und ein IR-Fototransistor auf dem Rotor befestigte. Beide hatte ich in einer kleinen Gabellichtschranke "gefunden".


Abbildung 4: ... und die neuere Version

Aufgabe 3: Die Programmierung  

Die letzte Aufgabe, die Programmierung der Controller war bei Weitem die aufwändigste. Auf dem Rotor hatte ich zwar relativ bald eine sich drehende Schrift, allerdings dauerte das Debugging bis wirklich alles lief seeehr lange. Und eigentlich läuft's ja auch jetzt noch nicht richtig, zumindest funktioniert die Kommunikation zwischen dem Controller für die Stromversorgung und dem Rotor noch immer nicht richtig. Doch dazu etwas weiter unten mehr.

Die Erzeugung der Schrift

Das zentrale Thema bei der Programmierung war natürlich die Erzeugung der Schrift, denn genau darum geht es ja eigentlich. Im ersten Moment mag das zwar etwas komplex erscheinen, aber im Grunde ist es ganze einfach. Alles was man braucht ist eine Tabelle in der die Daten der darstellbaren Zeichen stehen und einen Interrupt der mit der richtigen Frequenz aufgerufen wird. Um die Tabelle zu generieren hatte ich mir ein Programm in VB 2005 geschrieben (Das auch gleich für die Steuerung der ganzen PropClock hinhalten muss), womit ich die 128 Zeichen recht fix erstellt hatte. Gespeichert werden die Zeichen jeweils spaltenweise mit acht Bit pro Spalte und fünf Byte bzw. Spalten pro Zeichen.
Um nun also einen Text auszugeben benötigt man im einfachsten Fall zwei Variablen als Zähler. Einmal ein Zähler für das aktuelle Zeichen im auszugebenden Text und einen zweiten für die anzuzeigende Spalte im jeweiligen Zeichen. In jedem Interrupt braucht man dann nur noch den Zeichenzähler zu inkrementieren, den Zeichencode mit 5 zu multiplizieren, die aktuelle Spalte zu addieren und dann das entsprechende Byte aus der Tabelle zu laden und auszugeben. Alles ganz simpel ;)

Die (nicht ausgereifte) Kommunikation

So schön dieser Text auch aussehen mag, wenn man ihn nicht verändern kann ist das doch etwas langweilig. Daher musste also eine Möglichkeit her, dem Rotor irgendwas mitteilen zu können. In der Theorie ist auch das ganz einfach: "Man nehme die zu übertragenden Daten, codiere sie gemäss Manchester und gebe sie so auf die Spule zur Stromversorgung aus."
Leider entpuppte sich dieses Unterfangen als etwas komplizierter als es aussieht... Ausserdem wollte mir dieser Manchester-Code irgendwie nicht so recht geläufig werden, jedenfalls hatte ich es damit dann wieder aufgegeben und bin stattdessen auf eine andere ähnliche Version umgestiegen, die Frequenzmodulation. Nun wird ja normalerweise die Frequenz über eine bestimmte Zeit verändert, doch ich wandelte auch diese Variante noch etwas ab. Ich veränderte eigentlich nur die Periodendauer jeder einzelnen Schwingung, so dass ich eigentlich bei 10kHz "Trägerfrequenz" bereits 20kBit/s übertragen konnte. Natürlich hatte ich dieses Vorgehen nicht wegen der Geschwindigkeit gewählt, sondern wegen der, in meinen Augen, etwas einfachereren Realisierbarkeit. Denn im Rotor brauchte ich dann nur noch bei jeder Umkehrung der Polarität zu prüfen ob die vergangene Bit-Zeit normal, kurz oder lang war. Normal heisst dabei "Keine Daten", kurze Signale sind Nullen und lange eben Einsen.
So weit so gut, doch leider funktionierte das nie zuverlässig. Das ist auch der Punkt an dem ich steckenblieb und in Zukunft einmal weitermachen sollte. Allerdings könnte das noch etwas dauern...

Ein paar Worte zum Code...

Da es schlicht nicht möglich auch nicht sinnvoll wäre, den gesamten Code zu erklären möchte ich an dieser Stelle auf den Quellcode verweisen. Im untenstehenden Zip-Archiv befinden sich die Schemas inkl. Layouts für die Hardware, sowie die Quellcodes für den ATmega88 für die Stromversorgung, den ATtiny26 für den Rotor und das Konfigurationsprogramm. Die Programme für die Controller sind in AVR-Assembler geschrieben und der Konfigurator in VB2005.
Für Fragen, Anregungen und Kritik stehe ich natürlich immer zur Verfügung, allerdings ist es nun schon eine ganze Weile her seit ich das alles programmiert habe, daher kann ich wahrscheinlich nicht bei Allem sagen, warum ich das denn nun genau so und nicht anders gemacht hatte...

Das war's...  

So viel also zu meiner Propeller Clock. Ich hoffe, ich habe euch nicht allzusehr gelangweilt (Dann hättet ihr wohl auch nicht bis hierher gelesen ;) ) und wünsche an dieser Stelle allen viel Spass, die durch diesen Text auf den Geschmack gekommen sind, auch mal so etwas zu bauen. Ich kann nur sagen, es lohnt sich.

Hier nun also noch das versprochene Archiv:

Quellcode und Schemas 

Und hier noch einige Links, die ebenfalls interessant sein dürften:
http://www.bobblick.com/techref/projects/propclock/propclock.html
http://www.luberth.com/analog.htm
http://ispf.de/modules.php?name=News&file=print&sid=2

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 3 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Felix.S am 28.02.2009 um 11:38

Spannend zu lesen und gute ideen, das möglichst einfach zu lösen.

Kommentar von Nils Thomsen am 30.05.2007 um 17:52

Hehe... leider kenne ich das schon. Wenn du das noch steigern möchtest, dann kannst du ja die Idee von dem Typen aufgreifen, der in Knoff Hoff einen Fernseher auf diesem Patent gebaut habe.

Das einzige, dass ich nicht so ganz verstehe: Als Treiber hättest du doch auch genauso gut einen BUZ 10/11 nehmen können, und als Darlington beschalten. Das hätte allemal für den mini-lüfter gereicht...

Kommentar von Timo am 16.05.2007 um 21:54

Hey das ist ja wahnsinn. Tolles Projekt geworden. Ich finde vorallem die Stromversorgung heiss. Die Idee der FM Datenübertragung ist ganz schön aufwendig. Vielleicht wäre hier ein separierter Funktsender/Empfänger um einiges stabiler. Aber das wäre dann wohl an Deiner Projektidee vorbei.
Auf jedenfall interessant, dass die Theorie der Elektronik doch zu funktionieren scheint. Gruss
Timo