Zum Inhalt springen
Dokumentation · Resolver Simulation

Resolver Simulation

Der IRS-cRIO-Resolver-Simulator kann in einem Compact-RIO-Chassis von National Instruments eingesetzt werden, um das Signal des Resolver-Sensors von Elektromotoren zu simulieren.

Zweck

Dieses Dokument beschreibt die Hardwarefunktionen und die Verwendung der Softwareschnittstelle des IRS-Resolver-Simulationsmoduls.

Resolver-Sensor

Resolver-Sensoren werden häufig im Antriebsstrang von Elektro- oder Hybridfahrzeugen eingesetzt. Die folgende Abbildung zeigt das Prinzip eines typischen Resolvers, bei dem sich die Erregerwicklung „R“ dreht. Die beiden Statorwicklungen erhalten die Energie von der Erregung und erzeugen ein Signal, dessen Amplitude von der Rotorposition abhängt.

Resolver-Prinzip mit rotierender Erregerwicklung R und den Statorwicklungen S1 und S2
Abbildung 1: Resolver-Prinzip

Wenn sich die Erregerwicklung dreht, zeigen die beiden Statorwicklungen ein Signal ähnlich wie in der folgenden Abbildung.

Signale R, S1 und S2 über einen Drehwinkel von 0 bis 360 Grad
Abbildung 2: Resolver-Signal

Resolver-Simulation

Bei Komponententests der Leistungsendstufen des Motortreibers ist es oft nicht erwünscht, einen Originalmotor mit seinen Sensoren in den Tester einzubinden. Andererseits soll das Resolver-Signal sowohl für Funktionstests und End-of-Line-Tests als auch für Lebensdauertests während der Designvalidierung erzeugt werden.

Speziell für Lebensdauertests bietet IRS Prüfsysteme an, die den Originalmotor mithilfe passiver induktiver Lasten nachbilden. Mit diesem Aufbau lassen sich hohe Phasenströme von 400 Arms erzeugen, während die Verlustleistung sehr gering bleibt, da die Energie als Blindleistung in den Lastspulen gespeichert wird.

Der Wechselrichter, der geprüft wird und die Phasenströme durch die Lastspulen erzeugt, muss dieselben Bedingungen „sehen“ wie mit einem realen Elektromotor im Fahrzeug. Daher muss das Sensorsignal der elektrischen Maschine emuliert werden. An dieser Stelle kommt die Resolver-Simulation ins Spiel.

Die Resolver-Simulation kann das Sensorsignal einer rotierenden Maschine simulieren oder bestimmte Positionen des Elektromotors emulieren. Das Modul lässt sich per Software so steuern, dass es an bestimmten Positionen stehen bleibt oder eine kontinuierliche Modulation ausführt, wie es ein rotierender Elektromotor tut. Die folgende Abbildung zeigt einen typischen Signalverlauf des Resolver-Simulators:

Oszilloskopaufnahme von Erregung, Sinus- und Kosinusausgang
Abbildung 3: Typischer Signalverlauf der Simulation

RVDT-Sensor

Ein RVDT (Rotary Variable Differential Transformer) ist ein Transformator zur Messung von Winkelauslenkungen. Die folgende Abbildung zeigt das Prinzip eines typischen Sensors, bei dem der Metallkern in einem begrenzten Winkelbereich drehbar ist. Die beiden Wicklungen auf Seite „B“ erhalten die Energie von der Erregung auf Seite „A“ und erzeugen ein Signal, dessen Amplitude von der Kernposition abhängt. Die Auslenkungsrichtung (Vorzeichen) lässt sich aus der Phase des Ausgangssignals im Vergleich zum Erregersignal bestimmen (positiver Winkel -> 0°; negativer Winkel -> 180°).

RVDT-Prinzip mit Erregerwicklung A, drehbarem Kern und zwei Wicklungen B
Abbildung 4: RVDT-Prinzip

Abkürzungen

AbkürzungBeschreibung
cRIOCompact Reconfigurable Input Output Module (kompaktes rekonfigurierbares Ein-/Ausgabemodul)
FIFOFirst In First Out
FPGAField Programmable Gate Array
LUTLook-up Table (Nachschlagetabelle)
MAXMeasurement & Automation Explorer
PGAProgrammable Gain Amplifier (Verstärker mit programmierbarer Verstärkung)
RPMRevolutions per Minute (Umdrehungen pro Minute)
RTReal Time (Echtzeit)
SPISerial Peripheral Interface (serielle Peripherieschnittstelle)
VIVirtual Instrument (virtuelles Instrument)
ResSiResolver Simulation
RVDTRotary Variable Differential Transformer

Tabelle 2: Abkürzungen

Kapitel 1

Hardware

Das folgende Kapitel stellt die Hardware des Moduls vor.

1.1Blockschaltbild

Die folgende Abbildung zeigt das Blockschaltbild des Moduls. Die Signale auf der rechten Seite sind für den Anwender zugänglich. Die Signale auf der linken Seite stellen die Compact-RIO-Schnittstelle dar und werden in diesem Handbuch nicht im Detail beschrieben.

Blockschaltbild: Spannungsversorgung, analoge und digitale Signalverarbeitung, Trenntransformatoren für Erregung, Sinus und Kosinus, SYNC-Erkennung
Abbildung 5: Blockschaltbild

Alle Ein- und Ausgangssignale sind vom Compact-RIO galvanisch getrennt. Der Erregerreferenzeingang sowie die Sinus- und Kosinusausgänge sind über Transformatoren getrennt. Der SYNC-Eingang ist digital über einen Optokoppler getrennt.

1.2Schnittstellen

Die Signale der Anwenderschnittstelle haben folgende Funktion. Jedes Signal hat einen positiven und einen negativen Anschluss.

  • Erregerreferenzeingang:
    • Eingangssignal vom zu prüfenden Umrichter
    • Typischerweise wird ein Sinussignal von etwa 10 Vpp angelegt
  • Sinus-/Kosinusausgang:
    • Ausgangssignale der Simulation, eine amplitudenmodulierte Darstellung des Erregersignals. Die Modulation erfolgt per Software.
    • Im RVDT-Modus wird das Ausgangssignal zwischen Sin+ und Cos+ abgegriffen (Sin- und Cos- müssen miteinander verbunden werden) -> Differenzausgangssignal:
  • SYNC-Eingang (nur ResSi):
    • Mit diesem Signal kann die Modulationsfrequenz der Sinus- und Kosinusausgänge mit einem Drehzahlsignal synchronisiert werden (im RVDT-Modus nicht verwendet).
    • D. h., hier kann die Drehzahl (RPM) des Motors angelegt werden.

Verdrahtung der RVDT-Simulation: Ausgangsspannung zwischen Sin+ und Cos+, Sin- und Cos- miteinander verbunden, Erregerspannung an EXC

1.3Pinbelegung

Die folgende Tabelle zeigt die Pinbelegung des Frontsteckverbinders.

PinBeschreibung
0SYNC +
1SYNC -
2Sinusausgang -
3Sinusausgang +
4-
5Kosinusausgang -
6Kosinusausgang +
7-
8Erregerreferenzeingang -
9Erregerreferenzeingang +

Tabelle 4: Pinbelegung des Frontsteckverbinders

Frontsteckverbinder des Resolver-Simulatormoduls

Eine Sinusschwingung am Eingang wird abhängig von der geforderten Drehrichtung und Motordrehzahl moduliert. Die modulierten Signale werden als gedämpfte Sinusschwingung und als gedämpfte (und phasenverschobene) Kosinusschwingung ausgegeben. Die Dämpfung lässt sich per Software konfigurieren.

Es ist auch möglich, einen statischen Rotorwinkel einzustellen.

Darüber hinaus steht ein Synchronisationseingang zur Verfügung, mit dem sich beispielsweise eine externe Frequenz messen lässt.

1.4Technische Daten

