Entwicklung eines Hochspannungsimpulsgenerators für Linearbeschleuniger
Um Protonen-, Elektronen- oder Ionenpakete zu beschleunigen werden starke E-Felder benötigt. Diese werden von Klystronen erzeugt, die mit Hochspannungsimpulsen angeregt werden. Dabei werden Spannungspulse bis zu 500 kV bei Stromstärken bis zu 300 Ampere benötigt.
Dazu wurde ein Schrank entwickelt in dem eine Steuereinheit bis zu 45 Module verwaltet und diese zusammen den Hochstromimpuls erzeugen lässt. Jedes Modul beinhaltet 4 Zellen die jeweils 1 kV zum Puls beitragen können.
Meine Aufgabe war die Entwicklung der FPGA-basierten Steuerung, die aus den bis zu 180 Zellen diesen Spannungspuls zuverlässig und repetierend erzeugt. Durch die Potentialunterschiede von 4 kV von Modul zu Modul kann die Kommunikation nur über Lichtwellenleiter erfolgen. Ein integraler Bestandteil des Projektes war es eine Kommunikationsstruktur zur Verfügung zu stellen, bei der die einzelnen Komponenten, selbst bei den durch die Hochspannungsimpulse erzeugten Störungen robust arbeiten können.
Aufgrund meinen frühen Einbindung in das Projekt konnte ich das Konzept verbessern und so die Entwicklungszeit und Serienkosten signifikant senken.
So wurde aus der geplanten Stern-Architektur von der Zentrale zu bis zu den Modulen, eine Ring-Architektur. Dabei werden die Kommandos von der Zentrale zum ersten Modul geschickt, dieses schickt es zum zweiten und so weiter, bis das Kommando am Ende des Rings wieder bei der Zentrale eintrifft.
Folgende Entwicklungs-Teilprojekte haben sich aus dieser Aufgabe für mich ergeben:
Ringkommunikation
Die Kommunikation auf dem Ring (Zentrale über 45 Module zurück zur Zentrale) wurde von mir, angelehnt an Ethernet komplett selbst entwickelt.
Verschiedene Randbedingungen wurden an die Kommunikation gestellt:
- Geringe Verzögerung von Modul zu Modul
- Synchronisation der Module
- Fehlertoleranz
- Sehr schnelle Notabschaltung
Auf dem Hardware-Layer werden Lichtwellenleiter verwendet, die eine Bitrate von 125 MBit erlauben. Auf diesen werden 100 MBit Daten mit Hilfe eines 8:10 Encoders übertragen. Dadurch können außer den Daten separat Tokens übertragen werden (z.B. Idle, falls gerade keine Daten übertragen werden).
Während bei Ethernet Datenpakete über Bursts gesendet werden, die mit einer Synchronisationssequenz beginnen und nur eine endliche Länge haben dürfen, wurde hier ein kontinuierlicher Datenstrom realisiert. Da jedes Modul aber einen leicht unterschiedlichen Takt hat, muss jedes Modul in der Lage sein, Bitslips im Eingangsdatenstrom zu verarbeiten.
Die geringe Verzögerung von Modul zu Modul wurde dadurch implementiert, dass ein Modul eine eingehendes Kommando auch mit minimaler Verzögerung weiterleitet. D.h. es wird nicht gewartet, bis das Kommando komplett empfangen wurde, sondern schon mit ca. 5 Bytes Verzögerung wird eine Ausgangsnachricht gestartet.
Die Synchronisation der Module wird durch Zeitstempel erreicht, die am Anfang jedes Kommandos stehen. Da die Verzögerung von Modul zu Modul nicht vorhersehbar ist (die Kommandos müssen ja im 10 Bit Raster des 8:10 Encoders gesendet werden) misst das FPGA die Zeit vom empfangenen Startbit eines Kommandos bis zum sendenden Startbit des ausgehenden Kommandos und korrigiert den Zeitstempel entsprechend.
Die Fehlertoleranz wird durch zwei Maßnahmen erreicht. Zum einen ist jedes Kommando durch ein 32 Bit CRC gesichert. Zum anderen enthält jedes Kommando auch ein Bad-Bit welches es ungültig machen kann. Nur wenn ein gültiges Kommando mit gültigem CRC ankommt wird es auch akzeptiert.
Zur Erklärung: Da die Kommandos auf dem Weg durch das Modul geändert werden, wird ja auch ein neuer CRC erzeugt. Wenn der empfangene CRC allerdings falsch ist, wäre der Sende-CRC erst einmal richtig. Die Information ist allerdings falsch. Also wird dann im Ausgangskommando das Bad-Bit gesetzt um die nachfolgenden Module zu warnen.
Die schnelle Notabschaltung wird durch die zum Datenstrom separat vorhandenen Tokens erreicht. Die Tokens können auch mitten in einem Kommando eingefügt werden, ohne es zu stören. Für die Notabschaltung werden spezielle Abschalte-Tokens in den Ring geschickt, die vom FPGA auch direkt in den Ausgangsdatenstrom kopiert werden. Somit ist die mittlere Verzögerung für die Notabschaltung etwa 120 ns von Modul zu Modul.