Der Arduino Sketch zur Class-E Teslaspule – Teil III

In Teil I und Teil II hatte ich bereits einige meiner ersten Erfahrungen mit dem Aufbau eines Bausatzes einer SSTC Teslaspule sowie einige Funktionserweiterungen dazu beschrieben. In diesem Teil III konzentriere ich mich weitgehend auf die Ideen rund um den Arduino Sketch. Im Wesentlichen besteht der Wunsch den Betrieb der Teslaspule so betriebssicher wie möglich zu machen.

Vorab noch der inzwischen übliche Sicherheitshinweis. Bitte unbedingt beachten! Es ist kein Spaß!

Der Betrieb einer Teslaspule ist und bleibt gefährlich!

Es besteht dabei immer die Gefahr schmerzhafter oder gar tödlicher Verletzungen. Bei Experimenten mit hochfrequenter Hochspannung können andere elektrische Geräte gestört oder beschädigt werden. Durch die Entladungen entstehen Ozon und Stickoxide. Ozon ist ein Reizgas, das Kopfschmerzen, Übelkeit, Augenreizungen und vieles mehr hervorruft. Entstehende UV-Strahlung kann Netzhautschäden verursachen, um nur einige wenige der potentiellen Gefahrenquellen zu nennen.

Ich übernehme keinerlei Haftung für Sach- oder Personenschäden.

Aufgabenstellung

Zur Überwachung und Steuerung des HF-Leistungsgenerators der Teslaspule habe ich einen Arduino Pro Micro verbaut, der im Grunde zum jetzigen Zeitpunkt erst einmal nur einfache Überwachungs- und Steuerungsaufgaben übernimmt. Zur Benutzerführung ist inzwischen noch ein kleines 2-zeiliges LCD mit je 16 Zeichen dazugekommen. Neben dem Arduino Pro Micro sollte auch jedes andere Arduino Derivat funktionieren.

Zu überwachen sind folgende Parameter:

  • Stromaufnahme der TeslaspuleTeslaspulenbausatz_9_Lüftermontage_CIMG3846R
  • Temperatur des MOSFET Kühlkörpers
  • Temperatur der Teslaspule

Aktionen in Abhängigkeit der Ereignisse:

  • Kühlung des Kühlkörpers über einen Lüfter mit Drehzahlsteuerung per PWM
  • Kühlung der Teslaspule über einen separate PWM-Lüfter
  • Notabschaltung bei zu hoher Temperatur an Teslaspule oder Kühlkörper
  • Notabschaltung bei zu hoher Stromaufnahme
  • Anzeige des Betriebs- und Fehlerzustandes auf einem LCD

Verdrahtung der Sensoren und Aktoren

Teslaspulenbausatz_10_SensorHeatSink_CIMG3847RAls Temperaturfühler kommen kleine LM35 Sensoren im TO92 Gehäuse zum Einsatz, die ich jeweils in die Teslaspule und an die Unterseite des Kühlkörpers mit Sekundenkleber geklebt und mit Tape zusätzlich fixiert habe. Die Kühlung erfolgt über 2 der im PC üblichen 4-pol. PWM-Lüfter. Die Anschlussfolge der Peripherie ist nachfolgend aufgeführt. Zu beachten ist noch, die externen Sensoren möglichst über abgeschirmte Kabel mit den Sensoreingängen des Controllers zu verbinden. Ansonsten strahlt die Teslaspule ihre HF über die als Antenne wirkenden Verbindungskabel direkt in die Eingänge des AD-Wandlers. Mit Temperaturmessung hat das dann nicht mehr viel zu tun. Zumindest sollten die Anschlussleitungen ordentlich verdrillt und über ein RC-Tiefpass 10k/0,1uF mit dem Analogeingang des Controllers verbunden werden. Gleichzeitig bildet das RC-Glied eine hoffentlich wirksame ESD Schutzmaßnahme falls doch einmal mit der Hochspannung ein ungeplantes Malheur passieren sollte.

  • Arduino Pin  – Sensor / Ausgang
  • A0                – LM35 Vout pin (5V Vout GND) for heat sink
  • A1                – LM35 Vout pin (5V Vout GND) for coil
  • A2                – Over-current measurement pin
  • 3                  – PWM for heat sink fan
  • 5                  – PWM for coil fan
  • 4                  – Tesla coil generator power on/off
  • Arduino Pin – LCD Anschluss
  • 12               – RS (Register Select)
  • 11               – E (Enable)
  • 10               – D4
  • 9                 – D5
  • 8                 – D6
  • 7                 – D7Teslaspulenbausatz_11_Motherboard_CIMG3848R

Auf dem nachfolgenden Foto ist eine Ansicht des Prototypenaufbaus zu sehen. Die anfangs noch externe Messbereichsumschaltung für das analoge Zappelmeter ist inzwischen auch mit auf dem Motherboard gelandet um den Verkabelungsaufwand etwas zu reduzieren. Interruptor und SSTC werden anschließend noch direkt mit dem Motherboard verbunden und über Abstandsbolzen fest miteinander verschraubt.

Der Deklarationsteil mit den globalen Konstanten und Variablen im Arduino Sketch

Zum debuggen ist der serielle Monitor nicht perfekt aber durchaus hilfreich. Hier wird die Baudrate festgelegt.

const unsigned int BAUDRATE = 9600;               // Baud rate for the serial monitor

Anschließend wird die LCD Library eingebunden und mit den verbundenen Pins initialisiert.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 9, 8, 7);                    // RS, E, D4, D5, D6, D7

