Lichtwecker

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

von Christoph Wastlhuber


Dieser Artikel nimmt am Artikelwettbewerb Infineon XMC Design Contest 2014 teil.
Fertiger LED-Lichtwecker



Motivation

Ist es nicht schön nach einer schönen lauen Sommernacht am nächsten Morgen von der Sonne geweckt zu werden? Das Gefühl, das einen dabei begleitet, als könnte man Berge versetzten, als gehört einem die Welt, als könnte man einfach alles erreichen! Meine traurige Realität ist ein quickender und pfeifender Wecker, welcher weder sinnliche noch fröhliche Geräusche von sich gibt und einen auf die wohl brutalste Art und Weise aus dem Schlaf holt. Getrieben von der LED-Technik und begeistert von den Lichtweckern, die es bereits im Handel gibt, wollte ich auch so ein TEIL haben. Doch kaufen kann jeder und deshalb wurde jetzt ein Eigenbau realisiert.

Features

Hier die Features kurz und knackig:

  • Lichtweckfunktion
  • Alphanumerisches Display für Uhrzeit, Datum und Menü
  • Einfach Bedienung (3-Tasten => OK, Up, Down)
  • Batterie-Pufferung
  • Praktischer Nebeneffekt: Nachtischlampe

Als besonders wichtig erschien mir die Batterie-Pufferung, da ich weder die Uhr nach jedem Stromausfall stellen will noch ein Gerät haben will, das ständig am Stromnetz hängt. Auch der Gedanke 30cm neben meinem Kopf arbeitet während des Schlafens ständig eine Funkquelle lässt mir keine Ruhe.

Konzept

Blockschaltbild Lichtwecker

Mit voranschreiten der LED-Technik war es plötzlich sehr einfach Lampen anzusteuern. Es muss nicht mehr direkt mit 230V hantiert werden, die LEDs können sehr einfach in der Helligkeit variiert werden, es gibt alle Grundfarben, die Hitzeentwicklung hält sich in Grenzen und es kann mit vergleichsweise geringer Leistung viel Licht erzeugt werden. Ein weiterer Vorteil neben der guten Energie-Effizienz ist die extrem lange Lebensdauer, wodurch ein Austausch nicht mehr vorgesehen werden muss. Mit dem Erscheinen der XMC-Reihe sowie dem Erscheinen des XMC2go-Boards hatte auch ich plötzlich einen Debugger für meine Hardware. Besonders preislich ist das XMC2go Board sehr attraktiv. Auch das Konzept mit den grafisch konfigurierbaren APPs von DAVE 3 ist sehr komfortabel und ermöglicht den schnellen Einstieg in die ARM-Welt. Aus eins mach zwei und es war die grundlegende Hardware-Idee für den Lichtwecker geboren. Die restliche Hardware war schnell besorgt und es konnte losgehen. Der XMC1100 auf dem XMC2go Board stellt die CPU dar und bringt gleichzeitig die Real-Time-Clock (RTC) mit. Ein DOG-M Display für die Anzeige, drei RGBW-LEDs als Lichtquelle, ein Lithium Ionen Akku samt Ladeelektronik als Batterie-Puffer, ein Schaltnetzteil zum Akkuladen und als Stromlieferant für die LEDs. Alle Komponenten sind wie in der nebenstehenden Abbildung zu sehen verschaltet.

Hardware

Mainboard mit XMC2go (Mikrocontroller)

XMC2go Platine, siehe auch XMC2Go Users Manual

Auf dem Mainboard befindet sich:

  • XMC1100 32-bit ARM® Cortex™-M0 Prozessor (XMC2go [1] )
    • 32 MHz CPU-Takt, 64 MHz Timer-Takt
    • 64 kB Flash
    • 16 kB RAM
    • On-Board J-Link Debugger
    • 2 Channel USIC (UART, SPI, I2C, I2S, LIN)
    • 6 Channel Analog to Digital Converter (12-Bit Auflösung)
    • 2 LEDs
  • 3,3 V Spannungsregler (Es wird nicht der auf dem XMC2go-Board verwendet)
  • Transistor als Relaistreiber
  • Spannungsteiler für den Analog-Eingang
  • Pull-Ups für die 3 Taster