SignalMerkmalMinTypischMaxEinheit
VersorgungsspannungVersorgungsspannung (wird vom cRIO-Chassis bereitgestellt, keine externe Spannung erforderlich)4,55,5V
VersorgungsspannungStromaufnahme (wird vom cRIO-Chassis bereitgestellt)50mA
ErregerreferenzeingangSpannungsbereich der Erregerreferenz20Vpp
ErregerreferenzeingangEingangswiderstand der Erregerreferenz (bei 10 kHz, induktiv)2000Ohm
ErregerreferenzeingangEingangsfrequenz der Erregerreferenz21020kHz
SYNC-EingangEingangsspannungsbereich SYNC (Spitzenspannung)550Vpeak
SYNC-EingangErkennungsschwelle SYNC-Eingang3V
SYNC-EingangEingangsfrequenz SYNC1200Hz
SYNC-EingangEingangsstrom SYNC (U > 3 V)27mA
Sinus-/KosinusausgangAusgangspegel Sinus/Kosinus (abhängig von den Softwareeinstellungen)020Vpp
Sinus-/KosinusausgangAusgangswiderstand (bei 2,5–10 kHz)5720Ohm

Tabelle 5: Technische Daten

1.5Beispiel-Signalverläufe (Resolver)

Die folgenden Screenshots veranschaulichen die Funktion (Kanal 1: Erregung, Kanal 2: Sinusausgang, Kanal 3: Kosinusausgang).

Oszilloskopaufnahme bei 10.000 RPM
Abbildung 6: Ein- und Ausgangssignale bei 10.000 RPM
Oszilloskopaufnahme bei 4000 RPM
Abbildung 7: Ein- und Ausgangssignale bei 4000 RPM
Oszilloskopaufnahme bei 1000 RPM
Abbildung 8: Ein- und Ausgangssignale bei 1000 RPM
Oszilloskopaufnahme mit Detailansicht des Umschaltpunkts
Abbildung 9: Details zum Umschaltpunkt

1.6Beispiel-Signalverläufe (RVDT)

Die folgenden Screenshots veranschaulichen die Funktion (Kanal 3: Erregung; Kanal M: Differenzausgangssignal; max. Winkel (Einstellung): 30°).

Oszilloskopaufnahme: RVDT-Erregung und Differenzausgang bei 0 Grad
Abbildung 10: RVDT-Eingangssignal und Differenzausgangssignal bei 0°
Oszilloskopaufnahme: RVDT-Erregung und Differenzausgang bei +30 Grad
Abbildung 11: RVDT-Eingangssignal und Differenzausgangssignal bei +30° (max.)
Oszilloskopaufnahme: RVDT-Erregung und Differenzausgang bei -15 Grad
Abbildung 12: RVDT-Eingangssignal und Differenzausgangssignal bei -15°
Kapitel 2

LabVIEW-Projekt und FPGA

2.1LabVIEW-Projekt

2.1.1Allgemeines

Das Projekt enthält die vollständige Software für das Target:

  • FPGA
  • Echtzeitsystem: RT_ResSi & RT_RVDT
  • Computer: PC_ResSi & PC_RVDT

Die Targets cRIO-9074, cRIO-9075 und sbRIO-9602 sind bereits für einen Kanal vordefiniert und vorkompiliert; weitere Targets und/oder Kanäle lassen sich jedoch einfach zum Projekt hinzufügen.

Hinweis 1: Die PC-Software dient ausschließlich Demonstrationszwecken.

Hinweis 2: Das RT-System ist nicht zwingend erforderlich, wird aber empfohlen. Das FPGA kann auch direkt von einem Computer angesteuert werden, dieses Handbuch behandelt jedoch nur den empfohlenen Weg (FPGA <-> RT <-> Network Shared Variables <-> PC).

2.1.2Neues RIO-Target hinzufügen

Ein neues RIO-Target lässt sich sehr einfach hinzufügen. Im Folgenden eine kurze Beschreibung:

  1. Legen Sie ein neues Target-Gerät an
    • Klicken Sie mit der rechten Maustaste auf das Projekt -> New -> Targets and Devices…
    • Wählen Sie das Target aus
    • Das neue Target erscheint im Project Explorer
  2. Kopieren Sie die benötigten Elemente aus den alten Targets an dieselbe Stelle im neuen Target
    • Ordner: RT, RT_ResSi, RT_RVDT
    • Fügen Sie das FPGA-Target hinzu (Rechtsklick auf das neue Chassis -> New -> FPGA Target)
    • Kopieren Sie die FPGA-Elemente: „[0]_ResSi“ (Ordner & Gerät), „FPGA“, „Memory“, „SPI_Resolver_Clock“
  3. Legen Sie neue Build-Spezifikationen für FPGA, RT_ResSi und RT_RVDT an und verwenden Sie dabei die alten als Vorlagen (ändern Sie nur „Name“ [1] und „Target Directory“ [2] und aktualisieren Sie „Source Files“ [3])
  4. Führen Sie den Build der FPGA-Build-Spezifikation aus und warten Sie, bis er abgeschlossen ist (dauert einige Zeit) -> Bitdatei
  5. Fügen Sie die neue Bitdatei zu „RT_ResSi/RT_OpenFPGA.vi“ hinzu:
    • Duplizieren Sie das Unterdiagramm (Duplicate Subdiagram)
    • Setzen Sie das Symbol auf „DeviceCode“ und den Wert auf den Gerätecode des Targets und klicken Sie dann auf „OK“ (den Gerätecode erhalten Sie per Rechtsklick auf das neue Target -> Properties -> Conditional Disable Symbols -> DeviceCode)
    • Konfigurieren Sie „Open FPGA VI Reference“ so, dass es auf die neu erzeugte FPGA-Bitdatei verweist
  6. Führen Sie den Build der benötigten RT-Build-Spezifikation aus („Run as startup“)
LabVIEW Project Explorer und Eigenschaften der Build-Spezifikation, markierte Schritte 1 bis 3
Abbildung 13: Neues RIO-Target hinzufügen (Schritte 1–3)
Blockdiagramm von RT_OpenFPGA.vi mit dem Dialog Configure Condition
Abbildung 14: Neues RIO-Target hinzufügen (Schritt 5)

2.2FPGA

Dieser Teil behandelt den Code für das FPGA. Er ist für ein Gerät in Steckplatz 1 (Kanal 0) eingerichtet und bereits für die Erweiterung um weitere Kanäle vorbereitet.

2.2.1Top-VI & FPGA-Schnittstelle

Das Top-VI enthält alle Ein- und Ausgangsvariablen, die für den Betrieb benötigt werden.

Frontpanel von FPGA_Top.vi mit Ein- und Ausgängen
Abbildung 15: FPGA-Top-VI

Eingänge

LUT Update Section (siehe: Sinus- und Kosinus-Lookup-Tabellen)

Bedienelemente zum Aktualisieren der Sinus- und Kosinus-Lookup-Tabellen. Verwenden Sie DMA_FIFO zum Schreiben neuer Werte.

ParameterBeschreibung
LutUpdate_ChannelNbKanalnummer für den LUT-Schreibvorgang (nur Kanal 0 ist vordefiniert)
LutUpdate_WriteSineSetzen, um das Schreiben in die Sinus-LUT zu starten (DMA_FIFO).
LutUpdate_WriteCosineSetzen, um das Schreiben in die Kosinus-LUT zu starten (DMA_FIFO).

ResSi_Settings[x], Speed_Set_[RPM][x], Speed_Gradient_Set_[RPM/s][x]

Steuerwerte der Resolver-Simulation (Arrays, deren Index x die Kanalnummer darstellt).

