Pico Systems hat eine Familie von Karten für analoge Servo-, Stepper- und PWM (digitale) Servosteuerung entwickelt. Die Karten werden über eine parallele Schnittstelle an den PC angeschlossen und arbeiten im EPP-Modus. Obwohl die meisten Benutzer nur eine Karte an einen Parallelport anschließen, kann theoretisch jede beliebige Kombination von bis zu 8 oder 16 Karten an einem einzigen Parallelport verwendet werden. Ein Treiber bedient alle Arten von Karten. Die endgültige Mischung der E/A hängt von der/den angeschlossenen Karte(n) ab. Der Treiber unterscheidet nicht zwischen den Karten, er nummeriert einfach die E/A-Kanäle (Encoder usw.), beginnend mit 0 auf der ersten Karte. Der Treiber heißt hal_ppmc.ko Die analoge Servo-Schnittstelle wird auch PPMC für Parallel Port Motion Control genannt. Es gibt auch den Universal Stepper Controller, abgekürzt USC. Und den Universal PWM Controller, abgekürzt UPC.
Installation:
loadrt hal_ppmc port_addr=<addr1>[,<addr2>[,<addr3>...]]
Der Parameter port_addr teilt dem Treiber mit, welche parallele(n) Schnittstelle(n) dieser überprüfen soll. Standardmäßig ist <addr1> 0x0378, und <addr2> und folgende werden nicht verwendet. Der Treiber durchsucht den gesamten Adressraum der erweiterten parallelen Schnittstelle(n) unter port_addr und sucht nach einer oder mehreren Karten der PPMC-Familie. Es exportiert dann HAL-Pins für alles, was es findet. Während des Ladens (oder des versuchten Ladens) gibt der Treiber einige nützliche Debugging-Meldungen in das Kernel-Log aus, die mit dmesg eingesehen werden können.
Es können bis zu 3 Parport-Busse verwendet werden, und jeder Bus kann bis zu 8 (oder möglicherweise 16 PPMC) Geräte enthalten.
1. Kommandozeilen-Optionen
In der Befehlszeile von loadrt können mehrere Optionen angegeben werden. Erstens kann bei USC und UPC ein 8-Bit-DAC für die Spindeldrehzahlsteuerung und ähnliche Funktionen hinzugefügt werden. Dies kann mit dem Parameter extradac=0xnn[,0xmm] angegeben werden. Mit dem in [ ] eingeschlossenen Teil können Sie diese Option auf mehr als einer Platine des Systems angeben. Die erste Hexadezimalziffer gibt an, auf welchen EPP-Bus Bezug genommen wird; sie entspricht der Reihenfolge der Portadressen im Parameter port_addr, wobei <addr1> hier Null wäre. Für den ersten EPP-Bus würde die erste USC- oder UPC-Platine also mit 0x00 beschrieben, die zweite USC- oder UPC-Platine auf demselben Bus wäre 0x02. (Beachten Sie, dass jede USC- oder UPC-Platine zwei Adressen belegt, wenn also eine auf 00 steht, müsste die nächste 02 sein.)
Alternativ können die 8 digitalen Ausgangspins als zusätzliche digitale Ausgänge verwendet werden, es funktioniert genauso wie oben mit der Syntax : extradout=0xnn'. Die Extradac- und Extradout-Optionen schließen sich auf jedem Board gegenseitig aus, Sie können nur eine angeben.
Die Encoderplatinen UPC und PPMC können das Eintreffen von Encoderzählungen mit einem Zeitstempel versehen, um die Ableitung der Achsengeschwindigkeit zu verfeinern. Diese abgeleitete Geschwindigkeit kann in die PID hal-Komponente eingespeist werden, um eine glattere D-Term-Reaktion zu erzeugen. Die Syntax lautet: timestamp=0xnn[,0xmm], dies funktioniert auf die gleiche Weise wie oben, um auszuwählen, welche Karte konfiguriert werden soll. Standardmäßig ist die Option timestamp nicht aktiviert. Wenn Sie diese Option in die Befehlszeile eingeben, wird die Option aktiviert. Das erste n wählt den EPP-Bus aus, das zweite entspricht der Adresse der Karte, auf der die Option aktiviert ist. Der Treiber prüft den Revisionsstand der Karte, um sicherzustellen, dass die Firmware die Funktion unterstützt, und gibt eine Fehlermeldung aus, wenn die Karte sie nicht unterstützt.
Die PPMC-Geberkarte verfügt über eine Option zur Auswahl der Frequenz des digitalen Geberfilters. (Die UPC hat die gleiche Möglichkeit über DIP-Schalter auf der Karte.) Da die PPMC-Geberkarte diese zusätzlichen DIP-Schalter nicht hat, muss sie über eine Kommandozeilenoption ausgewählt werden. Standardmäßig läuft der Filter mit 1 MHz, so dass Encoder bis zu etwa 900 kHz gezählt werden können (abhängig von Rauschen und Quadraturgenauigkeit des Encoders). Die Optionen sind 1, 2,5, 5 und 10 MHz. Diese werden mit einem Parameter von 1, 2, 5 und 10 (dezimal) eingestellt, der als Hexadezimalziffer "A" angegeben wird. Diese werden in ähnlicher Weise wie die obigen Optionen angegeben, wobei die Frequenzeinstellung links von den Bus-/Adressziffern steht. Um also 5 MHz auf der Encoderplatine an Adresse 3 auf dem ersten EPP-Bus einzustellen, würden Sie schreiben: `enc_clock=0x503 `.
Vor kurzem wurde festgestellt, dass einige Parallelport-Chips nicht mit dem ppmc-Treiber funktionieren. Insbesondere der Oxford OXPCIe952 Chip auf den SIIG PCIe Parallelport-Karten hatte dieses Problem. Der ppmc-Treiber in allen LinuxCNC-Versionen ab 2.7.8 sind für dieses Problem standardmäßig korrigiert worden. Allerdings könnte dies möglicherweise zu Problemen mit wirklich alten EPP Parallelport-Hardware, so gibt es eine Kommandozeilen-Option, um wieder auf das vorherige Verhalten zu gehen. Das neue Verhalten wird standardmäßig eingestellt, oder durch Hinzufügen des Parameters epp_dir=0 auf der Befehlszeile. Um das alte Verhalten zu erhalten, fügen Sie epp_dir=1 in die Befehlszeile ein. Alle parallelen Ports, die ich hier habe, arbeiten mit dem neuen Standardverhalten. Wie bei den anderen Parametern ist es möglich, eine Liste anzugeben, wie z.B. epp_dir=1,0,1, um verschiedene Einstellungen für jede der bis zu 3 parallelen Schnittstellen zu setzen.
2. Pins
Bei den folgenden Pins, Parametern und Funktionen ist <port> die ID der parallelen Schnittstelle. Gemäß den Namenskonventionen sollte der erste Port immer eine ID von Null haben. Alle Karten verfügen über eine Methode zur Einstellung der Adresse auf dem EPP-Bus. USC und UPC haben einfache Vorkehrungen für nur zwei Adressen, aber durch Jumper-Folienschnitte können bis zu 4 Karten adressiert werden. Die PPMC-Karten haben 16 mögliche Adressen. In allen Fällen zählt der Treiber die Karten nach Typ auf und exportiert die entsprechenden HAL-Pins. Zum Beispiel werden die Encoder von Null aufwärts aufgezählt, in der gleichen Reihenfolge, wie die Adressschalter auf der Karte angeben. Die erste Platine hat also die Encoder 0 bis 3, die zweite Platine die Encoder 4 bis 7. Die erste Spalte nach dem Aufzählungspunkt gibt an, welche Platinen mit diesem HAL-Pin oder Parameter verbunden sind. Alle bedeutet, dass dieser Pin auf allen drei Platinentypen verfügbar ist. Option bedeutet, dass dieser Pin nur exportiert wird, wenn diese Option durch einen optionalen Parameter im loadrt HAL-Befehl aktiviert ist. Diese Optionen setzen voraus, dass die Platine einen ausreichenden Revisionsstand hat, um die Funktion zu unterstützen.
-
(Alle s32-Ausgaben) ppmc.<port>.encoder.<channel>.count - Encoder-Position in Zählwerten.
-
(Alle s32-Ausgaben) ppmc.<port>.encoder.<channel>.delta – Änderung der Zählwerte seit dem letzten Lesen, in rohen Encoder-Zähleinheiten.
-
(Alles Float-Ausgaben) 'ppmc.<port>.encoder.<channel>.velocity - Geschwindigkeit skaliert in Benutzereinheiten pro Sekunde. Auf PPMC und USC wird dies von den rohen Encoder-Zählungen pro Servoperiode abgeleitet und wird daher von der Encoder-Granularität beeinflusst. Auf UPC-Platinen mit der Firmware 8/21/09 und später kann die Geschwindigkeitsschätzung durch Zeitstempelung der Encoderzählungen verwendet werden, um die Glattheit dieser Geschwindigkeitsausgabe zu verbessern. Dies kann in die PID-HAL-Komponente eingespeist werden, um eine stabilere Servoreaktion zu erzeugen. Diese Funktion muss in der HAL-Kommandozeile, die den PPMC-Treiber startet, mit der Option timestamp=0x00 aktiviert werden.
-
(Alle Float-Ausgänge) ppmc.<port>.encoder.<channel>.position - Encoder-Position, in Benutzereinheiten.
-
(All bit bidir) ppmc.<port>.encoder.<channel>.index-enable - Verbindung mit joint.#.index-enable für home-to-index. Dies ist ein bidirektionales HAL-Signal. Wird es auf true gesetzt, setzt die Encoder-Hardware den Zählerstand beim nächsten Encoder-Index-Impuls auf Null zurück. Der Treiber erkennt dies und setzt das Signal zurück auf false.
-
(PPMC float output) ppmc. <port>. DAC. <channel>.value - sendet einen vorzeichenbehafteten Wert an den 16-Bit-Digital-Analog-Wandler auf der PPMC-DAC16-Platine, der die analoge Ausgangsspannung dieses DAC-Kanals befiehlt.
-
(UPC bit input) ppmc.<port>.pwm.<channel>.enable - Aktiviert einen PWM-Generator.
-
(UPC float input) ppmc.<port>.pwm.<channel>.value - Wert, der das Tastverhältnis der PWM-Wellenformen bestimmt. Der Wert wird durch pwm.<channel>.scale geteilt, und wenn das Ergebnis 0,6 ist, beträgt das Tastverhältnis 60 %, und so weiter. Negative Werte führen dazu, dass das Tastverhältnis auf dem absoluten Wert basiert, und der Richtungspin ist so eingestellt, dass er negativ anzeigt.
-
(USC-Bit-Eingang) ppmc.<port>.stepgen.<channel>.enable - Aktiviert einen Schrittimpulsgenerator.
-
(USC float input) ppmc.<port>.stepgen.<channel>.velocity - Wert, der die Schrittfrequenz bestimmt. Der Wert wird mit stepgen.<channel>.scale multipliziert, und das Ergebnis ist die Frequenz in Schritten pro Sekunde. Negative Werte führen dazu, dass die Frequenz auf dem absoluten Wert basiert, und der Richtungspin wird auf negativ gesetzt.
-
(All bit output) ppmc.<port>.din.<channel>.in - Zustand des digitalen Eingangspins, siehe kanonischer Digitaleingang.
-
(All bit output) ppmc.<port>.din.<channel>.in-not - Invertierter Zustand des digitalen Eingangspins, siehe kanonischer Digitaleingang.
-
(All bit input) ppmc.<port>.dout.<channel>.out - Wert, der an den Digitalausgang geschrieben werden soll, siehe kanonischer Digitalausgang.
-
(Option Float-Eingang) ppmc.<port>.DAC8-<channel>.value - In den Analogausgang zu schreibender Wert, Bereich von 0 bis 255. Dies sendet 8 Ausgangsbits an J8, an dem eine Spindel-DAC-Karte angeschlossen sein sollte. 0 entspricht null Volt, 255 entspricht 10 Volt. Die Polarität des Ausgangs kann auf immer Minus, immer Plus eingestellt werden oder durch den Zustand von SSR1 (Plus, wenn eingeschaltet) und SSR2 (Minus, wenn eingeschaltet) gesteuert werden. Sie müssen extradac = 0x00 in der HAL-Befehlszeile angeben, die den PPMC-Treiber lädt, um diese Funktion auf der ersten USC ur UPC-Platine zu aktivieren.
-
(Option bit input) ppmc.<port>.dout.<channel>.out - Wert, der an einen der 8 zusätzlichen digitalen Ausgangspins an J8 geschrieben werden soll. Sie müssen extradout = 0x00 in der HAL-Befehlszeile angeben, die den ppmc-Treiber lädt, um diese Funktion auf der ersten USC- oder UPC-Platine zu aktivieren. extradac und extradout schließen sich gegenseitig aus, da sie dieselben Signalleitungen für unterschiedliche Zwecke verwenden. Diese Ausgangspins werden nach den digitalen Standardausgängen der Karte aufgezählt.
3. Parameter
-
(All float) ppmc.<port>.encoder.<channel>.scale - Die Anzahl der Zählungen / Benutzereinheit (zur Umrechnung von Zählungen in Einheiten).
-
(UPC float) ppmc.<port>.pwm.<channel-range>.freq - Die PWM-Trägerfrequenz, in Hz. Gilt für eine Gruppe von vier aufeinanderfolgenden PWM-Generatoren, wie durch <channel-range> angegeben. Minimum ist 610Hz, Maximum ist 500 kHz.
-
(PPMC float) ppmc.<port>.DAC.<channel>.scale - Legt die Skalierung des DAC16-Ausgangskanals so fest, dass ein Ausgangswert, der dem Wert 1/scale entspricht, einen Ausgang mit dem Wert + oder - Volt erzeugt. Wenn also der Skalierungsparameter 0,1 ist und Sie einen Wert von 0,5 senden, wird der Ausgang 5,0 Volt betragen.
-
(UPC float) ppmc.<port>.pwm.<channel>.scale - Skalierung für PWM Generator. Wenn scale X ist, dann ist das Tastverhältnis 100%, wenn der value Pin X (oder -X) ist.
-
(UPC float) ppmc.<port>.pwm.<channel>.max-dc - Maximales Tastverhältnis, von 0,0 bis 1,0.
-
(UPC float) ppmc.<port>.pwm.<channel>.min-dc – Mindestarbeitszyklus von 0,0 bis 1,0.
-
(UPC float) ppmc.<port>.pwm.<channel>.duty-cycle - Tatsächlicher Arbeitszyklus (wird hauptsächlich zur Fehlerbehebung verwendet.)
-
(UPC bit) ppmc.<port>.pwm.<channel>.bootstrap - Wenn true, erzeugt der PWM-Generator eine kurze Sequenz von Impulsen beider Polaritäten, wenn Notaus (engl. E-stop) auf falsch geht, um die Abschalt-Latches einiger PWM-Servoantriebe zurückzusetzen.
-
(USC u32) ppmc.<port>.stepgen.<channel-range>.setup-time - Legt die Mindestzeit zwischen Richtungswechsel und Schrittimpuls fest, in Einheiten von 100 ns. Gilt für eine Gruppe von vier aufeinanderfolgenden Schrittgeneratoren, wie durch <Kanalbereich> angegeben. Es können Werte zwischen 200 ns und 25,5 µs angegeben werden.
-
(USC u32) ppmc.<port>.stepgen.<channel-range>.pulse-width - Bestimmt die Breite der Schrittimpulse in Einheiten von 100 ns. Gilt für eine Gruppe von vier aufeinanderfolgenden Schrittgeneratoren, wie durch <Kanalbereich> angegeben. Es können Werte zwischen 200 ns und 25,5 µs angegeben werden.
-
(USC u32) ppmc.<port>.stepgen.<channel-range>.pulse-space-min - Legt die Mindestzeit zwischen den Impulsen in Einheiten von 100 ns fest. Gilt für eine Gruppe von vier aufeinanderfolgenden Schrittgeneratoren, wie durch <Kanalbereich> angegeben. Es können Werte zwischen 200 ns und 25,5 µs angegeben werden. Die maximale Schrittfrequenz beträgt:
-
(USC float) ppmc.<port>.stepgen.<channel>.scale - Skalierung für Schrittimpulsgenerator. Die Schrittfrequenz in Hz ist der absolute Wert von velocity (engl. für Geschwindkeit) * scale (engl. für Skala/Maßstab).
-
(USC float) ppmc.<port>.stepgen.<channel>.max-vel - Der Höchstwert für velocity. Befehle, die größer als max-vel sind, werden gekappt. Gilt auch für negative Werte. (Der absolute Wert wird gekappt.)
-
(USC float) ppmc.<port>.stepgen.<channel>.frequency - Tatsächliche Schrittimpulsfrequenz in Hz (wird meist zur Fehlersuche verwendet.)
-
(Option float) ppmc. <port>. DAC8. <channel>.scale - Legt die Skalierung des zusätzlichen DAC-Ausgangs so fest, dass ein der Skalierung entsprechender Ausgangswert eine Größe von 10,0 V ergibt. (Das Vorzeichen des Ausgangs wird durch Jumper und/oder andere digitale Ausgänge gesetzt.)
-
(Optionsbit) ppmc.<Port>.dout.<Kanal>.invert - Invertiert einen digitalen Ausgang, siehe kanonischer digitaler Ausgang.
-
(Optionsbit) ppmc. .<port>dout. <channel>.invert - Invertiert einen digitalen Ausgangspin von J8, siehe Kanonischer Digitalausgang.
4. Funktionen
-
(All funct) ppmc.<Port>.read - Liest alle Eingänge (digitale Eingänge und Encoderzähler) an einem Port. Diese Lesevorgänge sind in Blöcken von zusammenhängenden Registern organisiert, die in einem Block gelesen werden, um den CPU-Overhead zu minimieren.
-
(All funct) ppmc.<Port>.write - Schreibt alle Ausgänge (digitale Ausgänge, Stepgen, PWMs) auf einen Port. Diese Schreibvorgänge sind in Blöcken von zusammenhängenden Registern organisiert, die in einem Block geschrieben werden, um den CPU-Overhead zu minimieren.