[identity profile] vkorehovisback.livejournal.com posting in [community profile] engineering_ru
Оригинал взят у [livejournal.com profile] vkorehovisback в Как сделать PCI карту своими руками, Часть 1 (введение)
Мне понадобился качественный интерфейс для CNC станка.
Сразу скажу что параллельный порт меня не устраивает. потому как качество его реализации сомнительное, контактов мало (всего 16 I/O, не помню сколько I и сколько O) и максимальная частота работы до 50 кгЦ, с сомнительными показателями по интерференции, крутизне фронтов, задержек, и т.д.
Для интерфейса с 6-осным станком, понадобится 24 дифференциальные пары контактов (6 диффпар на сигналы DIR, 6 диффпар на сигналы PULSE).
Кроме того я предусмотрел 12 цифровых TTL выхода (до 50ма) и 12 опто-изолированных цифровых входа общего назначения.
И того все это добро еле уместилось в SCSI коннектор 50 pin, который мне очень нравится.


Дальше самое главное, какой вариант реализации PCI карты выбрать, существует два пути:
1) Использовать готовый PCI чип какого-либо производителя.
2) Использовать FPGA.


Первый вариант я отбросил, потому что тогда реализация будет целиком зависеть от этого чипа, его глюков или их отсутствия.
т.е. мы будем всецело полагаться на кого-то учить их спецификацию, разбирать какой драйвер нужен, как его написать и т.д.

Второй вариант является немного более трудозатратным изначально, зато потом он дает больше пользы, потому как FPGA наверное самые универсальные устройства в мире, и с их помощью можно сделать практически любой интерфейс, с любым устройством, можно имплементировать практически любую схему и т.д.

Начнем с самого сложного, с шины PCI. Осложняется все тем, что спецификация закрытая, в интернете информации не много, но есть способ обойти буржуев.
Многие производители FPGA имеют и комплект стандартных реализаций различных интерфейсов за доп. плату (которую вменяемые люди конечно-же платить не будут), называется это все IP Core (Xilinx у других может отличаться, но идея таже)
что это такое? ну это вроде библиотеки для линковки кода.
IP Core может поставляться в виде непосредственно кода (Verilog ili VHDL) либо в виде специального закрытого нэтлиста (что-то вроде EDIF, но зашифрован, у каждого вендора свой формат и позволяет линковать их только используя их средства разработки)
Спасибо умельцам, которые четко взломали пакет Xilinx ISE 10.1, что позволяет получить доступ ко всем IP Core абсолютно бесплатно и на уровне исходного кода (что самое полезное для обучения)
Раздачу каждый может найти сам на известном торрент трекере.

Далее, есть сайт fpga4fun.com где рассказывается максимально сжато о всех особенностях FPGA и нет смысля дублировать эту информацию тут. Сайт рассказывает о FPGA двух лидеров на рынке: Xylinx и Altera.
Также вам потребуется изучить Verilog, но если вы уже программировали на каком-то языке, то это не составит большего труда.

Какой чип выбрать??
Я остановился на Xylinx Spartan xxx
Тут есть несколько подводных камней.
1) Совместимость с шиной PCI32 5V
2) Количество выходов которые можно коммутировать одновременно (называется SSO simultaneously switching outputs)
3) Тип корпуса: BGA или PQ (BGA сложнее паять, потребуется печь, либо хороший фен и удача)
4) Встроенный flash либо вынесенный в отдельный чип?
5) Максимальное время загрузки до получения первых сигналов с PCI

Совместимость с шиной PCI32 5V


Это наверное самое ответственное из всего. Вам предстоит сделать выбор, использовать ли вам чипы конвертации уровней сигналов всех I/O шины (около 50) и использовать современный FPGA (1.25V, 2.5V, 3.3V no 5V tolerant).
Либо использовать старый FPGA.
Для своего проекта я сделал выбор в пользу старого FPGA (Spartan II) и пока еще не пожалел.
Следует отметить, что использование чипов конвертации уровней вносит дополнительные сложности в проблему с SSO, потому как
такие чипы генерируют Overshotы и Undershotы напряжения и могут приводить к ошибкам.
Проблема SSO, питания и максимального времени загрузки FPGA для PCI32 3.3V:
http://www.xilinx.com/support/documentation/application_notes/xapp457.pdf
Наилучшее подключение Bus Switch для совместимости с 5V PCI (что является стандартом для домашних ПК):
http://www.xilinx.com/support/documentation/application_notes/xapp646.pdf
Проблему с overshot и undershot тут решают сместив уровень земли для чипов конвертера уровней.
Следует отметить особенно, что для увеличения числа SSO (также называется Ground bounce) применяют шунтирующий резистор в цели питания чипа, задавая ток "холостого хода" 50mA (резистор 34 ом, для питания 3.3V)
Такой резистор, либо низкоомную обратную связь для LDO я видел во ВСЕХ pci платах схемы которых мне удалось достать.

