LinuxCNC Documentation

SYNOPSIS

Siehe den Abschnitt config modparam unten für die Konfiguration der Mesa-Karte. Normalerweise wird hostmot2 ohne Parameter geladen, es sei denn, eine Fehlersuche ist erforderlich.

loadrt hostmot2 [ debug_idrom=N ] [ debug_module_descriptors=N ] [ debug_pin_descriptors=N ] [ debug_modules=N ]

debug_idrom [Voreingestellt: 0]

Nur für Entwickler/Debugger! Aktiviert die Debug-Protokollierung des HostMot2-IDROM-Headers.

debug_module_descriptors [Voreingestellt: 0]

Nur für Entwickler/Debugger! Aktiviert die Debug-Protokollierung der HostMot2-Modul-Deskriptoren.

debug_pin_descriptors [Voreingestellt: 0]

Nur für Entwickler/Debugger! Aktiviert die Debug-Protokollierung der HostMot2-Pin-Deskriptoren.

debug_modules [Voreingestellt: 0]

Nur für Entwickler/Debugger! Aktiviert die Debug-Protokollierung der verwendeten HostMot2-Module.

use_serial_numbers [Voreingestellt: 0]

Wenn Sie HAL-Pins für Smart-Serial-Geräte erstellen, benennen Sie die Pins nach der Seriennummer der Karte und nicht nach der Karte und dem Port, an die sie angeschlossen sind. Wenn diese Option auf 1 gesetzt ist, haben die Pins Namen wie hm2_8i20.1234.current und nicht hm2_5i23.0.8i20.0.1.current. Die Kennung besteht aus den letzten 4 Ziffern der Seriennummer des Boards, die sich normalerweise auf einem Aufkleber auf dem Board befindet. Dadurch werden die Konfigurationen weniger portabel, aber es bedeutet, dass die Boards etwas weniger Sorgfalt verlangen, wenn sie neu verbunden werden.

BESCHREIBUNG

hostmot2 ist ein Gerätetreiber, der die Mesa or litehm2 HostMot2 Firmware mit der LinuxCNC HAL verbindet. Dieser Treiber selbst tut nichts, die Boards, auf denen die Firmware tatsächlich ausgeführt wird, benötigen ihre eigenen Treiber, bevor etwas passieren kann. Derzeit sind Treiber für PCI-, Ethernet-, SPI- und EPP-Karten verfügbar.

Die HostMot2-Firmware bietet Module wie Encoder, PWM-Generatoren, Step/Dir-Generatoren und Allzweck-E/A-Pins (GPIOs). Diese Dinge werden als "Module" bezeichnet. Die Firmware wird bei der Kompilierung der Firmware so konfiguriert, dass sie null oder mehr Instanzen jedes dieser Module bereitstellt.

E/A-Pins der Karte

Die HostMot2-Firmware läuft auf einer FPGA-Karte. Die Platine ist über PCI, Ethernet, SPI oder EPP mit dem Computer verbunden und kann über E/A-Pins auf der Platine mit Bewegungssteuerungshardware wie Servos und Schrittmotoren verbunden werden.

Jeder E/A-Pin kann beim Laden des Board-Treibers so konfiguriert werden, dass er einem von zwei Zwecken dient: Entweder als ein bestimmter E/A-Pin einer bestimmten Modulinstanz (Encoder, pwmgen, stepgen usw.) oder als ein allgemeiner digitaler E/A-Pin. Standardmäßig sind alle Modulinstanzen aktiviert, und alle Pins der Karte werden von den Modulinstanzen verwendet.

Der Benutzer kann Modulinstanzen beim Laden des Boardtreibers deaktivieren, indem er einen hostmot2-Konfigurationsstring modparam angibt. Alle Pins, die zu Modulinstanzen gehören, die deaktiviert wurden, werden automatisch zu GPIOs.

Alle I/O-Pins haben eine gewisse HAL-Präsenz, unabhängig davon, ob sie zu einer aktiven Modulinstanz gehören oder vollständige GPIOs sind. GPIOs können (während der Laufzeit) zwischen Eingängen, normalen Ausgängen und Open Drains umgeschaltet werden und haben eine flexible HAL-Schnittstelle. IO-Pins, die zu aktiven Modulinstanzen gehören, sind durch die Anforderungen des eigenen Moduls eingeschränkt und haben eine begrenztere Schnittstelle in HAL. Dies wird im Abschnitt Allgemeine E/A weiter unten beschrieben.

config modparam

Alle Board-Treiber-Module (hm2_pci, hm2_eth usw.) akzeptieren zur Ladezeit ein Modparam vom Typ String-Array mit dem Namen "config". Dieses Array enthält einen config-String für jede Karte, die der Treiber verwenden soll. Der Konfigurationsstring jeder Karte wird an den hostmot2-Treiber übergeben und von diesem geparst, wenn der Treiber die Karte registriert.

