LinuxCNC Documentation

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.

  • (All sint output) ppmc.<port>.encoder.<channel>.count - Encoder position, in counts.

  • (All sint output) ppmc.<port>.encoder.<channel>.delta - Change in counts since last read, in raw encoder count units.

  • (All real output) 'ppmc.<port>.encoder.<channel>.velocity - Velocity scaled in user units per second. On PPMC and USC this is derived from raw encoder counts per servo period, and hence is affected by encoder granularity. On UPC boards with the 8/21/09 and later firmware, velocity estimation by timestamping encoder counts can be used to improve the smoothness of this velocity output. This can be fed to the PID HAL component to produce a more stable servo response. This function has to be enabled in the HAL command line that starts the PPMC driver, with the timestamp=0x00 option.

  • (All real output) ppmc.<port>.encoder.<channel>.position - Encoder position, in user units.

  • (All bool bidir) ppmc.<port>.encoder.<channel>.index-enable - Connect to joint.#.index-enable for home-to-index. This is a bidirectional HAL signal. Setting it to true causes the encoder hardware to reset the count to zero on the next encoder index pulse. The driver will detect this and set the signal back to false.

  • (PPMC real output) ppmc.<port>.DAC.<channel>.value - sends a signed value to the 16-bit Digital to Analog Converter on the PPMC DAC16 board commanding the analog output voltage of that DAC channel.

  • (UPC bool input) ppmc.<port>.pwm.<channel>.enable - Enables a PWM generator.

  • (UPC real input) ppmc.<port>.pwm.<channel>.value - Value which determines the duty cycle of the PWM waveforms. The value is divided by pwm.<channel>.scale, and if the result is 0.6 the duty cycle will be 60%, and so on. Negative values result in the duty cycle being based on the absolute value, and the direction pin is set to indicate negative.

  • (USC bool input) ppmc.<port>.stepgen.<channel>.enable - Enables a step pulse generator.

  • (USC real input) ppmc.<port>.stepgen.<channel>.velocity - Value which determines the step frequency. The value is multiplied by stepgen.<channel>.scale , and the result is the frequency in steps per second. Negative values result in the frequency being based on the absolute value, and the direction pin is set to indicate negative.

  • (All bool output) ppmc.<port>.din.<channel>.in - State of digital input pin, see canonical digital input.

  • (All bool output) ppmc.<port>.din.<channel>.in-not - Inverted state of digital input pin, see canonical digital input.

  • (All bool input) ppmc.<port>.dout.<channel>.out - Value to be written to digital output, see canonical digital output.

  • (Option real input) ppmc.<port>.DAC8-<channel>.value - Value to be written to analog output, range from 0 to 255. This sends 8 output bits to J8, which should have a Spindle DAC board connected to it. 0 corresponds to zero Volts, 255 corresponds to 10 Volts. The polarity of the output can be set for always minus, always plus, or can be controlled by the state of SSR1 (plus when on) and SSR2 (minus when on). You must specify extradac = 0x00 on the HAL command line that loads the PPMC driver to enable this function on the first USC ur UPC board.

  • (Option bool input) ppmc.<port>.dout.<channel>.out - Value to be written to one of the 8 extra digital output pins on J8. You must specify extradout = 0x00 on the HAL command line that loads the ppmc driver to enable this function on the first USC or UPC board. extradac and extradout are mutually exclusive features as they use the same signal lines for different purposes. These output pins will be enumerated after the standard digital outputs of the board.

3. Parameter

  • (All real) ppmc.<port>.encoder.<channel>.scale - The number of counts / user unit (to convert from counts to units).

  • (UPC real) ppmc.<port>.pwm.<channel-range>.freq - The PWM carrier frequency, in Hz. Applies to a group of four consecutive PWM generators, as indicated by <channel-range>. Minimum is 610 Hz, maximum is 500 kHz.

  • (PPMC real) ppmc.<port>.DAC.<channel>.scale - Sets scale of DAC16 output channel such that an output value equal to the 1/scale value will produce an output of + or - value Volts. So, if the scale parameter is 0.1 and you send a value of 0.5, the output will be 5.0 Volts.

  • (UPC real) ppmc.<port>.pwm.<channel>.scale - Scaling for PWM generator. If scale is X, then the duty cycle will be 100% when the value pin is X (or -X).

  • (UPC real) ppmc.<port>.pwm.<channel>.max-dc - Maximum duty cycle, from 0.0 to 1.0.

  • (UPC real) ppmc.<port>.pwm.<channel>.min-dc - Minimum duty cycle, from 0.0 to 1.0.

  • (UPC real) ppmc.<port>.pwm.<channel>.duty-cycle - Actual duty cycle (used mostly for troubleshooting.)

  • (UPC bool) ppmc.<port>.pwm.<channel>.bootstrap - If true, the PWM generator will generate a short sequence of pulses of both polarities when E-stop goes false, to reset the shutdown latches on some PWM servo drives.

  • (USC uint) ppmc.<port>.stepgen.<channel-range>.setup-time - Sets minimum time between direction change and step pulse, in units of 100 ns. Applies to a group of four consecutive step generators, as indicated by <channel-range>. Values between 200 ns and 25.5 µs can be specified.

  • (USC uint) ppmc.<port>.stepgen.<channel-range>.pulse-width - Sets width of step pulses, in units of 100 ns. Applies to a group of four consecutive step generators, as indicated by <channel-range>. Values between 200 ns and 25.5 µs may be specified.

  • (USC uint) ppmc.<port>.stepgen.<channel-range>.pulse-space-min - Sets minimum time between pulses, in units of 100 ns. Applies to a group of four consecutive step generators, as indicated by <channel-range>. Values between 200 ns and 25.5 µs can be specified. The maximum step rate is: pico ppmc math

  • (USC real) ppmc.<port>.stepgen.<channel>.scale - Scaling for step pulse generator. The step frequency in Hz is the absolute value of velocity * scale.

  • (USC real) ppmc.<port>.stepgen.<channel>.max-vel - The maximum value for velocity. Commands greater than max-vel will be clamped. Also applies to negative values. (The absolute value is clamped.)

  • (USC real) ppmc.<port>.stepgen.<channel>.frequency - Actual step pulse frequency in Hz (used mostly for troubleshooting.)

  • (Option real) ppmc.<port>.DAC8.<channel>.scale - Sets scale of extra DAC output such that an output value equal to scale gives a magnitude of 10.0 V output. (The sign of the output is set by jumpers and/or other digital outputs.)

  • (Option bool) ppmc.<port>.dout.<channel>.invert - Inverts a digital output, see canonical digital output.

  • (Option bool) ppmc.<port>.dout.<channel>.invert - Inverts a digital output pin of J8, see canonical digital output.

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.