ParameterBeschreibung
SampleRate_[Ticks]ResSi-Modus: Aktualisierungsrate der Ausgangsabtastwerte zur Festlegung der Drehzahl. Wenn RPM die gewünschte Drehzahl in Umdrehungen pro Minute ist: SampleRate[Ticks] = (40^6 * 60) / (RPM * 1024). RVDT-Modus: Änderungsgeschwindigkeit des Winkels. Wenn [delta_phi/sec] die gewünschte Winkeländerung pro Sekunde ist: SampleRate[Ticks] = (abs(phi_max) * 40^6) / ([delta_phi/sec] * (1023 >> 1))
Position_fixed_LUTLegt eine konstante Position der Simulation fest. Der Wert liegt im Bereich 0…1023. ResSi-Modus: Range = 0° … 360°. RVDT-Modus: Range = -phi_max … 0° … phi_max (0° -> Position = 1023>>1 = 511)
SYNC_Phase_LUTResSi-Modus: Legt den 0°-Simulationswert relativ zur positiven Flanke des SYNC-Eingangssignals fest. Der Wert liegt im Bereich 0…1023 und entspricht einem Winkel von 0…360°. SYNC_Phase_LUT = Angle * 1024/360
PGA_SettingMaximales Übersetzungsverhältnis, wenn die Sinus-/Kosinus-LUT auf Vollaussteuerung definiert ist (Amplitude 100 %). Û_OUT = 0.078125 * 2^PGA * Û_LUT mit PGA = 0…7. Setzen Sie diesen Wert bei Hardwareversion 1.3 auf „2“!
DirectionResSi-Modus: Legt die Drehrichtung fest. FALSE: links. TRUE: rechts
Rotate_EnableResSi-Modus: TRUE: Es wird eine rotierende Maschine simuliert. FALSE: Es wird eine feste Position simuliert
SYNC_EnableResSi-Modus: TRUE: Die Drehzahl wird aus der Frequenz des SYNC-Eingangs abgeleitet. FALSE: Die Drehzahl wird aus dem Eingang Sample_Rate[Ticks] abgeleitet
RVDT_Mode_(Rotation)TRUE: RVDT-Modus. FALSE: Resolver-Simulationsmodus (Standard)
Speed_Set_[RPM]ResSi-Modus: Zieldrehzahl der Drehzahlrampe in RPM
Speed_Gradient_Set_[RPM/s]ResSi-Modus: Drehzahländerungsrate in RPM pro Sekunde; bei 0 wird die neue Drehzahl sofort übernommen. Andernfalls 1 RPM/s bis 16e6 RPM/s

Ausgänge

  • LUT_Size-1: Konstante: Der Wert stellt den letzten Index der Sinus- und Kosinus-Lookup-Tabellen dar.
  • FirmwareVersion: Konstante: Datum der FPGA-Firmwareversion (HEX-Format: yyyymmdd)
  • ResSi_Values[x]: Statuswerte der Resolver-Simulation (Array, dessen Index x die Kanalnummer darstellt).
ParameterBeschreibung
Sync_Period_[Ticks]ResSi-Modus: Anzahl der Ticks zwischen zwei positiven Flanken am SYNC-Eingang (Ticks zu 25 ns)
Position_actual_LUTAktuelle Position der Simulation (siehe „Position_fixed_LUT“).
SampleRate_Actual_[Ticks]ResSi-Modus: Aktuelle Aktualisierungsrate der Ausgangsabtastwerte, die die Drehzahl festlegt.
Sync_PosEdgeResSi-Modus: Externes Drehzahlsignal auf die positive Flanke synchronisieren.

2.2.2Sinus- und Kosinus-Lookup-Tabellen

Die Ausgangssignalverläufe sind in zwei Lookup-Tabellen mit je 1024 vorzeichenbehafteten 16-Bit-Integer-Elementen gespeichert. Eine LUT ist für den Sinusausgang zuständig, die zweite für den Kosinusausgang. Diese Tabellen können (sollten) vom Anwender aktualisiert werden. Dazu stehen drei Bedienelemente und ein DMA zur Verfügung.

Zum Aktualisieren kann der Entwickler „RT_PC_LUT_Write.vi“ im Ordner „RT_Share“ verwenden. Es führt die folgenden Schritte aus:

  • Schreibt die gewünschte Kanalnummer in „LutUpdate_ChannelNb“. Im Standardzustand ist nur ein Kanal verfügbar.
  • Setzt „LutUpdate_WriteSine“ oder „LutUpdate_WriteCosine“ auf true, um eine neue Übertragung einzuleiten.
  • Schreibt 1024 Werte in den DMA „DMA_FIFO“ und wartet anschließend einige Millisekunden.
  • Setzt den binären Schreibwert wieder auf false zurück.
LUT Update Handler in FPGA_Top.vi
Abbildung 16: FPGA_Top.vi – LUT-Update

2.2.3Neuen Kanal hinzufügen

  • Legen Sie einen neuen Steckplatz an
    • Rechtsklick auf das FPGA-Target -> New -> C Series Module -> New target or device -> C Series Module
    • Name: „[x]_ResSi“, wobei x = Kanalnummer (in diesem Beispiel x = 1)
    • Type: cRIO-generic. Anmerkung: Wenn diese Option nicht verfügbar ist, muss die folgende Zeile in die Datei LabVIEW.ini eingefügt werden (LabVIEW muss dabei geschlossen sein): cRIO_FavoriteBrand=generic
    • Location: Steckplatznummer
Kontextmenü New, Dialog C Series Module und Dialog New C Series Module
Abbildung 17: Neuen Kanal im FPGA anlegen
  • Erstellen Sie eine Kopie aller Speicherelemente außer DMA_FIFO (ändern Sie den Namen jedes Speicherelements so, dass er die neue Kanalnummer wiedergibt, hier 1).
FPGA-Speicherordner mit kopierten Speicherelementen für Kanal 1
Abbildung 18: FPGA-Speicherelemente kopieren
  • Folgende Änderungen sind erforderlich:
    • FPGA_Top.vi -> SPI Handlers: Duplizieren Sie den Frame und setzen Sie die neuen Port-Pins (hier „[1]_ResSi/...“).
    • FPGA_Top.vi -> Speed Ramp Generator: Erhöhen Sie die Array-Größe der beiden Eingangsvariablen um eins (hier auf 2): Rechtsklick auf die Variable -> Properties -> Size -> Fixed. Duplizieren Sie den Frame, setzen Sie das neue Speicherelement (hier „[1]RampSampleRate[Ticks]“) und verbinden Sie das VI mit den nächsten Array-Elementen (durch Erweitern der „Index Array“-Elemente)
    • FPGA_LutUpdate.vi: Duplizieren Sie das Case-Element und aktualisieren Sie die Speicherelemente (hier „[1]_LUT_Sine“ und „[1]_LUT_Cosine“).
    • FPGA_ResolverSim.vi: Erhöhen Sie die Größe von „ResSi-Settings“ um eins (hier auf 2) und wiederholen Sie diesen Schritt auch im Top-VI. Duplizieren Sie den Frame und aktualisieren Sie alle Konstanten (hier „[1]_...“). Verbinden Sie die Ein- und Ausgangsvariable mit dem neuen Array-Eintrag.
  • Kompilieren Sie das FPGA-Target neu (Rebuild)
  • Wenn Sie das Echtzeitsystem verwenden, müssen Sie eine Kopie der Netzwerkvariablen für den neuen Kanal anlegen. Weitere Informationen finden Sie unter Echtzeitsystem – Neuen Kanal hinzufügen.
Kapitel 3

Echtzeitsystem

Die Software des Echtzeitsystems steuert das Gerät entsprechend den Werten, die sie über die Netzwerkschnittstelle (Shared Network Variables) erhält.

Hinweis: Das FPGA kann auch ohne das Echtzeitsystem angesteuert werden. Der Anwender kann eine eigene Anwendung entwickeln.

3.1Netzwerkschnittstelle (Shared Network Variables)

