Reluktanzmotor

Zuarbeiten zum Reluktanzmotor …

Frequenzmesser

Für die Wasserkühlung wurden 9 Turbinenzähler eingebaut, für die der verwendete Datenlogger keinen geeigneten Eingang hat. Er kommt mit 5 V und 8 mA aus (letzteres steht nicht im Datenblatt). Daher eine einfache Schaltung mit Arduino eHaJo-Board mit ATmega32U4. Für etwas Reserve wurden 10 Eingänge vorgesehen, diese passten ganz gut an den Seitendeckel des Gehäuses. Die Firmware kann mit geringem Mehraufwand 16 oder 32 Eingänge verarbeiten. Emulation einer seriellen Schnittstelle, einfache SCPI-Kommandos:

Speicherung der Gesamtzählerstände im EEPROM wie bei einer Wasseruhr, alle 1 Minute.

Man hätte hier auch ganz gut eine PIC16F1459 nehmen können, da habe ich nicht schnell genug geschaltet. Wäre deutlich billiger.

CAD-Daten der neuen Seitenbleche des Euro2-Gehäuses. Die verwendeten M3-Stehbolzen sind 2× 24,6 mm und 4× 12 mm lang. 10 Eingänge wurden nunmehr vorgesehen, einer als Reserve. Verwendet wurden dreipolige Steckschraubklemmen für jeden einzelnen Zähler:

… sowie 2 Lochrasterplatinen H25PS160, lag alles herum bzw. wurde gebraucht wiederverwendet.

Rechtes Seitenblech (3D-Darstellung)

Die Firmware in C++. Ganz einfach.

Etikett
Frequenzmesser: Zählt beide Flanken an den 10 Eingängen.
Kommunikation:
Anfragen enden mit "\r" oder "\n".
Antworten kommen als String mit "\r\n".
Anschlussbelegung der Schraubklemmen:
  • *IDN? Gerätekennung
  • ? Abfrage aller 10 Frequenzen je 6 Zeichen
  • 0? Abfrage Frequenz Kanal 0
  • 1? Abfrage Frequenz Kanal 1 usw.
  • S0? Abfrage Zählerstand 0
  • S1? Abfrage Zählerstand 1 usw.
  • T? Abfrage Zählzeitfenster in Millisekunden (Standard: 1000)
  • T500 Setzt Zählzeitfenster in Millisekunden
  • BL Urlader anspringen
Klemmen von oben nach unten:
  • 5 V Versorgung (nicht extra abgesichert)
  • TTL/CMOS-Zähleingang mit internem 40-kΩ-Pullup
  • GND, Bezugspotenzial

Stecker-Reihenfolge (0..9) von unten nach oben, von vorn nach hinten. Von der Seite gesehen von links nach rechts, von oben nach unten.

Stromversorgung: Vom USB.

Sonstiges, Firmware: Siehe http://www.tu-chemnitz.de/~heha/ewa/Reluktanzmotor

Im Einsatz. Das Gerät und die Turbinenzähler werden vom USB gespeist

Am noch freien Eingang ließe sich eine Kette aus DS18B20 digitalen Temperatursensoren anschließen, was das Kabelwirrwarr (zum benachbarten Yokogawa-Gerät) deutlich reduzieren würde. Wo bleibt bloß der Auftrag?

MultiMessung

Mit heißer Nadel gestricktes LabVIEW-Programm zum Messen mit 2 Yokogawa-Geräten MW100 (Vielstellen-Messgerät v.a. für Temperaturen) sowie WT1800 (Energie- und Motoranalysegerät). Zum Archiv. Nicht zur Nachahmung geeignet; unklare Referenzen auf Yokogawa-VIs, die geändert wurden.

CT-Umrichter-Anschluss

Im Nachbar-Schaltschrank ist der originale USB-zu-RS422-Adapter (angeblich) kaputt. Kurzerhand wurde die alte Idee mit dem China-Konverter aufgegriffen und hat prompt funktioniert. Sogar mit dem Closed-Source-Programm „ServoCommander“. Nunmehr liegt der Original-Adapter geöffnet auf dem Tisch. Ungefähr das hier.

