You are here

Ein nicht ganz gewöhnlicher Spannungswächter mit Atmel Microcontroller ATtiny13

Error message

Deprecated function: Array and string offset access syntax with curly braces is deprecated in include_once() (line 20 of /mnt/web216/e3/48/5667948/htdocs/includes/file.phar.inc).

1. Motivation

Der Aufhänger für dieses kleine Projekt war ein Problem an der elterlichen Ölheizung. Sie ging von Zeit zu Zeit (zu selten, als daß man auf das Ereignis warten könnte, aber zu oft, als daß man das Problem hätte ignorieren können) auf Störung, ließ sich aber ohne Schwierigkeiten immer wieder durch Betätigung des Entstörknopfes in Gang setzen.

Ich hatte eine Theorie, die ich nur mittels einer Aufzeichung der Steuerspannungen, die an den Brenner führen, bestätigen oder widerlegen konnte. Die Platine des SD-Experimentes war bereits vorhanden und auch die Software zum aufzeichnen von Daten war in einem brauchbaren Zustand. Es fehlte nur noch eine Möglichkeit, die Information, ob Spannung anliegt (wir reden hier von Netzspannung - also 235 V), oder nicht, in einem Meßwert zu verwandeln, den das SD-Experiment aufzeichnen kann.

2. Die Lösung - Hardware

Das Kernproblem liegt darin, wie man mit erträglichem Aufwand aus der Netzspannung eine potentialgetrennte Signalspannung erzeugen kann, die die Information darstellt, ob Netzspannung anliegt oder nicht.

Zwei Möglichkeiten fallen einem da aus dem Stand ein: zum einen ein Optokoppler und zum anderen ein Netztransformator. Beim Optokoppler liegt die Schwierigkeit darin, den Diodenstrom intelligent so zu begrenzen, daß nicht allzuviel Verlustleistung abfällt. Größenordnungsmäig sind bei 10 mA Strom und rund 300 V Spannungsabfall am Vorwiderstand 3 W in Wärme umzuwandeln. Auch der Ansatz, den kapazitiven Widerstand eines Kondensators (100nF/630V) zu nutzen, führt zu einer gewissen Baugröße der ganzen Anordnung.

Ich hatte mich zu der Lösung mit den Transformatoren entschieden. Die Netztrennung ist perfekt und man hat wenigstens prinzipiell die Möglichkeit weitere Aussagen den Verlauf der Netzspannung (etwa die Form der 'Sinuskurve') zu treffen. So genau hat's mich dann zunächst doch nicht interessiert. Entscheidend ist jedoch, daß die Auswertung der heruntertransformierten und gleichgerichteten Netzspannung ein Microcontroller durchführt. Die folgenden Bilder zeigen den Schaltplan, das Layout und die fertig aufgebaute Schaltung.

Schaltplan Layout Die bestückte Platine von oben Die Platine von schräg oben

Die Schaltung ist wenig aufregend. Auf den Netztrafo (kleinstmögliche Bauform ist vollkommen ausreichend; es gibt sogar Energiesparmodelle, wie sie in Schaltungen eingesetzt werden, die im Standbye-Mode immer am Netz sind) folgt ein kleiner Brückengleichrichter an den sich ein Spannungsteiler anschließt. Wichtig: hier findet keine Siebung statt. Der Microcontroller, ein Atmel ATtiny13 ([1]) soll jede Halbwelle unverfälscht (bis auf die Nichtlinearität der Dioden) 'sehen' können. Der Controller wird auch nicht aus der zu messenden Spannung versorgt. Die Stromversorgung erfolgt immer vom SD-Karten-Experiment aus! Die im Pegel angepaßte Spannung führt sowohl an Pin 3 (=ADC2) als auch an Pin 6 (=AIN1) des Atmel ATtiny13. Damit hat man die Möglichkeit entweder den Kanal zwei des eingebauten Analog-Digitalwandlers, ADC2, zu verwenden oder den zweiten Eingang des Spannungskomparator, AIN1. Der Ausgang liegt auf Pin 2 (=PB3). Zur Takterzeugung kommt der eingebaute kalibrierte RC-Oszillator bei etwa 4,8 MHz zum Einsatz. Damit wären dann immer noch drei Pins frei, die aber hier nicht herausgeführt sind.