Zur Steuerung der Simulation kommuniziert das Echtzeitsystem mit der Host-Anwendung über eine Technik namens „Shared Network Variables“. Dabei handelt es sich um Variablencontainer, auf die über eine spezielle Netzwerkadresse zugegriffen werden kann. Die Container befinden sich in den RT-Ordnern („RT_ResSi“ oder „RT_RVDT“):

  • ResSi_Variables.lvlib / RVDT_Variables.lvlib: Enthält nicht kanalbezogene Variablen wie die FPGA-Version
  • ResSi_Variables_x.lvlib / RVDT_Variables_x.lvlib: Enthält kanalbezogene Variablen, wobei x die Kanalnummer darstellt (jeder Kanal hat eine eigene Datei).

3.1.1Zugriff auf eine Variable vom Host-Computer

Um von einem entfernten System auf eine Variable zuzugreifen, kann der Entwickler das VI „RT_PC_ResSi_NetVarPathGen.vi“ (bzw. „RT_PC_RVDT_NetVarPathGen.vi“) in „RT_ResSi/Share“ (bzw. „RT_RVDT/Share“) zusammen mit einem „Read Variable“- oder „Write Variable“-Element verwenden.

PC-Beispiel zum Lesen des aktuellen Winkels und zum Schreiben eines neuen Winkels im RVDT-Simulatormodus:

LabVIEW-Beispiel zum Lesen der Netzwerkvariable Angle_Actual
Abbildung 19: Beispiel zum Lesen einer Netzwerkvariable (PC)
LabVIEW-Beispiel zum Schreiben der Netzwerkvariable Angle
Abbildung 20: Beispiel zum Schreiben einer Netzwerkvariable (PC)
  • TargetIP: IP-Adresse oder Hostname des RIO
  • Angle_Actual / Angle: Name der gewünschten Variable in „RVDT_Variables_x.lvlib“
  • ChannelNb: Kanalnummer -> x (bei x = 255 erfolgt der Zugriff auf „RVDT_Variables.lvlib“)

3.1.2Neuen Kanal hinzufügen

Beispiel für RVDT-Kanal 1:

  1. Fügen Sie, falls noch nicht geschehen, den neuen Kanal zum FPGA-Code hinzu (siehe FPGA – Neuen Kanal hinzufügen)
  2. Erstellen Sie eine Kopie von „ResSi_Variables_0.lvlib“ und benennen Sie sie in „ResSi_Variables_1.lvlib“ um (dieser Schritt ist im Project Explorer nicht möglich; verwenden Sie stattdessen den Windows Explorer)
  3. Aktualisieren Sie die FPGA-Referenz
    • Öffnen Sie „RT_RVDT/RT_RVDT_Thread.vi“
    • Klicken Sie mit der rechten Maustaste auf „RefnumIn“ und wählen Sie „Open Type Def.“
    • Klicken Sie mit der rechten Maustaste auf „Reference“ und wählen Sie „Configure FPGA VI Reference…“
    • Klicken Sie auf „Import from bitfile…“, navigieren Sie zur benötigten Bitdatei in „FPGA Bitfiles“ und öffnen Sie sie
    • Speichern Sie alles
  4. Aktualisieren Sie die Build-Spezifikation und führen Sie den Build erneut aus
    • Rechtsklick auf „RIO-System/Build_Specification/RT_RVDT“ -> Properties
    • Wählen Sie auf der rechten Seite „Source Files“ aus
    • Navigieren Sie zu „RT_RVDT/RVDT_Variables_1.lvlib“ und fügen Sie die Datei dem Abschnitt „Always Included“ hinzu
    • Führen Sie den Build erneut aus und flashen Sie das Ergebnis („Run as startup“)

3.2Resolver-Simulation (RT_ResSi)

Im Handbuch V3.0 nicht beschrieben. Siehe Software für den Resolver-Modus (aus Handbuch V2.2).

3.3RVDT-Simulation (RT_RVDT)

Dieser Abschnitt beschreibt das Echtzeitsystem für den RVDT-Simulationsmodus.

3.3.1Steuerschnittstelle (RVDT_Variables)

Wie im Abschnitt Netzwerkschnittstelle beschrieben, wird die RVDT-Simulation über Network Shared Variables gesteuert. Die folgende Tabelle beschreibt sie:

VariableTypZugriffBeschreibungEinheit
FPGA_Version (allgemein)UInt32rHEX-codiertes Kompilierungsdatum des FPGA: Format: 0xYYYYMMDD
AngleDoubler/wSimulationswinkel in Grad°
Angle_ActualDoublerAktueller Simulationswinkel in Grad°
Angle_DegreePerSecDoubler/wBewegungsgeschwindigkeit zur neuen Winkelposition°/s
Angle_MaxDoubler/wMaximaler Winkelausschlag (Absolutwert): Winkel, bei dem das Differenzausgangssignal seine maximale Amplitude erreicht, die durch „LUT_Amplitude“ und PGA festgelegt ist.°
LUT_AmplitudeDoubler/wMaximale Amplitude des Differenzausgangssignals relativ zur Amplitude des Erregersignals, multipliziert mit PGA (siehe „LUT_Write“).%
LUT_CalibrationCTL[1]r/wKalibriereinstellungen (siehe „LUT_Write“)
LUT_WriteBooleanr/wSetzen, um die Lookup-Tabellen mit neuen Daten zu aktualisieren, die aus den Werten in „LUT_Amplitude“ und „LUT_Calibration“ berechnet werden. True: Aktualisierung starten (vom Anwender gesetzt). False: Aktualisierung abgeschlossen (vom RT gesetzt)
PGAUInt8r/wPGA-Einstellung (Bereich: 0…7): Û_OUT = 0.078125 * 2^PGA * Û_LUT
SaveConfigBooleanr/wSetzen, um die aktuelle Konfiguration und Winkeleinstellung dauerhaft im Flash-Speicher des Echtzeitsystems zu speichern (sie wird bei jedem Start geladen). True: Speichervorgang starten (vom Anwender gesetzt). False: Speichervorgang abgeschlossen (vom RT gesetzt)

CTL[1] -> RT_PC_RVDT_LUT_Calibration.ctl

VariableTypBeschreibungEinheit
SineAmplitude_%, CosineAmplitude_%DoubleAmplituden-Korrekturfaktoren für die Lookup-Tabelle (siehe „LUT_Amplitude“): Amplitude_LUT = "LUT_Amplitude" * x%
SineDCOffset_%, CosineDCOffset_%DoubleAmplitude der DC-Offset-Korrektur der LUT relativ zur Amplitude des Erregersignals, multipliziert mit PGA: Amplitude_LUT = "LUT_Amplitude" + x%

3.3.2RT_RVDT_Top.vi

Top-VI des Echtzeitsystems im RVDT-Simulationsmodus.

Ablaufdiagramm von RT_RVDT_Top.vi: FPGA öffnen, ein RT_RVDT_Thread.vi pro Kanal, Status-LED und Firmwareversion
Abbildung 21: RT_RVDT_Top.vi – Ablaufdiagramm

3.3.3RT_RVDT_Thread.vi

Dieses VI ist für die Ansteuerung des FPGA zuständig. Es wird vom Top-VI zyklisch (100 ms) für jeden verfügbaren Kanal des FPGA aufgerufen (parallel als Multithread).

Anschlussfeld von RT_RVDT_Thread.vi

  • LUT_Size-1: Letzter Index der Lookup-Tabellen (aus dem FPGA lesen)
  • ChannelNb: Kanalnummer
  • ResSi_Values: Mit dem Element des FPGA-Arrays „ResSi_Values“ an dem durch „ChannelNb“ festgelegten Index verbinden
  • ResSi_Settings: Mit dem Element des FPGA-Arrays „ResSi_Settings“ an dem durch „ChannelNb“ festgelegten Index verbinden

3.3.4RT_RVDT_SaveCfg.vi & RT_RVDT_LoadCfg.vi