Количество выходов которые можно коммутировать одновременно (называется SSO: simultaneously switching outputs)


У каждого чипа и типа корпуса этот параметр разный и приводится в даташите.
Например в моем случае с типом корпуса PQ208 и моделью Spartan II для стандарта PCI разрешается использовать до 4х SSO на группу питания, которых всего 16 в устройстве (по две на банк, которых 8-мь)

Далее я взял константы которые поставлялись с IP Core PCI (версия 3.199) (*.ucf файл User Constants file)
И оказалось что они распределили все сигналы PCI на 4 банка (получается 32 SSO сигнала разрешено, в то время как для шины pci требуется порядка 40 сигналов у которых крутые фронты):
http://www.xilinx.com/support/documentation/application_notes/xapp457.pdf
• AD[31:0]
• CBE[3:0]
• PAR
• IRDY#, FRAME#
• REQ#

Кроме того банки заполнены неравномерно, что так-же нарушает Допустимый SSО.
С другой стороны IP Core прошла тестирование в такой конфигурации и я побоялся менять тут что-то.
рискуя не вложиться в тайминги PCI шины, из за особенностей внутренней архитектуры FPGA.
Поэтому я предпринял дополнительные усилия для увеличения SSO. Я поставил шунт (120 ом) нa выход каждого регулятора напряжения питания, хорошие байпас конденсаторы, многослойную печатную плату с отдельным слоем для земли и т.д.
Также следует думать тут об удобном расположении выводов для трассировки печатной платы!

Тип корпуса: BGA или PQ


Я выбрал PQ208, BGA имеет большее преимущество (вдвое выше SSO), но есть риск не запаять в домашних условиях, еще может быть закорочен какой-либо контакт из за смещения чипа, что опасно для вашей материнской платы!.

Встроенный flash либо вынесенный в отдельный чип? и Максимальное время загрузки до получения первых сигналов с PCI



Тут я первый раз пожалел что связался со старой линейкой чипов а не выбрал новую Spartan 3AN (со встроены флешем)
Оказалось что для каждой модели Spartan II есть свой чип программируемый через JTAG.
Он оказался довольно дорогим, и чувствуется что его скоро перестанут продавать.
XC18V01 (1 мегабайт флеша в моем случае)
Как его подключить к FPGA Spartan II, есть в даташите.
Возможно либо серийный интерфейс либо параллельный, под управлением внутреннего такта FPGA либо внешнего!, я выбрал серийный под управлением FPGA, т.е. сигнал кола генерирует сам FPGA и после окончания загрузки переходит в рабочий режим.
Частота загрузки конфигурации 66Мгц, для PCI32 5V это достаточно чтобы уложиться в 1.1 секунду (PCI32 5V 32Mhz) для загрузки полной конфигурации. однако в моем проекте будет использоваться лишь небольшая часть конфигурационного пространства.

Ну вот вроде и все, скоро выложу печатную плату и схему, в следующей части.
Потом будет софт и наша PCI карта готова.

Date: 2014-05-07 08:06 am (UTC)
From: [identity profile] vspvsp.livejournal.com
Если у вас ШД, то с контроллером есть ещё одно полезнее свойство (не знаю, подразумевается ли оно в вашем проекте) - использовать всякие микрошаги, плавный разгон и торможение до эдакого "синхронного" режима - позволяет резко повысить скорости перемещения. Делать не 200-500 шагов, а в 5 -10 раз больше.

Date: 2014-05-07 04:15 pm (UTC)
From: [identity profile] vspvsp.livejournal.com
Я не особо с этими программами и станками знаком, у нас какая-то вообще китайчатина была недорогая. Но вроде работала.

Забавная цитата из описания программы Mach3: "Mach3 Driver, устанавливаемый на настольный ПК (Лэптопы не поддерживаются, так как их функции сбережения энергии чипсета нарушают поток импульсов)" - кстати есть такая особенность, сильно увеличиваются задержки, когда ядра в сон уходят и обратно пытаются проснуться, но решается установкой параметров процессора на 100% производительность минимальную.