Der On-Board Debugger wird mit Hilfe eines zweiten ARM-Mikrocontrollers auf dem XMC2go realisiert. Dafür wird ein XMC4200 eingesetzt. Dieser ARM-Prozessor von Infineon ermöglicht das Programmieren des Mikrocontrollers sowie das anschließende Debuggen der neu aufgespielten Software. Für die Erzeugung der 3,3V Arbeitsspannung, aus den 5V des USB-Anschlusses, ist ein kleiner LDO auf dem Board.

Mainboard des Lichtweckers

Da der Lichtwecker später nur während des Weckvorgangs sein integriertes Netzteil nutzen soll, wird stark auf den Energieverbrauch geachtet. Daher wird das XMC2go Board etwas manipuliert. Standardmäßig ist es nicht möglich den XMC1100 und den XMC4200 (Debugger) separat zu versorgen. Da der XMC4200 jedoch auch im Stand-by Betrieb einen großen Stromhunger hat, muss dieser vom Rest der Schaltung getrennt werden. Um dies realisieren zu können, muss eine Leiterbahn auf dem XMC2go-Board getrennt werden. Mit zum Beispiel einem Cutter-Messer kann dies problemlos durchgeführt werden. Der Stromverbrauch sinkt dadurch auf ca. 1 mA.

Wer weiterhin ohne externe Versorgung den XMC1100 programmieren will, kann dazu weiterhin den integrierten Linearregler nutzten. In nebenstehender Abbildung ist der Anschluss des Internen LDOs gekennzeichnet. Durch Anlöten eines Kabels an den PIN und Überbrücken der vorher aufgetrennten Verbindung, indem das Kabel mit den externen 3,3 V verbunden wird, kann die ursprüngliche Funktionalität wieder hergestellt werden.

Übersicht Schaltplan des LED-Lichtweckers

Auf dem Mainboard befindet sich weiter etwas Vogelfutter für die externen Bauteile sowie für die Auswertung der Batterie-Spannung und der Erzeugung der 3,3 V Spannung. Aufgrund der geringen Anzahl an IO-Pins und deren Belegungsmöglichkeiten, muss damit gut gewirtschaftet werden. In meinem Fall musste noch zusätzlich der PIN P2 (P0.13) genutzt werden, der nur als Testpunkt herausgeführt ist. Das Anlöten stellte aber kein Problem dar und kann mit einem standard Lötkolben vorgenommen werden. Um ein Abreißen des Pads zu vermeiden, wurde nach dem Anlöten des Kabels dieses mit Sekundenkleber gesichert.

Pin-Belegung
Pin Funktion Type
P2.10 PWM LED Red Output
P0.7 PWM LED Green Output
P2.11 PWM LED Blue Output
P0.0 PWM LED White Output
P0.8 SPI CLK Output
P0.9 SPI CS Output
P0.14 SPI MTSR(SDI) Output
P0.15 SPI/LCD RS Output
P2.7 Button OK External Interrupt Input
P0.13 Button Down Input
P0.5 Button Up Input
P2.0 Relais Output
P2.6 Batterie Sense Analog Input
P0.6 - Input

DOGM162 Display

Als stromsparendes Display kommt ein DOGM162 Display mit SPI-Interface von Electronic Assembly (EA) zum Einsatz. Dieses Display wurde aufgrund des kleinen Arbeitsstroms sowie des SPI-Interfaces gewählt. Weiter kann das Display ohne Hintergrundbeleuchtung betrieben werden. Die Beschaltung des Displays wurde, wie im Datenblatt für 3,3 V beschrieben, vorgenommen. Das Display hat folgende Eckdaten[2]:

  • Wahlweise 3,3 V und 5 V Arbeitsspannung
  • Typ. 250µA Stromaufnahme
  • SPI-Interface (4-Wire)
  • Integrierte Spannungsversorgung (Step-Up)

Batterie-Puffer