Diese VIs dienen zum Speichern der aktuellen Konfiguration im Flash-Speicher und zum erneuten Laden.

3.3.5RT_PC_RVDT_LUT_ValueWrite.vi

Mit diesem VI werden die Aktualisierungsdaten für die Lookup-Tabellen erzeugt. Es übernimmt die Amplitude (LUT_Amplitude) und die Kalibriereinstellungen (LUT_Calibration) als Eingangsparameter und erzeugt die Lookup-Tabellen-Daten für beide Tabellen. Das folgende Diagramm zeigt Beispieldaten (LUT-Größe = 1024; max. Winkel = ±30°; LUT_Amplitude = 100 %):

Beispieldaten der Sinus- und Kosinus-LUT über Position 0 bis 1023 und Winkel -30 bis +30 Grad
Abbildung 22: Diagramm der RVDT-LUT-Beispieldaten
Kapitel 4

PC-Software

Die PC-Software dient überwiegend nur Demonstrations- und Testzwecken; viele ihrer Komponenten (VIs) lassen sich jedoch auch in eigenen Softwareimplementierungen verwenden. Das macht die Entwicklung von Kundenanwendungen schneller und einfacher.

Hinweis: Die in diesem Projekt enthaltene PC-Software ist nicht für die direkte Ansteuerung des FPGA ohne das Echtzeitsystem geeignet!

4.1Ausführen der Demo-Software

Zum Starten der Software gibt es zwei Möglichkeiten. Bei der ersten öffnen Sie das gewünschte Top-VI („PC_ResSi_Top.vi“ oder „PC_RVDT_Top.vi“) und klicken auf die Run-Schaltfläche. Bei der zweiten führen Sie den Build der vordefinierten Build-Spezifikation aus (falls noch nicht geschehen) und starten anschließend die kompilierte ausführbare Datei im Unterordner „PC_EXE“. Der Vorteil der zweiten Methode ist, dass auf dem Zielrechner nur die Runtime installiert sein muss.

4.2Resolver-Simulation

Im Handbuch V3.0 nicht beschrieben. Siehe Software für den Resolver-Modus (aus Handbuch V2.2).

4.3RVDT-Simulation

4.3.1Demo- & Test-GUI

Frontpanel von PC_RVDT_Top.vi mit den Bereichen 1 bis 4
Abbildung 23: PC_RVDT_Top.vi – GUI
  1. Grundkonfiguration
    • Target IP / Hostname -> Adresse des RIO-Targets
    • FPGA Versions (Date) -> Kompilierungsdatum des FPGA (Format: YYYYMMDD)
    • Channel Number -> Aktuell ausgewählter Kanal, der gesteuert wird
  2. Winkelsteuerung
    • Angle [°] -> Gewünschter Simulationswinkel in Grad
    • Set / Update -> Startet die Bewegung zu der durch „Angle [°]“ festgelegten Position
    • Act. Angle [°] -> Aktuelle Simulationsposition in Grad
  3. Gerätekonfiguration
    • Set Config. -> Konfiguration auf das Target schreiben
    • Get Config. -> Aktuelle Konfiguration vom Target lesen
    • Save Config. -> Aktuelle Konfiguration dauerhaft im Flash-Speicher des Targets speichern
    • Max. Angle [°] -> Maximaler Winkelausschlag (siehe Steuerschnittstelle)
    • Angle Speed [°/sec] -> Bewegungsgeschwindigkeit zur neuen Winkelposition (siehe Steuerschnittstelle)
    • Amp. Transfer Factor -> Übertragungsfaktor zwischen Erregersignal und Differenzausgangssignal
    • Calibration -> Kalibriereinstellungen (siehe Steuerschnittstelle > RT_PC_RVDT_LUT_Calibration.ctl)
  4. Anwendungssteuerung

4.3.2VIs zur Integration in eigene Anwendungen

Für die Kommunikation mit dem Echtzeitsystem stehen einige VIs zur Verfügung. Diese VIs können in jeder eigenen Anwendung verwendet werden:

  • PC_RVDT_FPGAVersion.vi -> Liest das Kompilierungsdatum des FPGA

Anschlussfeld von PC_RVDT_FPGAVersion.vi

  • PC_RVDT_SetAngle.vi -> Setzt einen neuen Simulationswinkel

Anschlussfeld von PC_RVDT_SetAngle.vi

  • PC_RVDT_GetStatus.vi -> Liest den aktuellen Status (aktueller Winkel)

Anschlussfeld von PC_RVDT_GetStatus.vi

  • PC_RVDT_GetConfig.vi -> Liest die aktuelle Konfiguration

Anschlussfeld von PC_RVDT_GetConfig.vi

  • PC_RVDT_SetConfig.vi -> Setzt eine neue Konfiguration

Anschlussfeld von PC_RVDT_SetConfig.vi

  • PC_RVDT_SaveConfig.vi -> Speichert die Konfiguration dauerhaft im Flash-Speicher (Boot-Konfiguration)

Anschlussfeld von PC_RVDT_SaveConfig.vi

Kapitel 5

Software für den Resolver-Modus

Dieses Kapitel beschreibt den Softwareteil im Detail. Die Software der Simulation wird hauptsächlich auf einem cRIO-FPGA ausgeführt und kann auf jedem Compact-RIO-Chassis laufen. Sie ist bereits für ein NI-9074 und ein NI-9075 mit dem Modul in Steckplatz 1 kompiliert und getestet. Der Quellcode der Software ist in der Dokumentation des Moduls enthalten und kann auch in ein anwenderspezifisches LabVIEW-Projekt eingebunden werden.

Das LabVIEW-Projekt enthält außerdem Beispielcode, der zeigt, wie das Modul mit LabVIEW vom PC aus gesteuert wird. Dieser Beispielcode für die Ausführung auf einem Computer lässt sich einfach für die Echtzeitausführung auf den Compact-RIO-Echtzeit-Controller portieren.

Darüber hinaus steht eine DLL zur Verfügung, um das Modul aus Anwendungen heraus zu steuern, die in C geschrieben sind. Auf der Dokumentations-CD ist eine Beispielsoftware enthalten, die die Verwendung der DLL zeigt. Beachten Sie, dass die DLL nur mit der zugehörigen FPGA-Bitdatei funktioniert, die bereits für ein cRIO-9075-Chassis mit einem einzelnen Modul in Steckplatz 1 kompiliert ist.

5.1Allgemeine Steuerung

Im folgenden Kapitel werden die allgemeinen Steuerparameter beschrieben. Ihre Namen werden durchgängig auf den verschiedenen Softwareebenen verwendet, etwa im FPGA-Top-Level-Design, in der PC-Demo-Steuersoftware oder in der DLL.

Die Amplitudensteuerung mit programmierbarem Übersetzungsverhältnis bei Vollaussteuerung ist nur ab HW-Version 2.0 verfügbar.

5.1.1Modus- und Drehzahlsteuerung

Mit den folgenden Parametern lassen sich Status und Drehzahl des Moduls per Software steuern

