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 s32 output) ppmc.<port>.encoder.<channel>.count - Положення енкодера, в одиницях.

  • (All s32 output) ppmc.<port>.encoder.<channel>.delta - Зміна кількості підрахунків з моменту останнього зчитування, в одиницях підрахунку необроблених даних кодера.

  • «(Всі вихідні дані типу float) ppmc.<порт>.encoder.<канал>.velocity» — швидкість, масштабована в одиницях користувача за секунду. На PPMC і USC вона виводиться з необроблених значень енкодера за сервоперіод, тому на неї впливає гранулярність енкодера. На платах UPC з прошивкою 8/21/09 і пізнішою версією для поліпшення плавності виведення швидкості можна використовувати оцінку швидкості за допомогою часових міток підрахунків енкодера. Цю інформацію можна передати до компонента PID HAL для отримання більш стабільної реакції сервоприводу. Цю функцію потрібно ввімкнути в командному рядку HAL, що запускає драйвер PPMC, за допомогою опції timestamp=0x00.

  • (All float output) ppmc.<port>.encoder.<channel>.position - Положення енкодера, в одиницях користувача.

  • (All bit bidir) ppmc.<port>.encoder.<channel>.index-enable - Підключіться до joint.#.index-enable для home-to-index. Це двонаправлений сигнал HAL. Встановлення значення true змушує апаратне забезпечення енкодера скинути лічильник до нуля при наступному імпульсі індексу енкодера. Драйвер виявить це і поверне сигнал до значення false.

  • (Вихід PPMC з плаваючою комою) ppmc.<порт>.DAC.<канал>.значення – надсилає знакове значення до 16-бітного цифро-аналогового перетворювача на платі PPMC DAC16, керуючи аналоговою вихідною напругою цього каналу DAC.

  • (UPC bit input) ppmc.<port>.pwm.<channel>.enable - Вмикає PWM-генератор.

  • «(UPC float input) ppmc.<port>.pwm.<channel>.value» — значення, яке визначає робочий цикл імпульсних сигналів PWM. Значення ділиться на «pwm.<channel>.scale», і якщо результат дорівнює 0,6, робочий цикл буде 60 % і так далі. Від’ємні значення призводять до того, що робочий цикл базується на абсолютному значенні, а напрямок виводу встановлюється на від’ємний.

  • (USC bit input) ppmc.<port>.stepgen.<channel>.enable - Вмикає генератор крокових імпульсів.

  • (USC float input) ppmc.<port>.stepgen.<channel>.velocity - Значення, яке визначає частоту кроку. Значення множиться на stepgen.<channel>.scale , і результатом є частота в кроках за секунду. Негативні значення призводять до того, що частота базується на абсолютному значенні, а напрямок штифта встановлюється на негативний.

  • (All bit output) ppmc.<port>.din.<channel>.in - Стан цифрового вхідного виводу, див. канонічний цифровий вхід.

  • (All bit output) ppmc.<port>.din.<channel>.in-not - Інвертований стан цифрового вхідного виводу, див. канонічний цифровий вхід.

  • (All bit input) ppmc.<port>.dout.<channel>.out - Значення, яке буде записано на цифровий вихід, див. канонічний цифровий вихід.

  • (Опція введення з плаваючою точкою) ppmc.<порт>.DAC8-<канал>.значення - Значення, яке буде записано в аналоговий вихід, діапазон від 0 до 255. Це відправляє 8 бітів виходу на J8, до якого повинна бути підключена плата Spindle DAC. 0 відповідає нулю вольт, 255 відповідає 10 вольтам. Полярність виходу можна встановити на завжди мінус, завжди плюс або можна керувати станом SSR1 (плюс, коли увімкнено) та SSR2 (мінус, коли увімкнено). Ви повинні вказати extradac = 0x00 у командному рядку HAL, який завантажує драйвер PPMC, щоб увімкнути цю функцію на першій платі USC або UPC.

  • «(Вхід опційного біта) ppmc.<порт>.dout.<канал>.out» — значення, яке потрібно записати в один із 8 додаткових цифрових вивідних контактів на J8. Ви повинні вказати extradout = 0x00 у командному рядку HAL, який завантажує драйвер ppmc, щоб увімкнути цю функцію на першій платі USC або UPC. extradac і extradout є взаємовиключними функціями, оскільки вони використовують ті самі сигнальні лінії для різних цілей. Ці виходи будуть перераховані після стандартних цифрових виходів плати.