Als Batterie-Puffer für den Lichtwecker kommt ein 18650 Lithium-Ionen-Akku zum Einsatz. Die passende Lade- und Überwachungsschaltung XD-58A für den Akku (von Eckstein Komponente) sorgt dabei für einen sicheren Betrieb der Batterie. Damit ergeben sich folgende Eigenschaften der Batterie-Pufferung:

  • 3,5 - 4,2 V Batterie-Spannung
  • 3000 mAh Kapazität
  • Bis zu 1 A Ladestrom bei 5 V Eingangsspannung Überlade- und Tiefentlade-Schutz (Spg.-Bereich von 2,5 bis 4,2 V)
  • Überstromabschaltung bei 3A
  • Spannungsüberwachung mit dem Mikrocontroller

Mit einem Stromverbrauch von ca. 1,5 mA erreicht man bei Nutzung von 80% der maximalen Batteriekapazität eine Akkulaufzeit von ca. 2400 mAh/1,5 mA = 1600 Stunden oder 67 Tage. Wird eine minimale Akkuspannung unterschritten, wird das Netzgerät eingeschaltet und damit der Akku wieder aufgeladen. Dies wird aber bei einer regelmäßigen Benutzung der Weckfunktion nicht nötig sein, da während des Weckvorgangs der Akku aufgeladen wird und damit genug Energie für einige Tage Betrieb getankt wird.

VORSICHT!!! Beim Umgang mit Lithium-Ionen-Akkus immer vorsichtig sein. Diese können bei falscher Behandlung überhitzen, brennen oder explodieren. Daher sollte ein Lithium-Ionen-Akku nur dann eingesetzt werden, wenn man die Gefahren kennt und den Einsatz mit entsprechenden Schutzschaltungen absichert. In diesem Fall übernimmt die XD-58A Schaltung diese Aufgabe und trennt im Fehlerfall die Batterie vom Verbraucher. VORSICHT!!!

Netzteil

Innenleben des Lichtweckers

Als Netzteil kommt ein kleines 12 V Schaltnetzteil mit 24 W zum Einsatz. Dieses wird über ein Solid-State-Relais (Sharp S202) bei Bedarf aktiviert und stellt dann die nötige Energie für die LEDs sowie zum Akku-Laden bereit. Als Transistor für die Relais-Ansteuerung kann jeder beliebige NPN-Typ ausgewählt werden. Ich wählte einen BC547C mit einem 1 kΩ Basis-Widerstand und 220 Ω Vorwiderstand aus. Für die Versorgung der Akku-Ladeschaltung wird ein weiteres Schaltnetzteil eingesetzt, das die benötigten 5 V für die Ladeschaltung erzeugt. Aus der Batterie-Spannung wird dann mit einem 3,3 V LDO die Arbeitsspannung des XMC2go Boards erzeugt.

LEDs und LED-Konstant-Stromquelle

Als Lichtquelle zur Simulation des Sonnenaufgangs werden 3 RGBW LEDs von CREE eingesetzt. Damit können alle Farben in der nötigen Helligkeit erzeugt werden. Die Besonderheit dieser LEDs ist ein Wirkungsgrad von über 80 lm/W beim weißen Chip, was zu einer exzellenten Lichtausbeute führt.

Für die Ansteuerung der LEDs wurde eine Platine mit 4 Konstant-Strom-Quellen (KSQ) erstellt. Die KSQs wurden dabei linear ausgeführt, was durch die LED-Durchlasspannung (weiß) von 3,7 V im Arbeitspunkt und dem 12 V Netzteil zu keiner erheblichen Verschlechterung des Wirkungsgrads führt (3x3,7 V = 11,1). Der Wirkungsgrad für die Ansteuerung der weißen LEDs beläuft sich damit auf 11,1/12 = 92,5 %, was auch von Schaltreglern kaum übertroffen wird. In nebenstehender Abbildung ist die fertige Platine mit 4 aufgebauten KSQs zu sehen. Daneben ist der Schaltplan einer KSQ zu sehen.