ParameterTypBeschreibung
Mode = FixedPositionAufzählungAuf feste Position setzen. Ist dieser Modus gesetzt, verändert das Modul die aktuelle Position, bis es die feste Position erreicht, und hält diese feste Position.
Mode = Rotate_RightAufzählungRechtsdrehung mit der durch den Wert RPM_Set festgelegten Drehzahl
Mode = Rotate_LeftAufzählungLinksdrehung mit der durch den Wert RPM_Set festgelegten Drehzahl
Mode = Rotate_Right_SyncAufzählungRechtsdrehung mit der durch den SYNC-Eingang vorgegebenen Drehzahl
Mode = Rotate_Left_SyncAufzählungLinksdrehung mit der durch den SYNC-Eingang vorgegebenen Drehzahl
RPM_SetNumerischer Wert (setzen)Drehzahl in RPM (Umdrehungen pro Minute) (nur im Modus Rotate_xxx)
Position_Set [degrees]Numerischer Wert (setzen)Konstante Position der Simulation in Grad im Bereich 0…360° (nur im Modus FixedPosition)
SYNC_Phase [degrees]Numerischer Wert (setzen)Konstante Phase der Drehung relativ zum Sync-Eingang im Bereich 0…360° (nur im Modus Rotate_xxx_Sync)
Speed_Gradient [RPMps]Numerischer Wert (setzen)Drehzahländerungsrate in RPM pro Sekunde; bei 0 wird die neue Drehzahl sofort übernommen
RPM_ActualNumerischer Wert (lesen)Aktuelle Drehzahl in RPM (Umdrehungen pro Minute)
Position_Act [degrees]Numerischer Wert (lesen)Aktuelle Position der Simulation in Grad im Bereich 0…360°
RPM_SYNCNumerischer Wert (lesen)Aktuelle Drehzahl des Sync-Eingangs in RPM (Umdrehungen pro Minute)

Tabelle 6: Beschreibung der Steuerparameter

Der Parameter RPM_Set hat je nach Simulationszustand unterschiedliche Bedeutungen, wie die folgende Tabelle zeigt:

Wert von RPM_SetModusBedeutung von RPM_Set
> 0FixedPositionLegt die Geschwindigkeit fest, mit der das Modul zur festen Position wechselt.
> 0Rotate_Right, Rotate_LeftDrehzahl
> 0Rotate_Right_Sync, Rotate_Left_SyncMinimale Drehzahl, wenn kein SYNC-Signal anliegt
= 0BeliebigPosition sofort auf die feste Position setzen.

Tabelle 7: Bedeutung von RPM abhängig vom aktuellen Modus

5.1.2Amplitudensteuerung

Mit den folgenden Schnittstellen lässt sich das Übersetzungsverhältnis des Moduls steuern. Beachten Sie, dass PGA_Set erst ab Hardwareversion 2.0 der Resolver-Simulation funktioniert.

ParameterTypBeschreibung
PGA_SetNumerischer Wert (setzen)Maximales Übersetzungsverhältnis, wenn die Sinus-LUT auf Vollaussteuerung definiert ist (Amplitude 100 %): 0 = 0,078125; 1 = 0,15625; 2 = 0,3125; 3 = 0,625; 4 = 1,25; 5 = 2,5; 6 = 5; 7 = 10. Setzen Sie diesen Wert bei Hardwareversion 1.3 auf „2“!
Write_LUTBinärschalter zum Auslösen der DMA-Übertragung (siehe auch DMA_FIFO)Setzen Sie „Write_LUT“ auf True und füllen Sie den DMA_FIFO. Setzen Sie „Write_LUT“ auf False zurück, wenn die DMA-Übertragung abgeschlossen ist.
DMA_FIFODMA-Puffer zum Schreiben einer Sinus-Lookup-TabelleSchreiben Sie einen Sinus-Amplitudenverlauf mit 1024 Elementen als 14-Bit-Integerwerte, wie in der folgenden Abbildung gezeigt

Tabelle 8: Beschreibung der Amplitudensteuerung

Mit PGA_Set lässt sich der Bereich des Übersetzungsverhältnisses festlegen. Ist dieser Wert gesetzt, kann das Verhältnis zusätzlich feinjustiert werden, indem die Sinus-LUT über den DMA_FIFO geschrieben wird. Die Sinusschwingung muss gemäß der folgenden Abbildung durch 1024 Integerwerte (i16) dargestellt werden. Die Abbildung zeigt die Sinusschwingung bei Vollaussteuerung, wobei der Maximalwert 16383 für volle Amplitude beträgt.

Verwenden Sie das LabVIEW-VI „LUT_Init“, um eine Standard-Sinusschwingung für den DMA_Buffer zu erzeugen; als Eingangsparameter dient ein einstellbarer Amplitudenfaktor von 0…100 %.

Sinus-LUT, 1024 Werte mit Maximum 16383
Abbildung 9: Sinus-LUT

5.2Steuerung per DLL

Die folgenden Funktionen stehen zur Steuerung des Moduls über eine DLL zur Verfügung. Die DLL setzt voraus, dass ein Compact-RIO-Chassis über Ethernet mit dem PC verbunden ist, auf dem die DLL läuft. Die DLL muss mit der Bitdatei für das tatsächlich verwendete Chassis und Modul neu kompiliert werden. Die aktuelle DLL ist für ein cRIO-9075 mit einem Modul in Steckplatz 1 verfügbar.

Beachten Sie, dass die Steuerung per DLL nicht für alle Versionen implementiert ist

Damit eine Anwendung auf die DLL zugreifen kann, müssen folgende Dateien in die Anwendung eingebunden werden:

  • cRIO_ResolverSimulation.dll
  • cRIO_ResolverSimulation.h
  • cRIO_ResolverSimulation.lib

Alle Funktionen geben einen Fehlercode zurück (sofern nicht anders angegeben):

  • Null => kein Fehler
  • Negativ => Fehler
  • Positiv => Warnung

5.2.1Kommunikationssteuerung

Verbindung öffnen

Die folgende Funktion öffnet die Verbindung zum Modul:

int __stdcall cRIO_ResolverSim_Open (char* sRIO_Device_IP_Address);
  • sRIO_Device_IP_Address: Nullterminierter String, der die IP-Adresse des FPGA im cRIO-Chassis enthält. Ein typischer Adressstring lautet: „192.168.101.88“. Die IP-Adresse des Compact-RIO-Chassis kann mit NI-MAX („Measurement and Automation Explorer“) geändert werden
  • Rückgabewert: Die Funktion gibt einen Fehlercode zurück

Version lesen

Diese Funktion gibt das Kompilierungsdatum des FPGA-Designs zurück.

int __stdcall cRIO_ResolverSim_GetVersion (unsigned int* nVersion_Nr);
  • nVersion_Nr: Kompilierungsdatum des FPGA-Codes. In hexadezimaler Darstellung als 0xYYYYMMDD lesbar, z. B. 0x20130128
  • Rückgabewert: Die Funktion gibt einen Fehlercode zurück

Verbindung schließen

Die folgende Funktion schließt die Verbindung zum Simulationsmodul:

int __stdcall cRIO_ResolverSim_Close (void);
  • Rückgabewert: Die Funktion gibt einen Fehlercode zurück

5.2.2Fehlerbeschreibung abrufen

Die folgende Funktion wandelt den von den DLL-Funktionen zurückgegebenen Fehlercode in einen lesbaren Text um.

int __stdcall cRIO_ResolverSim_GetErrorText (int nError_Code, char* sError_String);
  • nError_Code: In diesem Parameter kann die Anwendung den von einer DLL-Funktion zurückgegebenen Fehlercode übergeben
  • sError_String: In diesem Parameter wird die Fehlerbeschreibung zurückgegeben, indem die Daten in diesen Puffer kopiert werden. Die Anwendung muss im Puffer ausreichend Platz bereitstellen (>1024 Elemente)
  • Rückgabewert: Die Funktion gibt immer 0 zurück

5.2.3Simulationsparameter setzen

Die folgende Funktion setzt den aktuellen Modus der Simulation

int __stdcall cRIO_ResolverSim_SetStatus (
    cRIO_ResolverSim_Mode eMode,
    double                fPosition_degrees_Set,
    double                fRPM_Set,
    double                fSync_Phase_Set,
    double                fTransformationRatio);
  • eMode: Dieser Aufzählungsparameter legt den aktuellen Simulationszustand gemäß Tabelle 6: Beschreibung der Steuerparameter fest
