1. Einführung
HostMot2 ist eine FPGA-Konfiguration, die von Mesa Electronics für ihre Anything I/O-Bewegungssteuerungskarten entwickelt wurde. Die Firmware ist quelloffen, portabel und flexibel. Sie kann (zur Kompilierzeit) mit null oder mehr Instanzen (ein zur Laufzeit erstelltes Objekt) von jedem der verschiedenen Module konfiguriert werden: Encoder (Quadraturzähler), PWM-Generatoren und Schritt-/Differenzgeneratoren. Die Firmware kann (zur Laufzeit) so konfiguriert werden, dass jede dieser Instanzen mit Pins an den E/A-Headern verbunden wird. Die nicht von einer Modulinstanz angesteuerten E/A-Pins werden zu allgemeinen bidirektionalen digitalen E/A Pins.
2. Firmware-Binärdateien
Mehrere vorkompilierte HostMot2-Firmware-Binärdateien sind für die verschiedenen Anything-I/O-Karten verfügbar. Diese Liste ist unvollständig, schauen Sie in der hostmot2-firmware-Distribution nach aktuellen Firmware-Listen.
-
3x20 (144 E/A-Pins): mit hm2_pci-Modul
-
24-Kanal-Servo
-
16-Kanal-Servo und 24 Schritt/Richtung (engl. step/dir)-Generatoren
-
-
5I22 (96 E/A-Stifte): mit hm2_pci-Modul
-
16-Kanal-Servo
-
8-Kanal-Servo plus 24 Step/Dir-Generatoren
-
-
5I20, 5I23, 4I65, 4I68 (72 E/A-Pins): mit hm2_pci-Modul
-
12-Kanal-Servo
-
8-Kanal-Servo plus 4 Step/Dir-Generatoren
-
4-Kanal-Servo plus 8 Step/Dir-Generatoren
-
-
7I43 (48 E/A-Pins): Verwendung des Moduls hm2_7i43
-
8-Kanal-Servo (8 PWM-Generatoren und 8 Encoder)
-
4-Kanal-Servo plus 4 Step/Dir-Generatoren
-
Die 5I25 Superport FPGA-Karte ist beim Kauf bereits vorprogrammiert und benötigt keine binäre Firmware.
3. Installieren der Firmware
Je nachdem, wie Sie LinuxCNC installiert haben, müssen Sie möglicherweise den Synaptic Package Manager aus dem Systemmenü öffnen und das Paket für Ihre Mesa-Karte installieren. Der schnellste Weg, um sie zu finden, ist eine Suche nach "hostmot2" in der Synaptic Package Manager zu tun. Markieren Sie die Firmware für die Installation, und wenden Sie sie an.
4. Laden von HostMot2
Die LinuxCNC-Unterstützung für die HostMot2-Firmware ist in einen generischen Treiber namens hostmot2 und zwei Low-Level-I/O-Treiber für die Anything-I/O-Karten aufgeteilt. Die Low-Level-I/O-Treiber sind hm2_7i43 und hm2_pci (für alle PCI- und PC-104/Plus-basierten Anything-I/O-Karten). Der hostmot2-Treiber muss zuerst mit einem HAL-Befehl wie diesem geladen werden:
loadrt hostmot2
Siehe die Manpage zu hostmot2(9) für Details.
Der Hostmot2-Treiber für sich allein tut nichts, er braucht Zugang zu den tatsächlichen Boards, auf denen die HostMot2-Firmware läuft. Die Low-Level-I/O-Treiber stellen diesen Zugang zur Verfügung. Die Low-Level-I/O-Treiber werden mit Befehlen wie diesem geladen:
loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=3 num_stepgens=1"
Die Konfigurationsparameter sind in der Manpage zu hostmot2 beschrieben.
5. Watchdog
Die HostMot2-Firmware kann ein Watchdog-Modul enthalten; wenn dies der Fall ist, wird es vom Hostmot2-Treiber verwendet.
Der Watchdog muss von Zeit zu Zeit von LinuxCNC gestreichelt werden, sonst beißt er. Die hm2 Schreibfunktion (siehe unten) streichelt den Watchdog.
Wenn der Watchdog anspricht, werden alle E/A-Pins des Boards von ihren Modulinstanzen getrennt und werden zu hochohmigen Eingängen (hochgezogen). Der Zustand der HostMot2-Firmware-Module wird nicht gestört (mit Ausnahme der Konfiguration der I/O-Pins). Die Encoder-Instanzen zählen weiterhin die Quadraturimpulse, und die Pwm- und Schrittgeneratoren erzeugen weiterhin Signale (die nicht an die Motoren weitergeleitet werden, da die I/O-Pins zu Eingängen geworden sind).
Durch das Zurücksetzen des Watchdogs werden die E/A-Pins auf die zum Zeitpunkt des Ladens gewählte Konfiguration zurückgesetzt.
Wenn die Firmware einen Watchdog enthält, werden die folgenden HAL-Objekte exportiert:
5.1. Pins
-
has_bit' - (bit i/o) 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.
5.2. Parameter
-
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 hm2-Schreibfunktion mehr als diese Zeitspanne vergeht, wird der Watchdog aktiv.
6. HostMot2-Funktionen
-
hm2_<BoardType>.<BoardNum>.read - Lesen aller Eingänge, Aktualisieren der Eingangs-HAL-Pins.
-
hm2_<BoardType>.<BoardNum>.write - Alle Ausgänge schreiben.
-
hm2_<BoardType>.<BoardNum>.read_gpio - Liest nur die GPIO-Eingangsstifte. (Diese Funktion ist auf der 7I43 aufgrund der Einschränkungen des EPP-Busses nicht verfügbar.)
-
hm2_<BoardType>.<BoardNum>.write_gpio - Schreibt nur die GPIO-Steuerregister und Ausgangspins. (Diese Funktion ist auf der 7I43 aufgrund der Einschränkungen des EPP-Busses nicht verfügbar.)
Anmerkung
|
Die obigen Funktionen read_gpio und write_gpio sollten normalerweise nicht benötigt werden, da die GPIO-Bits zusammen mit allem anderen in den obigen Standardfunktionen read und write gelesen und geschrieben werden, die normalerweise im Servo-Thread ausgeführt werden. Die Funktionen read_gpio und write_gpio wurden für den Fall bereitgestellt, dass eine sehr schnelle (häufig aktualisierte) E/A benötigt wird. Diese Funktionen sollten im Basis-Thread ausgeführt werden. Wenn Sie dies benötigen, senden Sie uns bitte eine E-Mail und teilen Sie uns mit, um welche Anwendung es sich handelt. |
7. Pinbelegungen
Der hostmot2-Treiber hat keine bestimmte Pinbelegung. Die Pinbelegung ergibt sich aus der Firmware, die der hostmot2-Treiber an die Anything I/O-Karte sendet. Jede Firmware hat eine andere Pinbelegung, und die Pinbelegung hängt davon ab, wie viele der verfügbaren Encoder, pwmgens und stepgens verwendet werden. Um eine Pinout-Liste für Ihre Konfiguration nach dem Laden von LinuxCNC im Terminalfenster zu erhalten, geben Sie ein:
dmesg > hm2.txt
Die resultierende Textdatei enthält viele Informationen sowie die Pinbelegung für den HostMot2 und alle Fehler- und Warnmeldungen.
Um das Durcheinander zu reduzieren, indem der Nachrichtenpuffer vor dem Laden von LinuxCNC gelöscht wird, geben Sie Folgendes in das Terminalfenster ein:
sudo dmesg -c
Nun, wenn Sie LinuxCNC ausführen, erhalten SIe über dmesg > hm2.txt im Terminal nur die Informationen seit der Zeit, die LinuxCNC läuft zusammen mit Ihrem Pinout. Die Datei wird im aktuellen Verzeichnis des Terminalfensters liegen. Jede Zeile enthält den Kartennamen, die Kartennummer, die E/A-Pin-Nummer, den Stecker und den Pin sowie die Verwendung. Anhand dieses Ausdrucks können Sie die physischen Verbindungen zu Ihrer Karte entsprechend Ihrer Konfiguration erkennen.
Ein Beispiel für eine 5I20-Konfiguration:
[HOSTMOT2] DRIVER=hm2_pci BOARD=5i20 CONFIG="firmware=hm2/5i20/SVST8_4.BIT num_encoders=1 num_pwmgens=1 num_stepgens=3"
Die obige Konfiguration ergab diesen Ausdruck.
[ 1141.053386] hm2/hm2_5i20.0: 72 I/O Pins used:
[ 1141.053394] hm2/hm2_5i20.0: IO Pin 000 (P2-01): IOPort
[ 1141.053397] hm2/hm2_5i20.0: IO Pin 001 (P2-03): IOPort
[ 1141.053401] hm2/hm2_5i20.0: IO Pin 002 (P2-05): Encoder #0, pin B (Input)
[ 1141.053405] hm2/hm2_5i20.0: IO Pin 003 (P2-07): Encoder #0, pin A (Input)
[ 1141.053408] hm2/hm2_5i20.0: IO Pin 004 (P2-09): IOPort
[ 1141.053411] hm2/hm2_5i20.0: IO Pin 005 (P2-11): Encoder #0, pin Index (Input)
[ 1141.053415] hm2/hm2_5i20.0: IO Pin 006 (P2-13): IOPort
[ 1141.053418] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 (PWM or Up) (Output)
[ 1141.053422] hm2/hm2_5i20.0: IO Pin 008 (P2-17): IOPort
[ 1141.053425] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 (Dir or Down) (Output)
[ 1141.053429] hm2/hm2_5i20.0: IO Pin 010 (P2-21): IOPort
[ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin Not-Enable (Output)
<snip>...
[ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output)
[ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output)
[ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output)
[ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output)
[ 1141.053605] hm2/hm2_5i20.0: IO Pin 064 (P4-33): StepGen #2, pin (unused) (Output)
[ 1141.053609] hm2/hm2_5i20.0: IO Pin 065 (P4-35): StepGen #2, pin (unused) (Output)
[ 1141.053613] hm2/hm2_5i20.0: IO Pin 066 (P4-37): IOPort
[ 1141.053616] hm2/hm2_5i20.0: IO Pin 067 (P4-39): IOPort
[ 1141.053619] hm2/hm2_5i20.0: IO Pin 068 (P4-41): IOPort
[ 1141.053621] hm2/hm2_5i20.0: IO Pin 069 (P4-43): IOPort
[ 1141.053624] hm2/hm2_5i20.0: IO Pin 070 (P4-45): IOPort
[ 1141.053627] hm2/hm2_5i20.0: IO Pin 071 (P4-47): IOPort
[ 1141.053811] hm2/hm2_5i20.0: registered
[ 1141.053815] hm2_5i20.0: initialized AnyIO board at 0000:02:02.0
Anmerkung
|
Der I/O Pin nnn entspricht der Pin-Nummer, die auf dem HAL Configuration Bildschirm für GPIOs angezeigt wird. Einige der StepGen, Encoder und PWMGen werden auch als GPIOs im HAL-Konfigurationsbildschirm angezeigt. |
8. PIN-Dateien
Die Standard-Pinbelegung ist in einer .PIN-Datei (menschenlesbarer Text) beschrieben. Wenn Sie ein Firmware-Paket installieren, werden die .PIN-Dateien in
/usr/share/doc/hostmot2-firmware-<board>/
9. Firmware
Die ausgewählte Firmware (.BIT-Datei) und Konfiguration wird beim Start von LinuxCNC von der PC-Hauptplatine auf die Mesa-Hauptplatine hochgeladen. Wenn Sie Run In Place verwenden, müssen Sie noch ein hostmot2-firmware-<board> Paket installieren. Weitere Informationen über Firmware und Konfiguration finden Sie im Abschnitt Konfigurationen.
10. HAL-Pins
Die HAL-Pins für jede Konfiguration können durch Öffnen von Show HAL Configuration aus dem Menü Maschine angezeigt werden. Alle HAL-Pins und Parameter sind dort zu finden. Die folgende Abbildung zeigt die oben verwendete 5I20-Konfiguration.
11. Konfigurationen
Die Hostmot2-Firmware gibt es in verschiedenen Versionen, je nachdem, was Sie erreichen wollen. Sie können sich anhand des Namens einen Überblick verschaffen, wofür eine bestimmte Firmware geeignet ist. Schauen wir uns ein paar Beispiele an.
In der 7I43 (zwei Ports) wäre SV8 (Servo 8) für 8 Servos oder weniger, unter Verwendung des klassischen 7I33 4-Achsen-Servoboards (pro Port). 8 Servos würden also alle 48 Signale an den beiden Ports belegen. Wenn Sie aber nur 3 Servos benötigen, könnten Sie num_encoders=3 und num_pwmgens=3 sagen und 5 Servos mit je 6 Signalen wiederherstellen, wodurch Sie 30 Bits GPIO gewinnen.
Oder beim 5I22 (vier Anschlüsse) wäre SVST8_24 (Servo 8, Stepper 24) für 8 Servos oder weniger (wieder 7I33 x2) und 24 Stepper oder weniger (7I47 x2). Damit wären alle vier Ports belegt. Wenn man nur 4 Servos braucht, könnte man num_encoders=4 und num_pwmgens=4 sagen und 1 Port zurückgewinnen (und einen 7I33 sparen). Und wenn man nur 12 Stepper bräuchte, könnte man sagen num_stepgens=12 und einen Port freigeben (und einen 7I47 sparen). Auf diese Weise können wir also zwei Ports (48 Bits) für GPIO einsparen.
Hier sind Tabellen mit den in den offiziellen Paketen verfügbaren Firmwares. Es kann zusätzliche Firmwares auf der Mesanet.com Website, die noch nicht in die LinuxCNC offiziellen Firmware-Pakete geschafft haben, daher schauen Sie auch dort nach.
3x20 (verschiedene 6 Anschlüsse) Standardkonfigurationen (3x20 ist in den Versionen mit 1M, 1,5M und 2M Gatter erhältlich. Bislang ist die gesamte Firmware in allen Gate-Größen verfügbar.)
Firmware | Encoder | PWMGen | StepGen | GPIO |
---|---|---|---|---|
SV24 |
24 |
24 |
0 |
0 |
SVST16_24 |
16 |
16 |
24 |
0 |
5I22 (4-Port PCI) Standardkonfigurationen (Die 5I22 ist in Versionen mit 1M und 1,5M Gatter erhältlich. Bislang ist die gesamte Firmware für alle Gate-Größen verfügbar.)
Firmware | Encoder | PWM | StepGen | GPIO |
---|---|---|---|---|
SV16 |
16 |
16 |
0 |
0 |
SVST2_4_7I47 |
4 |
2 |
4 |
72 |
SVST8_8 |
8 |
8 |
8 |
0 |
SVST8_24 |
8 |
8 |
24 |
0 |
5I23 (3-Port PCI) Standardkonfigurationen (Die 5I23 hat 400k Gatter.)
Firmware | Encoder | PWM | StepGen | GPIO |
---|---|---|---|---|
SV12 |
12 |
12 |
0 |
0 |
SVST2_8 |
2 |
2 |
8 (tbl5) |
12 |
SVST2_4_7I47 |
4 |
2 |
4 |
48 |
SV12_2X7I48_72 |
12 |
12 |
0 |
24 |
SV12IM_2X7I48_72 |
12 (+IM) |
12 |
0 |
12 |
SVST4_8 |
4 |
4 |
8 (tbl5) |
0 |
SVST8_4 |
8 |
8 |
4 (tbl5) |
0 |
SVST8_4IM2 |
8 (+IM) |
8 |
4 |
8 |
SVST8_8IM2 |
8 (+IM) |
8 |
8 |
0 |
SVTP6_7I39 |
6 |
0 (6 BLDC) |
0 |
0 |
5I20 (3-Port PCI) Standardkonfigurationen (Die 5I20 hat 200k Gatter.)
Firmware | Encoder | PWM | StepGen | GPIO |
---|---|---|---|---|
SV12 |
12 |
12 |
0 |
0 |
SVST2_8 |
2 |
2 |
8 (tbl5) |
12 |
SVST2_4_7I47 |
4 |
2 |
4 |
48 |
SV12_2X7I48_72 |
12 |
12 |
0 |
24 |
SV12IM_2X7I48_72 |
12 (+IM) |
12 |
0 |
12 |
SVST8_4 |
8 |
8 |
4 (tbl5) |
0 |
SVST8_4IM2 |
8 (+IM) |
8 |
4 |
8 |
4I68 (3-Port PC/104) Standardkonfigurationen (Die 4I68 hat 400k Gatter.)
Firmware | Encoder | PWM | StepGen | GPIO |
---|---|---|---|---|
SV12 |
12 |
12 |
0 |
0 |
SVST2_4_7I47 |
4 |
2 |
4 |
48 |
SVST4_8 |
4 |
4 |
8 |
0 |
SVST8_4 |
8 |
8 |
4 |
0 |
SVST8_4IM2 |
8 (+IM) |
8 |
4 |
8 |
SVST8_8IM2 |
8 (+IM) |
8 |
8 |
0 |
4i65 (3-Port PC/104) Standardkonfigurationen (Die 4i65 hat 200k Gates.)
Firmware | Encoder | PWM | StepGen | GPIO |
---|---|---|---|---|
SV12 |
12 |
12 |
0 |
0 |
SVST8_4 |
8 |
8 |
4 |
0 |
SVST8_4IM2 |
8 (+IM) |
8 |
4 |
8 |
7I43 (2 Anschlüsse parallel) 400k-Gate-Versionen, Standardkonfigurationen
Firmware | Encoder | PWM | StepGen | GPIO |
---|---|---|---|---|
SV8 |
8 |
8 |
0 |
0 |
SVST4_4 |
4 |
4 |
4 (tbl5) |
0 |
SVST4_6 |
4 |
4 |
6 (tbl3) |
0 |
SVST4_12 |
4 |
4 |
12 |
0 |
SVST2_4_7I47 |
4 |
2 |
4 |
24 |
7I43 (2 Anschlüsse parallel) 200k-Gate-Versionen, Standardkonfigurationen
Firmware | Encoder | PWM | StepGen | GPIO |
---|---|---|---|---|
SV8 |
8 |
8 |
0 |
0 |
SVST4_4 |
4 |
4 |
4 (tbl5) |
0 |
SVST4_6 |
4 |
4 |
6 (tbl3) |
0 |
SVST2_4_7I47 |
4 |
2 |
4 |
24 |
Auch wenn mehrere Karten die gleiche .BIT-Datei haben, können Sie keine .BIT-Datei verwenden, die nicht für diese Karte bestimmt ist. Verschiedene Karten haben unterschiedliche Taktfrequenzen, also stellen Sie sicher, dass Sie die richtige .BIT-Datei für Ihre Karte laden. Benutzerdefinierte hm2-Firmwares können für spezielle Anwendungen erstellt werden und Sie können einige benutzerdefinierte hm2-Firmwares in den Verzeichnissen mit den Standard-Firmwares sehen.
Wenn Sie den Board-Treiber (hm2_pci oder hm2_7i43) laden, können Sie ihn anweisen, die Instanzen der drei primären Module (pwmgen, stepgen und encoder) zu deaktivieren, indem Sie die Anzahl niedriger setzen. Alle E/A-Pins, die zu deaktivierten Modulinstanzen gehören, werden zu GPIOs.
12. GPIO
Allgemeine E/A-Pins auf der Karte, wenn nicht von einer Modulinstanz verwendet, werden als volle GPIO-Pins an HAL exportiert. Full-GPIO-Pins können zur Laufzeit als Eingänge, Ausgänge oder Open Drains konfiguriert werden und verfügen über eine HAL-Schnittstelle, die diese Flexibilität offenlegt. E/A-Pins einer aktiven Modulinstanz sind durch die Anforderungen dieses sie besitzenden Moduls eingeschränkt und haben 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.
Die hm2-GPIO-Darstellung ist den digitalen Eingängen und digitalen Ausgängen nachempfunden, die in der kanonischen Geräteschnittstelle (Teil des Dokuments HAL General Reference) beschrieben sind.
GPIO-Pins sind standardmäßig auf Eingang eingestellt.
12.1. Pins
-
in - (Bit, Out) Normaler Zustand des Hardware-Eingangs-Pins. Sowohl volle GPIO-Pins als auch I/O-Pins, die von aktiven Modulinstanzen als Eingänge verwendet werden, haben diesen Pin.
-
in_not - (Bit, Out) Invertierter Zustand des Hardware-Eingangs-Pins. Sowohl volle GPIO-Pins als auch I/O-Pins, die von aktiven Modulinstanzen als Eingänge verwendet werden, haben diesen Pin.
-
out - (Bit, In) Wert, der (möglicherweise invertiert) an den Hardware-Ausgangspin geschrieben werden soll. Nur volle GPIO-Pins haben diesen Pin.
12.2. Parameter
-
invert_output - (Bit, RW) Dieser Parameter hat nur eine Auswirkung, wenn der Parameter is_output wahr ist. Wenn dieser Parameter wahr ist, wird der Ausgangswert des GPIOs der Inverse des Wertes am out HAL-Pin sein. Nur vollständige GPIO-Pins und I/O-Pins, die von aktiven Modulinstanzen als Ausgänge verwendet werden, haben diesen Parameter. Um einen aktiven Modul-Pin zu invertieren, müssen Sie den GPIO-Pin invertieren, nicht den Modul-Pin.
-
is_opendrain - (Bit, RW) Dieser Parameter hat nur eine Auswirkung, wenn der Parameter is_output wahr ist. Wenn dieser Parameter false ist, verhält sich der GPIO wie ein normaler Ausgangspin: der I/O-Pin am Stecker wird auf den Wert getrieben, der durch den out HAL-Pin angegeben ist (möglicherweise invertiert), und der Wert der in und in_not HAL-Pins ist undefiniert. Wenn dieser Parameter true ist, verhält sich der GPIO wie ein Open-Drain-Pin. Das Schreiben von 0 an den out HAL-Pin treibt den I/O-Pin auf low, das Schreiben von 1 an den out HAL-Pin versetzt den I/O-Pin in einen hochohmigen Zustand. In diesem hochohmigen Zustand schwebt der I/O-Pin (schwach hochgezogen), und andere Geräte können den Wert treiben; der resultierende Wert am I/O-Pin ist an den in und in_not Pins verfügbar. Nur vollständige GPIO-Pins und I/O-Pins, die von aktiven Modulinstanzen als Ausgänge verwendet werden, haben diesen Parameter.
-
is_output - (Bit, RW) Wenn auf 0 gesetzt, ist der GPIO ein Eingang. Der I/O-Pin wird in einen hochohmigen Zustand versetzt (schwach hochgezogen - engl. weakly pulled high), um von anderen Geräten angesteuert zu werden. Der logische Wert am I/O-Pin ist in den HAL-Pins in und in_not verfügbar. Schreibvorgänge auf den out HAL-Pin haben keine Auswirkungen. Wenn dieser Parameter auf 1 gesetzt ist, dann ist der GPIO ein Ausgang; sein Verhalten hängt dann von dem Parameter is_opendrain ab. Nur volle GPIO-Pins haben diesen Parameter.
13. 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 Instanzen, beginnend mit 00.
Jedes Stepgen belegt 2-6 E/A-Pins (die bei der Kompilierung der Firmware ausgewählt werden), verwendet aber derzeit nur zwei: Schritt- und Richtungsausgänge. Fußnote:[Derzeit unterstützt die Firmware mehrphasige Stepperausgänge, aber der Treiber nicht'. Interessierte Freiwillige werden gebeten, sich zu melden.]
Die StepGen-Darstellung ist der Softwarekomponente Stepgen nachempfunden. Die Standardeinstellung von StepGen ist ein aktiver High-Schrittausgang (High während der Schrittzeit (engl. step time), Low während des Schrittraums (engl. step space)). Um einen StepGen-Ausgangspin zu invertieren, wählen Sie den entsprechenden GPIO-Pin, der von StepGen verwendet wird. Um den GPIO-Pin zu finden, der für den StepGen-Ausgang verwendet wird, führen Sie dmesg wie oben gezeigt aus.
Jede StepGen-Instanz hat die folgenden Pins und Parameter:
13.1. Pins
-
control-type - (Bit, In) Schaltet zwischen Lageregelungsmodus (engl. position control mode) (0) und Geschwindigkeitsregelungsmodus (engl. velocity control mode) (1) um. Standardmäßig ist die Lageregelung (0) eingestellt.
-
counts - (s32, Out) Rückmeldung der Position in counts (Anzahl der Schritte).
-
enable - (Bit, In) Aktiviert Schritte am Ausgang. Wenn false, werden keine Schritte erzeugt.
-
position-cmd - (Float, In) Zielposition der Stepperbewegung, in benutzerdefinierten Positionseinheiten.
-
position-fb - (Float, Out) Positionsrückmeldung in benutzerdefinierten Positionseinheiten (counts / position_scale).
-
velocity-cmd - (Float, In) Zielgeschwindigkeit der Schrittmotorbewegung, in benutzerdefinierten Positionseinheiten pro Sekunde. Dieser Pin wird nur verwendet, wenn sich der Stepgen im Geschwindigkeitsregelungsmodus befindet (control-type=1).
-
velocity-fb - (Float, Out) Rückmeldung der Geschwindigkeit in benutzerdefinierten Positionseinheiten pro Sekunde.
13.2. Parameter
-
dirhold - (u32, RW) Mindestdauer eines stabilen Richtungssignals nach dem Ende eines Schritts, in Nanosekunden.
-
dirsetup - (u32, RW) Mindestdauer des stabilen Richtungssignals vor Beginn eines Schritts, in Nanosekunden.
-
maxaccel - (Float, RW) Maximale Beschleunigung, in Positionseinheiten pro Sekunde pro Sekunde. Bei einem Wert von 0 begrenzt der Treiber seine Beschleunigung nicht.
-
maxvel - (Float, RW) Maximale Geschwindigkeit, in Positionseinheiten pro Sekunde. Wird dieser Wert auf 0 gesetzt, wählt der Treiber die Höchstgeschwindigkeit auf der Grundlage der Werte von steplen und stepspace (zu dem Zeitpunkt, zu dem maxvel auf 0 gesetzt wurde).
-
position-scale - (Float, RW) Konvertiert von Zählungen in Positionseinheiten. position = counts / position_scale
-
step_type - (u32, RW) Ausgabeformat, wie das step_type modparam für die Software stegen(9) Komponente. 0 = Schritt/Dir, 1 = Auf/Ab, 2 = Quadratur. Im Quadraturmodus (step_type=2) gibt der stepgen einen kompletten Gray-Zyklus (00 -> 01 -> 11 -> 10 -> 00) für jeden Schritt aus, den er macht.
-
steplen - (u32, RW) Dauer des Schrittsignals, in Nanosekunden.
-
stepspace - (u32, RW) Minimaler Abstand zwischen Schrittsignalen, in Nanosekunden.
13.3. Ausgangsparameter
Die Step- und Direction-Pins der einzelnen StepGen haben zwei zusätzliche Parameter. Um herauszufinden, welcher I/O-Pin zu welchem Step- und Direction-Ausgang gehört, führen Sie dmesg wie oben beschrieben aus.
-
invert_output - (Bit, RW) Dieser Parameter hat nur eine Auswirkung, wenn der Parameter is_output wahr ist. Wenn dieser Parameter wahr ist, dann ist der Ausgangswert des GPIO der umgekehrte Wert des Wertes am out HAL-Pin.
-
is_opendrain - (Bit, RW) Wenn dieser Parameter falsch ist, verhält sich der GPIO wie ein normaler Ausgangspin: der I/O-Pin am Anschluss wird auf den durch den out HAL-Pin spezifizierten Wert gesteuert (möglicherweise invertiert). Wenn dieser Parameter true ist, verhält sich der GPIO wie ein Open-Drain-Pin. Das Schreiben von 0 an den out HAL-Pin treibt den I/O-Pin auf low, das Schreiben von 1 an den out HAL-Pin versetzt den I/O-Pin in einen hochohmigen Zustand. In diesem hochohmigen Zustand schwebt der I/O-Pin (schwach hochgezogen), und andere Geräte können den Wert treiben; der resultierende Wert am I/O-Pin ist an den in und in_not Pins verfügbar. Nur vollständige GPIO-Pins und I/O-Pins, die von aktiven Modulinstanzen als Ausgänge verwendet werden, haben diesen Parameter.
14. 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 Instanzen, beginnend mit 00.
In HM2 verwendet jedes pwmgen drei Ausgangs-E/A-Pins: Not-Enable, Out0, und Out1. Um einen PWMGen-Ausgangspin zu invertieren, wählen Sie den entsprechenden GPIO-Pin, der von PWMGen verwendet wird. Um den GPIO-Pin zu finden, der für den PWMGen-Ausgang verwendet wird, führen Sie dmesg wie oben gezeigt aus.
Die Funktion der E/A-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:
14.1. Pins
-
enable - (Bit, In) 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, In) Der aktuelle Wert des pwmgen-Befehls, in beliebigen Einheiten.
14.2. Parameter
-
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).
-
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.
-
pdm_frequency' - (u32, RW) Gibt die PDM-Frequenz in Hz für alle pwmgen-Instanzen an, die im PDM-Modus (Modus 3) laufen. Dies ist die Puls-Slot-Frequenz; die Frequenz, bei der der PDM-Generator in der Anything-I/O-Platine 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 beispielsweise die pdm_Frequenz auf 2*106 Hz (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 100 MHz. Beachten Sie, dass die maximale Frequenz durch die ClockHigh-Frequenz der Anything I/O-Karte bestimmt wird; die 5I20 und 7I43 haben beide einen 100 MHz-Takt, was zu einer maximalen PDM-Frequenz von 100 MHz führt. Andere Karten können andere Takte 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.
-
pwm_frequency - (u32, RW) Dies gibt die PWM-Frequenz in Hz aller pwmgen-Instanzen an, die in den PWM-Modi (Modus 1 und 2) laufen. Dies ist die Frequenz der Variable-Duty-Cycle-Welle. Sein effektiver Bereich reicht von 1 Hz bis 193 kHz. Beachten Sie, dass die maximale Frequenz durch die ClockHigh-Frequenz der Anything I/O-Karte bestimmt wird; 5I20 und 7I43 haben beide einen Takt von 100 MHz, was zu einer maximalen PWM-Frequenz von 193 kHz führt. Andere Boards können andere Takte 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 nah dran.
14.3. Ausgangsparameter
Die Ausgangspins der einzelnen PWMGen haben zwei zusätzliche Parameter. Um herauszufinden, welcher E/A-Pin zu welchem Ausgang gehört, führen Sie dmesg
wie oben beschrieben aus.
-
invert_output
- (Bit, RW) Dieser Parameter hat nur eine Auswirkung, wenn der Parameteris_output
wahr ist. Wenn dieser Parameter wahr ist, dann ist der Ausgangswert des GPIO der umgekehrte Wert des Wertes amout
HAL-Pin. -
is_opendrain
- (Bit, RW) 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 HAL-Pinout
spezifizierten Wert gesteuert (möglicherweise invertiert). Wenn dieser Parameter true ist, verhält sich der GPIO wie ein Open-Drain-Pin. Das Schreiben von 0 an den HAL-Pinout
setzt den E/A-Pin auf einen niedrigen Wert, das Schreiben von 1 an den HAL-Pinout
versetzt den E/A-Pin in einen Zustand hoher Impedanz. In diesem hochohmigen Zustand schwebt der E/A-Pin (schwach hochgezogen), und andere Geräte können den Wert steuern; der resultierende Wert am E/A-Pin ist an den Pinsin
undin_not
verfügbar. Nur vollständige GPIO-Pins und E/A-Pins, die von aktiven Modulinstanzen als Ausgänge verwendet werden, haben diesen Parameter.
15. 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.
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). Vierpolige Encoder verwenden A, B, Index und Index-Maske.
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:
15.1. Pins
-
count
- (s32, Out) Anzahl der Encoderzählungen seit dem letzten Reset. -
index-enable
- (Bit, I/O) Wenn dieser Pin auf True gesetzt ist, 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. -
position
- (Float, Out) Encode-Position in Positionseinheiten (Count / Scale). -
rawcounts
- (s32, Out) Gesamtzahl der Encoder-Zählungen seit dem Start, nicht für Index oder Reset angepasst. -
reset
- (Bit, In) Wenn dieser Pin TRUE ist, werden die Zähl- und Positions-Pins auf 0 gesetzt. Der Wert des Geschwindigkeits-Pins wird davon nicht beeinflusst. Der Treiber setzt diesen Pin nicht auf FALSE zurück, nachdem er die Zählung auf 0 gesetzt hat, das ist Aufgabe des Benutzers. -
velocity
- (Float, Out) Geschätzte Encoder-Geschwindigkeit in Positionseinheiten pro Sekunde.
15.2. Parameter
-
counter-mode
- (Bit, RW) Auf False (Standard) für Quadratur gesetzt. Auf True gesetzt für Up/Down oder für einen einzelnen Eingang an Phase A. Kann für einen Frequenz/Geschwindigkeits-Wandler mit einem einzelnen Eingang an Phase A verwendet werden, wenn auf True gesetzt. -
filter
- (Bit, RW) Wenn auf True (Voreinstellung) gesetzt, benötigt der Quadraturzähler 15 Takte, um eine Änderung auf einer der drei Eingangsleitungen zu registrieren (jeder Impuls, der kürzer ist, wird als Rauschen verworfen). Wenn er auf False gesetzt ist, benötigt der Quadraturzähler nur 3 Takte, um eine Änderung zu registrieren. Der Abtasttakt des Encoders läuft mit 33 MHz auf den PCI Anything I/O-Karten und mit 50 MHz auf der 7I43. -
index-invert
- (Bit, RW) Wenn auf True gesetzt, löst die steigende Flanke des Index-Eingangspins das Index-Ereignis aus (wenn index-enable True ist). Wenn auf False gesetzt, löst die fallende Flanke aus. -
index-mask
- (Bit, RW) Wenn auf True gesetzt, hat der Index-Eingangs-Pin nur dann eine Wirkung, wenn der Index-Mask-Eingangs-Pin True ist (oder False, abhängig vomindex-mask-invert
-Pin unten). -
index-mask-invert
- (Bit, RW) Wenn auf True gesetzt, muss Index-Mask False sein, damit Index eine Wirkung hat. Bei False muss derindex-mask
-Pin auf True gesetzt werden. -
scale
- (Float, RW) Konvertiert von count Einheiten in position Einheiten. Ein Quadratur-Drehgeber hat normalerweise 4 Zählungen pro Impuls, so dass ein 100 PPR-Drehgeber 400 Zählungen pro Umdrehung aufweisen würde. Im.counter-mode
würde ein 100 PPR Encoder 100 Zählungen pro Umdrehung haben, da er nur die ansteigende Flanke von A verwendet und die Richtung B ist. -
vel-timeout
- (Float, RW) 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.
16. 5I25 Konfiguration
16.1. Firmware
Die 5I25-Firmware wird für die Tochterkarte, mit der sie gekauft wurde, vorinstalliert. Die firmware=xxx.BIT
ist also nicht Teil des hm2_pci-Konfigurationsstrings, wenn eine 5I25 verwendet wird.
16.2. Konfiguration
Beispielkonfigurationen der Karten 5I25/7I76 und 5I25/7I77 sind im Konfigurations-Auswahl enthalten.
Wenn Sie Ihre eigene Konfiguration erstellen möchten, zeigen die folgenden Beispiele, wie Sie die Treiber in die HAL-Datei laden.
# den generischen Treiber laden loadrt hostmot2 # PCI-Treiber laden und konfigurieren loadrt hm2_pci config="num_encoders=1 num_stepgens=5 sserial_port_0=0XXX"
# den generischen Treiber laden loadrt hostmot2 # Laden Sie den PCI-Treiber und konfigurieren Sie ihn loadrt hm2_pci config="num_encoders=6 num_pwmgens=6 sserial_port_0=0XXX"
16.3. SSERIAL-Konfiguration
Die Konfigurationszeichenfolge sserial_port_0=0XXX
legt einige Optionen für die intelligente serielle Tochterkarte fest. Diese Optionen sind spezifisch für jede Tochterkarte. Weitere Informationen über die genaue Verwendung finden Sie im Mesa-Handbuch (normalerweise im Abschnitt SOFTWARE PROCESS DATA MODES) oder auf der Handbuchseite des Links:../man/man9/sserial.9.html[SSERIAL(9)].
16.4. 7I77 Grenzwerte
Minlimit und Maxlimit sind Begrenzungen des Pin-Wertes (in diesem Fall des Analogausgangswertes), Fullscalemax ist der Skalierungsfaktor.
Diese sind standardmäßig auf den analogen Eingang oder den analogen Bereich (meist in Volt) eingestellt.
Bei den +-10 V-Analogausgängen der 7I77 sind die Standardwerte beispielsweise folgende:
minlimit: -10
maxlimit: +10
maxfullscale: 10
Wenn Sie z.B. den Analogausgang eines Kanals für ein Geschwindigkeitsservo auf IPS skalieren möchten (z.B. 24 IPS max), können Sie die Grenzen wie folgt festlegen:
minlimit: -24
maxlimit: +24
maxfullscale: 24
Wenn Sie das Analoge aus einem Kanal heraus auf Drehzahl für eine Spindel von 0 bis 6000 U/min mit 0-10 V Steuerung skalieren möchten, können Sie die Grenzen wie folgt festlegen:
minlimit: 0
maxlimit: 6000
maxfullscale: 6000
(dies würde verhindern, dass unerwünschte negative Ausgangsspannungen eingestellt werden)
17. Beispielkonfigurationen
Mehrere Beispielkonfigurationen für Mesa-Hardware sind in LinuxCNC enthalten. Die Konfigurationen sind in der hm2-servo und hm2-stepper Abschnitte der Konfigurations-Auswahl. In der Regel müssen Sie die Karte für die von Ihnen gewählte Konfiguration installieren, um sie zu laden. Die Beispiele sind ein guter Startpunkt und sparen Ihnen Zeit. Wählen Sie einfach das richtige Beispiel aus dem LinuxCNC Configuration Selector und speichern Sie eine Kopie auf Ihrem Computer, damit Sie es bearbeiten können. Um die genauen Pins und Parameter, die Ihre Konfiguration gab Ihnen, öffnen Sie das "Zeige HAL Konfiguration" (engl. Show HAL Configuration) Fenster aus dem Menü Maschine (engl. machine), oder führen Sie dmesg
aus wie oben beschrieben.