Zum Inhalt springen
Kapitel 5 · Resolver Simulation

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