typedef enum
{
    cRIO_ResolverSim_Mode_FixedPosition     = 0,
    cRIO_ResolverSim_Mode_Rotate_Right      = 1,
    cRIO_ResolverSim_Mode_Rotate_Left       = 2,
    cRIO_ResolverSim_Mode_Rotate_Right_sync = 3,
    cRIO_ResolverSim_Mode_Rotate_Left_sync  = 4,
} cRIO_ResolverSim_Mode;
  • fPosition_degrees_Set: Dies ist die einzustellende Position in °. Der Bereich kann 0…360° betragen. Dieser Wert gilt nur, wenn der aktuelle Simulationsmodus „FixedPosition“ ist (siehe auch Modus- und Drehzahlsteuerung)
  • fRPM_Set: Dies ist die Drehzahl in Umdrehungen pro Minute (RPM); ihre Bedeutung hängt vom aktuellen Modus ab, wie in der folgenden Tabelle gezeigt. Die Bedeutung dieses Werts hängt von den verschiedenen Modi ab (siehe Modus- und Drehzahlsteuerung).
  • fSync_Phase_Set: Damit wird die Phase des Drehsignals relativ zur positiven Flanke des SYNC-Signals in ° gesetzt. Der Bereich kann 0…360° betragen. Dieser Wert gilt nur, wenn der aktuelle Simulationsmodus „Rotate_Right_Sync“ oder „Rotate_Left_Sync“ ist (siehe auch Modus- und Drehzahlsteuerung)
  • fTransformationRatio: Damit wird das Übersetzungsverhältnis der Simulation gesetzt. Das Übersetzungsverhältnis wird in die beiden Parameter der Amplitudensteuerung umgerechnet: PGA_Setting und Amplitudeneinstellung der LUT-Werte
  • Rückgabewert: Die Funktion gibt einen Fehlercode zurück

Die folgende Tabelle zeigt die Bedeutung des Drehzahlparameters abhängig vom aktuellen Modus:

Wert von fRPM_SetModusBedeutung von fRPM_Set
> 0FixedPositionLegt die Geschwindigkeit fest, mit der das Modul zur festen Position wechselt.
> 0Rotate_Right, Rotate_LeftDrehzahl
> 0Rotate_Right_Sync, Rotate_Left_SyncMinimale Drehzahl, wenn kein SYNC-Signal anliegt
= 0beliebigPosition sofort auf die feste Position setzen.

Tabelle 9: Bedeutung des RPM-Parameters

5.2.4Drehzahlrampe setzen

Die folgende Funktion setzt die Rate der Drehzahländerung in RPM pro Sekunde. Ist die Rate 0, werden neue Drehzahleinstellungen sofort übernommen. Andernfalls ändert sich die Drehzahl mit der angegebenen Rate.

int __stdcall cRIO_ResolverSim_SetRampGrad (double fRPM_Gradient_Set);
  • fRPM_Gradient_Set: Setzt den aktuellen Rampengradienten in RPM pro Sekunde
  • Rückgabewert: Die Funktion gibt einen Fehlercode zurück

5.2.5Simulationsstatus abrufen

Die folgende Funktion liest den aktuellen Status der Simulation. Der Status wird durch die aktuelle Position, die aktuelle Drehzahl und die aktuelle Drehzahl am SYNC-Eingang beschrieben.

int __stdcall cRIO_ResolverSim_GetStatus (double* fSync_Frequency_RPM,
                                          double* fActual_Frequency_RPM,
                                          double* fPosition_degrees);
  • fSync_Frequency_RPM: Dies ist die aktuelle Drehzahl am Synchronisationseingang in Umdrehungen pro Minute
  • fActual_Frequency_RPM: Dies ist die aktuelle Drehzahl der Simulation in Umdrehungen pro Minute
  • fPosition_degrees: Dies ist die aktuelle Position in °. Der Bereich kann 0…360° betragen
  • Rückgabewert: Die Funktion gibt einen Fehlercode zurück

5.2.6Einstellungen speichern

Die folgende Funktion speichert die aktuellen Einstellungen im cRIO-System. Nach Abschluss des Bootvorgangs nach dem Einschalten werden die Einstellungen automatisch wiederhergestellt.

int __stdcall cRIO_ResolverSim_SaveSettings (void);
  • Rückgabewert: Die Funktion gibt einen Fehlercode zurück

5.2.7DLL-Testsoftware

Zum Testen des Zugriffs auf die Resolver-Simulation per DLL ist ein Debug-Panel enthalten. Dieses Tool liegt als Installationsprogramm im Ordner CRIO_ResolverSim_DLL_Test_Install im Ordner bin auf der Dokumentations-CD.

Nach Abschluss der Installation und dem Start der Software erscheint das folgende Fenster:

DLL-Testpanel vor dem Verbindungsaufbau

Sobald

  • die korrekte IP-Adresse eingegeben wurde,
  • ein Resolver-Simulationssystem im Netzwerk vorhanden ist
  • und dieses seinen Bootvorgang abgeschlossen hat (ca. 1 Minute),

kann die Verbindung durch Drücken der Schaltfläche „Open“ hergestellt werden. Ist die Verbindung hergestellt, erscheint das Fenster wie folgt. Der Anwender kann über die Bedienelemente auf die Simulation zugreifen.

DLL-Testpanel mit hergestellter Verbindung

5.3GUI für das Stand-alone-System

Zum Ändern anwendungsspezifischer Einstellungen ist eine eigene grafische Benutzeroberfläche (GUI) implementiert.

5.3.1Installation

Zum Ausführen der GUI befindet sich die ausführbare Datei „ResSi.exe“ auf der Dokumentations-CD. Kopieren Sie den gesamten Ordner, der diese Datei enthält, auf den PC.

Zusätzlich muss die LabVIEW 2013 Runtime installiert sein. Die Runtime ist auf der Dokumentations-CD enthalten, kann aber auch von NI.com heruntergeladen werden.

5.3.2Frontpanel

Frontpanel von PC_Top.vi mit Markierungen: Start Application, Save Settings, Select System, Error Indicator, STOP Application, Select channel, Apply, Speed, Position and Amplitude settings, Current status indicators

Änderungen der Einstellungen werden nur übernommen, wenn:

5.3.3GUI starten/stoppen

Die GUI startet automatisch, wenn „ResSi.exe“ ausgeführt wird.

Während die GUI läuft, wird die Schaltfläche „Start application“ wie in der folgenden Abbildung dargestellt:

Schaltfläche Start Application bei laufender GUI

Drücken Sie zum Stoppen der GUI die Schaltfläche STOP.

Schaltfläche STOP

Drücken Sie zum Neustarten der GUI die Schaltfläche „Start Application“ in der linken oberen Ecke.

Schaltfläche Start Application zum Neustarten der GUI

Die GUI stoppt automatisch, wenn ein Fehler auftritt. Ein Fehler wird in der Anzeige error_out signalisiert und erläutert

Fehleranzeige error out

Ist das System nicht korrekt ausgewählt, tritt ein Fehler auf und die GUI wird gestoppt. Wählen Sie das System gemäß System auswählen aus und starten Sie die GUI durch Drücken der Schaltfläche „Start Application“ neu.

5.3.4System auswählen

Der Zugriff auf die Einstellungen des Systems erfolgt über NI-PSP Shared Variables. Der Variablenserver läuft auf dem cRIO-System. Da die IP-Adresse des Systems variieren kann, muss der Anwender das richtige System auswählen.

Klicken Sie auf „Variable Reference“:

Bedienelement Variable_Reference

Das folgende Fenster sollte erscheinen:

Dialog zum Durchsuchen der Variablen-Engines, Variables von 172.22.11.2 ausgewählt

Wählen Sie den Eintrag „Variables“ auf dem System mit der korrekten IP-Adresse aus.

  • 172.22.11.2 bei USB-Geräten
  • Bei Ethernet abhängig von DHCP