Der Schaltplan zeigt die selbe Schaltung ein zweites mal. Der Grund liegt einfach darin, daß auf einer Platine zwei solche Wandler sein sollten, um zumindest zwei Kanäle gleichzeitig überwachen zu können. Außderdem ist der Stromlaufplan für ein kleines Adapterplatinchen eingezeichnet, das für die Betrachtungen hier aber belanglos ist.

Es liegt nun ganz im Ermessen des Entwicklers, auf welche Weise die Netzspannung überwacht werden soll und in welcher Form das Ausgangssignal den Zustand der Netzspannung an das SD-Karten-Experiment oder eine andere Registriereinrichtung senden soll.

3. Die Lösung - Software

Die Firmware wurde unter Verwendung von AVR Studio 4 ([2])) und der Software Suite WinAVR ([3]) in C unter Verwendung der C-library avr-libc ([4]) entwicklelt. Ich hatte mir nicht die Mühe gemacht, das auch unter Assembler zu tun - es wäre sicher kein größeres Problem geworden.

Die Firmware ist verhältnismäßig einfach gestrickt. Es gibt zwei Interrupts: einmal ein Timer-Interrupt, der ungefähr alle 15 ms auftritt sowie der Interrupt, der vom Analogkomparator herrührt. Liegt Spannung an, so wird alle 10 ms dort ein Interrupt ausgelöst. Dieser kommt dem Timer-Interrupt zuvor und setzt dabei den Timer zurück. Port PB3 wird dabei auf 1 gesetzt. Liegt keine Netzspannung an, dann bleiben der Komparator-Interrupts aus und der Timer-Interrupt tritt ein. Er setzt den Ausgang PB3 auf 0. Ansonten befindet sich der Controller im Sleep-Mode, den er nur zur Interrupt-Verarbeitung verläßt.

  1. #include <avr/interrupt.h> // Using WinAVR
  2.  
  3. ISR(ANA_COMP_vect) { // Analog Comparator Interrupt
  4. if (TCNT0>35) {
  5. TCNT0=0;
  6. PORTB = 8;
  7. }
  8. }
  9.  
  10. ISR(TIM0_COMPA_vect) { // Timer interrupt
  11. PORTB = 0;
  12. }
  13.  
  14. int main (void) {
  15. cli();
  16.  
  17. CLKPR = 0x80; // reduce clock down to 300 kHZ ...
  18. CLKPR = 0x04; // ...and use 4.8 MHz oscillator
  19.  
  20. DDRB = 0x08; // PB3 is output
  21. PORTB = 0;
  22.  
  23. ACSR = 0x4b; // Amongst others: Comparator on and
  24. // Interrupt on rising edge;
  25.  
  26. DIDR0 = 0x02; // Digital Input driver for AIN2 = off
  27.  
  28. // Counter
  29. TCCR0A = 0x02;
  30. TCCR0B = 0x03; // Prescaler = 1/64
  31. TIMSK0 = 0x04;
  32. TCNT0 =0;
  33. OCR0A = 70; // Timeout after ca. 15 ms
  34.  
  35. MCUCR = 0x20; // Sleep Mode enable; Idle
  36.  
  37. sei(); // Interrupt enable
  38.  
  39. while(1) { // go to sleep
  40. asm ( "sleep" "\n\t" :: );
  41. }
  42. }

4. Fazit und Ausblick

Der Spannungswächter hat seine Aufgabe zu meiner Zufriedenheit erfüllt. Die eingangs erwähnte Theorie bezüglich des Problems mit dem Brenner der Ölheizung hat sich nicht bestätigt, was jedoch auch ein Erkenntnisgewinn war. Dieses Projekt eignet sich hervorragend als Einstiegsprojekt in die Programmierung von Microcontrollern anhand des Atmel ATtiny 13. Dabei ist es hier unerheblich, ob in C oder in Assembler entwickelt wird. Pläne, den Spannungswächter in irgendeiner Form weiter zu entwickeln gibt es derzeit nicht. Mögliche Abwandlungen könnten jedoch in folgende Richtungen gehen:

  • Bestimmung der Spitzenspannung mittels eingebautem Analog-Digitalwander
  • Aufspüren von Spikes auf Netzspannung
  • Messung und Überwachung der Effektivspannung
  • Messung und Überwachung der Form der Halbwelle

5. Referenzen und Links

Undefined