Die weiteren verwendeten Ein- und Ausgänge werden hier nun festgelegt.

#define HEATSINKFAN 3                                     // Pin to connect heat sink fan

#define COILFAN 5                                               // Pin to connect coil fan

#define TESLAPOWER 4                                     // Pin to switch on/off Tesla power

#define TEMPHEATSINKSENSOR A0                // Connect LM35 for heat sink fan control

#define TEMPCOILSENSOR A1                          // Connect LM35 for Tesla coil fan

Den Alarmpegel der Kühlkörpertemperatur habe ich erst einmal auf 60°C festgelegt und den der Teslaspule auf 50°C. Ggf. müssen die Abschaltwerte später noch etwas angepasst werden. Um noch zu verhindern, dass der Teslagenerator mit Überschreiten eines Grenzwertes anfängt zu pumpen, ist eine Hysterese vorgesehen. Das ermöglicht der Anlage sich wieder etwas abzukühlen.

#define HEATSINKALARMLEVEL 60                  // Switch off power at 60°C heat sink

#define COILALARMLEVEL 50                            // Switch off power at 50°C coil temp

#define HYSTERESYS 1                                      // 1°C hysteresys, time to cool down

Um Messfehler zu eliminieren, werden erst 20 Messungen zur Mittelwertbildung durchgeführt und die Ergbnisse in die jeweiligen Temperaturvariablen tempHeatSink und tempCoil abgelegt.

const uint8_t measureCycles = 20;                     // Build average on some measure cycles

uint32_t tempHeatSink = 0;                                  // Stores the actual heat sink temperature

uint32_t tempCoil = 0;                                           // Stores the actual Tesla coil temperature

Zu guter Letzt wird über den Analogeingang ja auch noch die Stromaufnahme über einen 0,1R Shunt gemessen. Die Notabschaltung erfolgt hier bei mehr als 3,5A. In der Variablen alarmFlag ist der Auslöser der Notabschaltung gespeichert.

#define CURRENTMEASUREMENTPIN A2      // Pin to measure current

#define CURRENTALARMLEVEL 3500              // Switch of at 3500mA current

uint32_t current = 0;                                              // Stores the actual current

uint8_t alarmFlag = 0;                                           // Stores the kind of alarm

Das Arduino Setup

Die void setup() Routine ist noch weniger spektakulär. Nachfolgend die wesentlichen Elemente dafür.

Initialisierung der seriellen Schnittstelle mit der oben unter BAUDRATE definierten Übertragungsrate.

Serial.begin(BAUDRATE);

Der LCD Library wird hier mitgeteilt welches Display angeschlossen ist und gestartet.

lcd.begin(16, 2);                                                    // Number of columns and rows

Wer möchte kann vor der Zeile mit dem Löschen des LCD Speicherinhaltes einen Text ausgeben über lcd.print(„My Tesla Coil“); Wichtig wäre dann noch ein kurzes delay (1000); oder auch länger folgen zu lassen, sonst wird die Ausgabe auf dem LCD sofort wieder gelöscht!

lcd.setCursor(0, 0);                                               // Position cursor top left

lcd.clear();                                                             // Clear LCD

Der Arduino Ausgang für die Notabschaltung des Teslagenerators wird hier initialisiert und die Teslaspule auch gleich eingeschaltet. Da direkt im Anschluss hier die void loop() abgearbeitet wird, sind die Schutzmaßnahmen umgehend aktiv und lösen im Fehlerfall sofort aus.

pinMode(TESLAPOWER, OUTPUT);

digitalWrite(TESLAPOWER, HIGH);                   // Switch on power for Tesla coil

Die Arduino Loop

Die void loop() ist noch unspektakulärer, da sie sich einiger Hilfsroutinen bedient und ansonsten nur Textausgaben über den seriellen Monitor und das LCD ausgibt.

In dieser Helferroutine hier werden die Analogeingänge mit ihren Sensorwerten abgefragt und konditioniert.

analogValues();                                                     // Catch the actual temp and current

Im Falle der Überschreitung der vorgegebenen Grenzwerte wird die Versorgungsspannung der Teslaspule sofort über einen Power MOSFET abgeschaltet.

emergencyPowerOff();                                          // Emergency power off

Über die ermittelte Temperatur wird anschließend noch die Drehzahl der beiden Lüfter geregelt.

fanControlPWM();

Auch die Hilfsfunktionen selber sind alle entsprechend einfach und überschaubar ohne Schnörkel programmiert. Die Kommentare im Sketch sollten die jeweilige Funktion weitgehend erklären und verstehen helfen.

That’s it! Es gibt durchaus noch das eine oder andere Verbesserungspotential um die Betriebssicherheit der Class-E SSTC weiter zu erhöhen. Zum Beispiel könnte die Hysterese bei der Notabschaltung durch den Strom deutlich vergrößert werden. Auch eine generelle Verzögerung von einigen Sekunden vor dem Wiedereinschalten ist eine durchaus sinnvolle Option. Über einen Count Down im LCD könnte noch der Wiedereinschaltzeitpunkt visualisiert werden. An einigen weiteren Ergänzungen und Optimierungen arbeite ich zur Zeit noch. Dazu gehört auch die zeitliche Abfolge in der Loop um eine Priorisierung der Schutzmaßnahmen zu erreichen, insbesondere direkt nach dem Hochfahren. In einem separaten Beitrag zu gegebener Zeit mehr dazu.

Über das Community Logo des Arduino Hannover Treffpunktes kann die derzeitige Version des Sketches heruntergeladen werden.

UnserCommunityLogo