Die Konfigurationszeichenfolge kann Leerzeichen enthalten, daher ist es in der Regel eine gute Idee, das Ganze in doppelte Anführungszeichen (das Zeichen ") zu verpacken.

Das Komma-Zeichen (,) trennt die Elemente des config-Arrays voneinander.

Wenn Ihr Steuercomputer beispielsweise über einen 5I20 und einen 5I23 verfügt, könnten Sie den hm2_pci-Treiber mit einem HAL-Befehl (in halcmd) wie dem folgenden laden:

loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=3 num_stepgens=3,firmware=hm2/5i23/SVSS8_8.BIT sserial_port_0=0000 num_encoders=4"

Note: Dies setzt voraus, dass der hm2_pci-Treiber zuerst das 5I20 und dann das 5I23 erkennt. Wenn die Erkennungsreihenfolge nicht mit der Reihenfolge der Konfigurationsstrings übereinstimmt, weigert sich der hostmot2-Treiber, die Firmware zu laden, und der Board-Treiber (hm2_pci usw.) kann nicht geladen werden. Soweit ich weiß, gibt es keine Möglichkeit, die Reihenfolge, in der PCI-Karten vom Treiber erkannt werden, vorherzusagen, aber die Erkennungsreihenfolge wird konsistent sein, solange die PCI-Karten nicht verschoben werden. Am besten versuchen Sie, den Treiber zu laden und die Erkennungsreihenfolge zu überprüfen.

Die gültigen Einträge im Formatstring sind:

  • [firmware=F]

  • [num_dplls=N]

  • [num_encoders=N]

  • [ssi_chan_N=abc%nq]

  • [biss_chan_N=abc%nq]

  • [fanuc_chan_N=abc%nq]

  • [num_inmux=N]

  • [num_inms=N]

  • [num_resolvers=N]

  • [num_pwmgens=N]

  • [num_3pwmgens=N]

  • [num_oneshots=N]

  • [num_periodms=N]

  • [num_rcpwmgens=N]

  • [num_stepgens=N]

  • [stepgen_width=N]

  • [sserial_port_0=00000000]

  • [num_bspis=N]

  • [num_leds=N]

  • [num_ssrs=N]

  • [num_outms=N]

  • [num_xy2mods=N]

  • [enable_raw]

    firmware [optional]

    Laden Sie die mit F angegebene Firmware in das FPGA auf dieser Karte. Wird kein "firmware=F"-String angegeben, dann wird das FPGA nicht neu programmiert, sondern kann mit einer zuvor heruntergeladenen Firmware weiterarbeiten.

    Die angeforderte Firmware F wird von udev geholt, das im Firmware-Suchpfad des Systems, normalerweise /lib/firmware, nach der Firmware sucht. F hat normalerweise die Form "<BoardType>/file.bit"; ein typischer Wert für F könnte "hm2/5i20/SVST8_4.BIT" sein. Die hostmot2-Firmware-Dateien werden von den hostmot2-Firmware-Paketen geliefert, die von linuxcnc.org erhältlich sind und normalerweise durch Eingabe des Befehls "sudo apt-get install hostmot2-firmware-5i23" installiert werden können, um beispielsweise die Unterstützungsdateien für den 5I23 zu installieren.

    Neuere FPGA-Karten werden mit vorprogrammierter Firmware geliefert, und bei diesen Karten sollte kein "firmware="-String verwendet werden. Um die Firmware auf diesen Karten zu ändern, sollte das Dienstprogramm "mesaflash" verwendet werden. Es ist durchaus zulässig und sinnvoll, diese Karten ohne jeglichen Konfigurationsstring zu laden.

    num_dplls [optional, voreingestellt: -1]

    Das hm2dpll ist ein Phase-Locked-Loop-Timer-Modul, das verwendet werden kann, um Abtast- und Schreibzeit-Jitter für einige hm2-Module zu reduzieren. Dieser Parameter kann zum Deaktivieren des hm2dpll verwendet werden, indem die Zahl auf 0 gesetzt wird. Es gibt immer nur ein Modul dieses Typs mit 4 Zeitgeberkanälen, daher sind die anderen gültigen Zahlen -1 (alle aktivieren) und 1, die beide enden up bedeutet dasselbe.

    num_encoders [optional, voreingestellt: -1]

    Aktivieren Sie nur die ersten N-Encoder. Wenn N -1 ist, sind alle Encoder aktiviert. Wenn N gleich 0 ist, sind keine Encoder aktiviert. Wenn N größer als die Anzahl der in der Firmware verfügbaren Encoder ist, kann sich die Karte nicht registrieren.

    ssi_chan_N [optional, voreingestellt: ""]

    Gibt an, wie der Bitstrom von einem Gerät mit synchroner serieller Schnittstelle interpretiert wird. Für jedes angeschlossene Gerät sollte ein Eintrag vorhanden sein. Nur Kanäle mit einer Formatspezifikation werden aktiviert. (da die Software Datenraten und Bitlängen nicht erraten kann).

    biss_chan_N [optional, voreingestellt: ""]

    Wie bei ssi_chan_N, aber für BiSS-Geräte.

    fanuc_chan_N [optional, voreingestellt: ""]

    Gibt an, wie der Bitstrom von einem Fanuc-Absolutwertgeber interpretiert wird. Für jedes angeschlossene Gerät sollte ein Eintrag vorhanden sein. Nur Kanäle mit einer Formatspezifikation werden aktiviert (da die Software Datenraten und Bitlängen nicht erraten kann).

    num_resolvers [optional, voreingestellt: -1]

    Aktiviert nur die ersten N Resolver. Wenn N = -1, sind alle Resolver aktiviert. Dieses Modul funktioniert nicht mit generischen Resolvern (im Gegensatz zum Encoder-Modul, das mit jedem Encoder funktioniert). Zum Zeitpunkt des Schreibens funktioniert die Hostmot2 Resolver-Funktion nur mit der Mesa 7I49-Karte.

    num_pwmgens [optional, voreingestellt: -1]

    Aktiviert nur die ersten N pwmgens. Wenn N gleich -1 ist, werden alle pwmgens aktiviert. Wenn N gleich 0 ist, werden keine pwmgens aktiviert. Wenn N größer ist als die Anzahl der in der Firmware verfügbaren pwmgens, kann sich die Karte nicht registrieren.

    num_3pwmgens [optional, voreingestellt: -1]

    Aktiviert nur die ersten N Dreiphasen-Pwmgen. Wenn N gleich -1 ist, sind alle 3pwmgens aktiviert. Wenn N gleich 0 ist, werden keine Pwmgens aktiviert. Wenn N größer ist als die Anzahl der in der Firmware verfügbaren Pwmgens, kann sich die Karte nicht registrieren.

    num_rcpwmgens [optional, voreingestellt: -1]

    Aktiviert nur die ersten N RC pwmgens. Ist N gleich -1, werden alle rcpwmgens aktiviert. Wenn N gleich 0 ist, werden keine rcpwmgens aktiviert. Wenn N größer ist als die Anzahl der in der Firmware verfügbaren rcpwmgens, kann sich die Karte nicht registrieren.

    num_stepgens [optional, voreingestellt: -1]

    Aktivieren Sie nur die ersten N Stepgen. Wenn N gleich -1 ist, werden alle Schrittweiten aktiviert. Wenn N gleich 0 ist, werden keine Schrittmotoren aktiviert. Wenn N größer ist als die Anzahl der in der Firmware verfügbaren Stepgens, kann sich die Karte nicht registrieren.

    num_xy2mods [optional, voreingestellt: -1]

    Aktiviert nur die ersten N xy2mods. Wenn N gleich -1 ist, sind alle xy2mods aktiviert. Ist N gleich 0, sind keine xy2mods aktiviert. Wenn N größer ist als die Anzahl der in der Firmware verfügbaren xy2mods, kann sich die Karte nicht registrieren.

    stepgen_width [optional, voreingestellt: 2]

    Wird verwendet, um zusätzliche, unerwünschte Stepgen-Pins zu maskieren. Schrittantriebe benötigen in der Regel nur zwei Pins (step und dir), aber der Hostmot2 stepgen kann bis zu 8 Ausgangspins für spezielle Anwendungen ansteuern (abhängig von der Firmware). Dieser Parameter gilt für alle Stepgen-Instanzen. Unbenutzte, maskierte Pins sind als GPIO verfügbar.

    sserial_port_N (N = 0 .. 3) [optional, voreingestellt: 00000000 für alle Ports]

    An eine Mesa Anything I/O-Karte können bis zu 32 Smart Serial-Geräte angeschlossen werden, abhängig von der verwendeten Firmware und der Anzahl der physikalischen Anschlüsse auf der Karte. Diese sind in 1-4 Ports (N) mit 1 bis 8 Kanälen angeordnet. Einige Smart-Serial-Karten (SSLBP) bieten mehr als eine Lastzeitkonfiguration, z. B. alle Eingänge oder alle Ausgänge oder zusätzliche analoge Eingänge an einigen digitalen Pins. Um die Modi für Port 0 einzustellen, verwenden Sie zum Beispiel B<sserial_port_0=0120xxxx>. Eine "0" in der Zeichenkette setzt den entsprechenden Kanal in den Modus 0, eine "1" in den Modus 1, und so weiter bis zum Modus 9. Ein "x" an einer beliebigen Stelle deaktiviert diesen Kanal und macht die entsprechenden FPGA-Pins als GPIO verfügbar. Die Zeichenkette kann bis zu 8 Zeichen lang sein, und wenn sie mehr Modi definiert, als es Kanäle auf dem Port gibt, werden die Extras ignoriert. Die Kanalnummerierung erfolgt von links nach rechts, so dass das obige Beispiel das sserial-Gerät 0.0 auf Modus 0, 0.1 auf Modus 1, 0.2 auf Modus 2, 0.3 auf Modus 0 setzen würde und die Kanäle ab 0.4 deaktiviert. Der sserial-Treiber erkennt angeschlossene Geräte automatisch, eine weitere Konfiguration sollte nicht erforderlich sein. Nicht angeschlossene Kanäle werden standardmäßig auf GPIO eingestellt, aber die Pin-Werte variieren während des Bootens halb-zufällig, wenn die Kartenerkennung läuft, daher ist es am besten, jeden Kanal, der für GPIO verwendet werden soll, aktiv zu deaktivieren. Siehe SSERIAL(9) für weitere Informationen.

    num_bspis [optional, voreingestellt: -1]

    Aktivieren Sie nur die ersten N gepufferten SPI-Treiber. Wenn N -1 ist, sind alle Treiber aktiviert. Jeder BSPI-Treiber kann 16 Geräte adressieren.

    num_leds [optional, voreingestellt: -1]

    Aktivieren Sie nur die ersten N der LEDs auf der FPGA-Platine. Wenn N -1 ist, dann werden HAL-Pins für alle LEDs erstellt. Für N=0 werden keine Pins hinzugefügt.

    num_ssrs [optional, voreingestellt: -1]

    Aktivieren Sie nur die ersten N der SSR-Module auf der FPGA-Platine. Wenn N -1 ist, dann werden HAL-Pins für alle SSR-Ausgänge erstellt. Wenn N=0, werden keine Pins hinzugefügt.

    enable_raw [optional]

    Wenn dies angegeben wird, so wird ein Rohzugriffsmodus aktiviert, bei dem ein Benutzer die Firmware von der HAL aus einsehen und anfassen kann. Siehe Raw-Modus unten.

dpll

Das hm2dpll-Modul hat Pins wie "hm2_<BoardType>.<BoardNum>.dpll" Es ist wahrscheinlich, dass sich die Pin-Anzahl in Zukunft verringern wird und dass einige Pins zu Parametern werden. Bei diesem Modul handelt es sich um eine phasenstarre Schleife, die sich mit dem Thread synchronisiert, in dem die "read"-Funktion von hostmot2 installiert ist, und die andere Funktionen auslöst, die ihr zu einem bestimmten Zeitpunkt vor oder nach der "read"-Funktion zugewiesen sind. Dies kann auf die drei absoluten Encoder-Typen, Quadratur-Encoder, Stepgen und xy2mod angewendet werden. Bei den Absolutwertgebern kann das System damit eine Datenübertragung kurz vor dem Zeitpunkt auslösen, zu dem der HAL-Treiber die Daten liest. Im Falle von Stepgen, Quadratur-Encodern und xy2mod können die Timer verwendet werden, um den Jitter bei der Positionsabtastung zu reduzieren. Dies ist besonders bei den Karten mit Ethernet-Schnittstelle von Vorteil.

Pins:

hm2<BoardType>.<BoardNum>.dpll._NN.timer-us (float, in)

This pin sets the triggering offset of the associated timer. There are 4 timers numbered 01 to 04, represented by the NN digits in the pin name. The units are microseconds (µs). Generally the value for reads will be negative, and positive for writes, so that input data is sampled prior to the main hostmot read and output data is written some time after the main hostmot2 read. + For stepgen and quadrature encoders, the value needs to be more than the maximum variation between read times. -100 will suffice for most systems, and -50 will work on systems with good performance and latency. + For serial encoders, the value also needs to include the time it takes to transfer the absolute encoder position. For instance, if 50 bits must be read at 500 kHz then subtract an additional 50/500 kHz = 100 µs to get a starting value of -200. + The xy2mod uses 2 DPLL timers, one for read and one for write. The read timer value can be the same as used by the stepgen and quadrature encoders so the same timer channel can be shared. The write timer is typically set to a time after the main hostmot2 write this may take some experimentation.

hm2<BoardType>.<BoardNum>.dpll.base-freq-khz (float, in)

Mit diesem Pin wird die Basisfrequenz des Phasenregelkreises eingestellt. Standardmäßig ist sie auf die Nennfrequenz des Threads eingestellt, in dem die PLL läuft, und muss normalerweise nicht geändert werden.

hm2<BoardType>.<BoardNum>.dpll.phase-error-us (float, out)

Zeigt den Phasenfehler der DPLL an. Wenn die Anzahl der Zyklen sehr hoch ist, dann ist es wahrscheinlich, dass die PLL keine Synchronisation erreicht hat und Anpassungen vorgenommen werden müssen.

hm2_<BoardType>.<BoardNum>.dpll.time-const (u32, in)

Die Filterzeitkonstante für die PLL. Der Standardwert ist ein Kompromiss zwischen der Unempfindlichkeit gegenüber Einzelzyklus-Schwankungen und der Unempfindlichkeit gegenüber Änderungen der Linux CLOCK_MONOTONIC-Zeitskala, die sich sofort um bis zu ±500 ppm von ihrem Nennwert ändern kann, normalerweise durch Zeitmesssoftware wie ntpd und ntpdate. Voreinstellung 2000 (0x7d0).

hm2_<BoardType>.<BoardNum>.dpll.plimit (u32, in)

Stellt die Phasenanpassungsgrenze der PLL ein. Wenn der Wert Null ist, läuft die PLL unabhängig von der Servo-Threadrate auf der Basisfrequenz frei. Dies ist wahrscheinlich nicht das, was Sie wollen. Standardwert 4194304 (0x400000) Einheiten nicht bekannt…​

hm2_<BoardType>.<BoardNum>.dpll.ddsize (u32, out)

Wird intern vom Fahrer verwendet und wird wahrscheinlich verschwinden.

hm2_<BoardType>.<BoardNum>.dpll.prescale (u32, in)

Vorskalierungsfaktor für den Ratengenerator. Voreinstellung 1.

Encoder

Encoder haben Namen wie hm2_<BoardType>.<BoardNum>.encoder.<Instance>.. "Instanz" ist eine zweistellige Zahl, die der Instanznummer des HostMot2-Encoders entspricht. Es gibt num_encoders Instanzen, beginnend mit 00.

Der HAL-Pin mit der aktuellen Position des zweiten Encoders der ersten 5I25-Karte lautet beispielsweise: hm2_5i25.0.encoder.01.position (dies setzt voraus, dass die Firmware auf dieser Karte so konfiguriert ist, dass dieses HAL-Objekt verfügbar ist).

Jeder Encoder verwendet drei oder vier Eingangs-I/O-Pins, je nachdem, wie die Firmware kompiliert wurde. Dreipolige Encoder verwenden A, B und Index (manchmal auch als Z bekannt). Bei vierpoligen Encodern werden A, B, Index und Index-Maske verwendet.

Die hm2-Encoder-Darstellung ähnelt derjenigen, die von der kanonischen Geräteschnittstelle (im Dokument HAL General Reference) beschrieben wird, und der Software-Encoder-Komponente. Jede Encoder-Instanz hat die folgenden Pins und Parameter:

Pins:

count (s32 out)

Number of encoder counts since the previous reset. 32-bit truncation of the 64-bit internal counter; position is computed from the full-width internal value so it does not wrap.

position (float out)

Encoderposition in Positionseinheiten (Count / Scale).

position-interpolated (float out)

Encoder interpolierte Position in Positionseinheiten (Zählung / Skala). Nur gültig, wenn die Geschwindigkeit annähernd konstant ist und die Zeit zwischen den Zählungen kleiner ist als der Wert des Parameters Geschwindigkeits-Timeout. Nicht für die Lageregelung verwenden. Nützlich für spindelsynchronisierte Bewegungen mit Encodern mit niedriger Auflösung.

position-latched (float out)

Encoder-Latch-Position in Positionseinheiten (Zählung/Skalierung).

velocity (float out)

Geschätzte Encoder-Geschwindigkeit in Positionseinheiten pro Sekunde.

velocity-rpm (float out)

Geschätzte Encoder-Geschwindigkeit in Positionseinheiten pro Minute.

reset (bit in)

Wenn dieser Pin True ist, werden die Zähl- und Positionspins auf 0 festgelegt (der Wert des Geschwindigkeits-Pins wird dadurch nicht beeinflusst). Der Treiber setzt diesen Pin nicht auf FALSE zurück, nachdem er die Anzahl auf 0 zurückgesetzt hat, dh die Aufgabe des Benutzers.

index-enable (bit in/out)

Wenn dieser Pin auf True gesetzt ist, (und no-clear-on-index ist false) so wird der Zählerstand (und damit auch die Position) beim nächsten Indeximpuls (Phase-Z) auf Null zurückgesetzt. Gleichzeitig wird index-enable auf Null zurückgesetzt, um anzuzeigen, dass der Impuls stattgefunden hat.

no-clear-on-index (bit in)

Wenn dieser Pin auf True gesetzt ist, wird der Zähler (und damit auch die Position) nicht beim nächsten Index- (Phase\-Z-) Puls auf null zurückgesetzt. Bei einem Index-Ereignis werden der gespeicherte Zählerstand und die Position so gesetzt, dass sie den Zählerstand und die Position angeben, an denen der Index aufgetreten ist.

probe-enable (bit in/out)

Wenn dieser Pin auf True gesetzt ist, wird der Encoder-Zählerstand (und damit auch die Position) bei der nächsten aktiven Flanke des Tasters zwischengespeichert. Gleichzeitig wird probe-enable auf Null zurückgesetzt, um anzuzeigen, dass das Latch-Ereignis eingetreten ist. (nur vorhanden wenn durch Firmware unterstützt)

probe-invert (bit r/w)

Bei True löst die steigende Flanke des Sondeneingangspins das Latch-Ereignis aus (wenn Probe-Enable True ist). Bei False löst die fallende Flanke das Ereignis aus. (nur vorhanden wenn durch Firmware unterstützt)

rawcounts (s32 out)

Total number of encoder counts since the start, not adjusted for index or reset. Truncated view of the internal 64-bit counter.

count_latch (s32 out)

Encoder count at latch event (index or probe). Truncated view of the internal 64-bit latched count.

input-a, input-b, input-index (bit out)

Echtzeit-gefilterte Werte von A-, B-, Index-Encoder-Signalen

quad-error-enable (bit in)

Wenn dieser Pin auf True steht, ist die Meldung von Quadraturfehlern aktiviert. Wenn er auf False steht, werden vorhandene Quadraturfehler gelöscht und die Meldung von Fehlern ist deaktiviert.

quad-error (bit out)

Dieses Bit zeigt an, dass ein Quadraturfolgefehler erkannt wurde. Es kann nur gesetzt werden, wenn das entsprechende Quad-Fehler-Aktivierungsbit True ist.

hm2_XXXX.N.encoder.sample-frequency (u32 in)

Dies ist die Abtastfrequenz, welche die Zeitkonstante des digitalen Filters aller Standard-Encoderkanäle bestimmt (siehe Filterparameter).

hm2_XXXX.N.encoder.muxed-sample-frequency (u32 in)

Dies ist die Abtastfrequenz, welche die Zeitkonstante des digitalen Filters aller gemischten Geberkanäle bestimmt (siehe Filterparameter). Damit wird auch die Encoder-Multiplexing-Frequenz festgelegt.

hm2_XXXX.N.encoder.muxed-skew (float in)

Hier wird die Verzögerung der Abtastzeit des gemischten Encoders (in ns) gegenüber dem Multiplexsignal eingestellt. Die richtige Einstellung kann die nutzbare Multiplexfrequenz erhöhen und Kabelverzögerungen kompensieren (empfohlener Wert ist 3* Kabellänge in Fuß +20).

hm2_XXXX.N.encoder.hires-timestamp (bit in)

Wenn dieser Pin True ist, beträgt die Frequenz des Zeitstempelzählers ~10 MHz. Wenn False, beträgt die Frequenz des Zeitstempelzählers ~2 MHz. Dies sollte bei Frequenzzählungsanwendungen auf True gesetzt werden, um die Auflösung zu verbessern. Er sollte auf False gesetzt werden, wenn Servo-Thread-Perioden von mehr als 1 ms verwendet werden.

Parameters:

scale (float r/w)

Konvertiert von "Zähleinheiten" in "Positionseinheiten".

index-invert (bit r/w)

Bei True löst die steigende Flanke des Index-Eingangs-Pins das Index-Ereignis aus (wenn Index-Enable True ist). Bei False löst die fallende Flanke das Ereignis aus.

index-mask (bit r/w)

Wenn er auf True gesetzt ist, hat der Index-Eingangs-Pin nur dann eine Wirkung, wenn der Index-Masken-Eingangs-Pin True ist (oder False, abhängig vom Index-Masken-Invert-Pin unten).

index-mask-invert (bit r/w)

Bei "True" muss "Index-Mask" auf "False" gesetzt werden, damit "Index" eine Wirkung hat. Bei False muss die Index-Mask-Pin auf True stehen.

counter-mode (bit r/w)

Für Quadratur auf False (Voreinstellung) setzen. Für Step/Dir auf True setzen (in diesem Fall liegt Step auf dem A-Pin und Dir auf dem B-Pin).

filter (bit r/w)

Bei der Einstellung True (Standardeinstellung) benötigt der Quadraturzähler 15 Abtasttakte, um eine Änderung auf einer der drei Eingangsleitungen zu registrieren (jeder Impuls, der kürzer ist als dieser Wert, wird als Rauschen verworfen). Bei der Einstellung False benötigt der Quadraturzähler nur 3 Takte, um eine Änderung zu registrieren. Der Standard-Abtasttakt des Encoders liegt bei etwa 25 bis 33 MHz, kann aber global mit dem Sample-Frequenz- oder Muxed-Sample-Frequenz-Pin geändert werden.

vel-timeout (float r/w)

Wenn sich der Encoder langsamer bewegt als ein Impuls für jedes Mal, wenn der Treiber den Zählerstand aus dem FPGA liest (in der Funktion hm2_read()), ist die Geschwindigkeit schwieriger zu schätzen. Der Treiber kann mehrere Iterationen abwarten, bis der nächste Impuls eintrifft, während er gleichzeitig die obere Grenze der Encoder-Geschwindigkeit meldet, die genau abgeschätzt werden kann. Dieser Parameter gibt an, wie lange auf den nächsten Impuls gewartet werden soll, bevor der Encoder gestoppt wird. Dieser Parameter wird in Sekunden angegeben.

hm2_XXXX.N.encoder.timer-number (Voreinstellung: -1) (s32 r/w)

Legt die hm2dpll-Timer-Instanz fest, die zur Verriegelung von Encoder-Zählungen verwendet werden soll. Bei einer Einstellung von -1 werden keine Encoderzählungen gespeichert. Bei einer Einstellung von 0 erfolgt die Verriegelung zur gleichen Zeit wie das Hauptlesen von hostmot2. Bei einer Einstellung von 1..4 wird ein Zeitversatz zum Haupt-Hostmot2-Lesevorgang entsprechend der Timer-µs-Einstellung der dpll verwendet.

Normalerweise sollte timer-us eine negative Zahl sein, deren Betrag größer ist als die größte Latenz (z. B. -100 für ein System mit mittelmäßiger Latenz, -50 für ein System mit guter Latenz). Eine negative Zahl gibt an, dass die angegebene Zeit vor der nominalen hostmot2-Lesezeit verriegelt wird.

Wenn in der FPGA-Firmware kein DPLL-Modul vorhanden ist oder das Encoder-Modul DPLL nicht unterstützt, dann wird dieser Pin nicht angelegt.

Wenn verfügbar, sollte diese Funktion in der Regel aktiviert sein. Dadurch werden im Allgemeinen folgende Fehler reduziert.

Synchrone serielle Schnittstelle (SSI)

(Nicht zu verwechseln mit dem Smart Serial Interface)

Für jede SSI-Instanz wird ein Pin erstellt, unabhängig vom Datenformat:

hm2_XXXX.NN.ssi.MM.data-incomplete (bit, in)

Dieser Pin wird auf "True" gesetzt, wenn das Modul beim Lesen des Wertes noch Daten übertragen hat. Wenn dieses Problem besteht, wird auch eine begrenzte Anzahl von Fehlermeldungen auf der Benutzeroberfläche ausgegeben. Dieser Pin sollte verwendet werden, um zu überwachen, ob das Problem durch Konfigurationsänderungen behoben wurde. Die Lösung des Problems hängt davon ab, ob

  • Das Auslesen des Encoders wird durch den hm2dpll-Phasenregelkreis-Timer (oben beschrieben) ausgelöst

  • oder durch die Funktion trigger-encoders (unten beschrieben).

Die Namen der Pins, die vom SSI-Modul erzeugt werden, hängen vollständig von der Formatstring für jeden Kanal ab, der in der loadrt-Befehlszeile angegeben ist. Ein typischer Formatstring könnte sein ssi_chan_0=error%1bPosition%24g.

Dies würde das LSB des Bitstroms als Bit-Typ-Pin namens "Fehler" und die nächsten 24 Bits als Gray-codierten Encoder-Zähler interpretieren. Die Encoder-bezogenen HAL-Pins würden alle mit "Position" beginnen.

Der Formatstring sollte keine Leerzeichen enthalten, da diese vom Low-Level-Code als Trennzeichen verwendet werden.

Das Format besteht aus einer Zeichenkette mit alphanumerischen Zeichen, welche die HAL-Pin-Namen bilden, gefolgt von einem %-Symbol, einer Bit-Anzahl und einem Datentyp. Alle Bits des Pakets müssen definiert werden, auch wenn sie nicht verwendet werden. Es gibt eine Obergrenze von insgesamt 64 Bits.

Die gültigen Formatzeichen und die von ihnen erzeugten Pins sind:

p: (Pad)

Erzeugt keine Pins, wird verwendet, um Abschnitte des Bitstroms zu ignorieren, die nicht benötigt werden.

b: (Boolesch).

(bit, out) hm2_XXXX.N.ssi.MM.<name>.
Wenn irgendwelche Bits in der angegebenen Feldbreite nicht Null sind, ist der HAL-Pin "True".
(bit, out) hm2_XXXX.N.ssi.MM.<name>-not.
Eine negierte Version des obigen Beispiels, der HAL-Pin ist "True", wenn alle Bits im Feld Null sind.

u: (ohne Vorzeichen)

(float, out) hm2_XXXX.N.ssi.MM.<name>. Der Wert der Bits, interpretiert als Ganzzahl ohne Vorzeichen interpretiert und dann so skaliert, dass der Wert des Pins gleich dem Wert des scalemax Parameterwert entspricht, wenn alle Bits hoch sind. (z.B. wenn das Feld 8 Bits breit ist und der scalmax-Parameter 20 ist, würde bei einem Wert von 255 die 20 zurückgeben und bei 0 würde 0 zurückgeben.

s: (mit Vorzeichen)

(float, out) hm2_XXXX.N.ssi.MM.<name>.
Der Wert der Bits, interpretiert als vorzeichenbehaftete Zahl im Zweierkomplement, dann ähnlich skaliert wie die vorzeichenlose Variante, außer symmetrisch um Null.

f: (BitFeld)

(bit, out) hm2_XXXX.N.ssi.MM.<Name>-NN.
Der Wert jedes einzelnen Bits im Datenfeld. NN beginnt bei 00 und reicht bis zur Anzahl der Bits im Feld.
(bit, out) hm2_XXXX.N.ssi.MM.<Name>-NN-not.
Eine invertierte Version der einzelnen Bit-Werte.

e: (Encoder)

(s32, out) hm2_XXXX.N.ssi.MM.<Name>.count.
Die unteren 32 Bits der Gesamtzählung des Encoders. Dieser Wert wird sowohl durch die …​reset- als auch durch die …​index-enable-Pins zurückgesetzt.
(s32, out) hm2_XXXX.N.ssi.MM.<Name>.rawcounts.
Die unteren 32 Bits der Gesamtzählungen des Encoders. Der Pin wird von Reset und Index nicht beeinflusst.
(float, out) hm2_XXXX.N.ssi.MM.<Name>.position.
Die Encoderposition in Maschineneinheiten. Sie wird aus den vollen 64-Bit-Puffern berechnet und zeigt daher einen True-Wert an, auch nachdem die Zählpins umgeschlagen sind. Sie wird durch Reset und Index-Enable auf Null gesetzt.
(Bit, IO) hm2_XXXX.N.ssi.MM.<Name>.index-enable.
Wenn dieser Pin auf "True" gesetzt ist, wartet das Modul, bis der Roh-Encoder ein ganzzahliges Vielfaches der im Parameter counts-per-rev angegebenen Anzahl von Zählungen durchläuft, und setzt dann die Pins für Zählungen und Position auf Null und den Pin für die Index-Freigabe wieder auf "False", um dem System zu signalisieren, dass der "Index" durchlaufen wurde.
(bit, in) (bit, out) hm2_XXXX.N.ssi.MM.E<Name>.reset.
Wenn dieser Pin auf High gesetzt wird, werden die Zähl- und Positionspins auf Null gesetzt.

h: (Split-Encoder, Bits höherer Ordnung)

Bei einigen Encodern (einschließlich Fanuc) werden die Teil- und Gesamtumdrehungszahlen in separaten, nicht zusammenhängenden Feldern gespeichert. Dieses Tag definiert die Bits höherer Ordnung eines solchen Encoder-Moduls. Es kann nur ein h- und ein l-Tag pro Kanal geben, das Verhalten bei mehreren solcher Kanäle ist undefiniert.

l: (Split encoder, low-order bits)

Bits niedriger Ordnung (siehe "h")

g: (Gray-code)

Dies ist ein Modifizierer, der angibt, dass die folgende Formatzeichenfolge im Gray-code kodiert ist.

m: (Multi-turn)

Dies ist ein Modifizierer, der angibt, dass die folgenden Formatzeichenfolge ein Multiturn-Encoder ist. Dies gilt nur für Drehgeber (e, h l). Ein Sprung in der Encoderposition von mehr als der Hälfte des vollen Skalenendwerts wird als volle Umdrehung interpretiert und die Zählungen werden umgebrochen. Bei einem Multiturn-Encoder ist dies wahrscheinlich nur ein Datenfehler und führt zu einem permanenten Offset. Dieses Flag besteht darin, dass solche Encoder niemals umgebrochen werden.

Parameters

Zwei Parameter werden universell für alle SSI-Instanzen erstellt

hm2_XXXX.N.ssi.MM.frequency-khz (float r/w)

Mit diesem Parameter wird die SSI-Taktfrequenz eingestellt. Die Einheiten sind kHz, 500 ergibt also eine Taktfrequenz von 500.000 Hz.

hm2_XXXX.N.ssi.timer-number-num (s32 r/w)

Dieser Parameter ordnet das SSI-Modul einer bestimmten hm2dpll-Zeitgeberinstanz zu. Dieser Pin ist nur in Firmwares von Nutzen, die eine hm2dpll-Funktion enthalten, und wird standardmäßig auf 1 gesetzt, wenn es eine solche Funktion gibt, und auf 0, wenn es sie nicht gibt. Der Pin kann verwendet werden, um Lesevorgänge des Encoders zu deaktivieren, indem er auf eine nicht existierende Timer-Nummer oder auf 0 gesetzt wird.

Andere Parameter hängen von den in der Konfigurationszeichenfolge angegebenen Datentypen ab.

p: (Pad)

Keine Parameter.

b: (Boolesch)

Keine Parameter.

u: (ohne Vorzeichen)

(float, r/w) hm2_XXXX.N.ssi.MM.<name>-scalemax. Der Skalierungsfaktor für den Kanal.

s: (mit Vorzeichen)

(float, r/w) hm2_XXXX.N.ssi.MM.<name>-scalemax. Der Skalierungsfaktor für den Kanal.

f: (BitFeld)

Keine Parameter.

e: (Encoder)

(float, r/w) hm2_XXXX.N.ssi.MM.<name>.scale: (float, r.w) Die Encoder-Skala zählt pro Maschineneinheit. (u32, r/w) hm2_XXXX.N.ssi.MM.<name>.counts-per-rev (u32, r/w) Wird verwendet, um das Indexverhalten eines inkrementellen +Index-Encoders zu emulieren. Dies würde normalerweise auf die tatsächlichen Zähler pro Umdrehung des Encoders eingestellt werden, kann aber eine beliebige Anzahl von Umdrehungen sein. Ganzzahlige Teiler oder Multiplikatoren des wahren PPR können für Index-Homing nützlich sein. Nicht-ganzzahlige Faktoren können bei einer synchronen Antriebsübersetzung geeignet sein zwischen dem Encoder und der Spindel oder Kugelgewindetrieb.

BiSS

BiSS ist eine bidirektionale Variante von SSI. Derzeit wird nur eine Richtung von LinuxCNC unterstützt (Messgerät zum PC).

Für jede BiSS-Instanz wird ein Pin erstellt, unabhängig vom Datenformat:

hm2_XXXX.NN.biss.MM.data-incomplete (bit, in)

Dieser Pin wird auf "True" gesetzt, wenn das Modul beim Lesen des Wertes noch Daten übertragen hat. Wenn dieses Problem besteht, wird auch eine begrenzte Anzahl von Fehlermeldungen auf der Benutzeroberfläche ausgegeben. Dieser Pin sollte verwendet werden, um zu überwachen, ob das Problem durch Konfigurationsänderungen behoben wurde. Die Lösung des Problems hängt davon ab, ob das Lesen des Encoders durch den hm2dpll-Phase-Locked-Loop-Timer (oben beschrieben) oder durch die Trigger-Encoders-Funktion (unten beschrieben) ausgelöst wird.

Die Namen der Pins, die vom BiSS-Modul erzeugt werden, hängen vollständig von dem Formatstring für jeden Kanal ab, der in der loadrt-Befehlszeile angegeben ist, und folgen genau dem oben für SSI definierten Format. Derzeit Datenpakete von bis zu 96 Bit werden von der LinuxCNC-Treiber unterstützt, obwohl die Mesa Hostmot2 Modul kann 512 Bit-Pakete zu behandeln. Es sollte möglich sein, die Anzahl der vom Treiber unterstützten Pakete zu erweitern, wenn ein Bedarf dafür besteht.

Fanuc-Encoder

Die Pins und Format-Spezifizierer für dieses Modul sind mit dem oben beschriebenen SSI-Modul identisch, mit dem Unterschied, dass mindestens ein vorkonfiguriertes Format vorgesehen ist. Ein Modparam von fanuc_chan_N=AA64 (Groß-/Kleinschreibung beachten) wird den Kanal für einen Fanuc Aa64 Encoder konfigurieren. Die erstellten Pins sind:

hm2XXXX._N.fanuc.MM.batt

Anzeige des Batterie-Zustands

hm2XXXX._N.fanuc.MM.batt-not

invertierte Version von oben

hm2XXXX._N.fanuc.MM.comm

Der absolute 0–1023-Ausgang für die Motor-Kommutierung

hm2XXXX._N.fanuc.MM.crc

Die CRC-Prüfsumme. Derzeit hat HAL keine Möglichkeit, dies zu verwenden

hm2XXXX._N.fanuc.MM.encoder.count

Encoder Zählung

hm2XXXX._N.fanuc.MM.encoder.index-enable

Simulierter Index. Gesetzt durch counts-per-rev parameter

hm2XXXX._N.fanuc.MM.encoder.position

Zähler (engl. counts) sind skaliert durch den …​scale (engl. für Skala) Parameter

hm2XXXX._N.fanuc.MM.encoder.rawcounts

"raw counts" (Maschinen-nahe Zählung), unbeeinflusst von einem Reset oder Index-Signal

hm2XXXX._N.fanuc.MM.encoder.reset

Wenn hoch/wahr werden die Zählung (counts) und Position auf Null gesetzt

hm2XXXX._N.fanuc.MM.valid

Zeigt an, dass die absolute Position gültig ist

hm2XXXX._N.fanuc.MM.valid-not

Invertierte Version

resolver

Resolver haben Namen wie hm2_<BoardType>.<BoardNum>.resolver.<Instance>. <Instance> ist eine zweistellige Zahl, die bei der 7I49-Karte zwischen 00 und 05 liegt. Diese Funktion funktioniert nur mit den Mesa Resolver-Schnittstellenkarten (von denen die 7I49 zum Zeitpunkt der Erstellung dieses Artikels das einzige Beispiel ist). Diese Karte verwendet eine SPI-Schnittstelle zur FPGA-Karte und funktioniert nur mit der richtigen Firmware. Die zugewiesenen Pins werden in der dmesg-Ausgabe aufgelistet, können aber wahrscheinlich nicht sinnvoll mit HAL-Tools getestet werden.

Pins:

angle (float, out)

Dieser Pin zeigt die Winkelposition des Resolvers an. Es ist eine Zahl zwischen 0 und 1 für jede elektrische Umdrehung.

position (float, out)

Berechnet sich aus der Anzahl der vollständigen und teilweisen Umdrehungen seit dem Start, dem Zurücksetzen oder dem Index-Reset, multipliziert mit dem Skalenparameter.

velocity (float, out)

Wird aus der Rotationsgeschwindigkeit und dem Parameter Geschwindigkeitsmaßstab berechnet. Die Standardskala ist elektrische Umdrehungen pro Sekunde.

velocity-rpm (float, out)

Der Einfachheit halber wird die Geschwindigkeit mit dem Faktor 60 skaliert.

count (s32, out)

Diese Pins geben eine simulierte Encoderzählung mit 224 Zählungen pro Umdrehung (16777216 Zählungen) aus.

rawcounts (s32, out)

Dieser Pin ist identisch mit dem Zähl-Pin, wird aber nicht durch die "Index"- oder "Reset"-Pins zurückgesetzt. Dies ist der Pin, der mit der bldc HAL-Komponente verbunden wäre, wenn der Resolver zum Kommutieren eines Motors verwendet würde.

reset (bit, in)

Setzt die Position zurück und zählt die Pins sofort auf Null.

joint-pos-fb (bit, in)

Der Mesa-Resolvertreiber ist in der Lage, einen Absolutwertgeber mit Hilfe einer Positionsdatei zu emulieren (siehe Abschnitt INI-config des Handbuchs) und den absoluten Single-Turn-Betrieb von Resolvern. Beim Start, und nur wenn der Parameter use-position-file auf "True" gesetzt ist, wartet der Resolvertreiber darauf, dass das System einen Wert an den axis.N.joint-pos-fb-Pin schreibt (der mit diesem Resolver-Pin verbunden sein muss) und berechnet die Anzahl der vollen Umdrehungen, die am besten zur aktuellen Resolverposition passt. Dann wird der Treiberausgang mit diesem Offset vorbelastet. Dies sollte nur bei Systemen verwendet werden, bei denen eine Achsenbewegung im stromlosen Zustand unwahrscheinlich ist. Diese Funktion funktioniert nur dann ordnungsgemäß, wenn die Maschine anfänglich auf "Index" referenziert wird und wenn die Referenzpositionen der Achsen genau Null sind.

index-enable (bit, in/out)

Wenn dieser Pin auf High gesetzt wird, werden die Positions- und Zählpins zurückgesetzt, wenn der Resolver das nächste Mal die Nullposition durchläuft. Gleichzeitig wird der Pin auf Low gesetzt, um den angeschlossenen Modulen anzuzeigen, dass der Index gesehen wurde und die Zähler zurückgesetzt wurden.

error (bit, out)

Zeigt einen Fehler in dem betreffenden Kanal an. Wenn dieser Wert "True" ist, sind die gemeldete Position und Geschwindigkeit ungültig.

Parameters:

scale (float, read/write)

Die Positionsskala in Maschineneinheiten pro elektrischer Umdrehung des Resolvers.

velocity-scale (float, read/write)

Der Umrechnungsfaktor zwischen Resolverdrehzahl und Maschinengeschwindigkeit. Ein Wert von 1 ergibt typischerweise die Motordrehzahl in U/min, ein Wert von 0,01666667 ergibt die (ungefähre) U/min.

index-divisor (Voreinstellung: 1) (u32, read/write)

Die Resolverkomponente emuliert einen Index an einem festen Punkt im Sin/Cos-Zyklus. Einige Resolver haben mehrere Zyklen pro Umdrehung (oft im Zusammenhang mit der Anzahl der Polpaare auf den angeschlossenen Motor). LinuxCNC erfordert einen Index einmal pro Umdrehung für die richtige Threading etc. Dieser Parameter sollte auf die Anzahl der Zyklen pro Umdrehung des Resolvers eingestellt werden. ACHTUNG: Welcher Pseudo-Index verwendet wird ist nicht zwingend konsistent bei einem Neustart von LinuxCNC. Erwarten Sie nicht, einen Thread nach dem Neustart von LinuxCNC neu zu starten. Es ist nicht sinnvoll, diesen Parameter für Index-Homing von Achsantrieben zu verwenden.

excitation-khz (float, read/write)

Mit diesem Pin wird die Erregungsfrequenz für den Resolver eingestellt. Dieser Pin ist eher auf Modulebene als auf Instanzebene angesiedelt, da alle Resolver die gleiche Erregungsfrequenz haben. Gültige Werte sind 10 (~10 kHz), 5 (~5 kHz) und 2,5 (~2,5 kHz). Die tatsächliche Frequenz hängt von der FPGA-Frequenz ab und entspricht jeweils CLOCK_LOW/5000, CLOCK_LOW/10000 und CLOCK_LOW/20000. Der Parameter wird auf die nächstgelegene der drei verfügbaren Frequenzen gesetzt. Ein Wert von -1 (der Standardwert) bedeutet, dass die aktuelle Einstellung beibehalten werden soll.

use-position-file (bit, read/write)

In Verbindung mit joint-pos-fb (qv) emulieren sie absolute Geber.

pwmgen

pwmgens haben Namen wie "hm2_<BoardType>.<BoardNum>.pwmgen.<Instance>". <Instance> ist eine zweistellige Nummer, die der HostMot2 pwmgen Instanznummer entspricht. Es gibt num_pwmgens-viele Instanzen, beginnend mit 00.

Der HAL-Pin, der die Ausgabe des vierten pwmgen auf der ersten 7I43-Karte aktiviert, lautet beispielsweise: hm2_7i43.0.pwmgen.03.enable (dies setzt voraus, dass die Firmware auf dieser Karte so konfiguriert ist, dass dieses HAL-Objekt verfügbar ist).

In HM2 nutzt jeder pwmgen drei Ausgabe I/O Pins: Not-Enable, Out0, and Out1. Die Funktion der I/O-Pins Out0 und Out1 variiert je nach Ausgangstyp-Parameter (siehe unten).

Die hm2 pwmgen-Darstellung ist der Softwarekomponente pwmgen ähnlich. Jede pwmgen-Instanz hat die folgenden Pins und Parameter:

Pins:

enable (bit input)

Wenn True, setzt das pwmgen seinen Not-Enable-Pin auf False und gibt seine Impulse aus. Wenn "enable" Falsch ist, setzt pwmgen seinen Not-Enable-Pin auf true und gibt keine Signale aus.

value (float input)

Der aktuelle Wert des pwmgen-Befehls, in willkürlichen Einheiten.

Parameters:

scale (float rw)

Skalierungsfaktor zur Umrechnung von "value" von beliebigen Einheiten in das Tastverhältnis: dc = value / scale. Das Tastverhältnis hat einen effektiven Bereich von -1,0 bis einschließlich +1,0, alles außerhalb dieses Bereichs wird abgeschnitten. Die Standardskalierung ist 1,0.

output-type (s32 rw)

output-type - (s32, RW) Dies emuliert das output_type-Ladezeit-Argument für die Softwarekomponente pwmgen. Dieser Parameter kann zur Laufzeit geändert werden, aber in den meisten Fällen wollen Sie ihn beim Start setzen und dann in Ruhe lassen. Akzeptierte Werte sind 1 (PWM auf Out0 und Direction auf Out1), 2 (Up auf Out0 und Down auf Out1), 3 (PDM-Modus, PDM auf Out0 und Dir auf Out1) und 4 (Direction auf Out0 und PWM auf Out1, for locked antiphase).

offset-mode (bit input)

Bei True ändert der Offset-Modus das PWM-Verhalten so, dass ein PWM-Wert von 0 zu einem PWM-Ausgang mit 50 % Tastverhältnis führt, ein Wert von -1 zu einem Tastverhältnis von 0 % und +1 zu einem Tastverhältnis von 100 % (mit Standardskalierung). Dieser Modus wird von einigen PWM-Motorantrieben und PWM-Analogwandlern verwendet. Normalerweise wird das Richtungssignal in diesem Modus nicht verwendet.

dither (bit input)

Wenn Wahr, dann bewirkt dither, dass der PWM-Ausgang zwischen zwei benachbarten PWM-Registerwerten an der PWM-Frequenz dithert - gemeint ist ein hin- und her-springen des Wertes. Dies erhöht die PWM-Auflösung beim Einsatz für analoge Ausgangszwecke und erhöht die maximale Auflösung von 12 bis 16 Bit. Dither wird nur mit PWMGen Firmware Version 1 oder größer unterstützt und beeinflusst nur PWM-Ausgänge, nicht PDM-Ausgänge.

Zusätzlich zu den oben aufgeführten HAL-Parametern pro Instanz gibt es eine Reihe von HAL-Parametern, die alle pwmgen-Instanzen betreffen:

pwm_frequency (u32 rw)

Hier wird die PWM-Frequenz in Hz für alle pwmgen-Instanzen angegeben, die in den PWM-Modi (Modus 1 und 2) laufen. Dies ist die Frequenz der Welle mit variablem Tastverhältnis. Ihr effektiver Bereich reicht von 1 Hz bis 386 kHz. Beachten Sie, dass die maximale Frequenz durch die ClockHigh-Frequenz der Anything IO-Karte bestimmt wird; das 5I25 und das 7I92 haben beide einen 200-MHz-Takt, was zu einer maximalen PWM-Frequenz von 386 kHz führt. Andere Karten können andere Taktfrequenzen haben, was zu anderen maximalen PWM-Frequenzen führt. Wenn der Benutzer versucht, die Frequenz zu hoch einzustellen, wird sie auf die maximal unterstützte Frequenz der Karte begrenzt. Frequenzen unter etwa 5 Hz sind nicht sehr genau, aber über 5 Hz sind sie ziemlich genau. Die Standardeinstellung für pwm_frequency ist 20.000 Hz (20 kHz).

pdm_frequency (u32 rw)

Hier wird die PDM-Frequenz in Hz für alle pwmgen-Instanzen angegeben, die im PDM-Modus (Modus 3) laufen. Dies ist die "Puls-Slot-Frequenz"; die Frequenz, bei der der PDM-Generator in der AnyIO-Karte entscheidet, ob er einen Puls oder ein Leerzeichen aussendet. Jeder Impuls (und jedes Leerzeichen) in der PDM-Impulsfolge hat eine Dauer von 1/pdm_frequency Sekunden. Wenn Sie zum Beispiel die pdm_frequency auf 2e6 (2 MHz) und das Tastverhältnis auf 50 % einstellen, erhalten Sie eine 1-MHz-Rechteckwelle, die einem 1-MHz-PWM-Signal mit 50 % Tastverhältnis entspricht. Der effektive Bereich dieses Parameters reicht von etwa 1525 Hz bis zu knapp 200 MHz. Beachten Sie, dass die maximale Frequenz durch die ClockHigh-Frequenz der Anything IO-Karte bestimmt wird; das 5I25 und das 7I92 haben beide einen 100-MHz-Takt, was zu einer maximalen PDM-Frequenz von 100 MHz führt. Andere Karten können andere Taktfrequenzen haben, was zu anderen maximalen PDM-Frequenzen führt. Wenn der Benutzer versucht, die Frequenz zu hoch einzustellen, wird sie auf die maximal unterstützte Frequenz der Karte begrenzt. Die Standardeinstellung für pdm_frequency ist 20.000 Hz (20 kHz).

3ppwmgen

Dreiphasen-PWM-Generatoren (3pwmgens) sind für die Steuerung der High-Side- und Low-Side-Gates in einem 3-Phasen-Motortreiber vorgesehen. Die Funktion ist zur Unterstützung der Mesa-Motor-Controller-Tochterkarten enthalten, kann aber auch zur direkten Steuerung eines IGBT- oder ähnlichen Treibers verwendet werden. 3pwmgen haben Namen wie "hm2_<BoardTyp>.<BoardNum>.3pwmgen.<Instanz>", wobei <Instanz> eine zweistellige Zahl ist. Es wird num_3pwmgens Instanzen geben, beginnend bei 00. Jede Instanz weist 7 Ausgangs- und einen Eingangspin auf den Anschlüssen der Mesa-Karte zu. Die Ausgänge sind: PWM A, PWM B, PWM C, /PWM A, /PWM B, /PWM C, Enable. Die ersten drei Pins sind die High-Side-Treiber, die zweiten drei sind ihre komplementären Low-Side-Treiber. Das Freigabe-Bit dient zur Steuerung des Servoverstärkers. Das Input-Bit ist ein Fehler-Bit, das typischerweise mit der Überstromerkennung verdrahtet ist. Wenn es gesetzt ist, dann ist der PWM-Generator deaktiviert. Die drei Phasen-Tastverhältnisse sind einzeln von -Scale bis +Scale steuerbar. Beachten Sie, dass 0 einem Tastverhältnis von 50% entspricht und dies der Initialisierungswert ist.

Pins:

A-value, B-value, C-value (float input)

Der PWM-Befehlswert für jede Phase, begrenzt auf +/- "scale". Standardwert ist Null, was einem Tastverhältnis von 50 % auf den High-Side- und Low-Side-Pins entspricht (siehe jedoch den Parameter "deadtime").

enable (bit input)

Ist der Wert hoch, ist die PWM aktiviert, solange das Fehlerbit nicht durch den externen Fehlereingangspin gesetzt wird. Wenn der Wert niedrig ist, dann ist die PWM deaktiviert, wobei sowohl die High-Side- als auch die Low-Side-Treiber niedrig sind. Dies ist nicht dasselbe wie Ausgang 0 (50 % Tastverhältnis an beiden Pins) oder negativer Vollausschlag (wobei die Low-Side-Treiber 100 % der Zeit "an" sind).

fault (bit output)

Zeigt den Status des Fehlerbits an. Dieser Ausgang verriegelt High, sobald er durch den physikalischen Fehlerpin gesetzt wurde, bis der "Enable"-Pin auf High gesetzt wird.

Parameters:

deadtime (u32 rw)

Legt die Totzeit zwischen dem Ausschalten des High-Side-Treibers und dem Einschalten des Low-Side-Treibers und umgekehrt fest. Die Totzeit wird symmetrisch von der Einschaltzeit subtrahiert und zur Ausschaltzeit addiert. Bei 20 kHz PWM (50 µs Periode), 50 % Tastverhältnis und Null Totzeit wären die PWM- und NPWM-Ausgänge beispielsweise Rechteckwellen (NPWM wird von PWM invertiert) mit High-Zeiten von 25 µs. Mit den gleichen Einstellungen, aber 1 µs Totzeit, hätten die PWM- und NPWM-Ausgänge beide High-Zeiten von 23 µs (25 - (2X 1 µs), 1 µs pro Flanke). Der Wert wird in Nanosekunden (ns) angegeben und ist standardmäßig auf einen eher konservativen Wert von 5000 ns eingestellt. Die Einstellung dieses Parameters auf einen zu niedrigen Wert könnte sowohl teuer als auch gefährlich sein, denn wenn beide Gates gleichzeitig offen sind, liegt praktisch ein Kurzschluss in der Versorgung vor.

scale (float rw)

Legt die halbe Skala des angegebenen 3-Phasen-PWM-Generators fest. Es sind PWM-Werte von -skaliert bis +skaliert gültig. Voreinstellung ist +/- 1,0

fault-invert (bit rw)

Legt die Polarität des Fehlereingangs-Pins fest. Ein Wert von 1 bedeutet, dass ein Fehler mit dem Pin hoch ausgelöst wird, und 0 bedeutet, dass ein Fehler ausgelöst wird, wenn der Pin niedrig gezogen wird. Voreinstellung 0, Fehler niedrig, so dass das PWM mit dem Fehler-Pin nicht verbunden arbeitet.

sample-time (u32 rw)

Legt den Zeitpunkt während des Zyklus fest, zu dem ein ADC-Impuls erzeugt wird. 0 = Beginn des PWM-Zyklus und 1 = Ende. Derzeit nicht nützlich für LinuxCNC. Voreingestellt ist 0.5.

Zusätzlich zu den oben genannten Parametern pro Instanz gibt es den folgenden Parameter, der alle Instanzen betrifft:

frequency (u32 rw)

Stellt die Master-PWM-Frequenz ein. Das Maximum liegt bei ca. 48 kHz, das Minimum bei 1 kHz. Die Standardeinstellung ist 20 kHz.

oneshot

Der Oneshot ist ein Hardware-One-Shot-Baustein, der sich für verschiedene Timing-, Verzögerungs-, Signalaufbereitungs-, PWM-Erzeugungs- und Watchdog-Funktionen eignet. Das Oneshot-Modul umfasst 2 Timer, die variable Impulsverzögerungen für Anwendungen wie Phasensteuerung ermöglichen. Triggerquellen können Software, externe Eingänge, der DPLL-Timer, ein eingebauter Ratengenerator oder der andere Timer sein. Oneshots haben Namen wie "hm2_<BoardType>.<BoardNum>.oneshot.<Instanz>", wobei <Instanz> eine zweistellige Zahl ist. Es wird num_oneshots Instanzen geben, beginnend mit 00. Jede Instanz weist bis zu zwei Eingangs- und zwei Ausgangspins zu.

Pins:

width1 (float rw)

Legt die Impulsbreite von Timer1 in ms fest. Standard ist 1 ms (1/1000 s).

width2 (float rw)

Legt die Impulsbreite von Timer1 in ms fest. Standard ist 1 ms (1/1000 s).

filter1 (float rw)

Legt die digitale Filterzeitkonstante für den externen Triggereingang von Timer1 fest. Die Filterzeit wird in ms angegeben. Die Standard-Filterzeitkonstante beträgt 0,1 ms. Die Reaktion des externen Triggers wird um die eingestellte Filterzeit verzögert.

filter2 (float rw)

Legt die digitale Filterzeitkonstante für den externen Triggereingang von Timer2 fest. Die Filterzeit wird in ms angegeben. Die Standard-Filterzeitkonstante beträgt 0,1 ms. Die Reaktion des externen Triggers wird um die eingestellte Filterzeit verzögert.

rate (float rw)

Legt die Frequenz des eingebauten Ratengenerators fest (in Hz)

trigger_select1,trigger_select2 (u32 rw)

Legt die Triggerquelle für Timer1 bzw. Timer2 fest. Triggerquellen sind:

0 Trigger deaktiviert
1 Software-Trigger: wird ausgelöst, wenn der Hal-Pin swtrigger1 wahr ist
2 Externe Hardware: Trigger
3 DPLL-Trigger: ausgelöst durch den ausgewählten DPLL-Timer
4 Raten-Trigger: ausgelöst durch den eingebauten Ratengenerator.
5 Timer1-Trigger: ausgelöst durch den Timer1-Ausgang
6 Timer2-Trigger: ausgelöst durch den Timer2-Ausgang
trigger_on_rise1, trigger_on_rise2 (bit rw)

Wenn true, triggert dies jeweils timer1 und timer2 bei der steigenden Flanke der Trigger-Quelle.

trigger_on_fall1, trigger_on_fall2 (bit rw)

Wenn true, triggern timer1 und timer2 jeweils bei der fallenden Flanke der Trigger-Quelle.

retriggerable1, retriggerable2 (bit rw)

Bei true ist der zugehörige Timer retriggerbar, d. h. der Timer wird bei einem Triggerereignis auch während der Ausgangsimpulsperiode auf die volle Zeit zurückgesetzt. Bei false ist der Zeitgeber nicht erneut triggerbar, d. h. er ignoriert Triggerereignisse während der Ausgangsimpulsperiode.

enable1, enable2 (bit rw)

Trigger-Aktivierung für timer1 bzw. timer2, True zum Aktivieren.

reset1, reset2 (bit rw)

Wenn true, setzt entsprechend timer1 oder timer2 zurück, dabei jeden laufenden Impuls abbrechend.

out1, out2 (bit ro)

Impulsausgangs-Statusbits für timer 1 und timer2.

exttrigger1, exttrigger2 (bit ro)

Externe Trigger-Eingangsstatusbits für timer 1 und timer2. Diese überwachen die gefilterten Eingänge.

swtrigger1, swtrigger2 (bit rw)

Software-Trigger-Eingänge zum Auslösen von timer1 und timer2.

periodm

Das periodm ist ein Modul zur Messung von Periode/Breite/Tastverhältnis. Es kann Periode, Frequenz, Impulsbreite und Tastverhältnis messen. Es kann auch den Mittelwert der Messwerte für die Rauschfilterung ermitteln.

Pins:

period_us (float r)

Eingabe der Periode in Mikrosekunden.

width_us (float r)

Breite des Eingansimpulses in Mikrosekunden (µs).

duty_cycle (float r)

Skalierung und Offset des Eingangstastverhältnisses (engl. input duty cycle) (Breite/Periode) sind veränderbar.

duty_cycle_scale (float rw)

Legt die Skala für den Wert des Tastverhältnisses (engl. duty cycle) fest, Standardwert ist 100.

duty_cycle_offset (float rw)

Legt einen Offset für den Tastverhältniswert (engl. duty clycle value) fest, der nach der Skalierung hinzugefügt wird. Voreinstellung ist 0.

averages (float rw)

Anzahl der zu mittelnden Perioden/Breiten. Von 1 bis 4095. Die Aktualisierungsrate von Periode, Breite, Tastverhältnis und Frequenz entspricht der Eingangsfrequenz/dem Durchschnitt.

frequency (float r)

Eingangsfrequenz in Hz.

minimum_frequency (float w)

Mindest-Eingangsfrequenz in Hz, wenn die Eingangsfrequenz unter diesem Schwellenwert liegt, wird das Gültigkeits-Bit (engl. valid bit) gelöscht.

filtertc_us (float w)

Der periodm-Eingang ist mit einem digitalen Filter zur Rauschunterdrückung aufbereitet. Die Zeitkonstante dieses Filters ist über diesen Pin in Einheiten von Mikrosekunden einstellbar. Pulse, die kürzer als diese Zeitkonstante sind, werden nicht erkannt.

valid (bit out)

Das gültige Ausgangsbit ist wahr, wenn das Eingangssignal vorhanden ist und die Eingangsfrequenz die Mindestfrequenzeinstellung überschreitet.

invert (bit in)

Das Invert-Bit legt die Polarität des Eingangs fest. Ist es falsch, ist der Eingang direkt, d. h. die Eingangs-High-Zeit bestimmt die Breite. Wenn es auf true gesetzt ist, ist der Eingang invertiert, so dass die Eingangs-Low-Zeit die Breite bestimmt.

input_status (bit out)

Das input_status-Bit gibt den Status des in Echtzeit gefilterten Eingangs wieder (beeinflusst durch den Invert-Pin).

rcpwmgen

Der rcpwmgen ist ein einfacher PWM-Generator, der für die Verwendung mit Standard-RC-Servos, welche die Pulsbreite zur Positionsbestimmung nutzen. rcpwmgen hat Namen wie "hm2_<BoardType>.<BoardNum>.rcpwmgen.<Instance>" wobei Instance eine zweistellige Zahl ist. Es wird num_rcpwmgens-viele Instanzen geben, beginnend bei 00. Jede Instanz weist einen einzelnen Ausgangspin zu. Anders als der Standard-PWM-Generator, wird der rcpwmgen-Ausgang in der Breite und nicht im Tastverhältnis angegeben, so dass die Pulsbreite unabhängig von der Betriebsfrequenz ist. Die Auflösung beträgt etwa 1/2000 für Standard 1 bis 2 ms RC-Servos.

Pins:

rate (float rw)

Stellt die Master-RC-PWM-Frequenz ein. Maximum ist 1 kHz, Minimum ist 0,01 Hz. Die Voreinstellung ist 50 Hz.

width (float rw)

Einstellung der Impulsbreite pro Kanal in (ms/Skala).

offset (float rw)

Legt den Impulsbreiten-Offset pro Kanal in ms fest. Bei 1-2 ms-Servos für eine 0-Mittelstellung würde dieser Wert auf 1,5 ms gesetzt werden.

scale (float rw)

Legt die Skalierung der Impulsbreite pro Kanal fest. Z. B. würde die Einstellung der Skala auf 90 und der Offset auf 1,5 ms zu einem Positionsbereich von +-45 Grad führen und skalieren in Grad für 1-2 ms-Servos mit einem vollen Bewegungsbereich von 90 Grad.

stepgen

StepGens haben Namen wie 'hm2_<BoardType>.<BoardNum>.stepgen.<Instance>". <Instance> ist eine zweistellige Nummer, die der HostMot2 stepgen-Instanznummer entspricht. Es gibt "num_stepgens"-viele Instanzen, beginnend mit 00.

So ist zum Beispiel der HAL-Pin, der die aktuelle Position Rückmeldung vom ersten Stepgen der zweiten 5I22-Karte hat, ist: hm2_5i22.1.stepgen.00.position-fb (dies setzt voraus, dass die Firmware in dieser Karte so konfiguriert ist, dass dieses HAL-Objekt verfügbar ist).

Jedes stepgen verwendet zwischen 2 und 8 I/O-Pins. Die Signale an diesen Pins hängen vom dem Parameter step_type ab (siehe unten).

Die stepgen-Darstellung wird durch die stepgen-Softwarekomponente modelliert. Jede stepgen-Instanz hat die folgenden Pins und Parameter:

Pins:

position-cmd (float input)

Zielposition der Schrittbewegung, in beliebige Positionseinheiten. Dieser Pin wird nur verwendet, wenn sich der stepgen in Positionssteuerungsmodus (Control-Type=0).

velocity-cmd (float input)

Zielgeschwindigkeit der Stepperbewegung, in beliebige Positionseinheiten pro Sekunde. Dieser Pin wird nur verwendet, wenn der stepgen im Geschwindigkeitsregelungsmodus ist (control-type=1).

counts (s32 output)

Rückmeldeposition in Zählungen (Anzahl der Schritte).

position-fb (float output)

Rückmeldung der Position in skalierten Positionseinheiten. Dies ist ähnlich wie "counts/position_scale", hat aber eine feinere Auflösung als Schrittauflösung.

position-latched (float output)

Rückmeldung der verriegelten Position in skalierten Positionseinheiten. Dies ist ähnlich wie "counts/position_scale", hat aber eine feinere Auflösung als Schrittauflösung.

velocity-fb (float output)

Feedback-Geschwindigkeit in beliebigen Positions-Einheiten pro Sekunde.

enable (bit input)

Dieser Pin aktiviert die Schrittgeneratorinstanz. Bei True funktioniert die stepgen-Instanz wie erwartet. Wenn False, werden keine Schritte generiert und velocity-fb geht sofort auf 0. Wenn sich der Schritt bewegt, wenn enable auf False gesetzt wird, stoppt er sofort, ohne das maxaccel limit einzuhalten.

position-reset (bit input)

Setzt die Position auf 0 zurück, wenn True. Nützlich für schritt-/kreisgesteuerte Spindeln beim Wechsel zwischen Spindel- und Gelenkmodus.

control-type (bit input)

Schaltet um zwischen Positionsstuerungsmodus (0) und Geschwindigkeitssteuerungsmodus (1). Standardmäßig Positionssteuerung (0).

index-enable (bit in/out)

Wenn dieser Pin auf True gesetzt ist, wird die Schrittzahl (und damit auch die Position) beim nächsten Schrittindeximpuls auf Null zurückgesetzt. Gleichzeitig wird die Indexaktivierung auf Null zurückgesetzt, um anzuzeigen, dass der Impuls aufgetreten ist.

index-invert (bit r/w)

Wenn auf True gesetzt, löst die steigende Flanke des Index Eingangspins das Ereignis "Position clear" aus (wenn "index-enable" True ist). Bei False löst die fallende Flanke das Ereignis aus.

probe-enable (bit in/out)

Wenn dieser Pin auf True gesetzt ist, wird die Schrittanzahl (und damit auch die Position) bei der nächsten aktiven Flanke des Stepgen aktiven Flanke der Sonde gespeichert. Gleichzeitig wird probe-enable auf Null zurückgesetzt, um um anzuzeigen, dass ein Latch-Ereignis stattgefunden hat.

probe-invert (bit r/w)

Bei True löst die steigende Flanke des Sondeneingangspins das Latch-Ereignis aus (wenn Probe-Enable True ist). Bei False löst die fallende Flanke das Ereignis aus.

Parameters:

position-scale (float r/w)

Konvertiert von Zählungen in Positionseinheiten. Position = Zählungen / Position_scale

maxvel (float r/w)

Maximale Geschwindigkeit, in Positionseinheiten pro Sekunde. Wenn auf 0 gesetzt, verwendet der Fahrer immer die maximal mögliche Geschwindigkeit, die auf den aktuellen Schrittzeiten und der Positionsskala basiert. Die maximale Geschwindigkeit ändert sich, wenn sich die Schrittzeiten oder die Positionsskala ändern. Der Standardwert ist 0.

maxaccel (float r/w)

Maximale Beschleunigung, in Positionseinheiten pro Sekunde pro Sekunde. Der Standardwert ist 1.0. Bei einer Einstellung auf 0 begrenzt der Fahrer seine Beschleunigung überhaupt nicht - dies erfordert, dass der position-cmd- oder velocity-cmd-Pin so angetrieben wird, dass die Fähigkeiten der Maschine nicht überschritten werden. Dies ist wahrscheinlich das, was Sie wollen, wenn Sie den LinuxCNC-Trajektorienplaner zum Joggen oder Ausführen von G-Code verwenden.

steplen (u32 r/w)

Dauer des Schrittsignals in Nanosekunden.

stepspace (u32 r/w)

Mindestintervall zwischen Schrittsignalen, in Nanosekunden.

dirsetup (u32 r/w)

Mindestdauer des stabilen Richtungssignals bevor ein Schritt beginnt, in Nanosekunden.

dirhold (u32 r/w)

Mindestdauer des stabilen Richtungssignals nach Ende eines Schritts, in Nanosekunden.

step_type (u32 r/w)

Ausgabeformat, wie der modparam step_type für die Software-Komponente stepgen(9): 0 = Schritt/Dir, 1 = Auf/Ab, 2 = Quadratur, 3+ = Tabellen-Lookup-Modus. In diesem Modus bestimmt der Parameter step_type, wie lang die Schrittfolge ist. Zusätzlich muss der Parameter stepgen_width im loadrt config string so eingestellt werden, dass er der Anzahl der Pins pro Stepgen entspricht. Alle Stepgen-Pins, die über dieser Anzahl liegen, sind für GPIO verfügbar. Diese Maske ist voreingestellt auf 2. Die maximale Länge beträgt 16. Beachten Sie, dass der Tabellenmodus nicht in allen Firmwares aktiviert ist, aber wenn Sie GPIO Pins zwischen den Stepgen-Instanzen in der dmesg/log-Hardware-Pinliste sehen, dann ist die Option möglicherweise verfügbar.

Im Quadraturmodus (step_type=2) gibt der Schritt ein komplettes Gray aus Zyklus (00 → 01 → 11 → 10 → 00) für jeden "Schritt", den es braucht, die Skala muss daher durch 4 relativ zum Standardschritt/-verzeichnis geteilt werden. Im Tabellenmodus werden bis zu 6 I/O-Pins einzeln in beliebiger Reihenfolge bis zu 16 Phasen lang angesteuert.

swap_step_dir (bit input)

Damit werden die Schritt- und Richtungsausgänge des ausgewählten Stepgen vertauscht. Dieser Parameter ist nur verfügbar, wenn die Firmware diese Option unterstützt.

table-data-N (u32 r/w)

Es gibt 4 table-data-N Parameter, table-data-0 bis table-data-3. Diese enthalten jeweils enthalten jeweils 4 Bytes, die 4 Stufen in der Schrittfolge entsprechen. Zum Beispiel table-data-0 = 0x00000001 würde den stepgen-Pin 0 (immer "Step" in der dmesg-Ausgabe) auf die erste Phase der Schrittfolge setzen, und table-data-4 = 0x20000000 würde den stepgen-Pin 6 ("Table5Pin" in der dmesg-Ausgabe) in der 16. Phase der Schrittfolge setzen.

hm2_XXXX.N.stepgen.timer-number (Voreinstellung: -1) (s32 r/w)

Legt die hm2dpll-Timerinstanz fest, die zum Verriegeln der Schrittgenanzahl verwendet wird. Eine Einstellung von -1 verriegelt die Schrittgenanzahl nicht. Eine Einstellung von 0 Latches zur gleichen Zeit wie der Haupt-Hostmot2-Lesevorgang. Eine Einstellung von 1..4 verwendet einen Zeitversatz vom Hauptlesevorgang hostmot2 gemäß der timer-us-Einstellung der dpll.

Normalerweise sollte timer-us eine negative Zahl sein, deren Betrag größer ist als die größte Latenz (z. B. -100 für ein System mit mittelmäßiger Latenz, -50 für ein System mit guter Latenz). Eine negative Zahl gibt an, dass die angegebene Zeit vor der nominalen hostmot2-Lesezeit verriegelt wird.

Wenn in der FPGA-Firmware kein DPLL-Modul vorhanden ist oder wenn das Stepgen-Modul DPLL nicht unterstützt, wird dieser Pin nicht angelegt.

Wenn verfügbar, sollte diese Funktion in der Regel aktiviert sein. Dadurch werden im Allgemeinen folgende Fehler reduziert.

Smart Serial Interface

Das Smart Serial Interface ermöglicht den Anschluss von bis zu 32 verschiedenen Geräten wie dem Mesa 8i20 2,2 kW 3-Phasen-Antrieb oder 7I64 48-Wege-I/O-Karten an eine einzige FPGA-Karte. Der Treiber erkennt automatisch den angeschlossenen Hardware-Port, Kanal und Gerätetyp. Geräte können in beliebiger Reihenfolge an jeden aktiven Kanal eines aktiven Ports angeschlossen werden (siehe die config modparam Definition oben).

Ausführliche Informationen zu den Smart-Serial-Geräten finden Sie unter sserial(9).

BSPI

Der BSPI-Treiber (Buffered SPI) ist insofern ungewöhnlich, als dass er keine HAL Pins erzeugt. Stattdessen exportiert der Treiber eine Reihe von Funktionen, die von einem Subtreiber für die angeschlossene Hardware verwendet werden können. Typischerweise würden diese in der "comp" geschrieben werden.

Vorverarbeitungssprache: siehe https://linuxcnc.org/docs/html/hal/comp.html oder man halcompile für weitere Details. Siehe mesa_7i65(9) und den Quelltext von mesa_7i65.comp für Details eines typischen Subtreibers. Siehe hm2_bspi_setup_chan(3), hm2_bspi_write_chan(3), hm2_tram_add_bspi_frame(3), hm2_allocate_bspi_tram(3), hm2_bspi_set_read_function(3) und hm2_bspi_set_write_function(3) für die exportierten Funktionen.

Die Namen der verfügbaren Kanäle werden beim Laden des Treibers auf die Standardausgabe ausgegeben. Treiberladevorgangs ausgegeben und haben die Form hm2_<board name>.<board index>.bspi.index, z.B. hm2_5i23.0.bspi.0.

UART

Der UART-Treiber erstellt auch keine HAL-Pins, sondern deklariert zwei einfache Lese-/Schreibfunktionen und eine Setup-Funktion, die von benutzergeschriebenem Code verwendet werden können. Typischerweise würde dieser in der Vorverarbeitungssprache "comp" geschrieben werden: Siehe https://linuxcnc.org/docs/html/hal/comp.html oder man halcompile für weitere Details. Siehe mesa_uart(9) und den Quelltext von mesa_uart.comp für Details eines typischen Subtreibers. Siehe hm2_uart_setup_chan(3), hm2_uart_send(3hm2), hm2_uart_read(3) und hm2_uart_setup(3).

Die Namen der verfügbaren uart-Kanäle werden beim Laden des Treibers auf die Standardausgabe Treiber-Ladevorgangs auf die Standardausgabe ausgegeben und haben die Form hm2_<board name>.<board index>.uart.<index>, z.B., hm2_5i23.0.uart.0.

Allzweck-E/A (engl. und Fachsprache: General Purpose I/O)

I/O-Pins auf der Platine, wenn nicht von einer Modulinstanz verwendet, werden als "volle" GPIO-Pins nach HAL exportiert. Vollständige (engl. full) GPIO-Pins können zur Laufzeit als Eingänge, Ausgänge oder offene Abflüsse konfiguriert werden und verfügen über eine HAL-Schnittstelle, die diese Flexibilität ermöglicht. I/O-Pins, die einer aktiven Modulinstanz gehören, sind durch die Anforderungen des besitzenden Moduls eingeschränkt und verfügen über eine eingeschränkte HAL-Schnittstelle.

GPIOs haben Namen wie "hm2_<BoardType>.<BoardNum>.gpio.<IONum>". IONum ist eine dreistellige Zahl. Die Zuordnung von IONum zu Stecker und Pin-auf-dem-Stecker wird in das Syslog geschrieben, wenn der Treiber geladen wird, und sie ist im Mesa-Handbuch für die Anything I/O-Boards dokumentiert.

So lautet zum Beispiel der HAL-Pin, der den aktuellen invertierten Eingangswert von GPIO 012 der zweiten 7I43-Karte gelesen hat: hm2_7i43.1.gpio.012.in-not (dies setzt voraus, daß die Firmware auf dieser Karte so konfiguriert ist, dass dieses HAL-Objekt verfügbar ist).

Der HAL-Parameter, der steuert, ob der letzte GPIO des ersten 5i22 ein Eingang oder ein Ausgang ist: hm2_5i22.0.gpio.095.is_output (dies setzt voraus dass die Firmware auf dieser Karte so konfiguriert ist, dass dieses HAL-Objekt verfügbar ist).

Die hm2 GPIO-Darstellung ist modelliert entsprechend den digitalen Eingängen und digitale Ausgängen, die im Canonical Device Interface (Teil des HAL-Referenzdokuments) beschrieben sind. Jeder GPIO kann die folgenden HAL-Pins haben:

in & in_not (bit out)

Zustand (normal und invertiert) des Hardware Eingangs-Pin. Sowohl vollständige GPIO-Pins als auch I/O-Pins, die als Eingänge von aktiven Modulinstanzen verwendet werden, haben diese Pins.

out (bit in)

Wert, der (möglicherweise invertiert) an den Hardware-Ausgangspin geschrieben wird. Nur volle GPIO-Pins haben diesen Pin.

Jeder GPIO kann die folgenden Parameter haben:

is_output (bit r/w)

Wenn er auf 0 gesetzt, ist der GPIO ein Eingang. Der I/O-Pin wird in einen hochohmigen Zustand versetzt (schwach hochgezogen), um von anderen Geräten angesteuert zu werden. Der Logikwert am I/O-Pin ist an den HAL-Pins "in" und "in_not" verfügbar. Schreibvorgänge auf den HAL-Pin "out" haben keine Auswirkungen. Wenn dieser Parameter auf 1 gesetzt, ist der GPIO ein Ausgang; sein Verhalten hängt dann vom Parameter "is_opendrain" ab. Nur vollständige GPIO-Pins haben diesen Parameter.

is_opendrain (bit r/w)

Dieser Parameter wirkt sich nur aus, wenn der Parameter "is_output" auf True festgelegt ist. Wenn dieser Parameter False ist, verhält sich der GPIO wie ein normaler Ausgangspin: Der I/O-Pin am Stecker wird auf den durch den "out" HAL-Pin angegebenen Wert angesteuert (möglicherweise invertiert), und der Wert der HAL-Pins "in" und "in_not" ist nicht definiert. Wenn dieser Parameter True ist, verhält sich der GPIO wie ein Open-Drain-Pin. Das Schreiben von 0 auf den "Out"-HAL-Pin treibt den I/O-Pin nach unten, das Schreiben von 1 auf den "Out"-HAL-Pin versetzt den I/O-Pin in einen hochohmigen Zustand. In diesem hochohmigen Zustand schwimmt der I/O-Pin (schwach hochgezogen), und andere Geräte können den Wert steuern. Der resultierende Wert auf dem I/O-Pin ist auf den Pins "in" und "in_not" verfügbar. Nur vollständige GPIO-Pins und I/O-Pins, die von aktiven Modulinstanzen als Ausgänge verwendet werden, haben diesen Parameter.

invert_output (bit r/w)

Dieser Parameter wirkt sich nur aus, wenn der Parameter "is_output" auf True festgelegt ist. Wenn dieser Parameter True ist, so ist der Ausgabewert des GPIO das Gegenteil des Werts auf dem "out" HAL-Pin. Nur vollständige GPIO-Pins und I/O-Pins, die von aktiven Modulinstanzen als Ausgänge verwendet werden, haben diesen Parameter.

Wenn ein physischer E/A-Pin von einer speziellen Funktion verwendet wird, werden die zugehörigen HAL-Parameter is_output und is_opendrain auf die spezielle Funktion verlagert. Wenn beispielsweise gpio 1 vom ersten Ausgang von pwmgen 0 übernommen wird, werden automatisch Aliase wie hm2_7i92.0.pwmgen.00.out0.invert_output (mit Bezug auf hm2_7i92.0.gpio.001.invert_output) erstellt. Wenn mehr als ein GPIO mit der gleichen Sonderfunktion verbunden ist, wird ein zusätzliches .#. eingefügt, so dass die Einstellungen für jeden zugehörigen GPIO separat festgelegt werden können. Bei der Firmware SV12IM_2X7I48_72 zum Beispiel werden der Alias hm2_5i20.0.pwmgen.00.0.enable.invert_output (bezogen auf hm2_5i20.0.gpio.000.invert_output) und hm2_5i20.0.pwmgen.00.1.enable.invert_output (mit Bezug auf hm2_5i20.0.gpio.023.invert_output) beide erstellt.

inm und inmux

inm/inmuxs sind Eingangsentprellungsmodule, die eine digitale Hardware-Filterung der Eingangspins unterstützen. Zusätzlich zur Eingangsfilterungsfunktion unterstützen die inm/inmux-Module bis zu 4 einfache Quadraturzähler für den MPG-Einsatz. Die Quadratureingänge für die MPG-Geber 0 bis 3 sind die inm/inmux-Pins 0 bis 7. Die MPG-Eingänge A, B verwenden die für die Eingänge 0..7 programmierten Filterzeitkonstanten. Jeder inm/inmux-Eingangspin kann eine langsame oder schnelle Filterkonstante haben. Die Filterzeitkonstanten werden in Einheiten von Abtastzeiten angegeben. inms haben Namen wie "hm2_<BoardType>.<BoardNum>.inm.<Instance>". inmuxes haben Namen wie "hm2_<BoardType>.<BoardNum>.inmux.<Instance>. "Instance" ist eine zweistellige Zahl, die der Instanznummer von HostMot2 inm oder inmux entspricht. Es gibt "num_inms" oder "numx_inmuxs" Instanzen, beginnend mit 00.

Jede Instanz liest zwischen 8 und 32 Eingangs-Pins. inm und inmux sind bis auf den Pin-Namen und der physikalischen Schnittstelle identisch.

Pins:

input und input-not (bit out)

Tatsächliche und invertierte gefilterte Eingangszustände.

raw-input und raw-input-not (bit out)

Tatsächliche und invertierte ungefilterte Eingangszustände.

input-slow (bit in)

Bei True wird der Filter mit langer Zeitkonstante für das entsprechende Eingangsbit ausgewählt, bei False wird die kurze Zeitkonstante verwendet.

enc0-count,enc1-count,enc2-count,enc3-count (s32 out)

MPG-Zähler 0 bis 3.

enc0-reset,enc1-reset,enc2-reset,enc3-reset (bit in)

Reset für MPG-Zähler 0 bis 3, Zähler wird auf 0 gesetzt, wenn wahr.

Parameters:

scan_rate (u32 in)

Hier wird die Eingangsabtastrate in Hz eingestellt. Die Standardabtastrate beträgt 20 kHz (50 µs Abtastperiode).

fast_scans (u32 in)

Dadurch wird die schnelle Zeitkonstante für alle Eingangspins eingestellt. Diese Zeitkonstante wird verwendet, wenn der Eingabe-Slow-Pin für die entsprechende Eingabe False ist. Der Bereich liegt zwischen 0 und 63 Scanperioden und der Standardwert ist 5 = 250 μs bei der Standardeinstellung 20 kHz scan_rate.

slow_scans (u32 in)

Dies stellt die langsame Zeitkonstante für alle Eingangspins ein. Diese Zeitkonstante wird verwendet, wenn der Input-Slow-Pin für den entsprechenden Eingang True ist. Der Bereich liegt zwischen 0 und 1023 Scanperioden und der Standardwert ist 500 = 25 ms bei der voreingestellten scan_rate von 20 kHz.

enc0_4xmode, enc1_4xmode, enc2_4xmode, and enc3_4xmode (bit in)

Diese setzen die Betriebsarten des MPG-Gebers auf 4X wenn True und 1X wenn Falsch.

scan_width (u32 out)

Dieser schreibgeschützte Parameter gibt die Anzahl der Eingänge an, die vom Modul abgefragt werden.

led

Erzeugt HAL-Pins für die LEDs auf dem FPGA-Board.

Pins:

CR<NN> (bit in)

Die Stifte sind von CR01 aufwärts nummeriert, wobei der Name entsprechend dem PCB-Siebdruck. Wird das Bit auf "True" oder 1 gesetzt, leuchtet die LED.

Solid State Relay

SSRs haben Namen wie "hm2_<BoardType>.<BoardNum>.ssr.<Instance>". Instance ist eine zweistellige Zahl, die der HostMot2 SSR-Instanznummer entspricht. Es gibt num_ssrs-Instanzen, beginnend mit 00.

Jede Instanz verfügt über einen Ratensteuerungs-Pin und zwischen 1 und 32 Ausgangspins.

Pins:

rate (u32 in)

Stellen Sie die interne Frequenz der SSR-Instanz in Hz (annähernd) ein. Der gültige Bereich ist 25 kHz bis 25 MHz. Bei Werten unterhalb des Minimums wird das Minimum und Werte über dem Maximum das Maximum verwendet. 1 MHz ist ein typischer Wert, der für alle Mesa-Karten geeignet ist, und ist der Standardwert. Setzen Sie den Wert auf 0, um diese SSR-Instanz zu deaktivieren.

out-NN (bit in)

Der Zustand des NN-ten Ausgangs dieser SSR-Instanz. Auf 0 gesetzt, damit Ausgangspins wie ein offener Schalter zu verhalten (keine Verbindung), auf 1 gesetzt, um sie sich wie ein geschlossener Schalter verhalten.

invert-NN (bit in)

Kehrt den Zustand des NN-ten Ausgangs dieser SSR-Instanz um, standardmäßig 0. Wenn invert-NN auf 1 gesetzt ist, wird der SSR-Ausgang NN geschlossen, wenn out-NN Pin ist 0 und offen, wenn der Out-NN-Pin 1 ist.

OutM Einfaches Ausgangsmodul

OutMs haben Namen wie "hm2_<BoardType>.<BoardNum>.OutM.**<Instance>". Instance ist eine zweistellige Zahl, die der HostMot2 OutM-Instanznummer entspricht. Es gibt num_outms-Instanzen, beginnend mit 00.

Jede Instanz verfügt über 1 bis 32 Ausgangspins.

Pins:

out-NN (bit in)

Legt den Zustand des NN-ten Ausgangs dieser OutM-Instanz fest. Normalerweise folgt der Ausgangspin dem Zustand dieses Pins, kann aber durch den invert-nn HAL-Pin invertiert werden.

invert-NN (bit in)

Invertiert den Zustand des NN-ten Ausgangs dieser OutM-Instanz, voreingestellt ist 0. Wenn invert-NN auf 1 gesetzt ist, dann ist der OutM-Ausgang NN high wenn der out-NN-Pin 0 ist und low, wenn der out-NN-Pin 1 ist.

xy2mod

Das xy2mod ist eine xy2-100 Galvanometer-Schnittstelle. Sie unterstützt 16- und 18-Bit-Datenmodi und beinhaltet eine parabolische Interpolation, um Positionsaktualisierungen zwischen Servo-Thread-Aufrufen zu ermöglichen.

Pins:

posx_cmd, posy_cmd (float in)

X- und Y-Positionsbefehle. Skalenendwert ist +-posn_scale Standard Skalenendwert (festgelegt durch posx_scale und posy_scale) ist +- 1

posx_fb, posy_fb (float out)

X- und Y-Positionsrückmeldung. Der Skalenendwert ist +-posN_scale, der Standardwert ist +- 1. Dies ist eine Rückmeldung des Interpolators, nicht des Galvanometers.

velx_cmd, vely_cmd (float in)

X- und Y-Geschwindigkeitsbefehle in Einheiten von fullscale_position/sec

velx_fb, vely_fb (float out)

X- und Y-Geschwindigkeitsrückkopplung in Einheiten von fullscale_position/Sekunde

accx_cmd, accy_cmd (float in)

X- und Y-Beschleunigungsbefehle in Einheiten von fullscale_position/second2

posx_scale, posy_scale (float in)

Hier wird der Skalenendwert des Positionsbefehls und der Rückmeldung eingestellt, Standard ist +- 1,0.

enable (bit in)

Bei False sind die Ausgangsdaten 0, alle Interpolatorwerte werden auf 0 gesetzt und die Überlaufflags werden gelöscht. Muss für den normalen Betrieb True sein.

controlx, controly (u32 in)

Damit werden die Galvanometer-Steuerbits gesetzt. Es gibt 3 Bits pro Kanal im 16-Bit-Modus, aber nur 1 Steuerbit im 18-Bit-Modus, so dass Werte von 0..7 im 16-Bit-Modus gültig sind, aber nur 0 und 4 sind im 18-Bit-Modus gültig.

commandx, commandy (u32 in)

Diese stellen die 16-Bit-Rohdaten ein, die im Befehlsmodus an das Galvanometer gesendet werden.

commandmodex, commandmodey (bit in)

Wenn sie gesetzt sind, aktivieren sie den Befehlsmodus, bei dem 16-Bit-Befehlsdaten an das Galvanometer gesendet werden.

18bitmodex, 18bitmodey (bit in)

Bei True aktivieren sie den 18-Bit-Datenmodus für den jeweiligen Kanal.

posx-overflow, posy-overflow (bit out)

Wenn sie wahr sind, zeigen sie eine versuchte Positionsverschiebung über den Skalenendwert hinaus an.

velx-overflow, vely-overflow (bit out)

Bei "True" zeigt dies an, dass versucht wurde, die Geschwindigkeit über den vollen Skalenwert hinaus zu aktualisieren.

status (u32 out)

Roher 16-Bit-Rückgabestatus vom Galvanometer.

Parameters:

read-timer-number (s32 in)

Wählt die DPLL-Timernummer für das Pre-Read-Sampling der Positions- und Geschwindigkeitsregister. Ist der Wert -1, ist das Pre-Read-Sampling deaktiviert.

write-timer-number (s32 in)

Wählt die DPLL-Timernummer für die Aktualisierung der Positions- und Geschwindigkeitsregister nach dem Schreiben aus. Ist der Wert -1, ist die Aktualisierung nach dem Schreiben deaktiviert.

Watchdog

Die HostMot2-Firmware kann ein Watchdog-Modul enthalten; wenn dies der Fall ist, wird der Hostmot2-Treiber es verwenden. Die HAL-Darstellung des Watchdogs heißt "hm2_<BoardType>.<BoardNum>.*watchdog".

Der Watchdog ist zunächst schlafend und inaktiv. Sobald Sie das erste Mal auf die Karte zugreifen, indem Sie die HAL-Funktion hm2 write() ausführen (siehe unten), wacht der Watchdog auf. Von da an muss er regelmäßig gestreichelt werden, sonst beißt er. Streicheln Sie den Watchdog, indem Sie die HAL-Funktion hm2 write() ausführen.

Wenn der Watchdog anspricht, werden alle E/A-Pins des Boards von ihren Modulinstanzen getrennt und zu hochohmigen Eingängen (hochgezogen), und die gesamte Kommunikation mit dem Board wird unterbrochen. Der Zustand der HostMot2-Firmwaremodule wird nicht verändert (mit Ausnahme der Konfiguration der I/O-Pins). Die Encoder-Instanzen zählen weiterhin die Quadraturimpulse, und die Pwm- und Step-Generatoren erzeugen weiterhin Signale (die nicht an die Motoren weitergeleitet werden, da die I/O-Pins zu Eingängen geworden sind).

Das Zurücksetzen des Watchdogs (durch Löschen des has_bit-Pins, siehe unten) nimmt die Kommunikation wieder auf und setzt die E/A-Pins auf die zum Zeitpunkt des Ladens gewählte Konfiguration zurück.

Wenn die Firmware einen Watchdog enthält, werden die folgenden HAL-Objekte exportiert:

Pins:

has_bit (bit in/out)

True, wenn der Watchdog ein Bit hat, False, wenn der Watchdog kein Bit hat. Wenn der Watchdog ein Bit hat und das has_bit-Bit True ist, kann der Benutzer es auf False zurücksetzen, um den Betrieb wieder aufzunehmen.

Parameters:

timeout_ns (u32 read/write)

Watchdog-Timeout, in Nanosekunden. Dieser Wert wird beim Laden des Moduls auf 5.000.000 (5 Millisekunden) initialisiert. Wenn zwischen den Aufrufen der Funktion hm2 write() mehr als diese Zeitspanne vergeht, wird der Watchdog aktiv.

Raw-Modus

Wenn das Konfigurationsschlüsselwort "enable_raw" angegeben ist, werden einige zusätzliche Debugging-Pins in der HAL verfügbar gemacht. Die Namen der HAL-Pins im Raw (engl. für roh/unverändert)-Modus beginnen mit "hm2_<BoardType>.<BoardNum>.raw".

Wenn der Raw-Modus aktiviert ist, kann ein Benutzer die Firmware von der HAL aus beobachten und stöbern und den internen Status des hostmot2-Treibers in das Syslog schreiben.

Pins:

read_address (u32 in)

Die unteren 16 Bits davon werden als die Adresse verwendet, von der gelesen werden soll.

read_data (u32 out)

Bei jedes Aufruf der Funktion hm2_read() wird dieser Pin mit dem Wert an .read_address aktualisiert.

write_address (u32 in)

Die unteren 16 Bits davon werden als die Adresse verwendet, in die geschrieben werden soll.

write_data (u32 in)

Dies ist der Wert, der in .write_address geschrieben wird.

write_strobe (bit in)

Bei jedem Aufruf der Funktion hm2_write() wird dieser Pin überprüft. Wenn er True ist, wird der Wert in .write_data an die Adresse in .write_address geschrieben und .write_strobe wird auf False zurückgesetzt.

dump_state (bit in/out)

Dieser Pin ist normalerweise False. Wenn er auf True gesetzt wird, schreibt der hostmot2-Treiber seine Darstellung des internen Zustands der Karte in das Syslog und setzt den Pin zurück auf False.

Einrichten von Smart Serial-Geräten

Siehe setsserial(9) für die aktuelle Methode zum Setzen von smart-serial eeprom-Parametern.

FUNKTIONEN

hm2_<BoardType>.<BoardNum>.read-request

Bei Karten mit langer Durchlaufzeit für Lesevorgänge (zum Zeitpunkt des Schreibens gilt dies nur für Ethernet-Karten) sendet diese Funktion eine Leseanforderung. Wenn mehrere Karten verwendet werden, kann dies die Ausführungszeit des Servo-Threads verringern. In diesem Fall wäre die geeignete Thread-Reihenfolge

addf hm2_7i80.0.read-request
addf hm2_7i80.1.read-request
addf hm2_7i80.0.read
addf hm2_7i80.1.read

was dazu führt, dass die Leseanforderung an Karte 1 gesendet wird, bevor die Antwort auf die Leseanforderung von Karte 0 eintrifft.

hm2_<BoardType>.<BoardNum>.read

Dies liest die Encoder-Zähler, Stepgen-Rückmeldungen und GPIO-Eingangs-Pins aus dem FPGA.

hm2_<BoardType>.<BoardNum>.write

Dadurch werden die PWM-Tastverhältnisse, Stepgen-Raten und GPIO-Ausgänge auf dem FPGA aktualisiert. Alle Änderungen an den Konfigurationspins, wie z.B. Stepgen-Timing, GPIO-Invertierungen, usw., werden ebenfalls durch diese Funktion bewirkt.

hm2_<BoardType>.<BoardNum>.read_gpio

Lesen der GPIO-Eingangsstifte. Beachten Sie, dass die Wirkung dieser Funktion eine Untermenge der Wirkung der oben beschriebenen Funktion .read() ist. Normalerweise wird nur .read() verwendet. Der einzige Grund, diese Funktion aufzurufen, ist, wenn Sie GPIO-Befehle in einem Thread ausführen wollen, der schneller ist als der Servo-Thread. (Diese Funktion ist auf der 7I43 aufgrund der Beschränkungen des EPP-Busses nicht verfügbar.)

hm2_<BoardType>.<BoardNum>.write_gpio

Schreiben der GPIO-Steuerregister und Ausgangspins. Beachten Sie, dass die Wirkung dieser Funktion eine Untermenge der Wirkung der oben beschriebenen Funktion .write() ist. Normalerweise wird nur .write() verwendet. Der einzige Grund, diese Funktion aufzurufen, ist, wenn Sie GPIO-Befehle in einem Thread ausführen wollen, der schneller als der Servo-Thread ist. (Diese Funktion ist auf der 7I43 aufgrund der Beschränkungen des EPP-Busses nicht verfügbar.)

hm2_<BoardType>.<BoardNum>.trigger-encoders

Diese Funktion erscheint nur, wenn die Firmware ein BiSS-, Fanuc- oder SSI-Drehgebermodul enthält und wenn die Firmware kein hm2dpll-Modul (qv) enthält oder wenn die modparam num_dplls=0 enthält. Diese Funktion sollte zuerst in den Thread eingefügt werden, damit die Drehgeberdaten bereit sind, wenn die Hauptfunktion hm2_XXXX.NN.read läuft. Eine Fehlermeldung wird ausgegeben, wenn das Lesen des Encoders nicht rechtzeitig abgeschlossen ist. Möglicherweise kann dies durch eine Erhöhung der Datenrate vermieden werden. Wenn das Problem weiterhin besteht und "veraltete" Daten akzeptabel sind, kann die Funktion später im Thread platziert werden, so dass ein voller Servozyklus für die Übertragung der Daten von den Geräten zur Verfügung steht. Falls verfügbar, ist es besser, die synchrone hm2dpll-Triggerfunktion zu verwenden.

SIEHE AUCH

hm2_pci(9), hm2_eth(9), hm2_spi(9), hm2_rpspi(9), hm2_7i43(9), hm2_7i90(9)

Mesas Dokumentation für die Anything I/O-Karten, unter https://www.mesanet.com.

LIZENZ

GPL