Ist das System korrekt ausgewählt, läuft die GUI; tritt ein Fehler auf, stoppt die GUI und zeigt einen Fehler an. Stellen Sie in diesem Fall sicher, dass alle Verbindungen hergestellt sind und das System mit Spannung versorgt wird. Starten Sie die GUI nach dem Auswählen des Systems wie unter GUI starten/stoppen beschrieben neu.

5.3.5Alle Einstellungen speichern

Die aktuellen Einstellungen können gespeichert werden, damit sie nach einem Neustart wieder aktiv sind. Wird die Schaltfläche „Save_All_Settings“ gedrückt, werden alle Einstellungen dauerhaft im System gespeichert.

Schaltfläche Save_All_Settings

Beachten Sie, dass die aktuellen Einstellungen des Systems gespeichert werden. D. h., die Einstellungen müssen vor dem Speichern gemäß Resolver-Einstellungen ändern übernommen werden.

5.3.6Resolver-Einstellungen ändern

Alle folgenden Einstellungen können in der GUI geändert werden. Sind mehrere Resolver-Module im Einsatz, wirken die Einstellungen jeweils nur für einen einzelnen ausgewählten Kanal, nachdem die Schaltfläche „Apply_Settings“ gedrückt wurde.

Select_Channel_1…4 und Apply_Settings

D. h., wählen Sie zuerst „Select_channel_1…4“ (optional bei mehreren Modulen). Ändern Sie dann die Einstellungen wie in den folgenden Unterkapiteln beschrieben. Drücken Sie anschließend „Apply_Settings“.

Wenn die Einstellungen dauerhaft gespeichert werden sollen, drücken Sie „Save_All_Settings“

Drehzahleinstellungen

Drehzahleinstellungen: Rotate_Enable, Direction, RPM_Set, SYNC_Enable

Die Drehzahleinstellungen umfassen Folgendes:

  • Rotate_Enable:
    • kontinuierliche Drehung bei TRUE
    • Anfahren der festen Position bei FALSE.
  • Direction:
    • Drehung „links“ mit steigendem Winkel bei TRUE
    • Drehung „rechts“ mit fallendem Winkel bei FALSE
  • RPM_Set:
    • Legt die Drehzahl in „Umdrehungen pro Minute“ fest, wenn SYNC_Enable FALSE ist.
    • Bei deaktivierter Drehung legt RPM_Set die maximale Geschwindigkeit fest, mit der eine feste Position angefahren wird, wenn sich die feste Position ändert.
  • SYNC_Enable:
    • Bei TRUE wird der externe Synchronisationseingang verwendet. Die Zeit zwischen positiven Flanken am SYNC-Eingang bestimmt die Drehzahl. Beachten Sie, dass die Drehzahl auf RPM_Set begrenzt ist, wenn RPM_Set höher als SYNC ist
    • Bei FALSE wird RPM_Set als Drehzahlwert verwendet.

Positionseinstellungen

Positionseinstellungen: Position_degrees_Set und SYNC_Phase_degrees

Die Positionseinstellungen umfassen Folgendes:

  • Position_degrees_Set:
    • Einzustellende Position im Bereich 0…360°
    • Nur gültig, wenn die Drehung deaktiviert ist und für diesen Kanal keine Position über die serielle Leitung empfangen wird.
  • SYNC_Phase_degrees:
    • Winkel im Bereich 0…360°

Amplitudeneinstellungen

Amplitudeneinstellungen: Transformation Ratio, PGA_Setting und Amplitude

Das Übersetzungsverhältnis eines Kanals lässt sich über die Amplitudeneinstellungen ändern. Zwei Werte legen das Übersetzungsverhältnis fest:

  • PGA_Setting:
    • Der programmierbare Verstärker (Programmable Gain Amplifier) legt den maximalen Bereich des Übersetzungsverhältnisses fest
    • Einstellung zwischen 0…7 gemäß der Tabelle in der Abbildung oben
  • Amplitude [%]:
    • Legt die Feinabstimmung innerhalb des aktuellen, durch den PGA festgelegten Bereichs fest
    • Einstellung im Bereich 0…100 %.

Diese beiden Werte werden in das System geschrieben und bestimmen das tatsächliche Übersetzungsverhältnis.

Zur Vereinfachung der Amplitudeneinstellung kann ein Übersetzungsverhältnis eingegeben werden. Wird ein neuer Wert für „Transformation_Ratio“ eingegeben, werden „PGA_Setting“ und „Amplitude [%]“ automatisch auf einen optimalen Wert berechnet.

5.3.7Aktuelle Statusanzeigen

Anzeigen für Drehzahl- und Positionsinformationen

Die aktuellen Statusanzeigen sind:

  • RPM_actual: Aktuelle Drehzahl, abhängig entweder von RPM_Set oder von der Drehzahl am Synchronisationseingang.
  • SYNC_Phase_LUT: Interne Darstellung von SYNC_Phase
  • Position_Set_LUT: Interne Darstellung der festen Position
  • Current position [°]: Aktuelle Position im Bereich 0…360°
  • Sample_Rate_Actual: Interne Drehzahldarstellung (= 25-ns-Ticks für einen einzelnen Schritt)
  • RPM_Sync: Drehzahl des externen SYNC-Eingangs in RPM
  • Position_LUT_Act: Aktuelle Position (interner Wert)
  • Position_LUT_Set: Interne Darstellung der festen Position. Entweder feste Einstellung oder empfangene Daten

5.4VIs zur Integration in eigene Anwendungen

Zum Setzen der Simulationsparameter oder zum Lesen des aktuellen Status können zwei Haupt-VIs in eine eigene Anwendung integriert werden. Beide VIs sind in der Stand-alone-LabVIEW-Beispiel-GUI enthalten.

Diese VIs benötigen kein Open- oder Close-VI. Sie können von jeder LabVIEW-Anwendung oder TestStand-Sequenz aufgerufen werden.

5.4.1PC_ResSi_Wr.vi

PC_ResSi_Wr.vi setzt den neuen Status der Resolver-Simulation. Die Eingangsparameter sind unter Allgemeine Steuerung beschrieben. Die Ausgangsparameter ..._LUT sind interne Darstellungen der Einstellungen. Diese Ausgänge können ignoriert werden.

Verbinden Sie mit „Refnum in“ eine gültige Referenz auf das Gerät gemäß System auswählen

Anschlussfeld von PC_ResSi_Wr.vi

5.4.2PC_ResSi_Rd.vi

PC_ResSi_Rd.vi liest den aktuellen Status der Resolver-Simulation. Die Ausgangsparameter sind unter Allgemeine Steuerung beschrieben

Verbinden Sie mit „Refnum in“ eine gültige Referenz auf das Gerät gemäß System auswählen

Anschlussfeld von PC_ResSi_Rd.vi

Kapitel 6

Analoge Steuerung

cRIO_Resolver_Simulation_V31_LV15_1_Channel_AnalogControl

  • NI9201 8-Kanal ±10 V
  • Berechnete Abtastrate: 50 Hz
  • Berechnete Auflösung: 488 µV
EingangFunktionZuordnung
AI0Rotate>= 3 V (empfohlen 5 V) (2,9 V Hysterese) -> „True“
AI1SampleRate0–10 V -> 0–20.000 RPM; min. 0,00976 V -> 20 RPM; aus < 0,00585 V; Auflösung 0,00391 V -> 8 RPM
AI2Direction>= 3 V (empfohlen 5 V) (2,9 V Hysterese) -> „Clockwise“
AI3Position0–10 V -> 0–360°; min. 0,00976 V -> 1°; aus < 0,00585 V; Auflösung 0,00391 V -> 0,4°
AI4Gradient0–10 V -> 0–10.000 RPM/s; min. 0,00976 V -> 10 RPM/s; aus < 0,00585 V; Auflösung 0,00391 V -> 4 RPM/s
AI5Nicht verwendet
AI6Nicht verwendet
AI7Modus>= 3 V (empfohlen 5 V) (2,9 V Hysterese) -> „AnalogControl“