Da eine logische 1 am jeweiligen CPU-Ausgang die LEDs ausschaltet, fließt im Auszustand immer ein Strom. Deshalb müssen die LEDs während des Batterie-Betriebs immer eingeschalten sein. Da jedoch die 12V nicht anliegen, leuchten die LEDs nicht.



ACHTUNG!!! Für ausreichend Kühlung der LEDs sorgen! ACHTUNG!!!

Jede der 3 eingesetzten LEDs könnte mit etwa 3 W pro Chip (Die) betrieben werden, was theoretisch zu einer Gesamtleistung pro LED-Platine von 9 W führt. Jedoch sollte die Leistung pro Platine nicht über 4 W steigen, da sonst mit thermischen Problemen zu rechnen ist. Weiter ist eine korrekte Montage der LEDs auf einem Kühlkörper unabdingbar.

Dafür eine kurze Anleitung:

Aufkleben von LEDs auf einen Kühlkörper
  1. Schrauben: Werden die LEDs auf einen Kühlkörper geschraubt, muss unbedingt zwischen LED und Kühlkörper eine Wärmeleitpaste oder ein Wärmeleitpad angebracht werden. Wichtig ist es die Schrauben nicht zu stark anzuziehen, da sich sonst die LEDs biegen und die Platine nicht mehr vollflächig aufliegt.
  2. Kleben: Werden die LEDs aufgeklebt, kann entweder ein Wärmeleitkleber verwendet werden, oder direkt unter der LED eine Wärmeleitpaste aufgetragen werden und anschließend die LED-Platine am Rand mit einem Tropfen Sekundenkleber befestigt werden. (Siehe Abbildung rechts)

Ein kleiner Funktionstest mit Temperaturmessung (z.B. fühlen) sollte nach dem Anbringen der LED durchgeführt werden, der die korrekte Montage der LED überprüft.

TIPP: Bevor die LEDs auf dem Kühlkörper montiert werden, sollten die Anschlüsse angelötet werden, da die gute Wärmeabfuhr der LEDs nun auch dazu führt, dass die LED-Anschlüsse nur noch sehr schwer mit einem Lötkolben erwärmt werden können. Schlechte Lötstellen => hoher Widerstand => Ärger!

Software

DAVE 3

Dave 3 ist die kostenlose Entwicklungsumgebung von Infineon für die ARM-Cortex M0 Reihe (XMC1X00) und die ARM-Cortex M4 Reihe (XMC 4X00) Mikrocontroller von Infineon. Dabei bietet DAVE 3 neben den konventionellen Entwicklungswerkzeugen ein weiteres an. In DAVE 3 wird einem eine APP-Bibliothek zur Verfügung gestellt. Diese APPs abstrahieren Hard- und Software, können untereinander verbunden und graphisch konfiguriert werden. Ein einfacher und schneller Einstieg in die Programmierung der ARM-Mikrocontroller ist möglich, da einem von DAVE der gesamte Initialisierungsvorgang sämtlicher Hardwareelemente abgenommen wird und passende Funktionen zum Steuern der jeweiligen Hardware zur Verfügung stehen. Parallel dazu kann wie üblich in C und C++ programmiert werden. Zu beachten ist, dass für die APP-Unterstützung ein DAVE CE Projekt erstellt werden muss. Im Anschluss können die passenden APPs hinzugefügt werden. Wer eine Dokumentation zu den APPs sucht, muss dazu im Hilfe-Menü den Punkt „APPs“ auswählen. Alternativ kann mit F1 und einem anschließenden Klick auf die gewünschte APP die Hilfe aufgerufen werden. Grundsätzlich ist die Dokumentation der APPs umfassend und ausreichend.

Mikrocontroller

Auf dem Mikrocontroller läuft im Grunde eine Finite-State-Machine. Damit werden alle Betriebsfälle abgedeckt und die Software bleibt überschaubar. Die drei Betriebszustände sind Idle (Sleep), Active (Menü etc.) und WakeUp. Wenn der Wecker sich im Idle-Zustand befindet wird der Mikrocontroller in den Sleep-Mode versetzt um Strom zu sparen. Im Active- sowie WakeUp-Zustand, ist das Netzteil engeschaltet und es wird einerseits die Batterie geladen und andererseits können die LEDs genutzt werden. Um Fehler zu vermeiden ist eine Art „Watch-Dog-Timer“ integriert, der die einzelnen Zustände überwacht und wenn eine gewisse Zeit ohne eine Handlung verstreicht, den Wecker in den Idle-Zustand versetzt. Dadurch wird Sichergestellt, dass der Wecker die Batterie nicht unnötig belastet.

