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 - (bool i/o) True if the watchdog has bit, False if the watchdog has not bit. If the watchdog has bit and the has_bit bool is True, the user can reset it to False to resume operation.
5.2. Parameter
-
timeout_ns - (uint read/write) Watchdog timeout, in nanoseconds. This is initialized to 5,000,000 (5 milliseconds) at module load time. If more than this amount of time passes between calls to the hm2 write function, the watchdog will bite.
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.)
|
Note
|
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
|
Note
|
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 - (bool, out) Normal state of the hardware input pin. Both full GPIO pins and I/O pins used as inputs by active module instances have this pin.
-
in_not - (bool, out) Inverted state of the hardware input pin. Both full GPIO pins and I/O pins used as inputs by active module instances have this pin.
-
out - (bool, in) Value to be written (possibly inverted) to the hardware output pin. Only full GPIO pins have this pin.
12.2. Parameter
-
invert_output - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter. To invert an active module pin you have to invert the GPIO pin not the module pin.
-
is_opendrain - (bool, rw) This parameter only has an effect if the is_output parameter is true. 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 the out HAL pin (possibly inverted), and the value of the in and in_not HAL pins is undefined. If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to the out HAL pin drives the I/O pin low, writing 1 to the out 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 the in and in_not pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.
-
is_output - (bool, rw) If set to 0, the GPIO is an input. The I/O pin is put in a high-impedance state (weakly pulled high), to be driven by other devices. The logic value on the I/O pin is available in the in and in_not HAL pins. Writes to the out HAL pin have no effect. If this parameter is set to 1, the GPIO is an output; its behavior then depends on the is_opendrain parameter. Only full GPIO pins have this 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 - (bool, in) Switches between position control mode (0) and velocity control mode (1). Defaults to position control (0).
-
counts - (sint, out) Feedback position in counts (number of steps).
-
enable - (bool, in) Enables output steps. When false, no steps are generated.
-
position-cmd - (real, in) Target position of stepper motion, in user-defined position units.
-
position-fb - (real, out) Feedback position in user-defined position units (counts / position_scale).
-
velocity-cmd - (real, in) Target velocity of stepper motion, in user-defined position units per second. This pin is only used when the stepgen is in velocity control mode (control-type=1).
-
velocity-fb - (real, out) Feedback velocity in user-defined position units per second.
13.2. Parameter
-
dirhold - (uint, rw) Minimum duration of stable Direction signal after a step ends, in nanoseconds.
-
dirsetup - (uint, rw) Minimum duration of stable Direction signal before a step begins, in nanoseconds.
-
maxaccel - (real, rw) Maximum acceleration, in position units per second per second. If set to 0, the driver will not limit its acceleration.
-
maxvel - (real, rw) Maximum speed, in position units per second. If set to 0, the driver will choose the maximum velocity based on the values of steplen and stepspace (at the time that maxvel was set to 0).
-
position-scale - (real, rw) Converts from counts to position units. position = counts / position_scale
-
step_type - (uint, rw) Output format, like the step_type modparam to the software stepgen(9) component. 0 = Step/Dir, 1 = Up/Down, 2 = Quadrature. In Quadrature mode (step_type=2), the stepgen outputs one complete Gray cycle (00 -> 01 -> 11 -> 10 -> 00) for each step it takes.
-
steplen - (uint, rw) Duration of the step signal, in nanoseconds.
-
stepspace - (uint, rw) Minimum interval between step signals, in nanoseconds.
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 - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin.
-
is_opendrain - (bool, 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 the out HAL pin (possibly inverted). If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to the out HAL pin drives the I/O pin low, writing 1 to the out 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 the in and in_not pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this 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 - (bool, in) If true, the pwmgen will set its Not-Enable pin false and output its pulses. If enable is false, pwmgen will set its Not-Enable pin true and not output any signals.
-
value - (real, in) The current pwmgen command value, in arbitrary units.
14.2. Parameter
-
output-type - (sint, 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 - (real, rw) Scaling factor to convert value from arbitrary units to duty cycle: dc = value / scale. Duty cycle has an effective range of -1.0 to +1.0 inclusive, anything outside that range gets clipped.
-
pdm_frequency - (uint, 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 - (uint, 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- (bool, rw) This parameter only has an effect if theis_outputparameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on theoutHAL pin. -
is_opendrain- (bool, 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 theoutHAL pin (possibly inverted). If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to theoutHAL pin drives the I/O pin low, writing 1 to theoutHAL 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 theinandin_notpins. 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- (sint, out) Number of encoder counts since the previous reset. -
index-enable- (bool, i/o) When this pin is set to True, the count (and therefore also position) are reset to zero on the next Index (Phase-Z) pulse. At the same time, index-enable is reset to zero to indicate that the pulse has occurred. -
position- (real, out) Encoder position in position units (count / scale). -
rawcounts- (sint, out) Total number of encoder counts since the start, not adjusted for index or reset. -
reset- (bool, in) When this pin is TRUE, the count and position pins are set to 0. The value of the velocity pin is not affected by this. The driver does not reset this pin to FALSE after resetting the count to 0, that is the user’s job. -
velocity- (real, out) Estimated encoder velocity in position units per second.
15.2. Parameter
-
counter-mode- (bool, rw) Set to False (the default) for Quadrature. Set to True for Up/Down or for single input on Phase A. Can be used for a frequency to velocity converter with a single input on Phase A when set to true. -
filter- (bool, 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- (bool, rw) If set to True, the rising edge of the Index input pin triggers the Index event (if index-enable is True). If set to False, the falling edge triggers. -
index-mask- (bool, rw) If set to True, the Index input pin only has an effect if the Index-Mask input pin is True (or False, depending on theindex-mask-invertpin below). -
index-mask-invert- (bool, rw) If set to True, Index-Mask must be False for Index to have an effect. If set to False, theIndex-Maskpin must be True. -
scale- (real, rw) Converts from count units to position units. A quadrature encoder will normally have 4 counts per pulse so a 100 PPR encoder would be 400 counts per revolution. In.counter-modea 100 PPR encoder would have 100 counts per revolution as it only uses the rising edge of A and direction is B. -
vel-timeout- (real, rw) When the encoder is moving slower than one pulse for each time that the driver reads the count from the FPGA (in the hm2_read() function), the velocity is harder to estimate. The driver can wait several iterations for the next pulse to arrive, all the while reporting the upper bound of the encoder velocity, which can be accurately guessed. This parameter specifies how long to wait for the next pulse, before reporting the encoder stopped. This parameter is in seconds.
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 von 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.