Platinenfoto

Das Gerät versorgt seine opto-isolierte Seite vom CT-Umrichter „von hinten“. Eine mögliche Fehlerursache wäre der Ausfall jener Versorgungsspannung. Auch die Richtungsumschaltung des RS485-Transceivers erfolgt „von hinten“, vom Umrichter, nicht wie sonst üblich von der USB-Seite.

IC-Bestückung:

Übergabe

Nachdem dieses DFG-Projekt mit Pauken und Trompeten durchgefallen war (wohlgemerkt, als einziges im Projektverbund, das einzige was nicht vom Maschinenbau kommt), fällt die Finanzierung weg und nun ist's teurer Schrott, an dem man (wer will) noch forschen kann.

Übergabe an mich Ende Juni. Dazu die folgenden handgekritzelten Notizen („Feldbuch“):

Übergabeprotokoll

In Textform:

Kühlung erforderlich, schießt manchmal Sicherung ab. Doppelkühlung. Dort Vorlauftemperatur einstellen mittels ESC + ▲▼ am Display. Kühlung: René, Motor: Maximilian. Vorlaufdruck an Pumpe einstellen. Füllstand ≥ 500 mm sicherstellen. Innen Primärkreislaufregulierung; Durchflusssensor sekundär — dieser steuert die Störungs-LED. Stromversorgung der gesamten Einheit zurzeit vom Hauptschalter Roßwein-Schaltschrank.

Flansch für Drehlagegeber

Flansch mit Außendurchmesser 120 mm (3D-Darstellung)

Wärmetauscher

Das zugehörige Kühlaggregat hat folgende Sensoren und Funktionen:

Das Gerät wurde irrsinnigerweise so konstruiert, dass sich nur einer der beiden Kühlkreisläufe verwenden lässt. Jedoch kann durch Ersetzen des Umschalters durch 2 getrennte Schalter („Serienschalter“) jeder der beiden Kreisläufe getrennt in Betrieb genommen werden. Im Fehlerfall leuchtet die Fehler-LED auf, und der ungestörte Kreis läuft weiter. Erst (und nur) bei Quittieren des Fehlers macht der ungestörte Kreis einen kurzen Stopp (2 s).

Software für Delfino-Launchpad

Entwicklungsboard mit TMS320F28379D. Ausgangspunkt: Code Composer Studio 8, controlSuite, positionManager-SDK, motorControl-SDK, Beispielprojekt „IDDK_PM_Servo_F2837x-v2“.

Beim Laden des Beispiels stellte sich heraus, dass darin relative Pfade zum controlSuite gespeichert sind, die einen Rechnerumzug mit nur leicht anderen Pfaden das Bauen unmöglich macht. Diese relativen (mit viel ..\..\..\..) Pfade muss man erst mal durch 'was vernünftiges ersetzen. (Unter Project→Properties→Resource→Linked Resources→Path Variables habe ich eine Variable „CS“ generiert, welche als Wurzel für die controlSuite-Unterverzeichnisse dient.) Man sieht die Wurzel zu controlSuite in der Datei .project Zeile 92. Änderbar unter Projekt→Einstellungen→Erweitert→Variablen→Globale Variablen.

Ausgehend vom haarsträubenden Quelltext habe ich zunächst Struktur hineingebracht (#define zu const int usw. und dann das Ganze in mehrere Dateien aufzuteilen, nach Möglichkeit in solche mit weniger als 1000 Zeilen. Gleichzeitig wurde versucht, etwas C++ zur Strukturierung einzubauen, die Header von controlSuite machen das aber nahezu unmöglich, weil dort kuriose Datenreferenzen der Art extern struct{float blabla;}nirgendwo; eingebettet sind. Gruselig. Man muss die Daten selbst deklarieren, kann aber keine Zeiger darauf übergeben.

So sieht's aus. Es geht nun mittlerweile auch vom Flash. Da die Header von controlSuite einiges in die Sektion ramfuncs stecken, das moderne __attribute__((ramfunc)) aber nach .TI.ramfunc muss man im Linkerskript Zeile 81 beides zusammenwerfen.