RTC

Als Real-Time-Clock (RTC) wird die im XMC1100 integrierte Uhr verwendet. Von dieser wird ein periodischer Interrupt im Sekundentakt erzeugt, der die Zeitbasis für die Uhr darstellt. In diesem Interrupt werden alle Zustände überprüft und ein Timeout (Watch-Dog) überwacht den Wecker.

  • Timeout Menü: 30 s
  • Timeout Nachttischlicht: 1800 s
  • Timeout Wakeup: 3600 s

Die im XMC1100 integrierte RTC ist leider von Werk aus sehr ungenau eingestellt. Daher wird der Prescaler des Clocks in der Initialisierungsphase angepasst. Zur Kalibrierung sind Messungen über lange Zeiträume nötig (Stunden, Tage). In meinem Fall konnten mit der so durchgeführten Justierung des Prescalers akzeptable Abweichungen der Uhrzeit erreicht werden. Hier ein Verweis auf AVR - Die genaue Sekunde / RTC[3]

Taster

Zum Aufwecken des Weckers (CPU) aus dem Sleep, löst der OK-Button einen Interrupt aus, der den Wecker in den Active-Zustand versetzt und das Menü aufruft. Die anderen beiden Taster werden anschließend per Software ausgewertet. Alle Taster werden softwareseitig für einen angenehmen Betrieb entprellt.

Menü

Es gibt folgende Menüpunkte:

  • Light On? / Light Off?
  • Set Clock?
    • Set Hour!
    • Set Min!
  • Set Date?
    • Set Year!
    • Set Month!
    • Set Day!
  • Set Alarm?
    • Set Hour!
    • Set Min!
    • Set Alarm!
  • Set WakeUp Durration?
    • Set WakeUp Durration!
  • EXIT?

Wie die Namen bereits verraten können so die Uhrzeit und der Alarm konfiguriert, sowie das Nachttischlicht aktiviert werden.

Display

Anzeige des Lichtweckers im Idle-Zustand

Das Display ist über SPI mit dem XMC1100 direkt verbunden. Dafür wurden Funktionen zum Initialisieren und zur Ausgabe von Text, an einer beliebigen Stelle auf dem Display, geschrieben. Um nicht unnötig viel Platz des Flashs zu belegen, werden alle String-Verarbeitungen von Hand durchgeführt. Befindet sich der Wecker im Idle-Zustand, wird im RTC-Interrupt das Display mit der aktuellen Uhrzeit aktualisiert.


Zusammenfassung

Es wurden alle gewünschten Anforderungen implementiert und der tägliche, früh morgens stattfindende Funktionscheck überzeugt. Die Akkulaufzeit ist ausreichend und es wird bei jedem Weckvorgang die Batterie nachgeladen. Die verwendeten LEDs sind ausreichend hell und es können alle Farben dargestellt werden. Verbesserungspotential besteht bei der RTC. Diese könnte in Zukunft über ein DCF77-Modul synchronisiert werden, was ein Driften der Uhrzeit verhindern würde. Jedoch konnte mit der RTC-Kalibrierung die Abweichung auf wenige Sekunden pro Tag gesenkt werden, was durchaus akzeptabel ist und für diese Zwecke ausreicht.

Anmerkungen

Da dies ein "Bastelprojekt" ist, können Fehler in der Hardware und Software nicht ausgeschlossen werden. Beides wird hier "wie es ist" ('as is') zur Verfügung gestellt und enthält mit Sicherheit noch einige Bugs!

Wer Fehler findet darf mir diese gern mitteilen! ;-)

Und nun viel Spaß mit dem Projekt!

Downloads

Web Ressourcen/Einzelnachweise