3. Параметри

  • (All float) ppmc.<port>.encoder.<channel>.scale - Кількість підрахунків / одиниця користувача (для перетворення з підрахунків в одиниці).

  • (UPC float) ppmc.<port>.pwm.<channel-range>.freq - Носійна частота PWM, в Гц. Застосовується до групи з чотирьох послідовних генераторів ШІМ, як вказано в <channel-range>. Мінімальне значення - 610 Гц, максимальне - 500 кГц.

  • (PPMC float) ppmc.<порт>.DAC.<канал>.scale - Встановлює масштаб вихідного каналу DAC16 таким чином, що вихідне значення, рівне 1/масштабу, буде генерувати вихідне значення + або - вольт. Отже, якщо параметр масштабу дорівнює 0,1, а ви надсилаєте значення 0,5, вихідне значення буде 5,0 вольт.

  • (UPC float) ppmc.<port>.pwm.<channel>.scale - Масштабування для PWM-генератора. Якщо «масштаб» дорівнює X, то шпаруватість становитиме 100%, коли контакт «значення» має значення X (або -X).

  • (UPC float) ppmc.<port>.pwm.<channel>.max-dc - Максимальний робочий цикл, від 0,0 до 1,0.

  • (UPC float) ppmc.<port>.pwm.<channel>.min-dc - Мінімальний робочий цикл, від 0,0 до 1,0.

  • (UPC float) ppmc.<port>.pwm.<channel>.duty-cycle - Фактичний робочий цикл (використовується здебільшого для усунення несправностей)

  • (UPC bit) ppmc.<port>.pwm.<channel>.bootstrap - Якщо значення «true» (істина), PWM-генератор генеруватиме коротку послідовність імпульсів обох полярностей, коли аварійна зупинка стане хибною, щоб скинути фіксатори вимкнення на деяких PWM-сервоприводах.

  • (USC u32) ppmc.<порт>.stepgen.<діапазон каналів>.час налаштування - Встановлює мінімальний час між зміною напрямку та імпульсом кроку в одиницях 100 нс. Застосовується до групи з чотирьох послідовних генераторів кроків, як зазначено в <діапазон каналів>. Можна вказати значення від 200 нс до 25,5 мкс.

  • (USC u32) ppmc.<порт>.stepgen.<діапазон каналів>.ширина імпульсу - Встановлює ширину імпульсів кроку в одиницях 100 нс. Застосовується до групи з чотирьох послідовних генераторів кроку, як зазначено в <діапазон каналів>. Можна вказати значення від 200 нс до 25,5 мкс.

  • (USC u32) ppmc.<порт>.stepgen.<діапазон каналів>.pulse-space-min - Встановлює мінімальний час між імпульсами в одиницях 100 нс. Застосовується до групи з чотирьох послідовних генераторів імпульсів, як зазначено в <діапазон каналів>. Можна вказати значення від 200 нс до 25,5 мкс. Максимальна частота кроків становить: images/pico-ppmc-math.png

  • (USC float) ppmc.<port>.stepgen.<channel>.scale - Масштабування для генератора крокових імпульсів. Частота кроку в Гц – це абсолютне значення «швидкості» * «масштабу».

  • (USC float) ppmc.<port>.stepgen.<channel>.max-vel - Максимальне значення для «швидкості». Команди, більші за «max-vel», будуть фіксовані. Також застосовується до від’ємних значень. (Абсолютне значення фіксується.)

  • (USC float) ppmc.<port>.stepgen.<channel>.frequency - Фактична частота крокових імпульсів у Гц (використовується здебільшого для усунення несправностей)

  • (Опція float) ppmc.<порт>.DAC8.<канал>.scale - Встановлює масштаб додаткового виходу DAC таким чином, що вихідне значення, рівне масштабу, дає вихідну величину 10,0 В. (Знак виходу встановлюється за допомогою перемичок та/або інших цифрових виходів.)

  • (Option bit) ppmc.<port>.dout.<channel>.invert - Інвертує цифровий вихід, див. канонічний цифровий вихід.

  • (Option bit) ppmc.<port>.dout.<channel>.invert - Інвертує цифровий вихідний контакт J8, див. канонічний цифровий вихід.

4. Функції

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

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