1. Einführung
HostMot2 is an FPGA configuration developed by Mesa Electronics for their line of Anything I/O motion control cards. The firmware is open source, portable and flexible. It can be configured (at compile-time) with zero or more instances (an object created at runtime) of each of several Modules: encoders (quadrature counters), PWM generators, and step/dir generators. The firmware can be configured (at run-time) to connect each of these instances to pins on the I/O headers. I/O pins not driven by a Module instance revert to general-purpose bi-directional digital I/O.
2. Firmware-Binärdateien
Several pre-compiled HostMot2 firmware binaries are available for the different Anything I/O boards. This list is incomplete, check the hostmot2-firmware distribution for up-to-date firmware lists.
-
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 I/O pins): using hm2_pci module
-
16-Kanal-Servo
-
8-Kanal-Servo plus 24 Step/Dir-Generatoren
-
-
5I20, 5I23, 4I65, 4I68 (72 I/O pins): using hm2_pci module
-
12-Kanal-Servo
-
8-Kanal-Servo plus 4 Step/Dir-Generatoren
-
4-Kanal-Servo plus 8 Step/Dir-Generatoren
-
-
7I43 (48 I/O pins): using hm2_7i43 module
-
8-Kanal-Servo (8 PWM-Generatoren und 8 Encoder)
-
4-Kanal-Servo plus 4 Step/Dir-Generatoren
-
The 5I25 Superport FPGA card is preprogrammed when purchased and does not need a firmware binary.
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 - Read the GPIO input pins only. (This function is not available on the 7I43 due to limitations of the EPP bus.)
-
hm2_<BoardType>.<BoardNum>.write_gpio - Write the GPIO control registers and output pins only. (This function is not available on the 7I43 due to limitations of the EPP bus.)
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.
An example of a 5I20 configuration:
[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
The HAL pins for each configuration can be seen by opening up Show HAL Configuration from the Machine menu. All the HAL pins and parameters can be found there. The following figure is of the 5I20 configuration used above.

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 the 7I43 (two ports), SV8 (Servo 8) would be for having 8 servos or fewer, using the classic 7I33 4-axis (per port) servo board. So 8 servos would use up all 48 signals in the two ports. But if you only needed 3 servos, you could say num_encoders=3 and num_pwmgens=3 and recover 5 servos at 6 signals each, thus gaining 30 bits of GPIO.
Or, in the 5I22 (four ports), SVST8_24 (Servo 8, Stepper 24) would be for having 8 servos or fewer (7I33 x2 again), and 24 steppers or fewer (7I47 x2). This would use up all four ports. If you only needed 4 servos you could say num_encoders=4 and num_pwmgens=4 and recover 1 port (and save a 7I33). And if you only needed 12 steppers you could say num_stepgens=12 and free up one port (and save a 7I47). So in this way we can save two ports (48 bits) for GPIO.
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) Default Configurations (The 5I22 comes in 1M and 1.5M gate versions. So far, all firmware is available in all gate sizes.)
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) Default Configurations (The 5I23 has 400k gates.)
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) Default Configurations (The 5I20 has 200k gates.)
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) Default Configurations (The 4I68 has 400k gates.)
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) Default Configurations (The 4I65 has 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-port parallel) 400k gate versions, Default Configurations
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-port parallel) 200k gate versions, Default Configurations
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) This emulates the output_type load-time argument to the software pwmgen component. This parameter may be changed at runtime, but most of the time you probably want to set it at startup and then leave it alone. Accepted values are 1 (PWM on Out0 and Direction on Out1), 2 (Up on Out0 and Down on Out1), 3 (PDM mode, PDM on Out0 and Dir on Out1), and 4 (Direction on Out0 and PWM on 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) This specifies the PDM frequency, in Hz, of all the pwmgen instances running in PDM mode (mode 3). This is the pulse slot frequency; the frequency at which the pdm generator in the Anything I/O board chooses whether to emit a pulse or a space. Each pulse (and space) in the PDM pulse train has a duration of 1/pdm_frequency seconds. For example, setting the pdm_frequency to 2*106 Hz (2 MHz) and the duty cycle to 50% results in a 1 MHz square wave, identical to a 1 MHz PWM signal with 50% duty cycle. The effective range of this parameter is from about 1525 Hz up to just under 100 MHz. Note that the max frequency is determined by the ClockHigh frequency of the Anything I/O board; the 5I20 and 7I43 both have a 100 MHz clock, resulting in a 100 MHz max PDM frequency. Other boards may have different clocks, resulting in different max PDM frequencies. If the user attempts to set the frequency too high, then it will be clipped to the max supported frequency of the board.
-
pwm_frequency - (u32, RW) This specifies the PWM frequency, in Hz, of all the pwmgen instances running in the PWM modes (modes 1 and 2). This is the frequency of the variable-duty-cycle wave. Its effective range is from 1 Hz up to 193 kHz. Note that the max frequency is determined by the ClockHigh frequency of the Anything I/O board; the 5i20 and 7i43 both have a 100 MHz clock, resulting in a 193 kHz max PWM frequency. Other boards may have different clocks, resulting in different max PWM frequencies. If the user attempts to set the frequency too high, then it will be clipped to the max supported frequency of the board. Frequencies below about 5 Hz are not terribly accurate, but above 5 Hz they are pretty close.
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) This parameter only has an effect if theis_output
parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on theout
HAL pin. -
is_opendrain
- (Bit, RW) If this parameter is false, the GPIO behaves as a normal output pin: The I/O pin on the connector is driven to the value specified by theout
HAL pin (possibly inverted). If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to theout
HAL pin drives the I/O pin low, writing 1 to theout
HAL pin puts the I/O pin in a high-impedance state. In this high-impedance state the I/O pin floats (weakly pulled high), and other devices can drive the value; the resulting value on the I/O pin is available on thein
andin_not
pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this 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) If set to True (the default), the quadrature counter needs 15 clocks to register a change on any of the three input lines (any pulse shorter than this is rejected as noise). If set to False, the quadrature counter needs only 3 clocks to register a change. The encoder sample clock runs at 33 MHz on the PCI Anything I/O cards and 50 MHz on the 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.
So for example on the 7I77 +-10 V analog outputs, the default values are:
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
If you wanted to scale the analog out of a channel to RPM for a 0 to 6000 RPM spindle with 0-10 V control you could set the limits like this:
minlimit: 0
maxlimit: 6000
maxfullscale: 6000
(dies würde verhindern, dass unerwünschte negative Ausgangsspannungen eingestellt werden)
17. Beispielkonfigurationen
Several example configurations for Mesa hardware are included with LinuxCNC. The configurations are located in the hm2-servo and hm2-stepper sections of the Configuration Selector. Typically you will need the board installed for the configuration you pick to load. The examples are a good place to start and will save you time. Just pick the proper example from the LinuxCNC Configuration Selector and save a copy to your computer so you can edit it. To see the exact pins and parameters that your configuration gave you, open the Show HAL Configuration window from the Machine menu, or do dmesg
as outlined above.