"Микрошаг" - это вариант установки ротора двигателя в промежуточное между полюсами положение, определяемое магнитным потоком от соседних полюсов. Зависимость косинусоидальная. Хотя где-то встречал описание, что формула более сложная, но в микросхемах готовых чистая косинусоида. Вот пример готового драйвера для биполярных двигателей (4-х проводных): http://www.allegromicro.com/~/media/Files/Datasheets/A3967-Datasheet.ashx (http://www.allegromicro.com/~/media/Files/Datasheets/A3967-Datasheet.ashx) там есть и краткое описание и табличка "Step sequencing".

Ещё цитаты: "Основным применением микрошагового режима является борьба с резонансом, снижение вибрации шагового двигателя и повышения плавности хода передачи. Достигается это благодаря тому, что при использовании микрошагового режима на вал мотора действуют более кратковременные усилия разгона-торможения, сам вал совершает шаги меньшей амплитуды, в результате инерционные явления проявлены слабее.

Выбор оптимального режима деления шага

Оптимальный режим деления шага необходимо выбирать в зависимости от конкретного станка и стоящих задач. Основными факторами являются необходимость снизить резонанс двигателей, уменьшить шум, разрешающую способность станка. В большинстве случаев имеет смысл использовать наибольшее деление шага, при котором станок сможет развивать расчетную максимальную скорость. Ограничением в данном случае будет максимальная частота входных импульсов у драйвера или максимальная частота генерации управляющих импульсов ЧПУ-системой. Скажем, скорость вращения 10 об/сек стандартного двигателя с шагом 1.8 град требует подавать импульсы STEP с частотой 2000 Гц для режима полного шага и с частотой 256 КГц для деления шага 1:128, тогда как, например, программа Mach3 максимально может генерировать импульсы с частотой 100 Гц."

Отсюда: http://darxton.ru/articles/cnc-drive/mikroshag-shagovyj-dvigatel/ (http://darxton.ru/articles/cnc-drive/mikroshag-shagovyj-dvigatel/)

То есть этот Mach3 кажется совсем медленным.
Edited Date: 2014-05-07 04:17 pm (UTC)

Date: 2014-05-07 05:26 pm (UTC)
From: [identity profile] vspvsp.livejournal.com
Да, написано по 35 КГц на 6 осей.

closed loop - это "замкнутая петля обратной связи". Ограничение быстродействия связано с вносимым программой в обратную связь запаздыванием превышающим время инерции двигателя с приводом.

Грубо говоря дали команду "двигатель быстро крутись", обратная связь заметила, что уже "многовато будет", даёт команду "тормози!!!", а она пока дойдёт - двигатель "перекрутился", команда "назад", опять опоздали. И вместо двигателя у нас колебания получатся. Выход - крутиться медленнее.

В общем обратная связь должна быть "быстрее" чем механическая реакция двигателя с приводом.

Аппаратная связь с валкодером или другим датчиком вносит минимальную электрическую задержку и двигатель при определённом подборе характеристик обратной связи можно очень быстро и точно устанавливать в нужную позу сильно форсируя ток в крайних положениях. Ну вот привод головок жесткого диска таким макаром ухитряется за 10 миллисекунд стать на дорожу с точностью в доли микрона пролетев перед этим пару сантиметров с приличной скоростью за то же время. А там только магнитное поле и никаких шестерёнок.

Date: 2014-05-07 07:03 pm (UTC)
From: [identity profile] vspvsp.livejournal.com
С ШД просто нет особого резона использовать обратную связь, но запас по мощности и скорость в жертву. ШД - самая простая схема и алгоритм управления.

И как бы не оказалось, что в драйвер сервопривода для реализации всей его "крутизны" следует сразу загонять всю траекторию движения (ну в пределах "одного подхода"), чтобы он знал, куда крутить - а это резко усложняет "железячно-програмную" часть (контроллер должен вычислять траекторию по прямым-дугам и прочим фигурам сразу для всех задействованных осей) и не факт, что поддерживается во всех программах.

Date: 2014-05-07 04:59 pm (UTC)
From: [identity profile] vspvsp.livejournal.com
Да, если использовать эту микросхему, то можно включить её на 1/4 или 1/8 и просто подавать в 4 или 8 раз больше импульсов на шаг.

Date: 2014-05-07 05:30 pm (UTC)
From: [identity profile] vspvsp.livejournal.com
Тогда не стоит этим заморачиваться. Это момент из серии "можно добавить как-нибудь потом в рабочую конструкцию".

Profile

engineering_ru: (Default)
Инженерия

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122232425 2627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 8th, 2026 10:58 am
Powered by Dreamwidth Studios