LinuxCNC Documentation

Pico Systems має серію плат для аналогового сервоприводу, крокового двигуна та PWM (цифрового) сервоприводу. Плати підключаються до ПК через паралельний порт, що працює в режимі EPP. Хоча більшість користувачів підключають одну плату до паралельного порту, теоретично на одному паралельному порту можна використовувати будь-яку комбінацію до 8 або 16 плат. Один драйвер обслуговує всі типи плат. Остаточна комбінація входів/виходів залежить від підключених плат. Драйвер не розрізняє плати, а просто нумерує канали вводу/виводу (енкодери тощо), починаючи з 0 на першій платі. Драйвер має назву hal_ppmc.ko Аналоговий сервоінтерфейс також називається PPMC (Parallel Port Motion Control, паралельний порт управління рухом). Існує також універсальний кроковий контролер, скорочено USC. І універсальний PWM-контролер, або UPC.

Встановлення:

loadrt hal_ppmc port_addr=<addr1>[,<addr2>[,<addr3>...]]

Параметр «port_addr» повідомляє драйверу, які паралельні порти перевіряти. За замовчуванням «<addr1>» дорівнює 0x0378, а «<addr2>» і наступні не використовуються. Драйвер шукає в усьому адресному просторі розширених паралельних портів за адресою «port_addr» будь-які плати сімейства PPMC. Потім він експортує виводи HAL для всіх знайдених пристроїв. Під час завантаження (або спроби завантаження) драйвер виводить у журнал ядра корисні повідомлення для налагодження, які можна переглянути за допомогою команди «dmesg».

Можна використовувати до 3 шин Parkport, і кожна шина може мати до 8 (або, можливо, 16 пристроїв PPMC).

1. Параметри командного рядка

У командному рядку loadrt можна вказати кілька опцій. По-перше, USC і UPC можуть мати 8-бітний DAC, доданий для регулювання швидкості шпинделя та подібних функцій. Це можна вказати за допомогою параметра extradac=0xnn[,0xmm]. Частина, укладена в [ ], дозволяє вказати цю опцію на більш ніж одній платі системи. Перша шестнадцяткова цифра вказує, до якої шини EPP звертаються, вона відповідає порядку адрес портів у параметрі port_addr, де <addr1> тут буде нулем. Отже, для першої шини EPP перша плата USC або UPC буде описана як 0x00, друга плата USC або UPC на тій самій шині буде 0x02. (Зверніть увагу, що кожна плата USC або UPC займає дві адреси, тому якщо одна знаходиться на 00, наступна повинна бути 02.)

Крім того, 8 цифрових вивідних контактів можна використовувати як додаткові цифрові виходи, це працює так само, як описано вище, із синтаксисом: extradout=0xnn'. Опції extradac та extradout є взаємовиключними на кожній платі, можна вказати лише одну з них.

Плати кодерів UPC і PPMC можуть ставити мітку часу на прибуття лічильників кодера, щоб уточнити виведення швидкості осі. Ця виведена швидкість може бути передана до компонента PID hal для отримання більш плавного відгуку терміна D. Синтаксис: timestamp=0xnn[,0xmm], це працює так само, як і вище, для вибору плати, яка конфігурується. За замовчуванням опція timestamp не ввімкнена. Якщо ви вкажете цю опцію в командному рядку, вона ввімкнеться. Перше «n» вибирає шину EPP, друге відповідає адресі плати, на якій ввімкнено цю опцію. Драйвер перевіряє рівень ревізії плати, щоб переконатися, що вона має прошивку, яка підтримує цю функцію, і видає повідомлення про помилку, якщо плата її не підтримує.

Плата енкодера PPMC має опцію вибору частоти цифрового фільтра енкодера. (UPC має таку ж можливість за допомогою DIP-перемикачів на платі.) Оскільки плата енкодера PPMC не має цих додаткових DIP-перемикачів, вибір потрібно здійснювати за допомогою опції командного рядка. За замовчуванням фільтр працює на частоті 1 МГц, що дозволяє лічильникам лічильників до приблизно 900 кГц (залежно від шуму і квадратурної точності лічильника). Опції: 1, 2,5, 5 і 10 МГц. Вони встановлюються за допомогою параметра 1,2,5 і 10 (десятичний), який вказується як шістнадцятковий символ «A». Вони вказуються аналогічно до наведених вище опцій, але з налаштуванням частоти ліворуч від цифр шини/адреси. Отже, щоб встановити 5 МГц на платі енкодера за адресою 3 на першій шині EPP, потрібно написати: enc_clock='0x503'.

Нещодавно було виявлено, що деякі мікросхеми паралельного порту не працюють з драйвером ppmc. Зокрема, ця проблема стосувалася мікросхеми Oxford OXPCIe952 на картах паралельного порту SIIG PCIe. Драйвер ppmc у всіх версіях LinuxCNC, починаючи з 2.7.8, був виправлений для цієї проблеми за замовчуванням. Однак це може спричинити проблеми з дуже старим апаратним забезпеченням паралельного порту EPP, тому існує опція командного рядка, яка дозволяє повернутися до попередньої поведінки. Нова поведінка встановлюється за замовчуванням або шляхом додавання параметра epp_dir=0 у командний рядок. Щоб отримати стару поведінку, додайте epp_dir=1 до командного рядка. Всі паралельні порти, які я маю тут, працюють з новою поведінкою за замовчуванням. Як і для інших параметрів, можна вказати список, наприклад epp_dir=1,0,1, щоб встановити різні налаштування для кожного з 3 паралельних портів.

2. Піни

У наступних контактах, параметрах і функціях <порт> є ідентифікатором паралельного порту. Згідно з правилами іменування перший порт завжди повинен мати ідентифікатор нуль. Усі плати мають певний спосіб налаштування адреси на шині EPP. USC і UPC мають прості можливості для лише двох адрес, але за допомогою перемичок можна налаштувати адреси для 4 плат. Плати PPMC мають 16 можливих адрес. У всіх випадках драйвер перераховує плати за типом і експортує відповідні контакти HAL. Наприклад, кодери будуть перераховані від нуля вгору, в тому ж порядку, що і перемикачі адрес на платі. Отже, перша плата матиме кодери 0 - 3, друга плата матиме кодери 4 - 7. Перший стовпець після маркера вказує, які плати матимуть цей контакт HAL або параметр, пов’язаний з ним. «Все» означає, що цей контакт доступний на всіх трьох типах плат. «Опція» означає, що цей контакт буде експортований тільки тоді, коли ця опція буде ввімкнена опціональним параметром у команді loadrt HAL. Ці опції вимагають, щоб плата мала достатній рівень ревізії для підтримки цієї функції.

  • (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. Параметри

  • (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. Функції

  • (All funct) ppmc.<port>.read - Зчитує всі входи (цифрові входи та лічильники енкодера) на одному порту. Ці зчитування організовані в блоки суміжних регістрів для зчитування в блоці, щоб мінімізувати накладні витрати процесора.

  • (All funct) ppmc.<port>.write - Записує всі виходи (цифрові виходи, ступінчасті генератори, PWM) на один порт. Ці записи організовані в блоки суміжних регістрів для запису в блок, щоб мінімізувати накладні витрати процесора.